json-schema-serializer 1.5.2 → 1.6.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 +4 -4
- data/README.md +50 -1
- data/bin/console +0 -0
- data/bin/fmt +0 -0
- data/bin/setup +0 -0
- data/json-schema-serializer.gemspec +2 -1
- data/lib/json/schema/serializer.rb +8 -2
- data/lib/json/schema/serializer/version.rb +1 -1
- metadata +19 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 54b6ef10587ab0aaeb6bb6aa85ae56daef39f714c356ace19352336c04864ae8
|
4
|
+
data.tar.gz: 360d4fef03c36d567ae2e229c2632bca7af26ce9c4e19ec036590917ecffdd93
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4a1fe23e623221c1651c681562fedaa146578f6e495fb23989e4358e75e63d78b63b8d18443e3a52db0ff0f65a3bca58b263177cac8f616ceabe6b9bb964b2ae
|
7
|
+
data.tar.gz: 929372326ff9c370c1d04df9d36e3da7d2183a05354cb34cbaee7fe334b7e609eec75267371108c3953db7efa8edfc8208f40155bc79496e8f0632dec539df43
|
data/README.md
CHANGED
@@ -112,6 +112,51 @@ serializer_injected = JSON::Schema::Serializer.new(
|
|
112
112
|
|
113
113
|
serializer_injected.serialize([1, 2, 3])
|
114
114
|
# => {"first"=>1, "count"=>3}
|
115
|
+
|
116
|
+
#
|
117
|
+
# object injector with context
|
118
|
+
#
|
119
|
+
|
120
|
+
class BarSerializer
|
121
|
+
def initialize(model, context = nil)
|
122
|
+
@model = model
|
123
|
+
@context = context
|
124
|
+
end
|
125
|
+
|
126
|
+
def id
|
127
|
+
@model[:id]
|
128
|
+
end
|
129
|
+
|
130
|
+
def score
|
131
|
+
@context[@model[:id]]
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
inject_context = {
|
136
|
+
1 => 100,
|
137
|
+
2 => 200,
|
138
|
+
}
|
139
|
+
|
140
|
+
serializer_injected_with_context = JSON::Schema::Serializer.new(
|
141
|
+
{
|
142
|
+
type: :object,
|
143
|
+
inject: :Bar,
|
144
|
+
properties: {
|
145
|
+
id: { type: :integer },
|
146
|
+
score: { type: :integer },
|
147
|
+
},
|
148
|
+
},
|
149
|
+
{
|
150
|
+
inject_key: :inject,
|
151
|
+
injectors: {
|
152
|
+
Bar: BarSerializer,
|
153
|
+
},
|
154
|
+
inject_context: inject_context,
|
155
|
+
},
|
156
|
+
)
|
157
|
+
|
158
|
+
serializer_injected_with_context.serialize({ id: 1 })
|
159
|
+
# => { "id" => 1, "score" => 100 }
|
115
160
|
```
|
116
161
|
|
117
162
|
### "additionalProperties"
|
@@ -211,12 +256,16 @@ new({
|
|
211
256
|
}, { schema_key_transform_for_output: ->(name) { name.underscore } }).serialize({ userCount: 1 }) == { "user_count" => 1 }
|
212
257
|
```
|
213
258
|
|
214
|
-
#### options[:injectors] [Hashlike<String, Class>, Class], options[:inject_key] [String, Symbol]
|
259
|
+
#### options[:injectors] [Hashlike<String, Class>, Class], options[:inject_key] [String, Symbol], options[:inject_context] [any]
|
215
260
|
|
216
261
|
If schema has inject key, the serializer treats data by `injectors[inject_key].new(data)` (or `injectors.send(inject_key).new(data)`).
|
217
262
|
|
263
|
+
And if `inject_context` is present, `injectors[inject_key].new(data, inject_context)` (or `injectors.send(inject_key).new(data, inject_context)`).
|
264
|
+
|
218
265
|
See examples in [Usage](#usage).
|
219
266
|
|
267
|
+
CAUTION: In many case you should define the `nil?` method in the injector class because Injector always initialized by `Injector.new(obj)` even if obj == nil.
|
268
|
+
|
220
269
|
#### options[:null_through] [Boolean]
|
221
270
|
|
222
271
|
If data is null, always serialize null.
|
data/bin/console
CHANGED
File without changes
|
data/bin/fmt
CHANGED
File without changes
|
data/bin/setup
CHANGED
File without changes
|
@@ -28,9 +28,10 @@ Gem::Specification.new do |spec|
|
|
28
28
|
spec.require_paths = %w[lib]
|
29
29
|
|
30
30
|
spec.add_development_dependency "bundler", "~> 2.0"
|
31
|
-
spec.add_development_dependency "rake", "~>
|
31
|
+
spec.add_development_dependency "rake", "~> 13.0"
|
32
32
|
spec.add_development_dependency "rspec", "~> 3.9"
|
33
33
|
spec.add_development_dependency "rspec-power_assert", "~> 1.1"
|
34
|
+
spec.add_development_dependency "simplecov", ">= 0.18"
|
34
35
|
spec.add_development_dependency "rubocop", "~> 0.76"
|
35
36
|
spec.add_development_dependency "rubocop-airbnb", "~> 3"
|
36
37
|
spec.add_development_dependency "prettier", ">= 0.16"
|
@@ -5,7 +5,7 @@ require "set"
|
|
5
5
|
module JSON
|
6
6
|
class Schema
|
7
7
|
class Serializer
|
8
|
-
def initialize(schema, options = nil)
|
8
|
+
def initialize(schema, options = nil) # rubocop:disable Airbnb/OptArgParameters
|
9
9
|
@schema = options && options[:resolver] ? options[:resolver].call(schema) : schema
|
10
10
|
@options = options || {}
|
11
11
|
end
|
@@ -27,7 +27,13 @@ module JSON
|
|
27
27
|
if options[:inject_key]
|
28
28
|
inject_key = try_hash(schema, options[:inject_key])
|
29
29
|
injector = try_hash(options[:injectors], inject_key) if inject_key
|
30
|
-
|
30
|
+
if injector
|
31
|
+
if options[:inject_context]
|
32
|
+
obj = injector.new(obj, options[:inject_context])
|
33
|
+
else
|
34
|
+
obj = injector.new(obj)
|
35
|
+
end
|
36
|
+
end
|
31
37
|
end
|
32
38
|
type_coerce(schema, detect_type(type, obj), format, obj, required, options)
|
33
39
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: json-schema-serializer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Narazaka
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-03-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '13.0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '13.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '1.1'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: simplecov
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0.18'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0.18'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: rubocop
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -181,7 +195,7 @@ metadata:
|
|
181
195
|
homepage_uri: https://github.com/Narazaka/json-schema-serializer
|
182
196
|
source_code_uri: https://github.com/Narazaka/json-schema-serializer.git
|
183
197
|
changelog_uri: https://github.com/Narazaka/json-schema-serializer/blob/master/CHANGELOG.md
|
184
|
-
documentation_uri: https://www.rubydoc.info/gems/json-schema-serializer/1.
|
198
|
+
documentation_uri: https://www.rubydoc.info/gems/json-schema-serializer/1.6.0
|
185
199
|
post_install_message:
|
186
200
|
rdoc_options: []
|
187
201
|
require_paths:
|