Module: MotionJsonApi::Descendants
- Included in:
- Resource
- Defined in:
- lib/motion-json-api/descendants.rb
Overview
This module provides an internal implementation to track descendants which is faster than iterating through ObjectSpace.
Constant Summary collapse
- @@direct_descendants =
{}
Class Method Summary collapse
- .clear ⇒ Object
- .descendants(klass) ⇒ Object
- .direct_descendants(klass) ⇒ Object
-
.store_inherited(klass, descendant) ⇒ Object
This is the only method that is not thread safe, but is only ever called during the eager loading phase.
Instance Method Summary collapse
Class Method Details
.clear ⇒ Object
41 42 43 |
# File 'lib/motion-json-api/descendants.rb', line 41 def clear @@direct_descendants.clear end |
.descendants(klass) ⇒ Object
35 36 37 38 39 |
# File 'lib/motion-json-api/descendants.rb', line 35 def descendants(klass) arr = [] accumulate_descendants(klass, arr) arr end |
.direct_descendants(klass) ⇒ Object
31 32 33 |
# File 'lib/motion-json-api/descendants.rb', line 31 def direct_descendants(klass) @@direct_descendants[klass] || [] end |
.store_inherited(klass, descendant) ⇒ Object
This is the only method that is not thread safe, but is only ever called during the eager loading phase.
47 48 49 |
# File 'lib/motion-json-api/descendants.rb', line 47 def store_inherited(klass, descendant) (@@direct_descendants[klass] ||= []) << descendant end |
Instance Method Details
#descendants ⇒ Object
69 70 71 |
# File 'lib/motion-json-api/descendants.rb', line 69 def descendants Descendants.descendants(self) end |
#direct_descendants ⇒ Object
65 66 67 |
# File 'lib/motion-json-api/descendants.rb', line 65 def direct_descendants Descendants.direct_descendants(self) end |
#inherited(base) ⇒ Object
60 61 62 63 |
# File 'lib/motion-json-api/descendants.rb', line 60 def inherited(base) Descendants.store_inherited(self, base) super end |