module Mongoid::Traversable::ClassMethods
Class-level methods for the Traversable
behavior.
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 20 def hereditary? !!(superclass < Mongoid::Document) 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.
rubocop:disable Metrics/AbcSize
Calls superclass method
# File lib/mongoid/traversable.rb, line 34 def inherited(subclass) super # Register the new subclass with the resolver subsystem Mongoid::ModelResolver.register(subclass) @_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| _declared_scopes[key] } subclass.discriminator_value = subclass.name # We need to do this here because the discriminator_value method is # overridden in the subclass above. subclass.include DiscriminatorRetrieval # We only need the _type field if inheritance is in play, but need to # add to the root class as well for backwards compatibility. return if fields.key?(discriminator_key) default_proc = -> { self.class.discriminator_value } field(discriminator_key, default: default_proc, type: String) end