dry-schema 0.1.0 → 1.0.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/CHANGELOG.md +166 -0
- data/LICENSE +1 -1
- data/README.md +13 -4
- data/config/errors.yml +59 -54
- data/lib/dry/schema/compiler.rb +24 -0
- data/lib/dry/schema/config.rb +23 -27
- data/lib/dry/schema/constants.rb +27 -3
- data/lib/dry/schema/dsl.rb +36 -49
- data/lib/dry/schema/extensions/hints/compiler_methods.rb +19 -0
- data/lib/dry/schema/extensions/hints/message_compiler_methods.rb +84 -0
- data/lib/dry/schema/extensions/hints/message_set_methods.rb +44 -0
- data/lib/dry/schema/extensions/hints/result_methods.rb +47 -0
- data/lib/dry/schema/extensions/hints.rb +56 -0
- data/lib/dry/schema/extensions/monads.rb +15 -4
- data/lib/dry/schema/extensions.rb +6 -0
- data/lib/dry/schema/json.rb +4 -2
- data/lib/dry/schema/key.rb +8 -10
- data/lib/dry/schema/key_coercer.rb +6 -2
- data/lib/dry/schema/key_map.rb +5 -4
- data/lib/dry/schema/macros/array.rb +39 -0
- data/lib/dry/schema/macros/core.rb +2 -0
- data/lib/dry/schema/macros/dsl.rb +149 -4
- data/lib/dry/schema/macros/each.rb +12 -1
- data/lib/dry/schema/macros/filled.rb +14 -7
- data/lib/dry/schema/macros/hash.rb +6 -32
- data/lib/dry/schema/macros/key.rb +38 -60
- data/lib/dry/schema/macros/maybe.rb +5 -3
- data/lib/dry/schema/macros/optional.rb +8 -1
- data/lib/dry/schema/macros/required.rb +3 -1
- data/lib/dry/schema/macros/schema.rb +46 -0
- data/lib/dry/schema/macros/value.rb +18 -2
- data/lib/dry/schema/macros.rb +4 -0
- data/lib/dry/schema/message/or.rb +54 -0
- data/lib/dry/schema/message.rb +56 -72
- data/lib/dry/schema/message_compiler/visitor_opts.rb +28 -1
- data/lib/dry/schema/message_compiler.rb +85 -74
- data/lib/dry/schema/message_set.rb +82 -50
- data/lib/dry/schema/messages/abstract.rb +84 -44
- data/lib/dry/schema/messages/i18n.rb +45 -9
- data/lib/dry/schema/messages/namespaced.rb +22 -5
- data/lib/dry/schema/messages/template.rb +68 -0
- data/lib/dry/schema/messages/yaml.rb +76 -22
- data/lib/dry/schema/messages.rb +19 -24
- data/lib/dry/schema/namespaced_rule.rb +37 -0
- data/lib/dry/schema/params.rb +4 -2
- data/lib/dry/schema/path.rb +102 -0
- data/lib/dry/schema/predicate.rb +15 -0
- data/lib/dry/schema/predicate_inferrer.rb +116 -23
- data/lib/dry/schema/predicate_registry.rb +2 -0
- data/lib/dry/schema/processor.rb +70 -39
- data/lib/dry/schema/result.rb +16 -31
- data/lib/dry/schema/rule_applier.rb +10 -3
- data/lib/dry/schema/trace.rb +16 -3
- data/lib/dry/schema/type_registry.rb +5 -3
- data/lib/dry/schema/types.rb +3 -1
- data/lib/dry/schema/value_coercer.rb +10 -4
- data/lib/dry/schema/version.rb +3 -1
- data/lib/dry/schema.rb +39 -13
- data/lib/dry-schema.rb +2 -0
- metadata +43 -47
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'dry/equalizer'
|
|
1
4
|
require 'dry/initializer'
|
|
2
5
|
|
|
3
6
|
module Dry
|
|
@@ -7,6 +10,7 @@ module Dry
|
|
|
7
10
|
# @api private
|
|
8
11
|
class ValueCoercer
|
|
9
12
|
extend Dry::Initializer
|
|
13
|
+
include ::Dry::Equalizer(:type_schema)
|
|
10
14
|
|
|
11
15
|
# @api private
|
|
12
16
|
param :type_schema
|
|
@@ -14,11 +18,13 @@ module Dry
|
|
|
14
18
|
# @api private
|
|
15
19
|
def call(input)
|
|
16
20
|
if input.success?
|
|
17
|
-
type_schema[
|
|
21
|
+
type_schema[input.to_h]
|
|
18
22
|
else
|
|
19
|
-
type_schema.
|
|
20
|
-
|
|
21
|
-
|
|
23
|
+
type_schema.each_with_object(EMPTY_HASH.dup) do |key, hash|
|
|
24
|
+
name = key.name
|
|
25
|
+
value = input[name]
|
|
26
|
+
|
|
27
|
+
hash[name] = input.error?(name) ? value : key[value]
|
|
22
28
|
end
|
|
23
29
|
end
|
|
24
30
|
end
|
data/lib/dry/schema/version.rb
CHANGED
data/lib/dry/schema.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'dry/core/extensions'
|
|
2
4
|
|
|
3
5
|
require 'dry/schema/constants'
|
|
@@ -6,44 +8,68 @@ require 'dry/schema/params'
|
|
|
6
8
|
require 'dry/schema/json'
|
|
7
9
|
|
|
8
10
|
module Dry
|
|
11
|
+
# Main interface
|
|
12
|
+
#
|
|
13
|
+
# @api public
|
|
9
14
|
module Schema
|
|
10
15
|
extend Dry::Core::Extensions
|
|
11
16
|
|
|
12
17
|
# Define a schema
|
|
13
18
|
#
|
|
19
|
+
# @example
|
|
20
|
+
# Dry::Schema.define do
|
|
21
|
+
# required(:name).filled(:string)
|
|
22
|
+
# required(:age).value(:integer, gt?: 0)
|
|
23
|
+
# end
|
|
24
|
+
#
|
|
25
|
+
# @param [Hash] options
|
|
26
|
+
#
|
|
14
27
|
# @return [Processor]
|
|
15
28
|
#
|
|
29
|
+
# @see DSL.new
|
|
30
|
+
#
|
|
16
31
|
# @api public
|
|
17
|
-
def self.define(options
|
|
32
|
+
def self.define(**options, &block)
|
|
18
33
|
DSL.new(options, &block).call
|
|
19
34
|
end
|
|
20
35
|
|
|
21
|
-
# Define a
|
|
36
|
+
# Define a schema suitable for HTTP params
|
|
37
|
+
#
|
|
38
|
+
# This schema type uses `Types::Params` for coercion by default
|
|
39
|
+
#
|
|
40
|
+
# @example
|
|
41
|
+
# Dry::Schema.Params do
|
|
42
|
+
# required(:name).filled(:string)
|
|
43
|
+
# required(:age).value(:integer, gt?: 0)
|
|
44
|
+
# end
|
|
22
45
|
#
|
|
23
46
|
# @return [Params]
|
|
24
47
|
#
|
|
48
|
+
# @see Schema#define
|
|
49
|
+
#
|
|
25
50
|
# @api public
|
|
26
51
|
def self.Params(**options, &block)
|
|
27
52
|
define(**options, processor_type: Params, &block)
|
|
28
53
|
end
|
|
29
54
|
singleton_class.send(:alias_method, :Form, :Params)
|
|
30
55
|
|
|
31
|
-
# Define a JSON
|
|
56
|
+
# Define a schema suitable for JSON data
|
|
32
57
|
#
|
|
33
|
-
#
|
|
58
|
+
# This schema type uses `Types::JSON` for coercion by default
|
|
34
59
|
#
|
|
35
|
-
# @
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
# Return configured paths to message files
|
|
60
|
+
# @example
|
|
61
|
+
# Dry::Schema.JSON do
|
|
62
|
+
# required(:name).filled(:string)
|
|
63
|
+
# required(:age).value(:integer, gt?: 0)
|
|
64
|
+
# end
|
|
41
65
|
#
|
|
42
|
-
# @return [
|
|
66
|
+
# @return [Params]
|
|
67
|
+
#
|
|
68
|
+
# @see Schema#define
|
|
43
69
|
#
|
|
44
70
|
# @api public
|
|
45
|
-
def self.
|
|
46
|
-
|
|
71
|
+
def self.JSON(**options, &block)
|
|
72
|
+
define(**options, processor_type: JSON, &block)
|
|
47
73
|
end
|
|
48
74
|
end
|
|
49
75
|
end
|
data/lib/dry-schema.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: dry-schema
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 1.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Piotr Solnica
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2019-
|
|
11
|
+
date: 2019-05-03 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: concurrent-ruby
|
|
@@ -28,110 +28,92 @@ dependencies:
|
|
|
28
28
|
name: dry-configurable
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
30
30
|
requirements:
|
|
31
|
-
- - "~>"
|
|
32
|
-
- !ruby/object:Gem::Version
|
|
33
|
-
version: '0.1'
|
|
34
31
|
- - ">="
|
|
35
32
|
- !ruby/object:Gem::Version
|
|
36
|
-
version: 0.
|
|
33
|
+
version: 0.8.0
|
|
34
|
+
- - "~>"
|
|
35
|
+
- !ruby/object:Gem::Version
|
|
36
|
+
version: '0.8'
|
|
37
37
|
type: :runtime
|
|
38
38
|
prerelease: false
|
|
39
39
|
version_requirements: !ruby/object:Gem::Requirement
|
|
40
40
|
requirements:
|
|
41
|
-
- - "~>"
|
|
42
|
-
- !ruby/object:Gem::Version
|
|
43
|
-
version: '0.1'
|
|
44
41
|
- - ">="
|
|
45
42
|
- !ruby/object:Gem::Version
|
|
46
|
-
version: 0.
|
|
43
|
+
version: 0.8.0
|
|
44
|
+
- - "~>"
|
|
45
|
+
- !ruby/object:Gem::Version
|
|
46
|
+
version: '0.8'
|
|
47
47
|
- !ruby/object:Gem::Dependency
|
|
48
|
-
name: dry-
|
|
48
|
+
name: dry-core
|
|
49
49
|
requirement: !ruby/object:Gem::Requirement
|
|
50
50
|
requirements:
|
|
51
51
|
- - "~>"
|
|
52
52
|
- !ruby/object:Gem::Version
|
|
53
|
-
version: '0.
|
|
53
|
+
version: '0.4'
|
|
54
54
|
type: :runtime
|
|
55
55
|
prerelease: false
|
|
56
56
|
version_requirements: !ruby/object:Gem::Requirement
|
|
57
57
|
requirements:
|
|
58
58
|
- - "~>"
|
|
59
59
|
- !ruby/object:Gem::Version
|
|
60
|
-
version: '0.
|
|
60
|
+
version: '0.4'
|
|
61
61
|
- !ruby/object:Gem::Dependency
|
|
62
|
-
name: dry-
|
|
62
|
+
name: dry-equalizer
|
|
63
63
|
requirement: !ruby/object:Gem::Requirement
|
|
64
64
|
requirements:
|
|
65
65
|
- - "~>"
|
|
66
66
|
- !ruby/object:Gem::Version
|
|
67
|
-
version: '2
|
|
67
|
+
version: '0.2'
|
|
68
68
|
type: :runtime
|
|
69
69
|
prerelease: false
|
|
70
70
|
version_requirements: !ruby/object:Gem::Requirement
|
|
71
71
|
requirements:
|
|
72
72
|
- - "~>"
|
|
73
73
|
- !ruby/object:Gem::Version
|
|
74
|
-
version: '2
|
|
74
|
+
version: '0.2'
|
|
75
75
|
- !ruby/object:Gem::Dependency
|
|
76
|
-
name: dry-
|
|
76
|
+
name: dry-initializer
|
|
77
77
|
requirement: !ruby/object:Gem::Requirement
|
|
78
78
|
requirements:
|
|
79
|
-
- - ">="
|
|
80
|
-
- !ruby/object:Gem::Version
|
|
81
|
-
version: 0.5.0
|
|
82
79
|
- - "~>"
|
|
83
80
|
- !ruby/object:Gem::Version
|
|
84
|
-
version: '0
|
|
81
|
+
version: '3.0'
|
|
85
82
|
type: :runtime
|
|
86
83
|
prerelease: false
|
|
87
84
|
version_requirements: !ruby/object:Gem::Requirement
|
|
88
85
|
requirements:
|
|
89
|
-
- - ">="
|
|
90
|
-
- !ruby/object:Gem::Version
|
|
91
|
-
version: 0.5.0
|
|
92
86
|
- - "~>"
|
|
93
87
|
- !ruby/object:Gem::Version
|
|
94
|
-
version: '0
|
|
88
|
+
version: '3.0'
|
|
95
89
|
- !ruby/object:Gem::Dependency
|
|
96
|
-
name: dry-
|
|
90
|
+
name: dry-logic
|
|
97
91
|
requirement: !ruby/object:Gem::Requirement
|
|
98
92
|
requirements:
|
|
99
|
-
- - ">="
|
|
100
|
-
- !ruby/object:Gem::Version
|
|
101
|
-
version: 0.14.0
|
|
102
93
|
- - "~>"
|
|
103
94
|
- !ruby/object:Gem::Version
|
|
104
|
-
version: '0
|
|
95
|
+
version: '1.0'
|
|
105
96
|
type: :runtime
|
|
106
97
|
prerelease: false
|
|
107
98
|
version_requirements: !ruby/object:Gem::Requirement
|
|
108
99
|
requirements:
|
|
109
|
-
- - ">="
|
|
110
|
-
- !ruby/object:Gem::Version
|
|
111
|
-
version: 0.14.0
|
|
112
100
|
- - "~>"
|
|
113
101
|
- !ruby/object:Gem::Version
|
|
114
|
-
version: '0
|
|
102
|
+
version: '1.0'
|
|
115
103
|
- !ruby/object:Gem::Dependency
|
|
116
|
-
name: dry-
|
|
104
|
+
name: dry-types
|
|
117
105
|
requirement: !ruby/object:Gem::Requirement
|
|
118
106
|
requirements:
|
|
119
107
|
- - "~>"
|
|
120
108
|
- !ruby/object:Gem::Version
|
|
121
|
-
version: '0
|
|
122
|
-
- - ">="
|
|
123
|
-
- !ruby/object:Gem::Version
|
|
124
|
-
version: 0.2.1
|
|
109
|
+
version: '1.0'
|
|
125
110
|
type: :runtime
|
|
126
111
|
prerelease: false
|
|
127
112
|
version_requirements: !ruby/object:Gem::Requirement
|
|
128
113
|
requirements:
|
|
129
114
|
- - "~>"
|
|
130
115
|
- !ruby/object:Gem::Version
|
|
131
|
-
version: '0
|
|
132
|
-
- - ">="
|
|
133
|
-
- !ruby/object:Gem::Version
|
|
134
|
-
version: 0.2.1
|
|
116
|
+
version: '1.0'
|
|
135
117
|
- !ruby/object:Gem::Dependency
|
|
136
118
|
name: bundler
|
|
137
119
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -174,7 +156,10 @@ dependencies:
|
|
|
174
156
|
- - ">="
|
|
175
157
|
- !ruby/object:Gem::Version
|
|
176
158
|
version: '0'
|
|
177
|
-
description:
|
|
159
|
+
description: |
|
|
160
|
+
dry-schema provides a DSL for defining schemas with keys and rules that should be applied to
|
|
161
|
+
values. It supports coercion, input sanitization, custom types and localized error messages
|
|
162
|
+
(with or without I18n gem). It's also used as the schema engine in dry-validation.
|
|
178
163
|
email:
|
|
179
164
|
- piotr.solnica@gmail.com
|
|
180
165
|
executables: []
|
|
@@ -192,12 +177,18 @@ files:
|
|
|
192
177
|
- lib/dry/schema/constants.rb
|
|
193
178
|
- lib/dry/schema/dsl.rb
|
|
194
179
|
- lib/dry/schema/extensions.rb
|
|
180
|
+
- lib/dry/schema/extensions/hints.rb
|
|
181
|
+
- lib/dry/schema/extensions/hints/compiler_methods.rb
|
|
182
|
+
- lib/dry/schema/extensions/hints/message_compiler_methods.rb
|
|
183
|
+
- lib/dry/schema/extensions/hints/message_set_methods.rb
|
|
184
|
+
- lib/dry/schema/extensions/hints/result_methods.rb
|
|
195
185
|
- lib/dry/schema/extensions/monads.rb
|
|
196
186
|
- lib/dry/schema/json.rb
|
|
197
187
|
- lib/dry/schema/key.rb
|
|
198
188
|
- lib/dry/schema/key_coercer.rb
|
|
199
189
|
- lib/dry/schema/key_map.rb
|
|
200
190
|
- lib/dry/schema/macros.rb
|
|
191
|
+
- lib/dry/schema/macros/array.rb
|
|
201
192
|
- lib/dry/schema/macros/core.rb
|
|
202
193
|
- lib/dry/schema/macros/dsl.rb
|
|
203
194
|
- lib/dry/schema/macros/each.rb
|
|
@@ -207,8 +198,10 @@ files:
|
|
|
207
198
|
- lib/dry/schema/macros/maybe.rb
|
|
208
199
|
- lib/dry/schema/macros/optional.rb
|
|
209
200
|
- lib/dry/schema/macros/required.rb
|
|
201
|
+
- lib/dry/schema/macros/schema.rb
|
|
210
202
|
- lib/dry/schema/macros/value.rb
|
|
211
203
|
- lib/dry/schema/message.rb
|
|
204
|
+
- lib/dry/schema/message/or.rb
|
|
212
205
|
- lib/dry/schema/message_compiler.rb
|
|
213
206
|
- lib/dry/schema/message_compiler/visitor_opts.rb
|
|
214
207
|
- lib/dry/schema/message_set.rb
|
|
@@ -216,8 +209,11 @@ files:
|
|
|
216
209
|
- lib/dry/schema/messages/abstract.rb
|
|
217
210
|
- lib/dry/schema/messages/i18n.rb
|
|
218
211
|
- lib/dry/schema/messages/namespaced.rb
|
|
212
|
+
- lib/dry/schema/messages/template.rb
|
|
219
213
|
- lib/dry/schema/messages/yaml.rb
|
|
214
|
+
- lib/dry/schema/namespaced_rule.rb
|
|
220
215
|
- lib/dry/schema/params.rb
|
|
216
|
+
- lib/dry/schema/path.rb
|
|
221
217
|
- lib/dry/schema/predicate.rb
|
|
222
218
|
- lib/dry/schema/predicate_inferrer.rb
|
|
223
219
|
- lib/dry/schema/predicate_registry.rb
|
|
@@ -241,15 +237,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
241
237
|
requirements:
|
|
242
238
|
- - ">="
|
|
243
239
|
- !ruby/object:Gem::Version
|
|
244
|
-
version: '
|
|
240
|
+
version: '2.4'
|
|
245
241
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
246
242
|
requirements:
|
|
247
243
|
- - ">="
|
|
248
244
|
- !ruby/object:Gem::Version
|
|
249
245
|
version: '0'
|
|
250
246
|
requirements: []
|
|
251
|
-
rubygems_version: 3.0.
|
|
247
|
+
rubygems_version: 3.0.3
|
|
252
248
|
signing_key:
|
|
253
249
|
specification_version: 4
|
|
254
|
-
summary:
|
|
250
|
+
summary: Coercion and validation for data structures
|
|
255
251
|
test_files: []
|