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