serega 0.37.2 → 0.39.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +124 -26
- data/VERSION +1 -1
- data/lib/serega/attribute.rb +3 -3
- data/lib/serega/attribute_normalizer.rb +87 -14
- data/lib/serega/attribute_value_resolvers/batch.rb +4 -0
- data/lib/serega/config.rb +48 -1
- data/lib/serega/engine/level.rb +57 -0
- data/lib/serega/engine/level_queue.rb +54 -0
- data/lib/serega/{batch → engine}/loader.rb +1 -1
- data/lib/serega/object_serializer.rb +61 -56
- data/lib/serega/plan.rb +0 -9
- data/lib/serega/plan_point.rb +56 -5
- data/lib/serega/plugins/activerecord_preloads/activerecord_preloads.rb +21 -1
- data/lib/serega/plugins/explicit_many_option/explicit_many_option.rb +3 -2
- data/lib/serega/plugins/explicit_many_option/validations/check_opt_many.rb +6 -4
- data/lib/serega/plugins/if/if.rb +9 -10
- data/lib/serega/plugins/presenter/presenter.rb +101 -5
- data/lib/serega/plugins/root/root.rb +1 -1
- data/lib/serega/utils/collection_detector.rb +26 -0
- data/lib/serega/validations/attribute/check_block.rb +20 -55
- data/lib/serega/validations/attribute/check_opt_base_serializer.rb +37 -0
- data/lib/serega/validations/attribute/check_opt_batch.rb +6 -6
- data/lib/serega/validations/attribute/check_opt_const.rb +3 -4
- data/lib/serega/validations/attribute/check_opt_delegate.rb +3 -4
- data/lib/serega/validations/attribute/check_opt_many.rb +8 -7
- data/lib/serega/validations/attribute/check_opt_method.rb +3 -4
- data/lib/serega/validations/attribute/check_opt_serializer.rb +4 -1
- data/lib/serega/validations/attribute/check_opt_value.rb +3 -4
- data/lib/serega/validations/check_attribute_params.rb +8 -7
- data/lib/serega.rb +33 -29
- metadata +6 -5
- data/lib/serega/batch/attribute_loader.rb +0 -82
- data/lib/serega/batch/attribute_loaders.rb +0 -117
- data/lib/serega/batch/level.rb +0 -48
data/lib/serega/batch/level.rb
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
class Serega
|
|
4
|
-
#
|
|
5
|
-
# Batch feature main module
|
|
6
|
-
#
|
|
7
|
-
module SeregaBatch
|
|
8
|
-
#
|
|
9
|
-
# Objects serialized at one plan level, together with their loaded batch results.
|
|
10
|
-
#
|
|
11
|
-
# Every attribute serialized at the same level shares one Level, so a named batch
|
|
12
|
-
# loader reused by several of them runs once for the whole set of objects. The same
|
|
13
|
-
# loader over a different level (deeper nesting) uses a different Level and loads
|
|
14
|
-
# again.
|
|
15
|
-
#
|
|
16
|
-
class Level
|
|
17
|
-
# @return [Array] Objects gathered for this level
|
|
18
|
-
attr_reader :objects
|
|
19
|
-
|
|
20
|
-
# @param context [Hash] Serialization context
|
|
21
|
-
def initialize(context)
|
|
22
|
-
@context = context
|
|
23
|
-
@objects = []
|
|
24
|
-
@results = {}.compare_by_identity
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
# Adds a chunk of serialized objects to this level.
|
|
28
|
-
# @param objects [Array] Objects being serialized at this level
|
|
29
|
-
# @return [void]
|
|
30
|
-
def add_objects(objects)
|
|
31
|
-
@objects.concat(objects)
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
# Loads and returns values for the given batch loader, once per loader.
|
|
35
|
-
#
|
|
36
|
-
# Freezes the gathered objects on the first load: all of a level's objects
|
|
37
|
-
# are added before any of its batches load, so sealing the set here guards
|
|
38
|
-
# against a later stray `add_objects` and against a loader mutating it.
|
|
39
|
-
#
|
|
40
|
-
# @param loader [SeregaBatch::Loader] Named batch loader
|
|
41
|
-
# @return [Object] Loaded values
|
|
42
|
-
def load(loader)
|
|
43
|
-
@objects.freeze
|
|
44
|
-
@results[loader] ||= loader.load(@objects, @context)
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
end
|