dry-types 0.13.2 → 1.5.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (72) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +763 -233
  3. data/LICENSE +17 -17
  4. data/README.md +15 -13
  5. data/dry-types.gemspec +28 -28
  6. data/lib/dry-types.rb +3 -1
  7. data/lib/dry/types.rb +156 -76
  8. data/lib/dry/types/any.rb +32 -12
  9. data/lib/dry/types/array.rb +19 -6
  10. data/lib/dry/types/array/constructor.rb +32 -0
  11. data/lib/dry/types/array/member.rb +75 -16
  12. data/lib/dry/types/builder.rb +131 -15
  13. data/lib/dry/types/builder_methods.rb +49 -20
  14. data/lib/dry/types/coercions.rb +76 -22
  15. data/lib/dry/types/coercions/json.rb +43 -7
  16. data/lib/dry/types/coercions/params.rb +118 -31
  17. data/lib/dry/types/compat.rb +0 -2
  18. data/lib/dry/types/compiler.rb +56 -41
  19. data/lib/dry/types/constrained.rb +81 -32
  20. data/lib/dry/types/constrained/coercible.rb +36 -6
  21. data/lib/dry/types/constraints.rb +18 -4
  22. data/lib/dry/types/constructor.rb +127 -54
  23. data/lib/dry/types/constructor/function.rb +216 -0
  24. data/lib/dry/types/constructor/wrapper.rb +94 -0
  25. data/lib/dry/types/container.rb +7 -0
  26. data/lib/dry/types/core.rb +54 -21
  27. data/lib/dry/types/decorator.rb +38 -17
  28. data/lib/dry/types/default.rb +61 -16
  29. data/lib/dry/types/enum.rb +43 -20
  30. data/lib/dry/types/errors.rb +75 -9
  31. data/lib/dry/types/extensions.rb +7 -1
  32. data/lib/dry/types/extensions/maybe.rb +74 -16
  33. data/lib/dry/types/extensions/monads.rb +29 -0
  34. data/lib/dry/types/fn_container.rb +6 -1
  35. data/lib/dry/types/hash.rb +86 -67
  36. data/lib/dry/types/hash/constructor.rb +33 -0
  37. data/lib/dry/types/inflector.rb +3 -1
  38. data/lib/dry/types/json.rb +18 -16
  39. data/lib/dry/types/lax.rb +75 -0
  40. data/lib/dry/types/map.rb +76 -33
  41. data/lib/dry/types/meta.rb +51 -0
  42. data/lib/dry/types/module.rb +120 -0
  43. data/lib/dry/types/nominal.rb +210 -0
  44. data/lib/dry/types/options.rb +13 -26
  45. data/lib/dry/types/params.rb +39 -25
  46. data/lib/dry/types/predicate_inferrer.rb +238 -0
  47. data/lib/dry/types/predicate_registry.rb +34 -0
  48. data/lib/dry/types/primitive_inferrer.rb +97 -0
  49. data/lib/dry/types/printable.rb +16 -0
  50. data/lib/dry/types/printer.rb +315 -0
  51. data/lib/dry/types/result.rb +29 -3
  52. data/lib/dry/types/schema.rb +408 -0
  53. data/lib/dry/types/schema/key.rb +156 -0
  54. data/lib/dry/types/spec/types.rb +103 -33
  55. data/lib/dry/types/sum.rb +84 -35
  56. data/lib/dry/types/type.rb +49 -0
  57. data/lib/dry/types/version.rb +3 -1
  58. metadata +68 -79
  59. data/.gitignore +0 -10
  60. data/.rspec +0 -2
  61. data/.travis.yml +0 -29
  62. data/.yardopts +0 -5
  63. data/CONTRIBUTING.md +0 -29
  64. data/Gemfile +0 -24
  65. data/Rakefile +0 -20
  66. data/benchmarks/hash_schemas.rb +0 -51
  67. data/lib/dry/types/compat/form_types.rb +0 -27
  68. data/lib/dry/types/compat/int.rb +0 -14
  69. data/lib/dry/types/definition.rb +0 -113
  70. data/lib/dry/types/hash/schema.rb +0 -199
  71. data/lib/dry/types/hash/schema_builder.rb +0 -75
  72. data/lib/dry/types/safe.rb +0 -59
@@ -1,6 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "dry/core/deprecations"
4
+
1
5
  module Dry
2
6
  module Types
7
+ # Common Type module denoting an object is a Type
8
+ #
9
+ # @api public
3
10
  module Type
11
+ extend ::Dry::Core::Deprecations[:'dry-types']
12
+
13
+ deprecate(:safe, :lax)
14
+
15
+ # Whether a value is a valid member of the type
16
+ #
17
+ # @return [Boolean]
18
+ #
19
+ # @api private
20
+ def valid?(input = Undefined)
21
+ call_safe(input) { return false }
22
+ true
23
+ end
24
+ # Anything can be coerced matches
25
+ alias_method :===, :valid?
26
+
27
+ # Apply type to a value
28
+ #
29
+ # @overload call(input = Undefined)
30
+ # Possibly unsafe coercion attempt. If a value doesn't
31
+ # match the type, an exception will be raised.
32
+ #
33
+ # @param [Object] input
34
+ # @return [Object]
35
+ #
36
+ # @overload call(input = Undefined)
37
+ # When a block is passed, {#call} will never throw an exception on
38
+ # failed coercion, instead it will call the block.
39
+ #
40
+ # @param [Object] input
41
+ # @yieldparam [Object] output Partially coerced value
42
+ # @return [Object]
43
+ #
44
+ # @api public
45
+ def call(input = Undefined, &block)
46
+ if block_given?
47
+ call_safe(input, &block)
48
+ else
49
+ call_unsafe(input)
50
+ end
51
+ end
52
+ alias_method :[], :call
4
53
  end
5
54
  end
6
55
  end
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Dry
2
4
  module Types
3
- VERSION = '0.13.2'.freeze
5
+ VERSION = "1.5.1"
4
6
  end
5
7
  end
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: 0.13.2
4
+ version: 1.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Piotr Solnica
8
8
  autorequire:
9
- bindir: exe
9
+ bindir: bin
10
10
  cert_chain: []
11
- date: 2018-05-30 00:00:00.000000000 Z
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,187 +25,166 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: dry-core
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.4'
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.4'
44
- - - ">="
45
- - !ruby/object:Gem::Version
46
- version: 0.4.4
40
+ version: '0.3'
47
41
  - !ruby/object:Gem::Dependency
48
- name: dry-inflector
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.1'
47
+ version: '0.5'
54
48
  - - ">="
55
49
  - !ruby/object:Gem::Version
56
- version: 0.1.2
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.1'
57
+ version: '0.5'
64
58
  - - ">="
65
59
  - !ruby/object:Gem::Version
66
- version: 0.1.2
60
+ version: '0.5'
67
61
  - !ruby/object:Gem::Dependency
68
- name: dry-container
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.3'
74
- type: :runtime
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: '0.2'
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.2'
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
85
  - - "~>"
100
86
  - !ruby/object:Gem::Version
101
- version: '0.4'
87
+ version: '1.0'
102
88
  - - ">="
103
89
  - !ruby/object:Gem::Version
104
- version: 0.4.2
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
95
  - - "~>"
110
96
  - !ruby/object:Gem::Version
111
- version: '0.4'
97
+ version: '1.0'
112
98
  - - ">="
113
99
  - !ruby/object:Gem::Version
114
- version: 0.4.2
100
+ version: 1.0.2
115
101
  - !ruby/object:Gem::Dependency
116
102
  name: bundler
117
103
  requirement: !ruby/object:Gem::Requirement
118
104
  requirements:
119
- - - "~>"
105
+ - - ">="
120
106
  - !ruby/object:Gem::Version
121
- version: '1.6'
107
+ version: '0'
122
108
  type: :development
123
109
  prerelease: false
124
110
  version_requirements: !ruby/object:Gem::Requirement
125
111
  requirements:
126
- - - "~>"
112
+ - - ">="
127
113
  - !ruby/object:Gem::Version
128
- version: '1.6'
114
+ version: '0'
129
115
  - !ruby/object:Gem::Dependency
130
- name: rake
116
+ name: dry-monads
131
117
  requirement: !ruby/object:Gem::Requirement
132
118
  requirements:
133
119
  - - "~>"
134
120
  - !ruby/object:Gem::Version
135
- version: '11.0'
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: '11.0'
128
+ version: '1.0'
143
129
  - !ruby/object:Gem::Dependency
144
- name: rspec
130
+ name: rake
145
131
  requirement: !ruby/object:Gem::Requirement
146
132
  requirements:
147
- - - "~>"
133
+ - - ">="
148
134
  - !ruby/object:Gem::Version
149
- version: '3.3'
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: '3.3'
142
+ version: '0'
157
143
  - !ruby/object:Gem::Dependency
158
- name: dry-monads
144
+ name: rspec
159
145
  requirement: !ruby/object:Gem::Requirement
160
146
  requirements:
161
- - - "~>"
147
+ - - ">="
162
148
  - !ruby/object:Gem::Version
163
- version: '0.2'
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.2'
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.9.5
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.9.5
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,43 +192,54 @@ 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/schema.rb
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/safe.rb
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
- - log/.gitkeep
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:
252
239
  allowed_push_host: https://rubygems.org
240
+ changelog_uri: https://github.com/dry-rb/dry-types/blob/master/CHANGELOG.md
241
+ source_code_uri: https://github.com/dry-rb/dry-types
242
+ bug_tracker_uri: https://github.com/dry-rb/dry-types/issues
253
243
  post_install_message:
254
244
  rdoc_options: []
255
245
  require_paths:
@@ -258,17 +248,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
258
248
  requirements:
259
249
  - - ">="
260
250
  - !ruby/object:Gem::Version
261
- version: 2.2.0
251
+ version: 2.5.0
262
252
  required_rubygems_version: !ruby/object:Gem::Requirement
263
253
  requirements:
264
254
  - - ">="
265
255
  - !ruby/object:Gem::Version
266
256
  version: '0'
267
257
  requirements: []
268
- rubyforge_project:
269
- rubygems_version: 2.7.6
258
+ rubygems_version: 3.1.4
270
259
  signing_key:
271
260
  specification_version: 4
272
261
  summary: Type system for Ruby supporting coercions, constraints and complex types
273
- like structs, value objects, enums etc.
262
+ like structs, value objects, enums etc
274
263
  test_files: []
data/.gitignore DELETED
@@ -1,10 +0,0 @@
1
- /.bundle/
2
- /.yardoc
3
- /Gemfile.lock
4
- /_yardoc/
5
- /coverage/
6
- /doc/
7
- /pkg/
8
- /spec/reports/
9
- /tmp/
10
- log/
data/.rspec DELETED
@@ -1,2 +0,0 @@
1
- --color
2
- --require ./spec/spec_helper
data/.travis.yml DELETED
@@ -1,29 +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
- before_install:
9
- - gem update --system
10
- after_success:
11
- - '[ -d coverage ] && bundle exec codeclimate-test-reporter'
12
- rvm:
13
- - 2.2.9
14
- - 2.3.6
15
- - 2.4.3
16
- - 2.5.0
17
- - jruby-9.1.15.0
18
- env:
19
- global:
20
- - COVERAGE=true
21
- - JRUBY_OPTS='--dev -J-Xmx1024M'
22
- notifications:
23
- email: false
24
- webhooks:
25
- urls:
26
- - https://webhooks.gitter.im/e/19098b4253a72c9796db
27
- on_success: change # options: [always|never|change] default: always
28
- on_failure: always # options: [always|never|change] default: always
29
- on_start: false # default: false
data/.yardopts DELETED
@@ -1,5 +0,0 @@
1
- --title 'dry-types'
2
- --markup markdown
3
- --readme README.md
4
- --private
5
- lib/**/*.rb