Sha256: 5b5aab6b2979d076c46745009b40b83b0b9c0499de94c13522450df116a96752

Contents?: true

Size: 1.87 KB

Versions: 13

Compression:

Stored size: 1.87 KB

Contents

# encoding: utf-8
module Mongoid

  # This module contains the behaviour of Mongoid's clone/dup of documents.
  module Copyable
    extend ActiveSupport::Concern

    # Clone or dup the current +Document+. This will return all attributes with
    # the exception of the document's id, and will reset all the
    # instance variables.
    #
    # This clone also includes embedded documents.
    #
    # @example Clone the document.
    #   document.clone
    #
    # @param [ Document ] other The document getting cloned.
    #
    # @return [ Document ] The new document.
    def clone
      # @note This next line is here to address #2704, even though having an
      # _id and id field in the document would cause problems with Mongoid
      # elsewhere.
      attrs = clone_document.except("_id", "id")
      begin
        self.class.new(attrs)
      rescue Errors::UnknownAttribute
        self.class.send(:include, Attributes::Dynamic)
        self.class.new(attrs)
      end
    end
    alias :dup :clone

    private

    # Clone the document attributes
    #
    # @api private
    #
    # @example clone document
    #   model.clone_document
    #
    # @param [ Hash ] dcoument The document with hash format
    #
    # @since 3.0.22
    def clone_document
      attrs = as_document.__deep_copy__
      process_localized_attributes(attrs)
      attrs
    end

    # When cloning, if the document has localized fields we need to ensure they
    # are properly processed in the clone.
    #
    # @api private
    #
    # @example Process localized attributes.
    #   model.process_localized_attributes(attributes)
    #
    # @param [ Hash ] attrs The attributes.
    #
    # @since 3.0.20
    def process_localized_attributes(attrs)
      localized_fields.keys.each do |name|
        if value = attrs.delete(name)
          attrs["#{name}_translations"] = value
        end
      end
    end
  end
end

Version data entries

13 entries across 11 versions & 3 rubygems

Version Path
ish_lib_manager-0.0.1 test/dummy/vendor/bundle/ruby/2.3.0/gems/mongoid-5.1.3/lib/mongoid/copyable.rb
mongoid-5.1.3 lib/mongoid/copyable.rb
mongoid-5.1.2 lib/mongoid/copyable.rb
mongoid-5.1.1 lib/mongoid/copyable.rb
mongoid-5.1.0 lib/mongoid/copyable.rb
tdiary-4.2.1 vendor/bundle/ruby/2.2.0/gems/mongoid-5.0.1/lib/mongoid/copyable.rb
tdiary-4.2.1 vendor/bundle/ruby/2.2.0/gems/mongoid-5.0.2/lib/mongoid/copyable.rb
tdiary-4.2.1 vendor/bundle/ruby/2.3.0/gems/mongoid-5.0.2/lib/mongoid/copyable.rb
mongoid-5.0.2 lib/mongoid/copyable.rb
mongoid-5.0.1 lib/mongoid/copyable.rb
mongoid-5.0.0 lib/mongoid/copyable.rb
mongoid-5.0.0.rc0 lib/mongoid/copyable.rb
mongoid-5.0.0.beta lib/mongoid/copyable.rb