Class: Dry::Types::Sum
Defined Under Namespace
Classes: Constrained
Instance Attribute Summary collapse
Attributes included from Options
#options
Instance Method Summary
collapse
Methods included from Options
#meta, #pristine, #with
Methods included from Builder
#constrained, #constrained_type, #constructor, #default, #enum, #maybe, #optional, #safe, #|
Constructor Details
#initialize(left, right, options = {}) ⇒ Sum
Returns a new instance of Sum.
42
43
44
45
46
|
# File 'lib/dry/types/sum.rb', line 42
def initialize(left, right, options = {})
super
@left, @right = left, right
freeze
end
|
Instance Attribute Details
12
13
14
|
# File 'lib/dry/types/sum.rb', line 12
def left
@left
end
|
#right ⇒ Type
15
16
17
|
# File 'lib/dry/types/sum.rb', line 15
def right
@right
end
|
Instance Method Details
#call(input) ⇒ Object
Also known as:
[]
75
76
77
|
# File 'lib/dry/types/sum.rb', line 75
def call(input)
try(input).input
end
|
#constrained? ⇒ false
64
65
66
|
# File 'lib/dry/types/sum.rb', line 64
def constrained?
false
end
|
#default? ⇒ false
54
55
56
|
# File 'lib/dry/types/sum.rb', line 54
def default?
false
end
|
#failure(input) ⇒ Object
104
105
106
107
108
109
110
|
# File 'lib/dry/types/sum.rb', line 104
def failure(input)
if !left.valid?(input)
left.failure(input, left.try(input).error)
else
right.failure(input, right.try(input).error)
end
end
|
#maybe? ⇒ false
59
60
61
|
# File 'lib/dry/types/sum.rb', line 59
def maybe?
false
end
|
#name ⇒ String
49
50
51
|
# File 'lib/dry/types/sum.rb', line 49
def name
[left, right].map(&:name).join(' | ')
end
|
#optional? ⇒ Boolean
69
70
71
|
# File 'lib/dry/types/sum.rb', line 69
def optional?
left == Types['strict.nil']
end
|
#primitive?(value) ⇒ Boolean
114
115
116
|
# File 'lib/dry/types/sum.rb', line 114
def primitive?(value)
left.primitive?(value) || right.primitive?(value)
end
|
#success(input) ⇒ Object
94
95
96
97
98
99
100
101
102
|
# File 'lib/dry/types/sum.rb', line 94
def success(input)
if left.valid?(input)
left.success(input)
elsif right.valid?(input)
right.success(input)
else
raise ArgumentError, "Invalid success value '#{input}' for #{inspect}"
end
end
|
#to_ast(meta: true) ⇒ Object
127
128
129
|
# File 'lib/dry/types/sum.rb', line 127
def to_ast(meta: true)
[:sum, [left.to_ast(meta: meta), right.to_ast(meta: meta), meta ? self.meta : EMPTY_HASH]]
end
|
#try(input, &block) ⇒ Object
80
81
82
83
84
85
86
87
88
89
90
91
92
|
# File 'lib/dry/types/sum.rb', line 80
def try(input, &block)
result = left.try(input) do
right.try(input)
end
return result if result.success?
if block
yield(result)
else
result
end
end
|
#valid?(value) ⇒ Boolean
120
121
122
|
# File 'lib/dry/types/sum.rb', line 120
def valid?(value)
left.valid?(value) || right.valid?(value)
end
|