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.
19 20 21 22 23 24 |
# File 'lib/serega/engine/level.rb', line 19 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).
30 31 32 |
# File 'lib/serega/engine/level.rb', line 30 def containers @containers end |
#objects ⇒ Array (readonly)
Returns Objects serialized at this level.
27 28 29 |
# File 'lib/serega/engine/level.rb', line 27 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.
38 39 40 41 42 43 |
# File 'lib/serega/engine/level.rb', line 38 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.
54 55 56 |
# File 'lib/serega/engine/level.rb', line 54 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.
47 48 49 |
# File 'lib/serega/engine/level.rb', line 47 def process @serializer.process(self) end |