parametric 0.2.8 → 0.2.9
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 +16 -2
- data/lib/parametric/schema.rb +5 -1
- data/lib/parametric/version.rb +1 -1
- data/spec/schema_spec.rb +14 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3e5e99f35e7a900299c8ca79bf1edecc57a73209c8fab7c292ef5fff11f1e467
|
4
|
+
data.tar.gz: a28ad622475c98957079ee5a000c02f91b1df05c6f3fd9492bcdfd10a6751edc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 86bcd5fcd359872f8eab2b23206bd359b13ab1363d5b7d29eb8ef9899ed421605d3be10cbf4841d2791eeecf46de8292e63d97180c799ae2febb0c955b054c92
|
7
|
+
data.tar.gz: b767db9489841a70489812bd51be1bb167de8a87b9c91a4f21cb82201d7023ed5e0a05747d853332f936bb0d05f2e3be44d6ed64c6bd24820fb19da1902c708f
|
data/README.md
CHANGED
@@ -98,7 +98,7 @@ results.errors # => {"$.friends[0].name" => "is required"}
|
|
98
98
|
You can optionally use an existing schema instance as a nested schema:
|
99
99
|
|
100
100
|
```ruby
|
101
|
-
|
101
|
+
FRIENDS_SCHEMA = Parametric::Schema.new do
|
102
102
|
field(:friends).type(:array).schema do
|
103
103
|
field(:name).type(:string).required
|
104
104
|
field(:email).policy(:email)
|
@@ -109,10 +109,24 @@ person_schema = Parametric::Schema.new do
|
|
109
109
|
field(:name).type(:string).required
|
110
110
|
field(:age).type(:integer)
|
111
111
|
# Nest friends_schema
|
112
|
-
field(:friends).type(:array).schema(
|
112
|
+
field(:friends).type(:array).schema(FRIENDS_SCHEMA)
|
113
113
|
end
|
114
114
|
```
|
115
115
|
|
116
|
+
Note that _person_schema_'s definition has access to `FRIENDS_SCHEMA` because it's a constant.
|
117
|
+
Definition blocks are run in the context of the defining schema instance by default.
|
118
|
+
|
119
|
+
To preserve the original block's context, declare two arguments in your block, the defining schema `sc` and options has.
|
120
|
+
|
121
|
+
```ruby
|
122
|
+
person_schema = Parametric::Schema.new do |sc, options|
|
123
|
+
# this block now preserves its context. Call `sc.field` to add fields to the current schema.
|
124
|
+
sc.field(:name).type(:string).required
|
125
|
+
sc.field(:age).type(:integer)
|
126
|
+
# We now have access to local variables
|
127
|
+
sc.field(:friends).type(:array).schema(friends_schema)
|
128
|
+
end
|
129
|
+
```
|
116
130
|
## Built-in policies
|
117
131
|
|
118
132
|
Type coercions (the `type` method) and validations (the `validate` method) are all _policies_.
|
data/lib/parametric/schema.rb
CHANGED
@@ -182,7 +182,11 @@ module Parametric
|
|
182
182
|
def apply!
|
183
183
|
return if @applied
|
184
184
|
definitions.each do |d|
|
185
|
-
|
185
|
+
if d.arity == 2 # pass schema instance and options, preserve block context
|
186
|
+
d.call(self, options)
|
187
|
+
else # run block in context of current instance
|
188
|
+
self.instance_exec(options, &d)
|
189
|
+
end
|
186
190
|
end
|
187
191
|
@applied = true
|
188
192
|
end
|
data/lib/parametric/version.rb
CHANGED
data/spec/schema_spec.rb
CHANGED
@@ -237,6 +237,20 @@ describe Parametric::Schema do
|
|
237
237
|
end
|
238
238
|
end
|
239
239
|
|
240
|
+
context 'yielding schema to definition, to preserve outer context' do
|
241
|
+
it 'yields schema instance and options to definition block, can access outer context' do
|
242
|
+
schema1 = described_class.new do
|
243
|
+
field(:name).type(:string)
|
244
|
+
end
|
245
|
+
schema2 = described_class.new do |sc, _opts|
|
246
|
+
sc.field(:user).schema schema1
|
247
|
+
end
|
248
|
+
|
249
|
+
out = schema2.resolve(user: { name: 'Joe' }).output
|
250
|
+
expect(out[:user][:name]).to eq 'Joe'
|
251
|
+
end
|
252
|
+
end
|
253
|
+
|
240
254
|
describe "#ignore" do
|
241
255
|
it "ignores fields" do
|
242
256
|
s1 = described_class.new.ignore(:title, :status) do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: parametric
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ismael Celis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-07
|
11
|
+
date: 2019-08-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|