Sha256: 9cfc18786d117d6629ea897a5ad6457ff789f23e396f5a7311540797ef1777e9

Contents?: true

Size: 1.12 KB

Versions: 16

Compression:

Stored size: 1.12 KB

Contents

# frozen_string_literal: true

module Mongoid
  module Association

    # Used for converting foreign key values to the correct type based on the
    # types of ids that the document stores.
    module Constrainable

      # Convert the supplied object to the appropriate type to set as the
      # foreign key for an association.
      #
      # @example Convert the object.
      #   constraint.convert("12345")
      #
      # @param [ Object ] object The object to convert.
      #
      # @return [ Object ] The object cast to the correct type.
      def convert_to_foreign_key(object)
        return convert_polymorphic(object) if polymorphic?
        field = relation_class.fields["_id"]
        if relation_class.using_object_ids?
          BSON::ObjectId.mongoize(object)
        elsif object.is_a?(::Array)
          object.map!{ |obj| field.mongoize(obj) }
        else
          field.mongoize(object)
        end
      end

      private

      def convert_polymorphic(object)
        if object.is_a?(Mongoid::Document)
          object._id
        else
          BSON::ObjectId.mongoize(object)
        end
      end
    end
  end
end

Version data entries

16 entries across 16 versions & 1 rubygems

Version Path
mongoid-8.1.8 lib/mongoid/association/constrainable.rb
mongoid-8.1.7 lib/mongoid/association/constrainable.rb
mongoid-8.1.6 lib/mongoid/association/constrainable.rb
mongoid-8.0.8 lib/mongoid/association/constrainable.rb
mongoid-8.1.5 lib/mongoid/association/constrainable.rb
mongoid-8.1.4 lib/mongoid/association/constrainable.rb
mongoid-8.0.7 lib/mongoid/association/constrainable.rb
mongoid-8.1.3 lib/mongoid/association/constrainable.rb
mongoid-8.1.2 lib/mongoid/association/constrainable.rb
mongoid-8.0.6 lib/mongoid/association/constrainable.rb
mongoid-8.1.1 lib/mongoid/association/constrainable.rb
mongoid-8.0.5 lib/mongoid/association/constrainable.rb
mongoid-8.1.0 lib/mongoid/association/constrainable.rb
mongoid-8.0.4 lib/mongoid/association/constrainable.rb
mongoid-8.0.3 lib/mongoid/association/constrainable.rb
mongoid-8.0.2 lib/mongoid/association/constrainable.rb