Sha256: acb1b58ac698806f61f7cb748f22a4f35142b743316207bb60b0b0f18d8ed58c

Contents?: true

Size: 1.43 KB

Versions: 1

Compression:

Stored size: 1.43 KB

Contents

# encoding: utf-8
module Mongoid # :nodoc:
  module Relations #:nodoc:
    module Builders #:nodoc:
      module Referenced #:nodoc:
        class Many < Builder

          # This builder either takes a hash and queries for the
          # object or an array of documents, where it will just return tem.
          #
          # @example Build the documents.
          #   Builder.new(meta, attrs).build
          #
          # @param [ String ] type The type of document to query for.
          #
          # @return [ Array<Document> ] The documents.
          def build(type = nil)
            return object unless query?
            return [] if object.is_a?(Array)
            crit = metadata.criteria(convertable(metadata, object))
            IdentityMap.get(crit.klass, crit.selector) || crit
          end

          private

          # Get the value for the foreign key in convertable or unconvertable
          # form.
          #
          # @example Get the value.
          #   builder.convertable
          #
          # @return [ String, Unconvertable, BSON::ObjectId ] The string or object id.
          #
          # @since 2.0.2
          def convertable(metadata, object)
            inverse = metadata.inverse_klass
            if inverse.using_object_ids? || object.is_a?(BSON::ObjectId)
              object
            else
              Criterion::Unconvertable.new(object)
            end
          end
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
mongoid-2.2.0 lib/mongoid/relations/builders/referenced/many.rb