class Dry::Types::Intersection
Intersection
type
@api public
Public Class Methods
operator()
click to toggle source
# File lib/dry/types/intersection.rb, line 15 def self.operator :& end
Public Instance Methods
call_safe(input, &block)
click to toggle source
@param [Object] input
@return [Object]
@api private
# File lib/dry/types/intersection.rb, line 33 def call_safe(input, &block) try_sides(input, &block).input end
call_unsafe(input)
click to toggle source
@param [Object] input
@return [Object]
@api private
# File lib/dry/types/intersection.rb, line 24 def call_unsafe(input) merge_results(left.call_unsafe(input), right.call_unsafe(input)) end
primitive?(value)
click to toggle source
@param [Object] value
@return [Boolean]
@api private
# File lib/dry/types/intersection.rb, line 55 def primitive?(value) left.primitive?(value) && right.primitive?(value) end
try(input) { |failure| ... }
click to toggle source
@param [Object] input
@api public
# File lib/dry/types/intersection.rb, line 40 def try(input) try_sides(input) do |failure| if block_given? yield(failure) else failure end end end
Private Instance Methods
merge_results(left_result, right_result)
click to toggle source
@api private
# File lib/dry/types/intersection.rb, line 94 def merge_results(left_result, right_result) case left_result when ::Array left_result .zip(right_result) .map { |lhs, rhs| merge_results(lhs, rhs) } when ::Hash left_result.merge(right_result) else left_result end end
try_side(side, input) { |f| ... }
click to toggle source
@api private
# File lib/dry/types/intersection.rb, line 76 def try_side(side, input) failure = nil result = side.try(input) do |f| failure = f yield(f) end if result.is_a?(Result) result elsif failure Result::Failure.new(result, failure) else Result::Success.new(result) end end
try_sides(input, &block)
click to toggle source
@api private
# File lib/dry/types/intersection.rb, line 62 def try_sides(input, &block) results = [] [left, right].each do |side| result = try_side(side, input, &block) return result if result.failure? results << result end Result::Success.new(merge_results(*results.map(&:input))) end