Module: Mongoid::Traversable::ClassMethods
- Defined in:
- lib/mongoid/traversable.rb
Overview
Class-level methods for the Traversable behavior.
Instance Method Summary collapse
-
#hereditary? ⇒ true | false
Determines if the document is a subclass of another document.
-
#inherited(subclass) ⇒ Object
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.
Instance Method Details
#hereditary? ⇒ true | false
Determines if the document is a subclass of another document.
19 20 21 |
# File 'lib/mongoid/traversable.rb', line 19 def hereditary? !!(superclass < Mongoid::Document) end |
#inherited(subclass) ⇒ Object
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.
rubocop:disable Metrics/AbcSize
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/mongoid/traversable.rb', line 33 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| _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 |