Module: Serega::SeregaPlanPoint::InstanceMethods
- Included in:
- Serega::SeregaPlanPoint
- Defined in:
- lib/serega/plan_point.rb
Overview
SeregaPlanPoint instance methods
Instance Attribute Summary collapse
-
#attribute ⇒ SeregaAttribute
readonly
Shows current attribute.
-
#child_plan ⇒ SeregaPlan?
readonly
Shows child plan if exists.
-
#modifiers ⇒ Hash
readonly
Child fields to serialize.
-
#plan ⇒ SeregaAttribute
readonly
Link to current plan this point belongs to.
Instance Method Summary collapse
-
#batch_loaders ⇒ Object
Attribute
batch_loaders. -
#child_object_serializer ⇒ Class<SeregaObjectSerializer>
Object serializer class for child plan.
-
#child_serializer(context:, **opts) ⇒ SeregaObjectSerializer?
Builds the object serializer that serializes this point's relation, or nil when the point has no child plan (a plain attribute).
-
#initialize(plan, attribute, modifiers = nil) ⇒ SeregaPlanPoint
Initializes plan point.
-
#load_batches(level) ⇒ Hash?
Loads the batch loaders this point's value needs, each once for the whole level, and returns them keyed by loader name for #value to read from.
-
#many ⇒ Object
Attribute
manyoption. -
#name ⇒ Object
Attribute
name. -
#preloads ⇒ Object
Attribute
preloads. -
#run_preloads(objects) ⇒ void
Runs this point's declared preloads over the given objects using the serializer's registered preload handler.
-
#serializer ⇒ Object
Attribute
serializeroption. -
#value(obj, ctx, batches: nil) ⇒ Object
Attribute
value.
Instance Attribute Details
#attribute ⇒ SeregaAttribute (readonly)
Shows current attribute
18 19 20 |
# File 'lib/serega/plan_point.rb', line 18 def attribute @attribute end |
#child_plan ⇒ SeregaPlan? (readonly)
Shows child plan if exists
22 23 24 |
# File 'lib/serega/plan_point.rb', line 22 def child_plan @child_plan end |
#modifiers ⇒ Hash (readonly)
Child fields to serialize
26 27 28 |
# File 'lib/serega/plan_point.rb', line 26 def modifiers @modifiers end |
#plan ⇒ SeregaAttribute (readonly)
Link to current plan this point belongs to
14 15 16 |
# File 'lib/serega/plan_point.rb', line 14 def plan @plan end |
Instance Method Details
#batch_loaders ⇒ Object
Attribute batch_loaders
73 74 75 |
# File 'lib/serega/plan_point.rb', line 73 def batch_loaders attribute.batch_loaders end |
#child_object_serializer ⇒ Class<SeregaObjectSerializer>
Returns object serializer class for child plan.
121 122 123 |
# File 'lib/serega/plan_point.rb', line 121 def child_object_serializer serializer::SeregaObjectSerializer end |
#child_serializer(context:, **opts) ⇒ SeregaObjectSerializer?
Builds the object serializer that serializes this point's relation, or nil
when the point has no child plan (a plain attribute). The point owns the
static config (child plan, serializer class, many); the caller injects the
runtime context and opts.
133 134 135 136 137 |
# File 'lib/serega/plan_point.rb', line 133 def child_serializer(context:, **opts) return unless child_plan child_object_serializer.new(context: context, plan: child_plan, many: many, **opts) end |
#initialize(plan, attribute, modifiers = nil) ⇒ SeregaPlanPoint
Initializes plan point
40 41 42 43 44 45 |
# File 'lib/serega/plan_point.rb', line 40 def initialize(plan, attribute, modifiers = nil) @plan = plan @attribute = attribute @modifiers = modifiers set_normalized_vars end |
#load_batches(level) ⇒ Hash?
Loads the batch loaders this point's value needs, each once for the whole level, and returns them keyed by loader name for #value to read from.
106 107 108 109 110 111 112 113 114 115 116 |
# File 'lib/serega/plan_point.rb', line 106 def load_batches(level) names = batch_loaders return if names.empty? loaders = self.class.serializer_class.batch_loaders names.each_with_object({}) do |name, batches| batches[name] = level.fetch(loaders[name]) end rescue => error SeregaUtils::SerializedAttributeError.call(error, self) end |
#many ⇒ Object
Attribute many option
61 62 63 |
# File 'lib/serega/plan_point.rb', line 61 def many attribute.many end |
#name ⇒ Object
Attribute name
55 56 57 |
# File 'lib/serega/plan_point.rb', line 55 def name attribute.name end |
#preloads ⇒ Object
Attribute preloads
79 80 81 |
# File 'lib/serega/plan_point.rb', line 79 def preloads attribute.preloads end |
#run_preloads(objects) ⇒ void
This method returns an undefined value.
Runs this point's declared preloads over the given objects using the serializer's registered preload handler.
88 89 90 91 92 93 94 95 96 97 98 99 |
# File 'lib/serega/plan_point.rb', line 88 def run_preloads(objects) return unless preloads handler = self.class.serializer_class.preload_with unless handler raise SeregaError, "The :preload option requires a preload handler. Register one with `preload_with` (the :activerecord_preloads plugin does this for you)." end handler.call(objects, preloads) rescue => error SeregaUtils::SerializedAttributeError.call(error, self) end |
#serializer ⇒ Object
Attribute serializer option
67 68 69 |
# File 'lib/serega/plan_point.rb', line 67 def serializer attribute.serializer end |
#value(obj, ctx, batches: nil) ⇒ Object
Attribute value
49 50 51 |
# File 'lib/serega/plan_point.rb', line 49 def value(obj, ctx, batches: nil) attribute.value(obj, ctx, batches: batches) end |