Class: Serega::SeregaEngine::Level
- Inherits:
-
Object
- Object
- Serega::SeregaEngine::Level
- Defined in:
- lib/serega/engine/level.rb
Overview
One serialization level: all objects serialized under a single plan and the result containers they fill. Objects from different parents that share a plan (e.g. every user's posts) accumulate into one level, so a named batch loader or preload runs once over the whole set. A deeper level (its own plan) loads separately.
Instance Attribute Summary collapse
-
#containers ⇒ Array<Hash>
readonly
Result container per object (filled in place).
-
#objects ⇒ Array
readonly
Objects serialized at this level.
Instance Method Summary collapse
-
#add(objects) ⇒ Array<Hash>
Accumulates a chunk of objects into this level, creating one empty result container per object.
-
#fetch(loader) ⇒ Object
Loads a named batch loader once for this level's objects.
-
#initialize(serializer) ⇒ Level
constructor
A new instance of Level.
-
#process ⇒ void
Resolves every attribute of this level onto the containers.
Constructor Details
#initialize(serializer) ⇒ Level
Returns a new instance of Level.
17 18 19 20 21 22 |
# File 'lib/serega/engine/level.rb', line 17 def initialize(serializer) @serializer = serializer @objects = [] @containers = [] @results = {}.compare_by_identity end |
Instance Attribute Details
#containers ⇒ Array<Hash> (readonly)
Returns Result container per object (filled in place).
28 29 30 |
# File 'lib/serega/engine/level.rb', line 28 def containers @containers end |
#objects ⇒ Array (readonly)
Returns Objects serialized at this level.
25 26 27 |
# File 'lib/serega/engine/level.rb', line 25 def objects @objects end |
Instance Method Details
#add(objects) ⇒ Array<Hash>
Accumulates a chunk of objects into this level, creating one empty result container per object. The containers are returned so the caller can hand them to its parent; they are filled in place later during #process.
36 37 38 39 40 41 |
# File 'lib/serega/engine/level.rb', line 36 def add(objects) containers = Array.new(objects.size) { {} } @objects.concat(objects) @containers.concat(containers) containers end |
#fetch(loader) ⇒ Object
Loads a named batch loader once for this level's objects.
52 53 54 |
# File 'lib/serega/engine/level.rb', line 52 def fetch(loader) @results[loader] ||= loader.load(@objects, @serializer.context) end |
#process ⇒ void
This method returns an undefined value.
Resolves every attribute of this level onto the containers.
45 46 47 |
# File 'lib/serega/engine/level.rb', line 45 def process @serializer.process(self) end |