class Dry::Types::Constrained::Coercible

Common coercion-related API for constrained types

@api public

Public Instance Methods

call_safe(input) { || ... } click to toggle source

@return [Object]

@api private

# File lib/dry/types/constrained/coercible.rb, line 27
def call_safe(input)
  coerced = type.call_safe(input) { return yield }

  if rule[coerced]
    coerced
  else
    yield(coerced)
  end
end
call_unsafe(input) click to toggle source

@return [Object]

@api private

# File lib/dry/types/constrained/coercible.rb, line 13
def call_unsafe(input)
  coerced = type.call_unsafe(input)
  result = rule.(coerced)

  if result.success?
    coerced
  else
    raise ConstraintError.new(result, input)
  end
end
try(input) { |failure| ... } click to toggle source

@see Dry::Types::Constrained#try

@api public

# File lib/dry/types/constrained/coercible.rb, line 40
def try(input, &block)
  result = type.try(input)

  if result.success?
    validation = rule.(result.input)

    if validation.success?
      result
    else
      failure = failure(result.input, ConstraintError.new(validation, input))
      block ? yield(failure) : failure
    end
  else
    block ? yield(result) : result
  end
end