serega 0.20.0 → 0.20.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3a8bc4f49c84bd623535d3134b77e01cd002b4a3fe6bea9b2dbc998e80911e53
4
- data.tar.gz: e06e06c478dc605afa417e0a97289b2930b7ce084e3d57f07d1b3f94f7ff7717
3
+ metadata.gz: 11094f59dcd5d1d918604998ac267dbd13297bf0f70a9f3da5fd5ba74eb76b06
4
+ data.tar.gz: 97d1a419769b73937afde735e24210690e2f7702943d60db5be4252301e07255
5
5
  SHA512:
6
- metadata.gz: 6b699d5ae9ed68da0147be26cd1f64ef5e26a99ce22b260889a7a831af8765f3fc02c02ce4c879672c719b4ad8e7c40aaf5903e3183bf770061e8cf54bcd37fc
7
- data.tar.gz: a82645b1ac1b2c68fea64c49235d78b926608de0e035d7042cb37ab5836fe6885742d63b4317cceb91889d9b87a54af9f4b2e6de1455cbfee9f886f79396bdcf
6
+ metadata.gz: f9e3bfb207894f09c9c88658bad62e2a28e8b4d44648a74f807d332862b0cd7bdc67870f0d06786de0eb64537fd1a824c5d4f375406b71d18410b63c5a8c5320
7
+ data.tar.gz: 1171f2aabb7ce1c63a9e2f95f5413e9d80a882326ada4fac561b527c8a1adcc263ff19d6224eb070f0ebb333254ff48c9c7f56861ff6418732848cde3ffbc5b5
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.20.0
1
+ 0.20.1
@@ -70,6 +70,7 @@ class Serega
70
70
 
71
71
  # Patched in:
72
72
  # - plugin :if (conditionally skips attaching)
73
+ # - plugin :batch :if extension (removes prepared key)
73
74
  def attach_final_value(final_value, point, container)
74
75
  container[point.name] = final_value
75
76
  end
@@ -105,6 +105,11 @@ class Serega
105
105
  serializer_class::SeregaAttribute.include(PluginsExtensions::Formatters::SeregaAttributeInstanceMethods)
106
106
  end
107
107
 
108
+ if serializer_class.plugin_used?(:if)
109
+ require_relative "lib/plugins_extensions/if"
110
+ serializer_class::SeregaObjectSerializer.include(PluginsExtensions::If::ObjectSerializerInstanceMethods123)
111
+ end
112
+
108
113
  if serializer_class.plugin_used?(:preloads)
109
114
  require_relative "lib/plugins_extensions/preloads"
110
115
  serializer_class::SeregaAttributeNormalizer.include(PluginsExtensions::Preloads::AttributeNormalizerInstanceMethods)
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Serega
4
+ module SeregaPlugins
5
+ module Batch
6
+ #
7
+ # Extensions (mini-plugins) that are enabled when :batch plugin used with other plugins
8
+ #
9
+ module PluginsExtensions
10
+ #
11
+ # Extension that is used when :if plugin is loaded
12
+ #
13
+ module If
14
+ #
15
+ # SeregaObjectSerializer additional/patched class methods
16
+ #
17
+ # @see Serega::SeregaObjectSerializer
18
+ #
19
+ module ObjectSerializerInstanceMethods123
20
+ private
21
+
22
+ # Removes key added by `batch` plugin at the start of serialization to preserve attributes ordering
23
+ def attach_final_value(value, point, container)
24
+ container.delete(point.name) if super == SeregaPlugins::If::KEY_SKIPPED
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -42,11 +42,27 @@ class Serega
42
42
  # end
43
43
  #
44
44
  module If
45
+ # This value must be returned to identify that serialization key was skipped
46
+ KEY_SKIPPED = :_key_skipped_with_serega_if_plugin
47
+
45
48
  # @return [Symbol] Plugin name
46
49
  def self.plugin_name
47
50
  :if
48
51
  end
49
52
 
53
+ # Checks requirements to load plugin
54
+ #
55
+ # @param serializer_class [Class<Serega>] Current serializer class
56
+ # @param opts [Hash] plugin options
57
+ #
58
+ # @return [void]
59
+ #
60
+ def self.before_load_plugin(serializer_class, **opts)
61
+ if serializer_class.plugin_used?(:batch)
62
+ raise SeregaError, "Plugin #{plugin_name.inspect} must be loaded before the :batch plugin"
63
+ end
64
+ end
65
+
50
66
  #
51
67
  # Applies plugin code to specific serializer
52
68
  #
@@ -194,12 +210,13 @@ class Serega
194
210
  private
195
211
 
196
212
  def serialize_point(object, point, _container)
197
- return unless point.satisfy_if_conditions?(object, context)
213
+ return KEY_SKIPPED unless point.satisfy_if_conditions?(object, context)
198
214
  super
199
215
  end
200
216
 
201
217
  def attach_final_value(value, point, _container)
202
- return unless point.satisfy_if_value_conditions?(value, context)
218
+ return KEY_SKIPPED unless point.satisfy_if_value_conditions?(value, context)
219
+
203
220
  super
204
221
  end
205
222
  end
@@ -88,6 +88,10 @@ class Serega
88
88
  " - :auto_preload_attributes_with_serializer [Boolean] - Automatically adds `preload: <attribute_name>` option to attributes with :serializer option specified\n" \
89
89
  " - :auto_hide_attributes_with_preload [Boolean] - Automatically adds `hide: true` option to attributes with :preload option (specified manually or added automatically)"
90
90
  end
91
+
92
+ if serializer_class.plugin_used?(:batch)
93
+ raise SeregaError, "Plugin #{plugin_name.inspect} must be loaded before the :batch plugin"
94
+ end
91
95
  end
92
96
 
93
97
  #
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: serega
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.20.0
4
+ version: 0.20.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrey Glushkov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-12-28 00:00:00.000000000 Z
11
+ date: 2024-02-25 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: |
14
14
  JSON Serializer
@@ -54,6 +54,7 @@ files:
54
54
  - lib/serega/plugins/batch/lib/modules/plan_point.rb
55
55
  - lib/serega/plugins/batch/lib/plugins_extensions/activerecord_preloads.rb
56
56
  - lib/serega/plugins/batch/lib/plugins_extensions/formatters.rb
57
+ - lib/serega/plugins/batch/lib/plugins_extensions/if.rb
57
58
  - lib/serega/plugins/batch/lib/plugins_extensions/preloads.rb
58
59
  - lib/serega/plugins/batch/lib/validations/check_batch_opt_id_method.rb
59
60
  - lib/serega/plugins/batch/lib/validations/check_batch_opt_loader.rb
@@ -140,7 +141,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
140
141
  - !ruby/object:Gem::Version
141
142
  version: '0'
142
143
  requirements: []
143
- rubygems_version: 3.5.3
144
+ rubygems_version: 3.5.6
144
145
  signing_key:
145
146
  specification_version: 4
146
147
  summary: JSON Serializer