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.
Files changed (73) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +631 -134
  3. data/LICENSE +17 -17
  4. data/README.md +15 -13
  5. data/dry-types.gemspec +27 -30
  6. data/lib/dry/types/any.rb +32 -12
  7. data/lib/dry/types/array/constructor.rb +32 -0
  8. data/lib/dry/types/array/member.rb +75 -16
  9. data/lib/dry/types/array.rb +19 -6
  10. data/lib/dry/types/builder.rb +131 -15
  11. data/lib/dry/types/builder_methods.rb +49 -20
  12. data/lib/dry/types/coercions/json.rb +43 -7
  13. data/lib/dry/types/coercions/params.rb +118 -31
  14. data/lib/dry/types/coercions.rb +76 -22
  15. data/lib/dry/types/compat.rb +0 -2
  16. data/lib/dry/types/compiler.rb +56 -41
  17. data/lib/dry/types/constrained/coercible.rb +36 -6
  18. data/lib/dry/types/constrained.rb +81 -32
  19. data/lib/dry/types/constraints.rb +18 -4
  20. data/lib/dry/types/constructor/function.rb +216 -0
  21. data/lib/dry/types/constructor/wrapper.rb +94 -0
  22. data/lib/dry/types/constructor.rb +126 -56
  23. data/lib/dry/types/container.rb +7 -0
  24. data/lib/dry/types/core.rb +54 -21
  25. data/lib/dry/types/decorator.rb +38 -17
  26. data/lib/dry/types/default.rb +61 -16
  27. data/lib/dry/types/enum.rb +43 -20
  28. data/lib/dry/types/errors.rb +75 -9
  29. data/lib/dry/types/extensions/maybe.rb +74 -16
  30. data/lib/dry/types/extensions/monads.rb +29 -0
  31. data/lib/dry/types/extensions.rb +7 -1
  32. data/lib/dry/types/fn_container.rb +6 -1
  33. data/lib/dry/types/hash/constructor.rb +33 -0
  34. data/lib/dry/types/hash.rb +86 -67
  35. data/lib/dry/types/inflector.rb +3 -1
  36. data/lib/dry/types/json.rb +18 -16
  37. data/lib/dry/types/lax.rb +75 -0
  38. data/lib/dry/types/map.rb +76 -33
  39. data/lib/dry/types/meta.rb +51 -0
  40. data/lib/dry/types/module.rb +120 -0
  41. data/lib/dry/types/nominal.rb +210 -0
  42. data/lib/dry/types/options.rb +13 -26
  43. data/lib/dry/types/params.rb +39 -25
  44. data/lib/dry/types/predicate_inferrer.rb +238 -0
  45. data/lib/dry/types/predicate_registry.rb +34 -0
  46. data/lib/dry/types/primitive_inferrer.rb +97 -0
  47. data/lib/dry/types/printable.rb +16 -0
  48. data/lib/dry/types/printer.rb +315 -0
  49. data/lib/dry/types/result.rb +29 -3
  50. data/lib/dry/types/schema/key.rb +156 -0
  51. data/lib/dry/types/schema.rb +408 -0
  52. data/lib/dry/types/spec/types.rb +103 -33
  53. data/lib/dry/types/sum.rb +84 -35
  54. data/lib/dry/types/type.rb +49 -0
  55. data/lib/dry/types/version.rb +3 -1
  56. data/lib/dry/types.rb +156 -76
  57. data/lib/dry-types.rb +3 -1
  58. metadata +65 -78
  59. data/.gitignore +0 -10
  60. data/.rspec +0 -2
  61. data/.travis.yml +0 -27
  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
  73. 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: 0.14.1
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: 2019-03-25 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,93 +25,79 @@ 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
- - - ">="
100
- - !ruby/object:Gem::Version
101
- version: '0.5'
102
85
  - - "~>"
103
86
  - !ruby/object:Gem::Version
104
- version: '0.5'
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.5'
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: 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,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/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:
@@ -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.3.0
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.0.1
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
@@ -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,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
@@ -1,5 +0,0 @@
1
- --title 'dry-types'
2
- --markup markdown
3
- --readme README.md
4
- --private
5
- lib/**/*.rb
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)
@@ -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
@@ -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
@@ -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'