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

Instance Method Summary collapse

Class Method Details

.clearObject



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

#descendantsObject



69
70
71
# File 'lib/motion-json-api/descendants.rb', line 69

def descendants
  Descendants.descendants(self)
end

#direct_descendantsObject



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