dry-types 0.12.3 → 0.13.0

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.
@@ -6,9 +6,9 @@ module Dry
6
6
 
7
7
  # @see Definition#initialize
8
8
  def initialize(*args, meta: EMPTY_HASH, **options)
9
- @__args__ = args
10
- @options = options
11
- @meta = meta
9
+ @__args__ = args.freeze
10
+ @options = options.freeze
11
+ @meta = meta.freeze
12
12
  end
13
13
 
14
14
  # @param [Hash] new_options
@@ -0,0 +1,53 @@
1
+ require 'dry/types/coercions/params'
2
+
3
+ module Dry
4
+ module Types
5
+ register('params.nil') do
6
+ self['nil'].constructor(Coercions::Params.method(:to_nil))
7
+ end
8
+
9
+ register('params.date') do
10
+ self['date'].constructor(Coercions::Params.method(:to_date))
11
+ end
12
+
13
+ register('params.date_time') do
14
+ self['date_time'].constructor(Coercions::Params.method(:to_date_time))
15
+ end
16
+
17
+ register('params.time') do
18
+ self['time'].constructor(Coercions::Params.method(:to_time))
19
+ end
20
+
21
+ register('params.true') do
22
+ self['true'].constructor(Coercions::Params.method(:to_true))
23
+ end
24
+
25
+ register('params.false') do
26
+ self['false'].constructor(Coercions::Params.method(:to_false))
27
+ end
28
+
29
+ register('params.bool') do
30
+ (self['params.true'] | self['params.false']).safe
31
+ end
32
+
33
+ register('params.integer') do
34
+ self['integer'].constructor(Coercions::Params.method(:to_int))
35
+ end
36
+
37
+ register('params.float') do
38
+ self['float'].constructor(Coercions::Params.method(:to_float))
39
+ end
40
+
41
+ register('params.decimal') do
42
+ self['decimal'].constructor(Coercions::Params.method(:to_decimal))
43
+ end
44
+
45
+ register('params.array') do
46
+ self['array'].constructor(Coercions::Params.method(:to_ary)).safe
47
+ end
48
+
49
+ register('params.hash') do
50
+ self['hash'].constructor(Coercions::Params.method(:to_hash)).safe
51
+ end
52
+ end
53
+ end
@@ -4,9 +4,10 @@ module Dry
4
4
  module Types
5
5
  class Safe
6
6
  include Type
7
- include Dry::Equalizer(:type, :options)
7
+ include Dry::Equalizer(:type)
8
8
  include Decorator
9
9
  include Builder
10
+ private :options, :meta
10
11
 
11
12
  # @param [Object] input
12
13
  # @return [Object]
@@ -37,7 +38,7 @@ module Dry
37
38
  #
38
39
  # @see Definition#to_ast
39
40
  def to_ast(meta: true)
40
- [:safe, [type.to_ast, meta ? self.meta : EMPTY_HASH]]
41
+ [:safe, [type.to_ast(meta: meta), EMPTY_HASH]]
41
42
  end
42
43
 
43
44
  # @api public
@@ -56,6 +56,16 @@ RSpec.shared_examples_for 'Dry::Types::Definition#meta' do
56
56
  it 'equalizes on filled meta' do
57
57
  expect(type).to_not eql(type.meta(i_am: 'different'))
58
58
  end
59
+
60
+ it 'is locally immutable' do
61
+ expect(type.meta).to be_a ::Hash
62
+ expect(type.meta).to be_frozen
63
+ expect(type.meta).not_to have_key :immutable_test
64
+ derived = type.with(meta: {immutable_test: 1})
65
+ expect(derived.meta).to be_frozen
66
+ expect(derived.meta).to eql({immutable_test: 1})
67
+ expect(type.meta).not_to have_key :immutable_test
68
+ end
59
69
  end
60
70
 
61
71
  describe '#pristine' do
@@ -55,11 +55,6 @@ module Dry
55
55
  false
56
56
  end
57
57
 
58
- # @return [false]
59
- def maybe?
60
- false
61
- end
62
-
63
58
  # @return [false]
64
59
  def constrained?
65
60
  false
@@ -101,7 +96,7 @@ module Dry
101
96
  end
102
97
  end
103
98
 
104
- def failure(input)
99
+ def failure(input, _error = nil)
105
100
  if !left.valid?(input)
106
101
  left.failure(input, left.try(input).error)
107
102
  else
@@ -128,6 +123,17 @@ module Dry
128
123
  def to_ast(meta: true)
129
124
  [:sum, [left.to_ast(meta: meta), right.to_ast(meta: meta), meta ? self.meta : EMPTY_HASH]]
130
125
  end
126
+
127
+ # @param [Hash] options
128
+ # @return [Constrained,Sum]
129
+ # @see Builder#constrained
130
+ def constrained(options)
131
+ if optional?
132
+ right.constrained(options).optional
133
+ else
134
+ super
135
+ end
136
+ end
131
137
  end
132
138
  end
133
139
  end
@@ -1,5 +1,5 @@
1
1
  module Dry
2
2
  module Types
3
- VERSION = '0.12.3'.freeze
3
+ VERSION = '0.13.0'.freeze
4
4
  end
5
5
  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.12.3
4
+ version: 0.13.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Piotr Solnica
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-06-12 00:00:00.000000000 Z
11
+ date: 2018-05-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -30,62 +30,68 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0.2'
33
+ version: '0.4'
34
34
  - - ">="
35
35
  - !ruby/object:Gem::Version
36
- version: 0.2.1
36
+ version: 0.4.4
37
37
  type: :runtime
38
38
  prerelease: false
39
39
  version_requirements: !ruby/object:Gem::Requirement
40
40
  requirements:
41
41
  - - "~>"
42
42
  - !ruby/object:Gem::Version
43
- version: '0.2'
43
+ version: '0.4'
44
44
  - - ">="
45
45
  - !ruby/object:Gem::Version
46
- version: 0.2.1
46
+ version: 0.4.4
47
47
  - !ruby/object:Gem::Dependency
48
- name: dry-container
48
+ name: dry-inflector
49
49
  requirement: !ruby/object:Gem::Requirement
50
50
  requirements:
51
51
  - - "~>"
52
52
  - !ruby/object:Gem::Version
53
- version: '0.3'
53
+ version: '0.1'
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: 0.1.2
54
57
  type: :runtime
55
58
  prerelease: false
56
59
  version_requirements: !ruby/object:Gem::Requirement
57
60
  requirements:
58
61
  - - "~>"
59
62
  - !ruby/object:Gem::Version
60
- version: '0.3'
63
+ version: '0.1'
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: 0.1.2
61
67
  - !ruby/object:Gem::Dependency
62
- name: dry-equalizer
68
+ name: dry-container
63
69
  requirement: !ruby/object:Gem::Requirement
64
70
  requirements:
65
71
  - - "~>"
66
72
  - !ruby/object:Gem::Version
67
- version: '0.2'
73
+ version: '0.3'
68
74
  type: :runtime
69
75
  prerelease: false
70
76
  version_requirements: !ruby/object:Gem::Requirement
71
77
  requirements:
72
78
  - - "~>"
73
79
  - !ruby/object:Gem::Version
74
- version: '0.2'
80
+ version: '0.3'
75
81
  - !ruby/object:Gem::Dependency
76
- name: dry-configurable
82
+ name: dry-equalizer
77
83
  requirement: !ruby/object:Gem::Requirement
78
84
  requirements:
79
85
  - - "~>"
80
86
  - !ruby/object:Gem::Version
81
- version: '0.1'
87
+ version: '0.2'
82
88
  type: :runtime
83
89
  prerelease: false
84
90
  version_requirements: !ruby/object:Gem::Requirement
85
91
  requirements:
86
92
  - - "~>"
87
93
  - !ruby/object:Gem::Version
88
- version: '0.1'
94
+ version: '0.2'
89
95
  - !ruby/object:Gem::Dependency
90
96
  name: dry-logic
91
97
  requirement: !ruby/object:Gem::Requirement
@@ -106,26 +112,6 @@ dependencies:
106
112
  - - ">="
107
113
  - !ruby/object:Gem::Version
108
114
  version: 0.4.2
109
- - !ruby/object:Gem::Dependency
110
- name: inflecto
111
- requirement: !ruby/object:Gem::Requirement
112
- requirements:
113
- - - "~>"
114
- - !ruby/object:Gem::Version
115
- version: 0.0.0
116
- - - ">="
117
- - !ruby/object:Gem::Version
118
- version: 0.0.2
119
- type: :runtime
120
- prerelease: false
121
- version_requirements: !ruby/object:Gem::Requirement
122
- requirements:
123
- - - "~>"
124
- - !ruby/object:Gem::Version
125
- version: 0.0.0
126
- - - ">="
127
- - !ruby/object:Gem::Version
128
- version: 0.0.2
129
115
  - !ruby/object:Gem::Dependency
130
116
  name: bundler
131
117
  requirement: !ruby/object:Gem::Requirement
@@ -224,8 +210,11 @@ files:
224
210
  - lib/dry/types/builder.rb
225
211
  - lib/dry/types/builder_methods.rb
226
212
  - lib/dry/types/coercions.rb
227
- - lib/dry/types/coercions/form.rb
228
213
  - lib/dry/types/coercions/json.rb
214
+ - lib/dry/types/coercions/params.rb
215
+ - lib/dry/types/compat.rb
216
+ - lib/dry/types/compat/form_types.rb
217
+ - lib/dry/types/compat/int.rb
229
218
  - lib/dry/types/compiler.rb
230
219
  - lib/dry/types/constrained.rb
231
220
  - lib/dry/types/constrained/coercible.rb
@@ -241,11 +230,14 @@ files:
241
230
  - lib/dry/types/extensions.rb
242
231
  - lib/dry/types/extensions/maybe.rb
243
232
  - lib/dry/types/fn_container.rb
244
- - lib/dry/types/form.rb
245
233
  - lib/dry/types/hash.rb
246
234
  - lib/dry/types/hash/schema.rb
235
+ - lib/dry/types/hash/schema_builder.rb
236
+ - lib/dry/types/inflector.rb
247
237
  - lib/dry/types/json.rb
238
+ - lib/dry/types/map.rb
248
239
  - lib/dry/types/options.rb
240
+ - lib/dry/types/params.rb
249
241
  - lib/dry/types/result.rb
250
242
  - lib/dry/types/safe.rb
251
243
  - lib/dry/types/spec/types.rb
@@ -1,53 +0,0 @@
1
- require 'dry/types/coercions/form'
2
-
3
- module Dry
4
- module Types
5
- register('form.nil') do
6
- self['nil'].constructor(Coercions::Form.method(:to_nil))
7
- end
8
-
9
- register('form.date') do
10
- self['date'].constructor(Coercions::Form.method(:to_date))
11
- end
12
-
13
- register('form.date_time') do
14
- self['date_time'].constructor(Coercions::Form.method(:to_date_time))
15
- end
16
-
17
- register('form.time') do
18
- self['time'].constructor(Coercions::Form.method(:to_time))
19
- end
20
-
21
- register('form.true') do
22
- self['true'].constructor(Coercions::Form.method(:to_true))
23
- end
24
-
25
- register('form.false') do
26
- self['false'].constructor(Coercions::Form.method(:to_false))
27
- end
28
-
29
- register('form.bool') do
30
- (self['form.true'] | self['form.false']).safe
31
- end
32
-
33
- register('form.int') do
34
- self['int'].constructor(Coercions::Form.method(:to_int))
35
- end
36
-
37
- register('form.float') do
38
- self['float'].constructor(Coercions::Form.method(:to_float))
39
- end
40
-
41
- register('form.decimal') do
42
- self['decimal'].constructor(Coercions::Form.method(:to_decimal))
43
- end
44
-
45
- register('form.array') do
46
- self['array'].constructor(Coercions::Form.method(:to_ary)).safe
47
- end
48
-
49
- register('form.hash') do
50
- self['hash'].constructor(Coercions::Form.method(:to_hash)).safe
51
- end
52
- end
53
- end