Sha256: 067e67871ffa9d52b97555317027ab43add96eefff940fffb5dffed50c07b157

Contents?: true

Size: 1.55 KB

Versions: 1

Compression:

Stored size: 1.55 KB

Contents

#
# Custom field types for Model#field ..., type: ...
#

module Media

  class File
    attr_accessor :uid, :name

    def initialize( mongoid_value )
      case mongoid_value
      when nil
        @uid, @name = nil, nil
      when Array
        @uid, @name = mongoid_value[0], mongoid_value[1]
      when Hash
        @uid, @name = mongoid_value[:uid], mongoid_value[:name]
      when Media::File
        @uid, @name = mongoid_value.uid, mongoid_value.name
      else
        raise ArgumentError.new "Failed to create Media::File value from #{mongoid_value.class}"
      end
    end

    # Converts an object of this instance into a database friendly value.
    def mongoize
      (uid.nil? && name.nil?) ? nil : [ uid, name ]
    end

    class << self
      # Get the object as it was stored in the database, and instantiate
      # this custom class from it.
      def demongoize( object )
        object.nil? ? nil : Media::File.new( object )
      end

      # Takes any possible object and converts it to how it would be
      # stored in the database.
      def mongoize( object )
        Media::File.new(object).mongoize
      end

      # Converts the object that was supplied to a criteria and converts it
      # into a database friendly form.
      def evolve( object )
        case object
        when Media::File then object.mongoize
        else
          object
        end
      end
    end # class << self

  end # class File

  class Image < File
    MIME_TYPES = ['image/jpeg', 'image/png', 'image/gif']
    # definitions here
  end # class Image

end # module Media

Version data entries

1 entries across 1 versions & 1 rubygems

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