dry-types 0.14.0 → 0.15.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.codeclimate.yml +15 -0
- data/.rubocop.yml +43 -0
- data/.travis.yml +2 -3
- data/CHANGELOG.md +119 -1
- data/Gemfile +2 -2
- data/benchmarks/hash_schemas.rb +5 -5
- data/dry-types.gemspec +2 -2
- data/lib/dry/types.rb +67 -45
- data/lib/dry/types/any.rb +11 -2
- data/lib/dry/types/array.rb +1 -4
- data/lib/dry/types/array/member.rb +2 -2
- data/lib/dry/types/builder.rb +23 -3
- data/lib/dry/types/builder_methods.rb +10 -11
- data/lib/dry/types/coercions/params.rb +2 -0
- data/lib/dry/types/compat.rb +0 -2
- data/lib/dry/types/compiler.rb +25 -33
- data/lib/dry/types/constrained.rb +5 -4
- data/lib/dry/types/constructor.rb +33 -12
- data/lib/dry/types/container.rb +2 -0
- data/lib/dry/types/core.rb +22 -12
- data/lib/dry/types/default.rb +4 -4
- data/lib/dry/types/enum.rb +10 -3
- data/lib/dry/types/errors.rb +1 -1
- data/lib/dry/types/extensions/maybe.rb +11 -1
- data/lib/dry/types/hash.rb +70 -63
- data/lib/dry/types/hash/constructor.rb +20 -0
- data/lib/dry/types/json.rb +7 -7
- data/lib/dry/types/map.rb +6 -1
- data/lib/dry/types/module.rb +115 -0
- data/lib/dry/types/{definition.rb → nominal.rb} +10 -4
- data/lib/dry/types/options.rb +2 -2
- data/lib/dry/types/params.rb +11 -11
- data/lib/dry/types/printable.rb +12 -0
- data/lib/dry/types/printer.rb +309 -0
- data/lib/dry/types/result.rb +2 -2
- data/lib/dry/types/safe.rb +4 -2
- data/lib/dry/types/schema.rb +298 -0
- data/lib/dry/types/schema/key.rb +130 -0
- data/lib/dry/types/spec/types.rb +12 -4
- data/lib/dry/types/sum.rb +14 -15
- data/lib/dry/types/version.rb +1 -1
- metadata +22 -12
- data/lib/dry/types/compat/form_types.rb +0 -27
- data/lib/dry/types/compat/int.rb +0 -14
- data/lib/dry/types/hash/schema.rb +0 -199
- data/lib/dry/types/hash/schema_builder.rb +0 -75
@@ -1,75 +0,0 @@
|
|
1
|
-
require 'dry/types/hash/schema'
|
2
|
-
require 'dry/types/fn_container'
|
3
|
-
|
4
|
-
module Dry
|
5
|
-
module Types
|
6
|
-
class Hash < Definition
|
7
|
-
# A bulder for legacy schemas
|
8
|
-
# @api private
|
9
|
-
class SchemaBuilder
|
10
|
-
NIL_TO_UNDEFINED = -> v { v.nil? ? Undefined : v }
|
11
|
-
OMITTABLE_KEYS = %i(schema weak symbolized).freeze
|
12
|
-
STRICT = %i(strict strict_with_defaults).freeze
|
13
|
-
|
14
|
-
# @param primitive [Type]
|
15
|
-
# @option options [Hash{Symbol => Definition}] :member_types
|
16
|
-
# @option options [Symbol] :hash_type
|
17
|
-
def call(primitive, **options)
|
18
|
-
hash_type = options.fetch(:hash_type)
|
19
|
-
member_types = {}
|
20
|
-
|
21
|
-
options.fetch(:member_types).each do |k, t|
|
22
|
-
member_types[k] = build_type(hash_type, t)
|
23
|
-
end
|
24
|
-
|
25
|
-
instantiate(primitive, **options, member_types: member_types)
|
26
|
-
end
|
27
|
-
|
28
|
-
def instantiate(primitive, hash_type: :base, meta: EMPTY_HASH, **options)
|
29
|
-
meta = meta.dup
|
30
|
-
|
31
|
-
meta[:strict] = true if strict?(hash_type)
|
32
|
-
meta[:key_transform_fn] = Schema::SYMBOLIZE_KEY if hash_type == :symbolized
|
33
|
-
|
34
|
-
Schema.new(primitive, **options, meta: meta)
|
35
|
-
end
|
36
|
-
|
37
|
-
private
|
38
|
-
|
39
|
-
def omittable?(constructor)
|
40
|
-
OMITTABLE_KEYS.include?(constructor)
|
41
|
-
end
|
42
|
-
|
43
|
-
def strict?(constructor)
|
44
|
-
STRICT.include?(constructor)
|
45
|
-
end
|
46
|
-
|
47
|
-
def build_type(constructor, type)
|
48
|
-
type = safe(constructor, type)
|
49
|
-
type = default(constructor, type) if type.default?
|
50
|
-
type = type.meta(omittable: true) if omittable?(constructor)
|
51
|
-
type
|
52
|
-
end
|
53
|
-
|
54
|
-
def safe(constructor, type)
|
55
|
-
if constructor == :weak || constructor == :symbolized
|
56
|
-
type.safe
|
57
|
-
else
|
58
|
-
type
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
def default(constructor, type)
|
63
|
-
case constructor
|
64
|
-
when :strict_with_defaults
|
65
|
-
type
|
66
|
-
when :strict
|
67
|
-
type.type
|
68
|
-
else
|
69
|
-
type.constructor(NIL_TO_UNDEFINED)
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|