Sha256: e558ca8b900582c9ec4d5ebc9c7bea875f6b26292a05e16581c46b0a2a106a5b

Contents?: true

Size: 1.63 KB

Versions: 1

Compression:

Stored size: 1.63 KB

Contents

module Model

  define_field_type Media::File, :define_field_media_file
  define_field_type Media::Image, :define_field_media_image

  module ClassMethods

    def define_field_media_file( name, opts = {} )

      opts = {
        # defaults
        app: :file
      }.deep_merge opts

      unless self.respond_to? :dragonfly_accessor
        extend Dragonfly::Model
        extend Dragonfly::Model::Validations
      end

      type = opts[:type]
      define_field_mongoid name, type: type

      define_method "#{name}_uid" do
        type.new( self[name] ).uid
      end

      define_method "#{name}_uid=" do |value|
        self[name] = ( type.new( self[name] ).tap {|f| f.uid = value } ).mongoize
        value
      end

      define_method "#{name}_name" do
        type.new( self[name] ).name
      end

      define_method "#{name}_name=" do |value|
        self[name] = ( type.new( self[name] ).tap {|f| f.name = value } ).mongoize
        value
      end

      dragonfly_accessor name, app: opts[:app]

      alias_method :"dragonfly_accessor_#{name}=", :"#{name}="
      define_method "#{name}=" do |value|
        if Hash === value && value.key?(:tempfile) && value.key?( :filename )
          self.send :"dragonfly_accessor_#{name}=", Aerogel::Media::UploadedFile.new( value )
        else
          self.send :"dragonfly_accessor_#{name}=", value
        end
      end
    end

    def define_field_media_image( name, opts = {} )
      define_field_media_file name, { app: :image }.merge(opts)
      validates_property :mime_type, of: name, in: Media::Image::MIME_TYPES, message: :not_an_image
    end

  end # module ClassMethods

end # module Model

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
aerogel-media-1.4.0 lib/aerogel/media/model.rb