class Dry::Types::Sum
Sum
type
@api public
Attributes
left[R]
@return [Type]
right[R]
@return [Type]
Public Class Methods
new(left, right, **options)
click to toggle source
@param [Type] left @param [Type] right @param [Hash] options
@api private
Calls superclass method
Dry::Types::Meta::new
# File lib/dry/types/sum.rb, line 44 def initialize(left, right, **options) super @left, @right = left, right freeze end
Public Instance Methods
call_safe(input, &block)
click to toggle source
@param [Object] input
@return [Object]
@api private
# File lib/dry/types/sum.rb, line 92 def call_safe(input, &block) left.call_safe(input) { right.call_safe(input, &block) } end
call_unsafe(input)
click to toggle source
@param [Object] input
@return [Object]
@api private
# File lib/dry/types/sum.rb, line 83 def call_unsafe(input) left.call_safe(input) { right.call_unsafe(input) } end
constrained(options)
click to toggle source
@param [Hash] options
@return [Constrained,Sum]
@see Builder#constrained
@api public
Calls superclass method
Dry::Types::Builder#constrained
# File lib/dry/types/sum.rb, line 170 def constrained(options) if optional? right.constrained(options).optional else super end end
constrained?()
click to toggle source
@return [false]
@api public
# File lib/dry/types/sum.rb, line 67 def constrained? false end
default?()
click to toggle source
@return [false]
@api public
# File lib/dry/types/sum.rb, line 60 def default? false end
failure(input, _error = nil)
click to toggle source
@api private
# File lib/dry/types/sum.rb, line 123 def failure(input, _error = nil) if !left.valid?(input) left.failure(input, left.try(input).error) else right.failure(input, right.try(input).error) end end
meta(data = Undefined)
click to toggle source
Manage metadata to the type. If the type is an optional, meta
delegates to the right branch
@see [Meta#meta]
@api public
Calls superclass method
Dry::Types::Meta#meta
# File lib/dry/types/sum.rb, line 146 def meta(data = Undefined) if Undefined.equal?(data) optional? ? right.meta : super elsif optional? self.class.new(left, right.meta(data), **options) else super end end
name()
click to toggle source
@return [String]
@api public
# File lib/dry/types/sum.rb, line 53 def name [left, right].map(&:name).join(" | ") end
optional?()
click to toggle source
@return [Boolean]
@api public
# File lib/dry/types/sum.rb, line 74 def optional? primitive?(nil) end
primitive?(value)
click to toggle source
@param [Object] value
@return [Boolean]
@api private
# File lib/dry/types/sum.rb, line 136 def primitive?(value) left.primitive?(value) || right.primitive?(value) end
success(input)
click to toggle source
@api private
# File lib/dry/types/sum.rb, line 112 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)
click to toggle source
@see Nominal#to_ast
@api public
# File lib/dry/types/sum.rb, line 159 def to_ast(meta: true) [:sum, [left.to_ast(meta: meta), right.to_ast(meta: meta), meta ? self.meta : EMPTY_HASH]] end
to_proc()
click to toggle source
Wrap the type with a proc
@return [Proc]
@api public
# File lib/dry/types/sum.rb, line 183 def to_proc proc { |value| self.(value) } end
try(input) { |failure| ... }
click to toggle source
@param [Object] input
@api public
# File lib/dry/types/sum.rb, line 99 def try(input) left.try(input) do right.try(input) do |failure| if block_given? yield(failure) else failure end end end end