serega 0.12.0 → 0.15.0

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: 52535c7fab3897f65aec4e156ab5681e8595b4519df1e79a777688cee486a480
4
- data.tar.gz: 16adbd9f036b0e23928049df873966f264db1004d2c4c1bc9e28422d687efd12
3
+ metadata.gz: d780c3d344370b36d9e6db64dfdfa08878bfe32885469610ac2314638c878d87
4
+ data.tar.gz: d282c6466f7b7205a7b524999b85a3e928d79c00ee11445abd26582e0146842c
5
5
  SHA512:
6
- metadata.gz: 93a6aaefdf954556e31bd604ead1e376d5ffbb74225251e635bf5133af53da26f47e924f1f88349fa4656e228ddca573347d9f8fa15cc30bc6052f7e5dfec3bd
7
- data.tar.gz: c84135d04c79aae1ccd03a3f3ac7dbed53dbf75165575afbb61ad6e32a558318cac2a8311c31b76df90fb74823facdf4677821d8f7ae8284f04782d33b04ad41
6
+ metadata.gz: e2a161487df001b0074d1864770a7dfecd77ef788e187de6e460cd3d2856162cba8777eb807a65a8d4d49471bb50380fc49ffd17f36c16eb52a2ab8b84ed7991
7
+ data.tar.gz: 4a672090d0893ef8d3945b2528fc9861d245833ec4b21074b73481ab7acbf8fa5207c786cad8496bf022070f3341339522bbf4970c7a554cfa543f002f51f504
data/README.md CHANGED
@@ -888,6 +888,30 @@ Look at [select serialized fields](#selecting-fields) for `:hide` usage examples
888
888
  end
889
889
  ```
890
890
 
891
+ ### Plugin :explicit_many_option
892
+
893
+ Plugin requires to add :many option when adding relationships
894
+ (relationships are attributes with :serializer option specified)
895
+
896
+ Adding this plugin makes it clearer to find if relationship returns array or single
897
+ object
898
+
899
+ ```ruby
900
+ class BaseSerializer < Serega
901
+ plugin :explicit_many_option
902
+ end
903
+
904
+ class UserSerializer < BaseSerializer
905
+ attribute :name
906
+ end
907
+
908
+ class PostSerializer < BaseSerializer
909
+ attribute :text
910
+ attribute :user, serializer: UserSerializer, many: false
911
+ attribute :comments, serializer: PostSerializer, many: true
912
+ end
913
+ ```
914
+
891
915
  ## Errors
892
916
 
893
917
  - `Serega::SeregaError` is a base error raised by this gem.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.12.0
1
+ 0.15.0
@@ -0,0 +1,66 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Serega
4
+ module SeregaPlugins
5
+ #
6
+ # Plugin :explicit_many_option
7
+ #
8
+ # Plugin requires to add :many option when adding relationships
9
+ # (relationships are attributes with :serializer option specified)
10
+ #
11
+ # Adding this plugin makes it clearer to find if relationship returns array or single object
12
+ #
13
+ # @example
14
+ # class BaseSerializer < Serega
15
+ # plugin :explicit_many_option
16
+ # end
17
+ #
18
+ # class UserSerializer < BaseSerializer
19
+ # attribute :name
20
+ # end
21
+ #
22
+ # class PostSerializer < BaseSerializer
23
+ # attribute :text
24
+ # attribute :user, serializer: UserSerializer, many: false
25
+ # attribute :comments, serializer: PostSerializer, many: true
26
+ # end
27
+ #
28
+ module ExplicitManyOption
29
+ # @return [Symbol] Plugin name
30
+ def self.plugin_name
31
+ :explicit_many_option
32
+ end
33
+
34
+ #
35
+ # Applies plugin code to specific serializer
36
+ #
37
+ # @param serializer_class [Class<Serega>] Current serializer class
38
+ # @param _opts [Hash] Loaded plugins options
39
+ #
40
+ # @return [void]
41
+ #
42
+ def self.load_plugin(serializer_class, **_opts)
43
+ require_relative "./validations/check_opt_many"
44
+
45
+ serializer_class::CheckAttributeParams.include(CheckAttributeParamsInstanceMethods)
46
+ end
47
+
48
+ #
49
+ # Serega::SeregaValidations::CheckAttributeParams additional/patched class methods
50
+ #
51
+ # @see Serega::SeregaValidations::CheckAttributeParams
52
+ #
53
+ module CheckAttributeParamsInstanceMethods
54
+ private
55
+
56
+ def check_opts
57
+ super
58
+
59
+ CheckOptMany.call(opts)
60
+ end
61
+ end
62
+ end
63
+
64
+ register_plugin(ExplicitManyOption.plugin_name, ExplicitManyOption)
65
+ end
66
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Serega
4
+ module SeregaPlugins
5
+ module ExplicitManyOption
6
+ #
7
+ # Validator for attribute :many option
8
+ #
9
+ class CheckOptMany
10
+ class << self
11
+ #
12
+ # Checks attribute :many option must be provided with relations
13
+ #
14
+ # @param opts [Hash] Attribute options
15
+ #
16
+ # @raise [SeregaError] Attribute validation error
17
+ #
18
+ # @return [void]
19
+ #
20
+ def call(opts)
21
+ serializer = opts[:serializer]
22
+ return unless serializer
23
+
24
+ many_option_exists = opts.key?(:many)
25
+ return if many_option_exists
26
+
27
+ raise SeregaError,
28
+ "Attribute option :many [Boolean] must be provided" \
29
+ " for attributes with :serializer option"
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -11,11 +11,11 @@ class Serega
11
11
  attr_reader :opts
12
12
 
13
13
  #
14
- # Initializes context_metadata config object
14
+ # Initializes PreloadsConfig object
15
15
  #
16
16
  # @param opts [Hash] options
17
17
  #
18
- # @return [Serega::SeregaPlugins::Metadata::MetadataConfig]
18
+ # @return [Serega::SeregaPlugins::Preloads::PreloadsConfig]
19
19
  #
20
20
  def initialize(opts)
21
21
  @opts = opts
@@ -7,17 +7,34 @@ class Serega
7
7
  # Attribute `:many` option validator
8
8
  #
9
9
  class CheckOptMany
10
- #
11
- # Checks attribute :many option
12
- #
13
- # @param opts [Hash] Attribute options
14
- #
15
- # @raise [SeregaError] SeregaError that option has invalid value
16
- #
17
- # @return [void]
18
- #
19
- def self.call(opts)
20
- Utils::CheckOptIsBool.call(opts, :many)
10
+ class << self
11
+ #
12
+ # Checks attribute :many option
13
+ #
14
+ # @param opts [Hash] Attribute options
15
+ #
16
+ # @raise [SeregaError] SeregaError that option has invalid value
17
+ #
18
+ # @return [void]
19
+ #
20
+ def call(opts)
21
+ return unless opts.key?(:many)
22
+
23
+ check_many_option_makes_sence(opts)
24
+ Utils::CheckOptIsBool.call(opts, :many)
25
+ end
26
+
27
+ private
28
+
29
+ def check_many_option_makes_sence(opts)
30
+ return if many_option_makes_sence?(opts)
31
+
32
+ raise SeregaError, "Option :many can be provided only together with :serializer or :batch option"
33
+ end
34
+
35
+ def many_option_makes_sence?(opts)
36
+ opts[:serializer] || opts[:batch]
37
+ end
21
38
  end
22
39
  end
23
40
  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.12.0
4
+ version: 0.15.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrey Glushkov
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-07-10 00:00:00.000000000 Z
11
+ date: 2023-08-13 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: |
14
14
  JSON Serializer
@@ -59,6 +59,8 @@ files:
59
59
  - lib/serega/plugins/batch/lib/validations/check_batch_opt_loader.rb
60
60
  - lib/serega/plugins/batch/lib/validations/check_opt_batch.rb
61
61
  - lib/serega/plugins/context_metadata/context_metadata.rb
62
+ - lib/serega/plugins/explicit_many_option/explicit_many_option.rb
63
+ - lib/serega/plugins/explicit_many_option/validations/check_opt_many.rb
62
64
  - lib/serega/plugins/formatters/formatters.rb
63
65
  - lib/serega/plugins/if/if.rb
64
66
  - lib/serega/plugins/if/validations/check_opt_if.rb
@@ -117,7 +119,7 @@ metadata:
117
119
  source_code_uri: https://github.com/aglushkov/serega
118
120
  documentation_uri: https://www.rubydoc.info/gems/serega
119
121
  changelog_uri: https://github.com/aglushkov/serega/blob/master/CHANGELOG.md
120
- post_install_message:
122
+ post_install_message:
121
123
  rdoc_options: []
122
124
  require_paths:
123
125
  - lib
@@ -132,8 +134,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
132
134
  - !ruby/object:Gem::Version
133
135
  version: '0'
134
136
  requirements: []
135
- rubygems_version: 3.4.7
136
- signing_key:
137
+ rubygems_version: 3.4.6
138
+ signing_key:
137
139
  specification_version: 4
138
140
  summary: JSON Serializer
139
141
  test_files: []