Sha256: 2cc276308c996789753bb5f057cbca3a704363a91e4fd3fac0d6f0538545c40f

Contents?: true

Size: 1.48 KB

Versions: 3

Compression:

Stored size: 1.48 KB

Contents

module Mongoo
  module GridFs
    module DescribeDsl
      def grid_fs_file(name, opts={})
        define_grid_fs_file_method(name, opts)
      end

      def grid_fs_files(name, opts={})
        define_grid_fs_files_method(name, opts)
      end

      def define_grid_fs_file_method(name, opts)
        attrib_name = "gridfs_#{name}"
        attribute(attrib_name, :type => :hash)

        blk = Proc.new {
          if file = instance_variable_get("@#{name}")
            file
          else
            db_lambda = opts[:db] || lambda { self.db }
            container = get_or_set(attrib_name, {})
            file = Mongoo::GridFs::File.new(container, db_lambda)
            instance_variable_set("@#{name}", file)
          end
        }
        @klass.send(:define_method, name, &blk)
      end # define_grid_fs_file_methods

      def define_grid_fs_files_method(name, opts)
        attrib_name = "gridfs_#{name}"
        attribute(attrib_name, :type => :hash)

        blk = Proc.new {
          if files = instance_variable_get("@#{name}")
            files
          else
            db_lambda = opts[:db] || lambda { self.db }
            container = get_or_set(attrib_name, {})
            files = Mongoo::GridFs::Files.new(container, db_lambda)
            instance_variable_set("@#{name}", files)
          end
        }
        @klass.send(:define_method, name, &blk)
      end
    end # DescribeDsl
  end # GridFs
end # Mongoo

class Mongoo::DescribeDsl
  include Mongoo::GridFs::DescribeDsl
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
mongoo-0.5.2 lib/mongoo/grid_fs/describe_dsl.rb
mongoo-0.5.1 lib/mongoo/grid_fs/describe_dsl.rb
mongoo-0.5.0 lib/mongoo/grid_fs/describe_dsl.rb