Sha256: 475d3a0faccd4d297ef4e73087dd39f4ad308dcc2c7d486eda65ba72813f288a

Contents?: true

Size: 995 Bytes

Versions: 6

Compression:

Stored size: 995 Bytes

Contents

module MongoMapperExt
  class File < GridFS::GridStore
    attr_reader :id, :attributes

    def initialize(owner, attrs = {})
      @owner = owner
      @id = attrs.delete("_id")

      class_eval do
        attrs.each do |k,v|
          define_method(k) do
            v
          end
        end
      end

      super(@owner.class.database, attrs["filename"], "r", :root => @owner.collection.name)
    end

    def [](name)
      @attributes[name.to_s]
    end

    def self.fetch(owner, filename)
      db = owner.class.database
      finder = nil
      if defined?(MongoMapper::FinderOptions)
        finder = MongoMapper::FinderOptions
      else
        finder = MongoMapper::Query
      end

      criteria, options = finder.new(owner.class, :filename => filename, :metadata => {:_id => owner.id}, :limit => 1).to_a

      obj = db.collection("#{owner.collection.name}.files").find(criteria, options).next_document

      if obj
        self.new(owner, obj)
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
mongomapper_ext-0.1.5 lib/mongomapper_ext/file.rb
mongomapper_ext-0.1.4 lib/mongomapper_ext/file.rb
mongomapper_ext-0.1.3 lib/mongomapper_ext/file.rb
mongomapper_ext-0.1.2 lib/mongomapper_ext/file.rb
mongomapper_ext-0.1.1 lib/mongomapper_ext/file.rb
mongomapper_ext-0.1.0 lib/mongomapper_ext/file.rb