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.
-
#root_class ⇒ Mongoid::Document
Returns the root class of the STI tree that the current class participates in.
Instance Method Details
#hereditary? ⇒ true | false
Determines if the document is a subclass of another document.
44 45 46 |
# File 'lib/mongoid/traversable.rb', line 44 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.
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/mongoid/traversable.rb', line 69 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 |
#root_class ⇒ Mongoid::Document
Returns the root class of the STI tree that the current class participates in. If the class is not an STI subclass, this returns the class itself.
53 54 55 56 57 58 |
# File 'lib/mongoid/traversable.rb', line 53 def root_class root = self root = root.superclass while root.hereditary? root end |