class Dry::Types::Schema

def try(input)

Other tags:
    Api: - public

Returns:
  • (Object) - if coercion fails and a block is given
  • (Logic::Result) -

Other tags:
    Yieldreturn: -

Other tags:
    Yieldparam: failure -

Parameters:
  • input (Hash) -- hash
def try(input)
  if primitive?(input)
    success = true
    output = {}
    result = {}
    input.each do |key, value|
      k = @transform_key.(key)
      type = @name_key_map[k]
      if type
        key_result = type.try(value)
        result[k] = key_result
        output[k] = key_result.input
        success &&= key_result.success?
      elsif strict?
        success = false
      end
    end
    if output.size < keys.size
      resolve_missing_keys(output, options) do
        success = false
      end
    end
    success &&= primitive?(output)
    if success
      failure = nil
    else
      error = CoercionError.new("#{input} doesn't conform schema", meta: result)
      failure = failure(output, error)
    end
  else
    failure = failure(input, CoercionError.new("#{input} must be a hash"))
  end
  if failure.nil?
    success(output)
  elsif block_given?
    yield(failure)
  else
    failure
  end
end