serega 0.3.0 → 0.4.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0ca43f185a296a7139890f92ca5b7a8c265f3d9db65a0cc3a5e3fff4390d6ac9
4
- data.tar.gz: d295ac90b5481f9ca4ff2e8239c7e43e2548df76cc30d50b8f372934f8f78dfe
3
+ metadata.gz: 1aec10f062296a0af1d3f6b445f189ab2d84a145a8ed3cf0d52c81aa0c4f2c69
4
+ data.tar.gz: 1038ea10d7ea09b25d8f74b0561319d6f518a447121686ed689ff16385ec8806
5
5
  SHA512:
6
- metadata.gz: f75c90f6156452f49290d11eb5caf322437025c2c43ba471bc5bda32185a7c9b00b9003dc836952b660932c407285483b65e3538c7aebe365b110d47502e0d0b
7
- data.tar.gz: 925cb9cc61974ce9524ffec2cd3cf869c230beba1d13ecd71b5b3e8aa4e6415acb64bd75845cab58031b0713b2c8253442d53473eff5b16915e57ad7a2e118b0
6
+ metadata.gz: 8d568f45860671e760f56f67fd8206b2476b97ee5d415e881f23c9226285ef5b99a87b12ebd5da552664b6cd345ccb90cf7d43e10ed2a563ef436159f81afec5
7
+ data.tar.gz: 3100f9a6bd3b8fba77175677d4e53c01abf467cf2c57a5c1eea6a71ac2fbd73e7d2c0b0ff7071a032acdd73e6b37af37cc3259421e4fc58a96d5400fdea215ed
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.0
1
+ 0.4.0
@@ -12,9 +12,10 @@ class Serega
12
12
  serializer_class::SeregaAttribute.include(AttributeInstanceMethods)
13
13
  end
14
14
 
15
- def self.after_load_plugin(serializer_class, **_opts)
15
+ def self.after_load_plugin(serializer_class, **opts)
16
16
  config = serializer_class.config
17
17
  config.opts[:formatters] = {}
18
+ config.formatters.add(opts[:formatters] || {})
18
19
  config.attribute_keys << :format
19
20
  end
20
21
 
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Serega
4
+ module SeregaPlugins
5
+ module Lazy
6
+ def self.plugin_name
7
+ :lazy
8
+ end
9
+
10
+ def self.before_load_plugin(serializer_class, **opts)
11
+ end
12
+
13
+ def self.load_plugin(serializer_class, **_opts)
14
+ serializer_class.extend(ClassMethods)
15
+ serializer_class.include(InstanceMethods)
16
+ end
17
+
18
+ def self.after_load_plugin(serializer_class, **_opts)
19
+ serializer_class.config.attribute_keys << :lazy
20
+ end
21
+ end
22
+
23
+ module ClassMethods
24
+ def lazy(key:, buffer:, resolver:)
25
+ @lazy[key] = { buffer: buffer, resolver: resolver }
26
+ end
27
+ end
28
+
29
+ module InstanceMethods
30
+ def initialize(*args, **kwargs)
31
+ super
32
+ @lazy = {}
33
+ end
34
+
35
+ def to_h(*args, **kwargs)
36
+ result = super
37
+ lazy.each_key do |key, |
38
+ buffer = lazy.delete(key) # { val => [paths], val2 => [paths2] }
39
+ buffer_values = self.class.lazy[key][:resolver].(buffer.keys)
40
+
41
+ buffer_values.each do |key, resolved_value|
42
+ paths = buffer[key]
43
+ paths.each do |path|
44
+ result.dig(path[0, -2])
45
+ replace(result, buffer_values)
46
+ end
47
+
48
+ end
49
+ end
50
+
51
+ register_plugin(Metadata.plugin_name, Metadata)
52
+ end
53
+ end
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.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrey Glushkov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-08-09 00:00:00.000000000 Z
11
+ date: 2022-09-20 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email:
@@ -35,6 +35,7 @@ files:
35
35
  - lib/serega/plugins/context_metadata/context_metadata.rb
36
36
  - lib/serega/plugins/formatters/formatters.rb
37
37
  - lib/serega/plugins/hide_nil/hide_nil.rb
38
+ - lib/serega/plugins/lazy/lazy.rb
38
39
  - lib/serega/plugins/metadata/meta_attribute.rb
39
40
  - lib/serega/plugins/metadata/metadata.rb
40
41
  - lib/serega/plugins/metadata/validations/check_block.rb