class Contracts::KeywordArgsErrorFormatter

Public Instance Methods

message() click to toggle source
# File lib/contracts/error_formatter.rb, line 59
def message
  s = []
  s << header.to_s
  s << "        Expected: #{expected}"
  s << "        Actual: #{data[:arg].inspect}"
  s << "        Missing Contract: #{missing_contract_info}" unless missing_contract_info.empty?
  s << "        Invalid Args: #{invalid_args_info}"         unless invalid_args_info.empty?
  s << "        Missing Args: #{missing_args_info}"         unless missing_args_info.empty?
  s << "        Value guarded in: #{data[:class]}::#{method_name}"
  s << "        With Contract: #{data[:contracts]}"
  s << "        At: #{position} "

  s.join("\n")
end

Private Instance Methods

arg() click to toggle source
# File lib/contracts/error_formatter.rb, line 117
def arg
  data[:arg]
end
check_contract(contract, value) click to toggle source
# File lib/contracts/error_formatter.rb, line 106
def check_contract(contract, value)
  return contract.valid?(value) if contract.respond_to?(:valid?)
  value.is_a?(contract)
rescue
  false
end
contract_options() click to toggle source
# File lib/contracts/error_formatter.rb, line 113
def contract_options
  @contract_options ||= data[:contract].send(:options)
end
invalid_args_info() click to toggle source
# File lib/contracts/error_formatter.rb, line 92
def invalid_args_info
  @invalid_args_info ||= begin
    invalid_keys = []
    arg.each do |key, value|
      contract = contract_options[key]
      next unless contract
      invalid_keys.push(key) unless check_contract(contract, value)
    end
    invalid_keys.map do |key|
      {key => arg[key], :contract => contract_options[key] }
    end
  end
end
missing_args_info() click to toggle source
# File lib/contracts/error_formatter.rb, line 76
def missing_args_info
  @missing_args_info ||= begin
    missing_keys = contract_options.keys - arg.keys
    contract_options.select do |key, _|
      missing_keys.include?(key)
    end
  end
end
missing_contract_info() click to toggle source
# File lib/contracts/error_formatter.rb, line 85
def missing_contract_info
  @missing_contract_info ||= begin
    contract_keys = contract_options.keys
    arg.select { |key, _| !contract_keys.include?(key) }
  end
end