dry-types 0.13.2 → 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.
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