2013-03-11 20:21:59 +00:00
|
|
|
require 'virtus'
|
|
|
|
|
|
|
|
class CarrierwaveMongoidMedium
|
|
|
|
include Virtus
|
|
|
|
|
|
|
|
attribute :id
|
|
|
|
attribute :data
|
|
|
|
|
|
|
|
def self.find(id)
|
|
|
|
medium = new(:id => id)
|
|
|
|
|
|
|
|
raise_not_found(id) if !medium.gridfs_object
|
|
|
|
|
|
|
|
medium
|
|
|
|
end
|
|
|
|
|
|
|
|
def self.raise_not_found(id)
|
|
|
|
raise Mongoid::Errors::DocumentNotFound.new(Mongoid::GridFS, :filename => id)
|
|
|
|
end
|
|
|
|
|
|
|
|
def raise_not_found
|
|
|
|
self.class.raise_not_found(id)
|
|
|
|
end
|
|
|
|
|
|
|
|
def self.force_downloads_on(&block)
|
|
|
|
if block
|
|
|
|
@block = block
|
|
|
|
else
|
|
|
|
@block
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def update_attributes(new_attributes = {})
|
|
|
|
self.attributes = new_attributes
|
|
|
|
|
|
|
|
save
|
|
|
|
end
|
|
|
|
|
|
|
|
def content_type
|
|
|
|
gridfs_object.content_type
|
|
|
|
end
|
|
|
|
|
|
|
|
def self.create(attributes = {})
|
|
|
|
new(attributes).save
|
|
|
|
end
|
|
|
|
|
|
|
|
def destroy
|
|
|
|
gridfs_object.destroy
|
|
|
|
|
|
|
|
@gridfs_object = nil
|
|
|
|
end
|
|
|
|
|
|
|
|
def save
|
|
|
|
attrs = attributes.dup
|
|
|
|
|
|
|
|
file = attrs.delete(:data)
|
|
|
|
filename = attrs.delete(:id) || attrs.delete(:filename)
|
|
|
|
|
|
|
|
@gridfs_object = Mongoid::GridFS.put(file, attrs.merge(:filename => filename))
|
|
|
|
end
|
|
|
|
|
|
|
|
def attachment_filename
|
|
|
|
::File.basename(id)
|
|
|
|
end
|
|
|
|
|
|
|
|
def gridfs_object
|
|
|
|
@gridfs_object ||= Mongoid::GridFS[id]
|
|
|
|
end
|
|
|
|
|
|
|
|
def force_download?
|
|
|
|
if block = self.class.force_downloads_on
|
|
|
|
block.call self
|
|
|
|
else
|
|
|
|
false
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def as_response_for(controller_instance)
|
|
|
|
controller_instance.content_type = self.content_type
|
|
|
|
controller_instance.response_body = self.gridfs_object
|
|
|
|
if self.force_download?
|
2013-04-05 21:28:18 +00:00
|
|
|
controller_instance.response.headers['Content-Disposition'] = %{attachment; filename="#{self.attachment_filename}"}
|
2013-03-11 20:21:59 +00:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|