serega 0.12.0 → 0.15.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: 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: []