Sha256: 9eea23321bca2381a4a8f2727d0ecc62027b01f4be12b47adeb0624ed4f1c610
Contents?: true
Size: 1.38 KB
Versions: 2
Compression:
Stored size: 1.38 KB
Contents
require 'dry/types/options' module Dry module Types class Sum include Dry::Equalizer(:left, :right, :options) include Builder include Options attr_reader :left attr_reader :right class Constrained < Sum def rule left.rule | right.rule end def constrained? true end def call(input) try(input) do |result| raise ConstraintError.new(result, input) end.input end alias_method :[], :call end def initialize(left, right, options = {}) super @left, @right = left, right freeze end def name [left, right].map(&:name).join(' | ') end def default? false end def maybe? false end def constrained? false end def call(input) try(input).input end alias_method :[], :call 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 def primitive?(value) left.primitive?(value) || right.primitive?(value) end def valid?(value) left.valid?(value) || right.valid?(value) end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
dry-types-0.9.2 | lib/dry/types/sum.rb |
dry-types-0.9.1 | lib/dry/types/sum.rb |