module Mongoid::Traversable::ClassMethods

Public Instance Methods

hereditary?() click to toggle source

Determines if the document is a subclass of another document.

@example Check if the document is a subclass.

Square.hereditary?

@return [ true, false ] True if hereditary, false if not.

# File lib/mongoid/traversable.rb, line 282
def hereditary?
  !!(Mongoid::Document > superclass)
end
inherited(subclass) click to toggle source

When inheriting, we want to copy the fields from the parent class and set the on the child to start, mimicking the behavior of the old class_inheritable_accessor that was deprecated in Rails edge.

@example Inherit from this class.

Person.inherited(Doctor)

@param [ Class ] subclass The inheriting class.

@since 2.0.0.rc.6

Calls superclass method
# File lib/mongoid/traversable.rb, line 296
def inherited(subclass)
  super
  @_type = nil
  subclass.aliased_fields = aliased_fields.dup
  subclass.localized_fields = localized_fields.dup
  subclass.fields = fields.dup
  subclass.pre_processed_defaults = pre_processed_defaults.dup
  subclass.post_processed_defaults = post_processed_defaults.dup
  subclass._declared_scopes = Hash.new { |hash,key| self._declared_scopes[key] }
  subclass.discriminator_value = subclass.name

  # We need to do this here because the discriminator_value method is
  # overriden in the subclass above.
  class << subclass
    include DiscriminatorRetrieval
  end

  # We only need the _type field if inheritance is in play, but need to
  # add to the root class as well for backwards compatibility.
  unless fields.has_key?(self.discriminator_key)
    default_proc = lambda { self.class.discriminator_value }
    field(self.discriminator_key, default: default_proc, type: String)
  end
end