dry-validation 0.7.1 → 0.7.2
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
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3c372ced33f2c8865c3ecac3fe917610dc414d89
|
4
|
+
data.tar.gz: 50e61628de4b84caf57bcc874fbf74a4ba3925b8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2a79910c2cd2e54c8076ca4b218976d972d06f99db6063005d57d7c9e47f96433bd380a53c4504a76c41cc4a810706fb383e3c298c2122416578276626b1fa2b
|
7
|
+
data.tar.gz: d731cd50af1a2b58ac03baccb1706fb2cb66acbb98ae4931f363d19fb13eebada0b766d8030a3404efe5a30d43264805a69321518467777c3a8f639b2f0e5596
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
# v0.7.2 2016-03-28
|
2
|
+
|
3
|
+
### Added
|
4
|
+
|
5
|
+
* Support for nested schemas inside high-level rules (solnic)
|
6
|
+
* `Schema#to_proc` so that you can do `data.each(&schema)` (solnic)
|
7
|
+
|
8
|
+
[Compare v0.7.1...v0.7.2](https://github.com/dryrb/dry-validation/compare/v0.7.1...v0.7.2)
|
9
|
+
|
1
10
|
# v0.7.1 2016-03-21
|
2
11
|
|
3
12
|
### Added
|
@@ -6,6 +6,16 @@ module Dry
|
|
6
6
|
Check
|
7
7
|
end
|
8
8
|
|
9
|
+
def schema(other = nil, &block)
|
10
|
+
schema = Schema.create_class(self, other, &block)
|
11
|
+
|
12
|
+
if other
|
13
|
+
schema.config.input_processor = other.class.config.input_processor
|
14
|
+
end
|
15
|
+
|
16
|
+
hash?.and(create_rule([:check, [name, schema.to_ast], [path]]))
|
17
|
+
end
|
18
|
+
|
9
19
|
private
|
10
20
|
|
11
21
|
def method_missing(meth, *meth_args)
|
@@ -79,4 +79,41 @@ RSpec.describe Schema, 'using high-level rules' do
|
|
79
79
|
)
|
80
80
|
end
|
81
81
|
end
|
82
|
+
|
83
|
+
describe 'with nested schemas' do
|
84
|
+
subject(:schema) do
|
85
|
+
Dry::Validation.Schema do
|
86
|
+
key(:command).required(:str?, inclusion?: %w(First Second))
|
87
|
+
|
88
|
+
key(:args).required(:hash?)
|
89
|
+
|
90
|
+
rule(first_args: [:command, :args]) do |command, args|
|
91
|
+
command.eql?('First')
|
92
|
+
.then(args.schema { key(:first).required(:bool?) })
|
93
|
+
end
|
94
|
+
|
95
|
+
rule(second_args: [:command, :args]) do |command, args|
|
96
|
+
command.eql?('Second')
|
97
|
+
.then(args.schema { key(:second).required(:bool?) })
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
it 'generates check rule matching on value' do
|
103
|
+
expect(schema.(command: 'First', args: { first: true })).to be_success
|
104
|
+
expect(schema.(command: 'Second', args: { second: true })).to be_success
|
105
|
+
|
106
|
+
expect(schema.(command: 'oops', args: { such: 'validation' }).messages).to eql(
|
107
|
+
command: ['must be one of: First, Second']
|
108
|
+
)
|
109
|
+
|
110
|
+
expect(schema.(command: 'First', args: { second: true }).messages).to eql(
|
111
|
+
args: { first: ['is missing'] }
|
112
|
+
)
|
113
|
+
|
114
|
+
expect(schema.(command: 'Second', args: { first: true }).messages).to eql(
|
115
|
+
args: { second: ['is missing'] }
|
116
|
+
)
|
117
|
+
end
|
118
|
+
end
|
82
119
|
end
|
@@ -119,4 +119,42 @@ RSpec.describe Dry::Validation::Schema::Form, 'defining a schema' do
|
|
119
119
|
)
|
120
120
|
end
|
121
121
|
end
|
122
|
+
|
123
|
+
describe 'with nested schema in a high-level rule' do
|
124
|
+
subject(:schema) do
|
125
|
+
Dry::Validation.Form do
|
126
|
+
key(:address).maybe
|
127
|
+
|
128
|
+
key(:delivery).required(:bool?)
|
129
|
+
|
130
|
+
rule(address: [:delivery, :address]) do |delivery, address|
|
131
|
+
delivery.true?.then(address.schema(AddressSchema))
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
before do
|
137
|
+
AddressSchema = Dry::Validation.Form do
|
138
|
+
key(:city).required
|
139
|
+
key(:zipcode).required(:int?)
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
after do
|
144
|
+
Object.send(:remove_const, :AddressSchema)
|
145
|
+
end
|
146
|
+
|
147
|
+
it 'applies nested form schema' do
|
148
|
+
result = schema.(delivery: '1', address: { city: 'NYC', zipcode: '123' })
|
149
|
+
expect(result).to be_success
|
150
|
+
|
151
|
+
result = schema.(delivery: '1', address: { city: 'NYC', zipcode: 'foo' })
|
152
|
+
expect(result.messages).to eql(
|
153
|
+
address: { zipcode: ['must be an integer'] }
|
154
|
+
)
|
155
|
+
|
156
|
+
result = schema.(delivery: '0', address: nil)
|
157
|
+
expect(result).to be_success
|
158
|
+
end
|
159
|
+
end
|
122
160
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dry-validation
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andy Holland
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-03-
|
12
|
+
date: 2016-03-28 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: dry-configurable
|
@@ -256,7 +256,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
256
256
|
version: '0'
|
257
257
|
requirements: []
|
258
258
|
rubyforge_project:
|
259
|
-
rubygems_version: 2.
|
259
|
+
rubygems_version: 2.5.1
|
260
260
|
signing_key:
|
261
261
|
specification_version: 4
|
262
262
|
summary: A simple validation library
|
@@ -301,4 +301,3 @@ test_files:
|
|
301
301
|
- spec/unit/schema/rule_spec.rb
|
302
302
|
- spec/unit/schema/value_spec.rb
|
303
303
|
- spec/unit/schema_spec.rb
|
304
|
-
has_rdoc:
|