- class Wrapper < ActiveRecord::Base
- TypesWrapper = [ 'application/x-docx',
- 'application/x-doc', 'application/x-rtf',
- 'application/x-pps', 'application/x-ppt', 'application/x-pptx',
- 'application/x-xls', 'application/x-xlsx','application/x-csv',
- 'application/x-msg',
- 'application/x-zip',
- 'text/plain',
- 'application/x-pdf','application/pdf',
- 'application/mp3', 'application/x-mp3', 'audio/mpeg', 'audio/mp3',
- 'image/gif', 'image/png', 'image/x-png', 'image/jpeg', 'image/jpg',
- 'video/mpeg', 'application/x-flv', 'video/quicktime' ,'application/x-wmv',
- 'application/x-avi']
- acts_as_commentable
- acts_as_textiled :name, :info
- belongs_to :user
- has_attached_file :data,
- :url => "/:zfull_path",
- :path => ":rails_root/public/:zfull_path",
- :whiny => true
- attr_protected :data_file_name, :data_content_type, :data_size
- before_post_process :validate_processor
- validates_attachment_size :data, :less_than => 10.megabytes
- validates_attachment_content_type :data, :content_type => TypesWrapper
- def proc_name
- type, detail = data.content_type.scan(/^(video|audio|application|text|image)\/(.*?)$/).flatten
- case type
- when 'image' then 'image'
- when 'video','audio' then type
- when 'text' then 'text'
- when 'application'
- case detail
- when /pdf$/ then 'pdf'
- when /mp3$/ then 'audio'
- when /mov|flv|wmv|avi$/ then 'video'
- when /csv|xls.?$/ then 'excel'
- when /doc.?|txt|rtf$/ then 'word'
- when /pp..?/ then 'powerpoint'
- when 'msg' then 'message'
- when /^(?:x-)?zip$/ then 'zip'
- else 'document'
- end
- end
- end
- def validate_processor
- case proc_name
- when "image" then
- data.styles[:small] = { :geometry => "64x64>", :format => "png", :processors => "thumbnail" }
- data.styles[:thumb] = { :geometry => "128x128#", :format => "png", :processors => "thumbnail" }
- data.styles[:large] = { :geometry => "300x400#", :format => "png", :processors => "thumbnail" }
- when "document",'excel','word','powerpoint','text'
- data.styles[:small] = { :geometry => "64x64>", :format => "png", :processors => "empty" }
- data.styles[:thumb] = { :geometry => "128x128#", :format => "png", :processors => "empty" }
- data.styles[:large] = { :geometry => "300x400#", :format => "png", :processors => "empty" }
- when "zip"
- data.styles[:small] = { :geometry => "64x64>", :format => "png", :processors => "empty" }
- data.styles[:thumb] = { :geometry => "128x128#", :format => "png", :processors => "empty" }
- data.styles[:large] = { :geometry => "300x400#", :format => "png", :processors => "zip_info" }
- when "video"
- data.styles[:small] = { :geometry => "64x64>", :format => "png", :processors => "empty" }
- data.styles[:thumb] = { :geometry => "128x128#", :format => "png", :processors => "video_thumb" }
- data.styles[:large] = { :geometry => "300x400#", :format => "flv", :processors => "video_convert"}
- when "audio"
- data.styles[:small] = { :geometry => "64x64>", :format => "png", :processors => "audio_tag" }
- data.styles[:thumb] = { :geometry => "128x128#", :format => "png", :processors => "empty" }
- data.styles[:large] = { :geometry => "300x400#", :format => "png", :processors => "empty" }
- when "pdf"
- data.styles[:small] = { :geometry => "64x64>", :format => "png", :processors => "empty" }
- data.styles[:thumb] = { :geometry => "128x128#", :format => "png", :processors => "pdf" }
- data.styles[:large] = { :geometry => "300x400#", :format => "png", :processors => "pdf" }
- end
- true
- end
- end