class Perpetuity::Dereferencer
Attributes
map[R]
mapper_registry[R]
Public Class Methods
new(mapper_registry, identity_map=IdentityMap.new)
click to toggle source
# File lib/perpetuity/dereferencer.rb, line 8 def initialize mapper_registry, identity_map=IdentityMap.new @map = identity_map @mapper_registry = mapper_registry end
Public Instance Methods
[](reference)
click to toggle source
# File lib/perpetuity/dereferencer.rb, line 25 def [] reference if referenceable?(reference) map[reference.klass, reference.id] else reference end end
cache(objects)
click to toggle source
# File lib/perpetuity/dereferencer.rb, line 21 def cache objects objects.each { |object| map << object } end
grouped(references)
click to toggle source
# File lib/perpetuity/dereferencer.rb, line 33 def grouped references references.group_by(&:klass) end
load(references)
click to toggle source
# File lib/perpetuity/dereferencer.rb, line 13 def load references references = Array(references).flatten.select {|ref| referenceable?(ref) } cache grouped(references).map { |klass, refs| objects klass, refs.map(&:id) }.flatten end
objects(klass, ids)
click to toggle source
# File lib/perpetuity/dereferencer.rb, line 37 def objects klass, ids ids = ids.uniq if ids.one? mapper_registry.mapper_for(klass, identity_map: map).find(ids.first) elsif ids.none? [] else mapper_registry[klass].find(ids.uniq).to_a end end
referenceable?(ref)
click to toggle source
# File lib/perpetuity/dereferencer.rb, line 48 def referenceable? ref [:klass, :id].all? { |msg| ref.respond_to?(msg) } end