dry-types 0.14.1 → 1.5.1

Sign up to get free protection for your applications and to get access to all the features.
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'