dry-types 1.0.0 → 1.2.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/.codeclimate.yml +2 -5
- data/.github/ISSUE_TEMPLATE/----please-don-t-ask-for-support-via-issues.md +10 -0
- data/.github/ISSUE_TEMPLATE/---bug-report.md +34 -0
- data/.github/ISSUE_TEMPLATE/---feature-request.md +18 -0
- data/.github/workflows/custom_ci.yml +76 -0
- data/.github/workflows/docsite.yml +34 -0
- data/.github/workflows/sync_configs.yml +34 -0
- data/.gitignore +1 -1
- data/.rspec +3 -1
- data/.rubocop.yml +89 -0
- data/CHANGELOG.md +127 -3
- data/CODE_OF_CONDUCT.md +13 -0
- data/CONTRIBUTING.md +2 -2
- data/Gemfile +12 -6
- data/LICENSE +17 -17
- data/README.md +2 -2
- data/Rakefile +2 -2
- data/benchmarks/hash_schemas.rb +8 -6
- data/benchmarks/lax_schema.rb +0 -1
- data/benchmarks/profile_invalid_input.rb +1 -1
- data/benchmarks/profile_lax_schema_valid.rb +1 -1
- data/benchmarks/profile_valid_input.rb +1 -1
- data/docsite/source/array-with-member.html.md +13 -0
- data/docsite/source/built-in-types.html.md +116 -0
- data/docsite/source/constraints.html.md +31 -0
- data/docsite/source/custom-types.html.md +93 -0
- data/docsite/source/default-values.html.md +91 -0
- data/docsite/source/enum.html.md +69 -0
- data/docsite/source/extensions.html.md +15 -0
- data/docsite/source/extensions/maybe.html.md +57 -0
- data/docsite/source/extensions/monads.html.md +61 -0
- data/docsite/source/getting-started.html.md +57 -0
- data/docsite/source/hash-schemas.html.md +169 -0
- data/docsite/source/index.html.md +156 -0
- data/docsite/source/map.html.md +17 -0
- data/docsite/source/optional-values.html.md +35 -0
- data/docsite/source/sum.html.md +21 -0
- data/dry-types.gemspec +19 -19
- data/lib/dry/types.rb +9 -4
- data/lib/dry/types/any.rb +2 -2
- data/lib/dry/types/array.rb +6 -0
- data/lib/dry/types/array/constructor.rb +32 -0
- data/lib/dry/types/array/member.rb +10 -3
- data/lib/dry/types/builder.rb +2 -2
- data/lib/dry/types/builder_methods.rb +34 -8
- data/lib/dry/types/coercions.rb +19 -6
- data/lib/dry/types/coercions/params.rb +4 -4
- data/lib/dry/types/compiler.rb +2 -2
- data/lib/dry/types/constrained.rb +6 -1
- data/lib/dry/types/constructor.rb +10 -42
- data/lib/dry/types/constructor/function.rb +4 -5
- data/lib/dry/types/core.rb +27 -8
- data/lib/dry/types/decorator.rb +3 -2
- data/lib/dry/types/enum.rb +2 -1
- data/lib/dry/types/extensions.rb +4 -0
- data/lib/dry/types/extensions/maybe.rb +9 -1
- data/lib/dry/types/extensions/monads.rb +29 -0
- data/lib/dry/types/hash.rb +11 -12
- data/lib/dry/types/hash/constructor.rb +5 -5
- data/lib/dry/types/json.rb +4 -0
- data/lib/dry/types/lax.rb +4 -4
- data/lib/dry/types/map.rb +8 -4
- data/lib/dry/types/meta.rb +1 -1
- data/lib/dry/types/module.rb +6 -6
- data/lib/dry/types/nominal.rb +3 -4
- data/lib/dry/types/params.rb +9 -0
- data/lib/dry/types/predicate_inferrer.rb +197 -0
- data/lib/dry/types/predicate_registry.rb +34 -0
- data/lib/dry/types/primitive_inferrer.rb +97 -0
- data/lib/dry/types/printer.rb +17 -12
- data/lib/dry/types/schema.rb +16 -22
- data/lib/dry/types/schema/key.rb +19 -1
- data/lib/dry/types/spec/types.rb +6 -7
- data/lib/dry/types/sum.rb +2 -2
- data/lib/dry/types/version.rb +1 -1
- metadata +67 -35
- data/.travis.yml +0 -27
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'dry/logic/predicates'
|
4
|
+
|
5
|
+
module Dry
|
6
|
+
module Types
|
7
|
+
# A registry with predicate objects from `Dry::Logic::Predicates`
|
8
|
+
#
|
9
|
+
# @api private
|
10
|
+
class PredicateRegistry
|
11
|
+
# @api private
|
12
|
+
attr_reader :predicates
|
13
|
+
|
14
|
+
# @api private
|
15
|
+
attr_reader :has_predicate
|
16
|
+
|
17
|
+
# @api private
|
18
|
+
def initialize(predicates = Logic::Predicates)
|
19
|
+
@predicates = predicates
|
20
|
+
@has_predicate = ::Kernel.instance_method(:respond_to?).bind(@predicates)
|
21
|
+
end
|
22
|
+
|
23
|
+
# @api private
|
24
|
+
def [](name)
|
25
|
+
predicates[name]
|
26
|
+
end
|
27
|
+
|
28
|
+
# @api private
|
29
|
+
def key?(name)
|
30
|
+
has_predicate.(name)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,97 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'dry/core/cache'
|
4
|
+
|
5
|
+
module Dry
|
6
|
+
module Types
|
7
|
+
# PrimitiveInferrer returns the list of classes matching a type.
|
8
|
+
#
|
9
|
+
# @api public
|
10
|
+
class PrimitiveInferrer
|
11
|
+
extend Core::Cache
|
12
|
+
|
13
|
+
# Compiler reduces type AST into a list of primitives
|
14
|
+
#
|
15
|
+
# @api private
|
16
|
+
class Compiler
|
17
|
+
# @api private
|
18
|
+
def visit(node)
|
19
|
+
meth, rest = node
|
20
|
+
public_send(:"visit_#{meth}", rest)
|
21
|
+
end
|
22
|
+
|
23
|
+
# @api private
|
24
|
+
def visit_nominal(node)
|
25
|
+
type, _ = node
|
26
|
+
type
|
27
|
+
end
|
28
|
+
|
29
|
+
# @api private
|
30
|
+
def visit_hash(_)
|
31
|
+
::Hash
|
32
|
+
end
|
33
|
+
alias_method :visit_schema, :visit_hash
|
34
|
+
|
35
|
+
# @api private
|
36
|
+
def visit_array(_)
|
37
|
+
::Array
|
38
|
+
end
|
39
|
+
|
40
|
+
# @api private
|
41
|
+
def visit_lax(node)
|
42
|
+
visit(node)
|
43
|
+
end
|
44
|
+
|
45
|
+
# @api private
|
46
|
+
def visit_constructor(node)
|
47
|
+
other, * = node
|
48
|
+
visit(other)
|
49
|
+
end
|
50
|
+
|
51
|
+
# @api private
|
52
|
+
def visit_enum(node)
|
53
|
+
other, * = node
|
54
|
+
visit(other)
|
55
|
+
end
|
56
|
+
|
57
|
+
# @api private
|
58
|
+
def visit_sum(node)
|
59
|
+
left, right = node
|
60
|
+
|
61
|
+
[visit(left), visit(right)].flatten(1)
|
62
|
+
end
|
63
|
+
|
64
|
+
# @api private
|
65
|
+
def visit_constrained(node)
|
66
|
+
other, * = node
|
67
|
+
visit(other)
|
68
|
+
end
|
69
|
+
|
70
|
+
# @api private
|
71
|
+
def visit_any(_)
|
72
|
+
::Object
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
# @return [Compiler]
|
77
|
+
# @api private
|
78
|
+
attr_reader :compiler
|
79
|
+
|
80
|
+
# @api private
|
81
|
+
def initialize
|
82
|
+
@compiler = Compiler.new
|
83
|
+
end
|
84
|
+
|
85
|
+
# Infer primitives from the provided type
|
86
|
+
#
|
87
|
+
# @return [Array[Class]]
|
88
|
+
#
|
89
|
+
# @api private
|
90
|
+
def [](type)
|
91
|
+
self.class.fetch_or_store(type) do
|
92
|
+
Array(compiler.visit(type.to_ast)).freeze
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
data/lib/dry/types/printer.rb
CHANGED
@@ -8,6 +8,7 @@ module Dry
|
|
8
8
|
Nominal => :visit_nominal,
|
9
9
|
Constructor => :visit_constructor,
|
10
10
|
Hash::Constructor => :visit_constructor,
|
11
|
+
Array::Constructor => :visit_constructor,
|
11
12
|
Constrained => :visit_constrained,
|
12
13
|
Constrained::Coercible => :visit_constrained,
|
13
14
|
Hash => :visit_hash,
|
@@ -26,7 +27,7 @@ module Dry
|
|
26
27
|
}
|
27
28
|
|
28
29
|
def call(type)
|
29
|
-
output =
|
30
|
+
output = ''.dup
|
30
31
|
visit(type) { |str| output << str }
|
31
32
|
"#<Dry::Types[#{output}]>"
|
32
33
|
end
|
@@ -43,16 +44,20 @@ module Dry
|
|
43
44
|
end
|
44
45
|
|
45
46
|
def visit_any(_)
|
46
|
-
yield
|
47
|
+
yield 'Any'
|
47
48
|
end
|
48
49
|
|
49
|
-
def visit_array(
|
50
|
-
|
50
|
+
def visit_array(type)
|
51
|
+
visit_options(EMPTY_HASH, type.meta) do |opts|
|
52
|
+
yield "Array#{opts}"
|
53
|
+
end
|
51
54
|
end
|
52
55
|
|
53
56
|
def visit_array_member(array)
|
54
57
|
visit(array.member) do |type|
|
55
|
-
|
58
|
+
visit_options(EMPTY_HASH, array.meta) do |opts|
|
59
|
+
yield "Array<#{type}#{opts}>"
|
60
|
+
end
|
56
61
|
end
|
57
62
|
end
|
58
63
|
|
@@ -74,7 +79,7 @@ module Dry
|
|
74
79
|
options = constrained.options.dup
|
75
80
|
rule = options.delete(:rule)
|
76
81
|
|
77
|
-
visit_options(options) do |
|
82
|
+
visit_options(options) do |_opts|
|
78
83
|
yield "Constrained<#{type} rule=[#{rule}]>"
|
79
84
|
end
|
80
85
|
end
|
@@ -110,7 +115,7 @@ module Dry
|
|
110
115
|
header = "Schema<#{schema_parameters}keys={"
|
111
116
|
|
112
117
|
if size.zero?
|
113
|
-
yield "#{
|
118
|
+
yield "#{header}}>"
|
114
119
|
else
|
115
120
|
yield header.dup << keys.map { |key|
|
116
121
|
visit(key) { |type| type }
|
@@ -126,7 +131,7 @@ module Dry
|
|
126
131
|
options.delete(:key_type)
|
127
132
|
options.delete(:value_type)
|
128
133
|
|
129
|
-
visit_options(options) do |
|
134
|
+
visit_options(options) do |_opts|
|
130
135
|
yield "Map<#{key} => #{value}>"
|
131
136
|
end
|
132
137
|
end
|
@@ -193,7 +198,7 @@ module Dry
|
|
193
198
|
yield "Enum<#{type} values={#{values}}#{opts}>"
|
194
199
|
else
|
195
200
|
mapping_str = mapping.map { |key, value|
|
196
|
-
"#{
|
201
|
+
"#{key.inspect}=>#{value.inspect}"
|
197
202
|
}.join(', ')
|
198
203
|
yield "Enum<#{type} mapping={#{mapping_str}}#{opts}>"
|
199
204
|
end
|
@@ -251,14 +256,14 @@ module Dry
|
|
251
256
|
|
252
257
|
case fn
|
253
258
|
when Method
|
254
|
-
yield "#{
|
259
|
+
yield "#{fn.receiver}.#{fn.name}"
|
255
260
|
when Proc
|
256
261
|
path, line = fn.source_location
|
257
262
|
|
258
|
-
if line
|
263
|
+
if line&.zero?
|
259
264
|
yield ".#{path}"
|
260
265
|
elsif path
|
261
|
-
yield "#{path.sub(Dir.pwd + '/', EMPTY_STRING)
|
266
|
+
yield "#{path.sub(Dir.pwd + '/', EMPTY_STRING)}:#{line}"
|
262
267
|
elsif fn.lambda?
|
263
268
|
yield '(lambda)'
|
264
269
|
else
|
data/lib/dry/types/schema.rb
CHANGED
@@ -156,8 +156,8 @@ module Dry
|
|
156
156
|
[
|
157
157
|
:schema,
|
158
158
|
[keys.map { |key| key.to_ast(meta: meta) },
|
159
|
-
|
160
|
-
|
159
|
+
opts,
|
160
|
+
meta ? self.meta : EMPTY_HASH]
|
161
161
|
]
|
162
162
|
end
|
163
163
|
|
@@ -175,8 +175,8 @@ module Dry
|
|
175
175
|
# @return [Schema]
|
176
176
|
#
|
177
177
|
# @api public
|
178
|
-
def strict
|
179
|
-
with(strict:
|
178
|
+
def strict(strict = true)
|
179
|
+
with(strict: strict)
|
180
180
|
end
|
181
181
|
|
182
182
|
# Injects a key transformation function
|
@@ -190,9 +190,7 @@ module Dry
|
|
190
190
|
def with_key_transform(proc = nil, &block)
|
191
191
|
fn = proc || block
|
192
192
|
|
193
|
-
if fn.nil?
|
194
|
-
raise ArgumentError, "a block or callable argument is required"
|
195
|
-
end
|
193
|
+
raise ArgumentError, 'a block or callable argument is required' if fn.nil?
|
196
194
|
|
197
195
|
handle = Dry::Types::FnContainer.register(fn)
|
198
196
|
with(key_transform_fn: handle)
|
@@ -203,7 +201,7 @@ module Dry
|
|
203
201
|
# @return [Boolean]
|
204
202
|
#
|
205
203
|
# @api public
|
206
|
-
def
|
204
|
+
def transform_keys?
|
207
205
|
!options[:key_transform_fn].nil?
|
208
206
|
end
|
209
207
|
|
@@ -294,10 +292,10 @@ module Dry
|
|
294
292
|
#
|
295
293
|
# @api private
|
296
294
|
def merge_keys(*keys)
|
297
|
-
keys
|
298
|
-
flatten(1)
|
299
|
-
each_with_object({}) { |key, merged| merged[key.name] = key }
|
300
|
-
values
|
295
|
+
keys
|
296
|
+
.flatten(1)
|
297
|
+
.each_with_object({}) { |key, merged| merged[key.name] = key }
|
298
|
+
.values
|
301
299
|
end
|
302
300
|
|
303
301
|
# Validate and coerce a hash. Raise an exception on any error
|
@@ -315,19 +313,17 @@ module Dry
|
|
315
313
|
if type
|
316
314
|
begin
|
317
315
|
result[k] = type.call_unsafe(value)
|
318
|
-
rescue ConstraintError =>
|
319
|
-
raise SchemaError.new(type.name, value,
|
320
|
-
rescue CoercionError =>
|
321
|
-
raise SchemaError.new(type.name, value,
|
316
|
+
rescue ConstraintError => e
|
317
|
+
raise SchemaError.new(type.name, value, e.result)
|
318
|
+
rescue CoercionError => e
|
319
|
+
raise SchemaError.new(type.name, value, e.message)
|
322
320
|
end
|
323
321
|
elsif strict?
|
324
322
|
raise unexpected_keys(hash.keys)
|
325
323
|
end
|
326
324
|
end
|
327
325
|
|
328
|
-
if result.size < keys.size
|
329
|
-
resolve_missing_keys(result, options)
|
330
|
-
end
|
326
|
+
resolve_missing_keys(result, options) if result.size < keys.size
|
331
327
|
|
332
328
|
result
|
333
329
|
end
|
@@ -351,9 +347,7 @@ module Dry
|
|
351
347
|
end
|
352
348
|
end
|
353
349
|
|
354
|
-
if result.size < keys.size
|
355
|
-
resolve_missing_keys(result, options, &block)
|
356
|
-
end
|
350
|
+
resolve_missing_keys(result, options, &block) if result.size < keys.size
|
357
351
|
|
358
352
|
result
|
359
353
|
end
|
data/lib/dry/types/schema/key.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'dry/equalizer'
|
4
|
+
require 'dry/core/deprecations'
|
4
5
|
|
5
6
|
module Dry
|
6
7
|
module Types
|
@@ -14,6 +15,7 @@ module Dry
|
|
14
15
|
#
|
15
16
|
# @see Dry::Types::Schema
|
16
17
|
class Key
|
18
|
+
extend ::Dry::Core::Deprecations[:'dry-types']
|
17
19
|
include Type
|
18
20
|
include Dry::Equalizer(:name, :type, :options, inspect: false)
|
19
21
|
include Decorator
|
@@ -94,7 +96,7 @@ module Dry
|
|
94
96
|
#
|
95
97
|
# @api public
|
96
98
|
def lax
|
97
|
-
|
99
|
+
__new__(type.lax).required(false)
|
98
100
|
end
|
99
101
|
|
100
102
|
# Dump to internal AST representation
|
@@ -113,6 +115,22 @@ module Dry
|
|
113
115
|
]
|
114
116
|
end
|
115
117
|
|
118
|
+
# @see Dry::Types::Meta#meta
|
119
|
+
#
|
120
|
+
# @api public
|
121
|
+
def meta(data = nil)
|
122
|
+
if data.nil? || !data.key?(:omittable)
|
123
|
+
super
|
124
|
+
else
|
125
|
+
self.class.warn(
|
126
|
+
'Using meta for making schema keys is deprecated, ' \
|
127
|
+
'please use .omittable or .required(false) instead' \
|
128
|
+
"\n" + Core::Deprecations::STACK.()
|
129
|
+
)
|
130
|
+
super.required(!data[:omittable])
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
116
134
|
private
|
117
135
|
|
118
136
|
# @api private
|
data/lib/dry/types/spec/types.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
RSpec.shared_examples_for 'Dry::Types::Nominal without primitive' do
|
4
4
|
def be_boolean
|
5
|
-
satisfy { |x| x == true || x == false
|
5
|
+
satisfy { |x| x == true || x == false }
|
6
6
|
end
|
7
7
|
|
8
8
|
describe '#constrained?' do
|
@@ -43,9 +43,7 @@ RSpec.shared_examples_for 'Dry::Types::Nominal without primitive' do
|
|
43
43
|
|
44
44
|
describe '#to_s' do
|
45
45
|
it 'returns a custom string representation' do
|
46
|
-
if type.class.name.start_with?('Dry::Types')
|
47
|
-
expect(type.to_s).to start_with('#<Dry::Types')
|
48
|
-
end
|
46
|
+
expect(type.to_s).to start_with('#<Dry::Types') if type.class.name.start_with?('Dry::Types')
|
49
47
|
end
|
50
48
|
end
|
51
49
|
|
@@ -81,7 +79,7 @@ RSpec.shared_examples_for 'Dry::Types::Nominal#meta' do
|
|
81
79
|
expect(type.meta).not_to have_key :immutable_test
|
82
80
|
derived = type.meta(immutable_test: 1)
|
83
81
|
expect(derived.meta).to be_frozen
|
84
|
-
expect(derived.meta).to eql(
|
82
|
+
expect(derived.meta).to eql(immutable_test: 1)
|
85
83
|
expect(type.meta).not_to have_key :immutable_test
|
86
84
|
end
|
87
85
|
end
|
@@ -111,7 +109,9 @@ RSpec.shared_examples_for Dry::Types::Nominal do
|
|
111
109
|
end
|
112
110
|
end
|
113
111
|
|
114
|
-
RSpec.shared_examples_for 'a constrained type' do |inputs: Object.new|
|
112
|
+
RSpec.shared_examples_for 'a constrained type' do |options = { inputs: Object.new }|
|
113
|
+
inputs = options[:inputs]
|
114
|
+
|
115
115
|
let(:fallback) { Object.new }
|
116
116
|
|
117
117
|
describe '#call' do
|
@@ -139,4 +139,3 @@ RSpec.shared_examples_for 'a nominal type' do |inputs: Object.new|
|
|
139
139
|
end
|
140
140
|
end
|
141
141
|
end
|
142
|
-
|
data/lib/dry/types/sum.rb
CHANGED
@@ -40,7 +40,7 @@ module Dry
|
|
40
40
|
# @param [Hash] options
|
41
41
|
#
|
42
42
|
# @api private
|
43
|
-
def initialize(left, right, options
|
43
|
+
def initialize(left, right, **options)
|
44
44
|
super
|
45
45
|
@left, @right = left, right
|
46
46
|
freeze
|
@@ -146,7 +146,7 @@ module Dry
|
|
146
146
|
if data.nil?
|
147
147
|
optional? ? right.meta : super
|
148
148
|
elsif optional?
|
149
|
-
self.class.new(left, right.meta(data), options)
|
149
|
+
self.class.new(left, right.meta(data), **options)
|
150
150
|
else
|
151
151
|
super
|
152
152
|
end
|
data/lib/dry/types/version.rb
CHANGED
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: 1.
|
4
|
+
version: 1.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Piotr Solnica
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-11-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: concurrent-ruby
|
@@ -25,79 +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.4'
|
54
48
|
- - ">="
|
55
49
|
- !ruby/object:Gem::Version
|
56
|
-
version: 0.
|
50
|
+
version: 0.4.4
|
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.4'
|
64
58
|
- - ">="
|
65
59
|
- !ruby/object:Gem::Version
|
66
|
-
version: 0.
|
60
|
+
version: 0.4.4
|
67
61
|
- !ruby/object:Gem::Dependency
|
68
|
-
name: dry-
|
62
|
+
name: dry-equalizer
|
69
63
|
requirement: !ruby/object:Gem::Requirement
|
70
64
|
requirements:
|
71
65
|
- - "~>"
|
72
66
|
- !ruby/object:Gem::Version
|
73
|
-
version: '0.
|
67
|
+
version: '0.2'
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: 0.2.2
|
74
71
|
type: :runtime
|
75
72
|
prerelease: false
|
76
73
|
version_requirements: !ruby/object:Gem::Requirement
|
77
74
|
requirements:
|
78
75
|
- - "~>"
|
79
76
|
- !ruby/object:Gem::Version
|
80
|
-
version: '0.
|
77
|
+
version: '0.2'
|
78
|
+
- - ">="
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: 0.2.2
|
81
81
|
- !ruby/object:Gem::Dependency
|
82
|
-
name: dry-
|
82
|
+
name: dry-inflector
|
83
83
|
requirement: !ruby/object:Gem::Requirement
|
84
84
|
requirements:
|
85
85
|
- - "~>"
|
86
86
|
- !ruby/object:Gem::Version
|
87
|
-
version: '0.
|
87
|
+
version: '0.1'
|
88
88
|
- - ">="
|
89
89
|
- !ruby/object:Gem::Version
|
90
|
-
version: 0.
|
90
|
+
version: 0.1.2
|
91
91
|
type: :runtime
|
92
92
|
prerelease: false
|
93
93
|
version_requirements: !ruby/object:Gem::Requirement
|
94
94
|
requirements:
|
95
95
|
- - "~>"
|
96
96
|
- !ruby/object:Gem::Version
|
97
|
-
version: '0.
|
97
|
+
version: '0.1'
|
98
98
|
- - ">="
|
99
99
|
- !ruby/object:Gem::Version
|
100
|
-
version: 0.
|
100
|
+
version: 0.1.2
|
101
101
|
- !ruby/object:Gem::Dependency
|
102
102
|
name: dry-logic
|
103
103
|
requirement: !ruby/object:Gem::Requirement
|
@@ -105,6 +105,9 @@ dependencies:
|
|
105
105
|
- - "~>"
|
106
106
|
- !ruby/object:Gem::Version
|
107
107
|
version: '1.0'
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 1.0.2
|
108
111
|
type: :runtime
|
109
112
|
prerelease: false
|
110
113
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -112,6 +115,9 @@ dependencies:
|
|
112
115
|
- - "~>"
|
113
116
|
- !ruby/object:Gem::Version
|
114
117
|
version: '1.0'
|
118
|
+
- - ">="
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: 1.0.2
|
115
121
|
- !ruby/object:Gem::Dependency
|
116
122
|
name: bundler
|
117
123
|
requirement: !ruby/object:Gem::Requirement
|
@@ -127,47 +133,47 @@ dependencies:
|
|
127
133
|
- !ruby/object:Gem::Version
|
128
134
|
version: '0'
|
129
135
|
- !ruby/object:Gem::Dependency
|
130
|
-
name:
|
136
|
+
name: dry-monads
|
131
137
|
requirement: !ruby/object:Gem::Requirement
|
132
138
|
requirements:
|
133
139
|
- - "~>"
|
134
140
|
- !ruby/object:Gem::Version
|
135
|
-
version: '
|
141
|
+
version: '0.2'
|
136
142
|
type: :development
|
137
143
|
prerelease: false
|
138
144
|
version_requirements: !ruby/object:Gem::Requirement
|
139
145
|
requirements:
|
140
146
|
- - "~>"
|
141
147
|
- !ruby/object:Gem::Version
|
142
|
-
version: '
|
148
|
+
version: '0.2'
|
143
149
|
- !ruby/object:Gem::Dependency
|
144
|
-
name:
|
150
|
+
name: rake
|
145
151
|
requirement: !ruby/object:Gem::Requirement
|
146
152
|
requirements:
|
147
153
|
- - "~>"
|
148
154
|
- !ruby/object:Gem::Version
|
149
|
-
version: '
|
155
|
+
version: '11.0'
|
150
156
|
type: :development
|
151
157
|
prerelease: false
|
152
158
|
version_requirements: !ruby/object:Gem::Requirement
|
153
159
|
requirements:
|
154
160
|
- - "~>"
|
155
161
|
- !ruby/object:Gem::Version
|
156
|
-
version: '
|
162
|
+
version: '11.0'
|
157
163
|
- !ruby/object:Gem::Dependency
|
158
|
-
name:
|
164
|
+
name: rspec
|
159
165
|
requirement: !ruby/object:Gem::Requirement
|
160
166
|
requirements:
|
161
167
|
- - "~>"
|
162
168
|
- !ruby/object:Gem::Version
|
163
|
-
version: '
|
169
|
+
version: '3.3'
|
164
170
|
type: :development
|
165
171
|
prerelease: false
|
166
172
|
version_requirements: !ruby/object:Gem::Requirement
|
167
173
|
requirements:
|
168
174
|
- - "~>"
|
169
175
|
- !ruby/object:Gem::Version
|
170
|
-
version: '
|
176
|
+
version: '3.3'
|
171
177
|
- !ruby/object:Gem::Dependency
|
172
178
|
name: yard
|
173
179
|
requirement: !ruby/object:Gem::Requirement
|
@@ -191,12 +197,18 @@ extensions: []
|
|
191
197
|
extra_rdoc_files: []
|
192
198
|
files:
|
193
199
|
- ".codeclimate.yml"
|
200
|
+
- ".github/ISSUE_TEMPLATE/----please-don-t-ask-for-support-via-issues.md"
|
201
|
+
- ".github/ISSUE_TEMPLATE/---bug-report.md"
|
202
|
+
- ".github/ISSUE_TEMPLATE/---feature-request.md"
|
203
|
+
- ".github/workflows/custom_ci.yml"
|
204
|
+
- ".github/workflows/docsite.yml"
|
205
|
+
- ".github/workflows/sync_configs.yml"
|
194
206
|
- ".gitignore"
|
195
207
|
- ".rspec"
|
196
208
|
- ".rubocop.yml"
|
197
|
-
- ".travis.yml"
|
198
209
|
- ".yardopts"
|
199
210
|
- CHANGELOG.md
|
211
|
+
- CODE_OF_CONDUCT.md
|
200
212
|
- CONTRIBUTING.md
|
201
213
|
- Gemfile
|
202
214
|
- LICENSE
|
@@ -209,11 +221,27 @@ files:
|
|
209
221
|
- benchmarks/profile_valid_input.rb
|
210
222
|
- benchmarks/schema_valid_vs_invalid.rb
|
211
223
|
- benchmarks/setup.rb
|
224
|
+
- docsite/source/array-with-member.html.md
|
225
|
+
- docsite/source/built-in-types.html.md
|
226
|
+
- docsite/source/constraints.html.md
|
227
|
+
- docsite/source/custom-types.html.md
|
228
|
+
- docsite/source/default-values.html.md
|
229
|
+
- docsite/source/enum.html.md
|
230
|
+
- docsite/source/extensions.html.md
|
231
|
+
- docsite/source/extensions/maybe.html.md
|
232
|
+
- docsite/source/extensions/monads.html.md
|
233
|
+
- docsite/source/getting-started.html.md
|
234
|
+
- docsite/source/hash-schemas.html.md
|
235
|
+
- docsite/source/index.html.md
|
236
|
+
- docsite/source/map.html.md
|
237
|
+
- docsite/source/optional-values.html.md
|
238
|
+
- docsite/source/sum.html.md
|
212
239
|
- dry-types.gemspec
|
213
240
|
- lib/dry-types.rb
|
214
241
|
- lib/dry/types.rb
|
215
242
|
- lib/dry/types/any.rb
|
216
243
|
- lib/dry/types/array.rb
|
244
|
+
- lib/dry/types/array/constructor.rb
|
217
245
|
- lib/dry/types/array/member.rb
|
218
246
|
- lib/dry/types/builder.rb
|
219
247
|
- lib/dry/types/builder_methods.rb
|
@@ -235,6 +263,7 @@ files:
|
|
235
263
|
- lib/dry/types/errors.rb
|
236
264
|
- lib/dry/types/extensions.rb
|
237
265
|
- lib/dry/types/extensions/maybe.rb
|
266
|
+
- lib/dry/types/extensions/monads.rb
|
238
267
|
- lib/dry/types/fn_container.rb
|
239
268
|
- lib/dry/types/hash.rb
|
240
269
|
- lib/dry/types/hash/constructor.rb
|
@@ -247,6 +276,9 @@ files:
|
|
247
276
|
- lib/dry/types/nominal.rb
|
248
277
|
- lib/dry/types/options.rb
|
249
278
|
- lib/dry/types/params.rb
|
279
|
+
- lib/dry/types/predicate_inferrer.rb
|
280
|
+
- lib/dry/types/predicate_registry.rb
|
281
|
+
- lib/dry/types/primitive_inferrer.rb
|
250
282
|
- lib/dry/types/printable.rb
|
251
283
|
- lib/dry/types/printer.rb
|
252
284
|
- lib/dry/types/result.rb
|
@@ -280,7 +312,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
280
312
|
- !ruby/object:Gem::Version
|
281
313
|
version: '0'
|
282
314
|
requirements: []
|
283
|
-
rubygems_version: 3.0.
|
315
|
+
rubygems_version: 3.0.6
|
284
316
|
signing_key:
|
285
317
|
specification_version: 4
|
286
318
|
summary: Type system for Ruby supporting coercions, constraints and complex types
|