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.
Files changed (35) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +124 -26
  3. data/VERSION +1 -1
  4. data/lib/serega/attribute.rb +3 -3
  5. data/lib/serega/attribute_normalizer.rb +87 -14
  6. data/lib/serega/attribute_value_resolvers/batch.rb +4 -0
  7. data/lib/serega/config.rb +48 -1
  8. data/lib/serega/engine/level.rb +57 -0
  9. data/lib/serega/engine/level_queue.rb +54 -0
  10. data/lib/serega/{batch → engine}/loader.rb +1 -1
  11. data/lib/serega/object_serializer.rb +61 -56
  12. data/lib/serega/plan.rb +0 -9
  13. data/lib/serega/plan_point.rb +56 -5
  14. data/lib/serega/plugins/activerecord_preloads/activerecord_preloads.rb +21 -1
  15. data/lib/serega/plugins/explicit_many_option/explicit_many_option.rb +3 -2
  16. data/lib/serega/plugins/explicit_many_option/validations/check_opt_many.rb +6 -4
  17. data/lib/serega/plugins/if/if.rb +9 -10
  18. data/lib/serega/plugins/presenter/presenter.rb +101 -5
  19. data/lib/serega/plugins/root/root.rb +1 -1
  20. data/lib/serega/utils/collection_detector.rb +26 -0
  21. data/lib/serega/validations/attribute/check_block.rb +20 -55
  22. data/lib/serega/validations/attribute/check_opt_base_serializer.rb +37 -0
  23. data/lib/serega/validations/attribute/check_opt_batch.rb +6 -6
  24. data/lib/serega/validations/attribute/check_opt_const.rb +3 -4
  25. data/lib/serega/validations/attribute/check_opt_delegate.rb +3 -4
  26. data/lib/serega/validations/attribute/check_opt_many.rb +8 -7
  27. data/lib/serega/validations/attribute/check_opt_method.rb +3 -4
  28. data/lib/serega/validations/attribute/check_opt_serializer.rb +4 -1
  29. data/lib/serega/validations/attribute/check_opt_value.rb +3 -4
  30. data/lib/serega/validations/check_attribute_params.rb +8 -7
  31. data/lib/serega.rb +33 -29
  32. metadata +6 -5
  33. data/lib/serega/batch/attribute_loader.rb +0 -82
  34. data/lib/serega/batch/attribute_loaders.rb +0 -117
  35. data/lib/serega/batch/level.rb +0 -48
@@ -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