dry-types 0.14.1 → 1.5.1
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 +631 -134
- data/LICENSE +17 -17
- data/README.md +15 -13
- data/dry-types.gemspec +27 -30
- data/lib/dry/types/any.rb +32 -12
- data/lib/dry/types/array/constructor.rb +32 -0
- data/lib/dry/types/array/member.rb +75 -16
- data/lib/dry/types/array.rb +19 -6
- data/lib/dry/types/builder.rb +131 -15
- data/lib/dry/types/builder_methods.rb +49 -20
- data/lib/dry/types/coercions/json.rb +43 -7
- data/lib/dry/types/coercions/params.rb +118 -31
- data/lib/dry/types/coercions.rb +76 -22
- data/lib/dry/types/compat.rb +0 -2
- data/lib/dry/types/compiler.rb +56 -41
- data/lib/dry/types/constrained/coercible.rb +36 -6
- data/lib/dry/types/constrained.rb +81 -32
- data/lib/dry/types/constraints.rb +18 -4
- data/lib/dry/types/constructor/function.rb +216 -0
- data/lib/dry/types/constructor/wrapper.rb +94 -0
- data/lib/dry/types/constructor.rb +126 -56
- data/lib/dry/types/container.rb +7 -0
- data/lib/dry/types/core.rb +54 -21
- data/lib/dry/types/decorator.rb +38 -17
- data/lib/dry/types/default.rb +61 -16
- data/lib/dry/types/enum.rb +43 -20
- data/lib/dry/types/errors.rb +75 -9
- data/lib/dry/types/extensions/maybe.rb +74 -16
- data/lib/dry/types/extensions/monads.rb +29 -0
- data/lib/dry/types/extensions.rb +7 -1
- data/lib/dry/types/fn_container.rb +6 -1
- data/lib/dry/types/hash/constructor.rb +33 -0
- data/lib/dry/types/hash.rb +86 -67
- data/lib/dry/types/inflector.rb +3 -1
- data/lib/dry/types/json.rb +18 -16
- data/lib/dry/types/lax.rb +75 -0
- data/lib/dry/types/map.rb +76 -33
- data/lib/dry/types/meta.rb +51 -0
- data/lib/dry/types/module.rb +120 -0
- data/lib/dry/types/nominal.rb +210 -0
- data/lib/dry/types/options.rb +13 -26
- data/lib/dry/types/params.rb +39 -25
- data/lib/dry/types/predicate_inferrer.rb +238 -0
- data/lib/dry/types/predicate_registry.rb +34 -0
- data/lib/dry/types/primitive_inferrer.rb +97 -0
- data/lib/dry/types/printable.rb +16 -0
- data/lib/dry/types/printer.rb +315 -0
- data/lib/dry/types/result.rb +29 -3
- data/lib/dry/types/schema/key.rb +156 -0
- data/lib/dry/types/schema.rb +408 -0
- data/lib/dry/types/spec/types.rb +103 -33
- data/lib/dry/types/sum.rb +84 -35
- data/lib/dry/types/type.rb +49 -0
- data/lib/dry/types/version.rb +3 -1
- data/lib/dry/types.rb +156 -76
- data/lib/dry-types.rb +3 -1
- metadata +65 -78
- data/.gitignore +0 -10
- data/.rspec +0 -2
- data/.travis.yml +0 -27
- data/.yardopts +0 -5
- data/CONTRIBUTING.md +0 -29
- data/Gemfile +0 -24
- data/Rakefile +0 -20
- data/benchmarks/hash_schemas.rb +0 -51
- data/lib/dry/types/compat/form_types.rb +0 -27
- data/lib/dry/types/compat/int.rb +0 -14
- data/lib/dry/types/definition.rb +0 -113
- data/lib/dry/types/hash/schema.rb +0 -199
- data/lib/dry/types/hash/schema_builder.rb +0 -75
- data/lib/dry/types/safe.rb +0 -59
- data/log/.gitkeep +0 -0
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dry-types
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Piotr Solnica
|
8
8
|
autorequire:
|
9
|
-
bindir:
|
9
|
+
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-02-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: concurrent-ruby
|
@@ -25,93 +25,79 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name: dry-
|
28
|
+
name: dry-container
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '0.
|
34
|
-
- - ">="
|
35
|
-
- !ruby/object:Gem::Version
|
36
|
-
version: 0.4.4
|
33
|
+
version: '0.3'
|
37
34
|
type: :runtime
|
38
35
|
prerelease: false
|
39
36
|
version_requirements: !ruby/object:Gem::Requirement
|
40
37
|
requirements:
|
41
38
|
- - "~>"
|
42
39
|
- !ruby/object:Gem::Version
|
43
|
-
version: '0.
|
44
|
-
- - ">="
|
45
|
-
- !ruby/object:Gem::Version
|
46
|
-
version: 0.4.4
|
40
|
+
version: '0.3'
|
47
41
|
- !ruby/object:Gem::Dependency
|
48
|
-
name: dry-
|
42
|
+
name: dry-core
|
49
43
|
requirement: !ruby/object:Gem::Requirement
|
50
44
|
requirements:
|
51
45
|
- - "~>"
|
52
46
|
- !ruby/object:Gem::Version
|
53
|
-
version: '0.
|
47
|
+
version: '0.5'
|
54
48
|
- - ">="
|
55
49
|
- !ruby/object:Gem::Version
|
56
|
-
version: 0.
|
50
|
+
version: '0.5'
|
57
51
|
type: :runtime
|
58
52
|
prerelease: false
|
59
53
|
version_requirements: !ruby/object:Gem::Requirement
|
60
54
|
requirements:
|
61
55
|
- - "~>"
|
62
56
|
- !ruby/object:Gem::Version
|
63
|
-
version: '0.
|
57
|
+
version: '0.5'
|
64
58
|
- - ">="
|
65
59
|
- !ruby/object:Gem::Version
|
66
|
-
version: 0.
|
60
|
+
version: '0.5'
|
67
61
|
- !ruby/object:Gem::Dependency
|
68
|
-
name: dry-
|
62
|
+
name: dry-inflector
|
69
63
|
requirement: !ruby/object:Gem::Requirement
|
70
64
|
requirements:
|
71
65
|
- - "~>"
|
72
66
|
- !ruby/object:Gem::Version
|
73
|
-
version: '0.
|
74
|
-
|
75
|
-
prerelease: false
|
76
|
-
version_requirements: !ruby/object:Gem::Requirement
|
77
|
-
requirements:
|
78
|
-
- - "~>"
|
79
|
-
- !ruby/object:Gem::Version
|
80
|
-
version: '0.3'
|
81
|
-
- !ruby/object:Gem::Dependency
|
82
|
-
name: dry-equalizer
|
83
|
-
requirement: !ruby/object:Gem::Requirement
|
84
|
-
requirements:
|
85
|
-
- - "~>"
|
67
|
+
version: '0.1'
|
68
|
+
- - ">="
|
86
69
|
- !ruby/object:Gem::Version
|
87
|
-
version:
|
70
|
+
version: 0.1.2
|
88
71
|
type: :runtime
|
89
72
|
prerelease: false
|
90
73
|
version_requirements: !ruby/object:Gem::Requirement
|
91
74
|
requirements:
|
92
75
|
- - "~>"
|
93
76
|
- !ruby/object:Gem::Version
|
94
|
-
version: '0.
|
77
|
+
version: '0.1'
|
78
|
+
- - ">="
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: 0.1.2
|
95
81
|
- !ruby/object:Gem::Dependency
|
96
82
|
name: dry-logic
|
97
83
|
requirement: !ruby/object:Gem::Requirement
|
98
84
|
requirements:
|
99
|
-
- - ">="
|
100
|
-
- !ruby/object:Gem::Version
|
101
|
-
version: '0.5'
|
102
85
|
- - "~>"
|
103
86
|
- !ruby/object:Gem::Version
|
104
|
-
version: '0
|
87
|
+
version: '1.0'
|
88
|
+
- - ">="
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: 1.0.2
|
105
91
|
type: :runtime
|
106
92
|
prerelease: false
|
107
93
|
version_requirements: !ruby/object:Gem::Requirement
|
108
94
|
requirements:
|
109
|
-
- - ">="
|
110
|
-
- !ruby/object:Gem::Version
|
111
|
-
version: '0.5'
|
112
95
|
- - "~>"
|
113
96
|
- !ruby/object:Gem::Version
|
114
|
-
version: '0
|
97
|
+
version: '1.0'
|
98
|
+
- - ">="
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
version: 1.0.2
|
115
101
|
- !ruby/object:Gem::Dependency
|
116
102
|
name: bundler
|
117
103
|
requirement: !ruby/object:Gem::Requirement
|
@@ -127,85 +113,78 @@ dependencies:
|
|
127
113
|
- !ruby/object:Gem::Version
|
128
114
|
version: '0'
|
129
115
|
- !ruby/object:Gem::Dependency
|
130
|
-
name:
|
116
|
+
name: dry-monads
|
131
117
|
requirement: !ruby/object:Gem::Requirement
|
132
118
|
requirements:
|
133
119
|
- - "~>"
|
134
120
|
- !ruby/object:Gem::Version
|
135
|
-
version: '
|
121
|
+
version: '1.0'
|
136
122
|
type: :development
|
137
123
|
prerelease: false
|
138
124
|
version_requirements: !ruby/object:Gem::Requirement
|
139
125
|
requirements:
|
140
126
|
- - "~>"
|
141
127
|
- !ruby/object:Gem::Version
|
142
|
-
version: '
|
128
|
+
version: '1.0'
|
143
129
|
- !ruby/object:Gem::Dependency
|
144
|
-
name:
|
130
|
+
name: rake
|
145
131
|
requirement: !ruby/object:Gem::Requirement
|
146
132
|
requirements:
|
147
|
-
- - "
|
133
|
+
- - ">="
|
148
134
|
- !ruby/object:Gem::Version
|
149
|
-
version: '
|
135
|
+
version: '0'
|
150
136
|
type: :development
|
151
137
|
prerelease: false
|
152
138
|
version_requirements: !ruby/object:Gem::Requirement
|
153
139
|
requirements:
|
154
|
-
- - "
|
140
|
+
- - ">="
|
155
141
|
- !ruby/object:Gem::Version
|
156
|
-
version: '
|
142
|
+
version: '0'
|
157
143
|
- !ruby/object:Gem::Dependency
|
158
|
-
name:
|
144
|
+
name: rspec
|
159
145
|
requirement: !ruby/object:Gem::Requirement
|
160
146
|
requirements:
|
161
|
-
- - "
|
147
|
+
- - ">="
|
162
148
|
- !ruby/object:Gem::Version
|
163
|
-
version: '0
|
149
|
+
version: '0'
|
164
150
|
type: :development
|
165
151
|
prerelease: false
|
166
152
|
version_requirements: !ruby/object:Gem::Requirement
|
167
153
|
requirements:
|
168
|
-
- - "
|
154
|
+
- - ">="
|
169
155
|
- !ruby/object:Gem::Version
|
170
|
-
version: '0
|
156
|
+
version: '0'
|
171
157
|
- !ruby/object:Gem::Dependency
|
172
158
|
name: yard
|
173
159
|
requirement: !ruby/object:Gem::Requirement
|
174
160
|
requirements:
|
175
|
-
- - "
|
161
|
+
- - ">="
|
176
162
|
- !ruby/object:Gem::Version
|
177
|
-
version: 0
|
163
|
+
version: '0'
|
178
164
|
type: :development
|
179
165
|
prerelease: false
|
180
166
|
version_requirements: !ruby/object:Gem::Requirement
|
181
167
|
requirements:
|
182
|
-
- - "
|
168
|
+
- - ">="
|
183
169
|
- !ruby/object:Gem::Version
|
184
|
-
version: 0
|
170
|
+
version: '0'
|
185
171
|
description: Type system for Ruby supporting coercions, constraints and complex types
|
186
|
-
like structs, value objects, enums etc
|
172
|
+
like structs, value objects, enums etc
|
187
173
|
email:
|
188
174
|
- piotr.solnica@gmail.com
|
189
175
|
executables: []
|
190
176
|
extensions: []
|
191
177
|
extra_rdoc_files: []
|
192
178
|
files:
|
193
|
-
- ".gitignore"
|
194
|
-
- ".rspec"
|
195
|
-
- ".travis.yml"
|
196
|
-
- ".yardopts"
|
197
179
|
- CHANGELOG.md
|
198
|
-
- CONTRIBUTING.md
|
199
|
-
- Gemfile
|
200
180
|
- LICENSE
|
201
181
|
- README.md
|
202
|
-
- Rakefile
|
203
|
-
- benchmarks/hash_schemas.rb
|
204
182
|
- dry-types.gemspec
|
205
183
|
- lib/dry-types.rb
|
206
184
|
- lib/dry/types.rb
|
207
185
|
- lib/dry/types/any.rb
|
208
186
|
- lib/dry/types/array.rb
|
187
|
+
- lib/dry/types/array/constructor.rb
|
209
188
|
- lib/dry/types/array/member.rb
|
210
189
|
- lib/dry/types/builder.rb
|
211
190
|
- lib/dry/types/builder_methods.rb
|
@@ -213,39 +192,47 @@ files:
|
|
213
192
|
- lib/dry/types/coercions/json.rb
|
214
193
|
- lib/dry/types/coercions/params.rb
|
215
194
|
- lib/dry/types/compat.rb
|
216
|
-
- lib/dry/types/compat/form_types.rb
|
217
|
-
- lib/dry/types/compat/int.rb
|
218
195
|
- lib/dry/types/compiler.rb
|
219
196
|
- lib/dry/types/constrained.rb
|
220
197
|
- lib/dry/types/constrained/coercible.rb
|
221
198
|
- lib/dry/types/constraints.rb
|
222
199
|
- lib/dry/types/constructor.rb
|
200
|
+
- lib/dry/types/constructor/function.rb
|
201
|
+
- lib/dry/types/constructor/wrapper.rb
|
223
202
|
- lib/dry/types/container.rb
|
224
203
|
- lib/dry/types/core.rb
|
225
204
|
- lib/dry/types/decorator.rb
|
226
205
|
- lib/dry/types/default.rb
|
227
|
-
- lib/dry/types/definition.rb
|
228
206
|
- lib/dry/types/enum.rb
|
229
207
|
- lib/dry/types/errors.rb
|
230
208
|
- lib/dry/types/extensions.rb
|
231
209
|
- lib/dry/types/extensions/maybe.rb
|
210
|
+
- lib/dry/types/extensions/monads.rb
|
232
211
|
- lib/dry/types/fn_container.rb
|
233
212
|
- lib/dry/types/hash.rb
|
234
|
-
- lib/dry/types/hash/
|
235
|
-
- lib/dry/types/hash/schema_builder.rb
|
213
|
+
- lib/dry/types/hash/constructor.rb
|
236
214
|
- lib/dry/types/inflector.rb
|
237
215
|
- lib/dry/types/json.rb
|
216
|
+
- lib/dry/types/lax.rb
|
238
217
|
- lib/dry/types/map.rb
|
218
|
+
- lib/dry/types/meta.rb
|
219
|
+
- lib/dry/types/module.rb
|
220
|
+
- lib/dry/types/nominal.rb
|
239
221
|
- lib/dry/types/options.rb
|
240
222
|
- lib/dry/types/params.rb
|
223
|
+
- lib/dry/types/predicate_inferrer.rb
|
224
|
+
- lib/dry/types/predicate_registry.rb
|
225
|
+
- lib/dry/types/primitive_inferrer.rb
|
226
|
+
- lib/dry/types/printable.rb
|
227
|
+
- lib/dry/types/printer.rb
|
241
228
|
- lib/dry/types/result.rb
|
242
|
-
- lib/dry/types/
|
229
|
+
- lib/dry/types/schema.rb
|
230
|
+
- lib/dry/types/schema/key.rb
|
243
231
|
- lib/dry/types/spec/types.rb
|
244
232
|
- lib/dry/types/sum.rb
|
245
233
|
- lib/dry/types/type.rb
|
246
234
|
- lib/dry/types/version.rb
|
247
|
-
-
|
248
|
-
homepage: https://github.com/dry-rb/dry-types
|
235
|
+
homepage: https://dry-rb.org/gems/dry-types
|
249
236
|
licenses:
|
250
237
|
- MIT
|
251
238
|
metadata:
|
@@ -261,16 +248,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
261
248
|
requirements:
|
262
249
|
- - ">="
|
263
250
|
- !ruby/object:Gem::Version
|
264
|
-
version: 2.
|
251
|
+
version: 2.5.0
|
265
252
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
266
253
|
requirements:
|
267
254
|
- - ">="
|
268
255
|
- !ruby/object:Gem::Version
|
269
256
|
version: '0'
|
270
257
|
requirements: []
|
271
|
-
rubygems_version: 3.
|
258
|
+
rubygems_version: 3.1.4
|
272
259
|
signing_key:
|
273
260
|
specification_version: 4
|
274
261
|
summary: Type system for Ruby supporting coercions, constraints and complex types
|
275
|
-
like structs, value objects, enums etc
|
262
|
+
like structs, value objects, enums etc
|
276
263
|
test_files: []
|
data/.gitignore
DELETED
data/.rspec
DELETED
data/.travis.yml
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
language: ruby
|
2
|
-
dist: trusty
|
3
|
-
sudo: required
|
4
|
-
cache: bundler
|
5
|
-
bundler_args: --without benchmarks tools
|
6
|
-
script:
|
7
|
-
- bundle exec rake
|
8
|
-
after_success:
|
9
|
-
- '[ -d coverage ] && bundle exec codeclimate-test-reporter'
|
10
|
-
rvm:
|
11
|
-
- 2.3.8
|
12
|
-
- 2.4.5
|
13
|
-
- 2.5.5
|
14
|
-
- 2.6.2
|
15
|
-
- jruby-9.2.6.0
|
16
|
-
env:
|
17
|
-
global:
|
18
|
-
- COVERAGE=true
|
19
|
-
- JRUBY_OPTS='--dev -J-Xmx1024M'
|
20
|
-
notifications:
|
21
|
-
email: false
|
22
|
-
webhooks:
|
23
|
-
urls:
|
24
|
-
- https://webhooks.gitter.im/e/19098b4253a72c9796db
|
25
|
-
on_success: change # options: [always|never|change] default: always
|
26
|
-
on_failure: always # options: [always|never|change] default: always
|
27
|
-
on_start: false # default: false
|
data/.yardopts
DELETED
data/CONTRIBUTING.md
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
# Issue Guidelines
|
2
|
-
|
3
|
-
## Reporting bugs
|
4
|
-
|
5
|
-
If you found a bug, report an issue and describe what's the expected behavior versus what actually happens. If the bug causes a crash, attach a full backtrace. If possible, a reproduction script showing the problem is highly appreciated.
|
6
|
-
|
7
|
-
## Reporting feature requests
|
8
|
-
|
9
|
-
Report a feature request **only after discussing it first on [discourse.dry-rb.org](https://discourse.dry-rb.org)** where it was accepted. Please provide a concise description of the feature, don't link to a discussion thread, and instead summarize what was discussed.
|
10
|
-
|
11
|
-
## Reporting questions, support requests, ideas, concerns etc.
|
12
|
-
|
13
|
-
**PLEASE DON'T** - use [discourse.dry-rb.org](https://discourse.dry-rb.org) instead.
|
14
|
-
|
15
|
-
# Pull Request Guidelines
|
16
|
-
|
17
|
-
A Pull Request will only be accepted if it addresses a specific issue that was reported previously, or fixes typos, mistakes in documentation etc.
|
18
|
-
|
19
|
-
Other requirements:
|
20
|
-
|
21
|
-
1) Do not open a pull request if you can't provide tests along with it. If you have problems writing tests, ask for help in the related issue.
|
22
|
-
2) Follow the style conventions of the surrounding code. In most cases, this is standard ruby style.
|
23
|
-
3) Add API documentation if it's a new feature
|
24
|
-
4) Update API documentation if it changes an existing feature
|
25
|
-
5) Bonus points for sending a PR to [github.com/dry-rb/dry-rb.org](github.com/dry-rb/dry-rb.org) which updates user documentation and guides
|
26
|
-
|
27
|
-
# Asking for help
|
28
|
-
|
29
|
-
If these guidelines aren't helpful, and you're stuck, please post a message on [discourse.dry-rb.org](https://discourse.dry-rb.org).
|
data/Gemfile
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
source 'https://rubygems.org'
|
2
|
-
|
3
|
-
gemspec
|
4
|
-
|
5
|
-
group :test do
|
6
|
-
platform :mri do
|
7
|
-
gem "codeclimate-test-reporter", require: false
|
8
|
-
gem 'simplecov', require: false
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
group :tools do
|
13
|
-
gem 'pry-byebug', platform: :mri
|
14
|
-
gem 'mutant'
|
15
|
-
gem 'mutant-rspec'
|
16
|
-
end
|
17
|
-
|
18
|
-
group :benchmarks do
|
19
|
-
gem 'benchmark-ips'
|
20
|
-
gem 'virtus'
|
21
|
-
gem 'fast_attributes'
|
22
|
-
gem 'attrio'
|
23
|
-
gem 'dry-struct'
|
24
|
-
end
|
data/Rakefile
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
require "bundler/gem_tasks"
|
2
|
-
require "rspec/core/rake_task"
|
3
|
-
|
4
|
-
task :run_specs do
|
5
|
-
require 'rspec/core'
|
6
|
-
|
7
|
-
types_result = RSpec::Core::Runner.run(['spec/dry'])
|
8
|
-
RSpec.clear_examples
|
9
|
-
|
10
|
-
Dry::Types.load_extensions(:maybe)
|
11
|
-
ext_result = RSpec::Core::Runner.run(['spec'])
|
12
|
-
|
13
|
-
exit [types_result, ext_result].max
|
14
|
-
end
|
15
|
-
|
16
|
-
task default: :run_specs
|
17
|
-
|
18
|
-
require 'yard'
|
19
|
-
require 'yard/rake/yardoc_task'
|
20
|
-
YARD::Rake::YardocTask.new(:doc)
|
data/benchmarks/hash_schemas.rb
DELETED
@@ -1,51 +0,0 @@
|
|
1
|
-
$LOAD_PATH.unshift('lib')
|
2
|
-
|
3
|
-
require 'bundler/setup'
|
4
|
-
require 'dry-types'
|
5
|
-
|
6
|
-
module SchemaBench
|
7
|
-
def self.hash_schema(type)
|
8
|
-
Dry::Types['hash'].public_send(type,
|
9
|
-
email: Dry::Types['string'],
|
10
|
-
age: Dry::Types['params.integer'],
|
11
|
-
admin: Dry::Types['params.bool'],
|
12
|
-
address: Dry::Types['hash'].public_send(type,
|
13
|
-
city: Dry::Types['string'],
|
14
|
-
street: Dry::Types['string']
|
15
|
-
)
|
16
|
-
)
|
17
|
-
end
|
18
|
-
|
19
|
-
private_class_method(:hash_schema)
|
20
|
-
|
21
|
-
SCHEMAS =
|
22
|
-
Dry::Types::Hash
|
23
|
-
.public_instance_methods(false)
|
24
|
-
.map { |schema_type| [schema_type, hash_schema(schema_type)] }
|
25
|
-
.to_h
|
26
|
-
|
27
|
-
INPUT = {
|
28
|
-
email: 'jane@doe.org',
|
29
|
-
age: '20',
|
30
|
-
admin: '1',
|
31
|
-
address: { city: 'NYC', street: 'Street 1/2' }
|
32
|
-
}
|
33
|
-
end
|
34
|
-
|
35
|
-
require 'benchmark/ips'
|
36
|
-
|
37
|
-
Benchmark.ips do |x|
|
38
|
-
SchemaBench::SCHEMAS.each do |schema_type, schema|
|
39
|
-
x.report("#{schema_type}#call") do
|
40
|
-
schema.call(SchemaBench::INPUT)
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
SchemaBench::SCHEMAS.each do |schema_type, schema|
|
45
|
-
x.report("#{schema_type}#try") do
|
46
|
-
schema.try(SchemaBench::INPUT)
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
x.compare!
|
51
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
require 'dry/core/deprecations'
|
2
|
-
|
3
|
-
Dry::Core::Deprecations.warn('Form types were renamed to Params', tag: :'dry-types')
|
4
|
-
|
5
|
-
module Dry
|
6
|
-
module Types
|
7
|
-
container.keys.grep(/^params\./).each do |key|
|
8
|
-
next if key.start_with?('params.int')
|
9
|
-
register(key.sub('params.', 'form.'), container[key])
|
10
|
-
end
|
11
|
-
|
12
|
-
register('form.int', self['params.integer'])
|
13
|
-
register('form.integer', self['params.integer'])
|
14
|
-
|
15
|
-
class Compiler
|
16
|
-
def visit_form_hash(node)
|
17
|
-
schema, meta = node
|
18
|
-
merge_with('params.hash', :symbolized, schema).meta(meta)
|
19
|
-
end
|
20
|
-
|
21
|
-
def visit_form_array(node)
|
22
|
-
member, meta = node
|
23
|
-
registry['params.array'].of(visit(member)).meta(meta)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
data/lib/dry/types/compat/int.rb
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
require 'dry/core/deprecations'
|
2
|
-
|
3
|
-
Dry::Core::Deprecations.warn('Int type was renamed to Integer', tag: :'dry-types')
|
4
|
-
|
5
|
-
module Dry
|
6
|
-
module Types
|
7
|
-
register('int', self['integer'])
|
8
|
-
register('strict.int', self['strict.integer'])
|
9
|
-
register('coercible.int', self['coercible.integer'])
|
10
|
-
register('optional.strict.int', self['optional.strict.integer'])
|
11
|
-
register('optional.coercible.int', self['optional.coercible.integer'])
|
12
|
-
register('params.int', self['params.integer'])
|
13
|
-
end
|
14
|
-
end
|
data/lib/dry/types/definition.rb
DELETED
@@ -1,113 +0,0 @@
|
|
1
|
-
require 'dry/types/builder'
|
2
|
-
require 'dry/types/result'
|
3
|
-
require 'dry/types/options'
|
4
|
-
|
5
|
-
module Dry
|
6
|
-
module Types
|
7
|
-
class Definition
|
8
|
-
include Type
|
9
|
-
include Options
|
10
|
-
include Builder
|
11
|
-
include Dry::Equalizer(:primitive, :options, :meta)
|
12
|
-
|
13
|
-
# @return [Class]
|
14
|
-
attr_reader :primitive
|
15
|
-
|
16
|
-
# @param [Class] primitive
|
17
|
-
# @return [Type]
|
18
|
-
def self.[](primitive)
|
19
|
-
if primitive == ::Array
|
20
|
-
Types::Array
|
21
|
-
elsif primitive == ::Hash
|
22
|
-
Types::Hash
|
23
|
-
else
|
24
|
-
self
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
# @param [Type,Class] primitive
|
29
|
-
# @param [Hash] options
|
30
|
-
def initialize(primitive, **options)
|
31
|
-
super
|
32
|
-
@primitive = primitive
|
33
|
-
freeze
|
34
|
-
end
|
35
|
-
|
36
|
-
# @return [String]
|
37
|
-
def name
|
38
|
-
primitive.name
|
39
|
-
end
|
40
|
-
|
41
|
-
# @return [false]
|
42
|
-
def default?
|
43
|
-
false
|
44
|
-
end
|
45
|
-
|
46
|
-
# @return [false]
|
47
|
-
def constrained?
|
48
|
-
false
|
49
|
-
end
|
50
|
-
|
51
|
-
# @return [false]
|
52
|
-
def optional?
|
53
|
-
false
|
54
|
-
end
|
55
|
-
|
56
|
-
# @param [BasicObject] input
|
57
|
-
# @return [BasicObject]
|
58
|
-
def call(input)
|
59
|
-
input
|
60
|
-
end
|
61
|
-
alias_method :[], :call
|
62
|
-
|
63
|
-
# @param [Object] input
|
64
|
-
# @param [#call,nil] block
|
65
|
-
# @yieldparam [Failure] failure
|
66
|
-
# @yieldreturn [Result]
|
67
|
-
# @return [Result,Logic::Result] when a block is not provided
|
68
|
-
# @return [nil] otherwise
|
69
|
-
def try(input, &block)
|
70
|
-
if valid?(input)
|
71
|
-
success(input)
|
72
|
-
else
|
73
|
-
failure = failure(input, "#{input.inspect} must be an instance of #{primitive}")
|
74
|
-
block ? yield(failure) : failure
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
# @param (see Dry::Types::Success#initialize)
|
79
|
-
# @return [Result::Success]
|
80
|
-
def success(input)
|
81
|
-
Result::Success.new(input)
|
82
|
-
end
|
83
|
-
|
84
|
-
# @param (see Failure#initialize)
|
85
|
-
# @return [Result::Failure]
|
86
|
-
def failure(input, error)
|
87
|
-
Result::Failure.new(input, error)
|
88
|
-
end
|
89
|
-
|
90
|
-
# Checks whether value is of a #primitive class
|
91
|
-
# @param [Object] value
|
92
|
-
# @return [Boolean]
|
93
|
-
def primitive?(value)
|
94
|
-
value.is_a?(primitive)
|
95
|
-
end
|
96
|
-
alias_method :valid?, :primitive?
|
97
|
-
alias_method :===, :primitive?
|
98
|
-
|
99
|
-
# Return AST representation of a type definition
|
100
|
-
#
|
101
|
-
# @api public
|
102
|
-
#
|
103
|
-
# @return [Array]
|
104
|
-
def to_ast(meta: true)
|
105
|
-
[:definition, [primitive, meta ? self.meta : EMPTY_HASH]]
|
106
|
-
end
|
107
|
-
end
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
require 'dry/types/array'
|
112
|
-
require 'dry/types/hash'
|
113
|
-
require 'dry/types/map'
|