class Contracts::Builtin::HashOf

Use this to specify the Hash characteristics. Takes two contracts, one for hash keys and one for hash values. Example: HashOf[Symbol, String]

Constants

INVALID_KEY_VALUE_PAIR

Public Class Methods

new(key, value = nil) click to toggle source
# File lib/contracts/builtin_contracts.rb, line 366
def initialize(key, value = nil)
  if value
    @key   = key
    @value = value
  else
    validate_hash(key)
    @key   = key.keys.first
    @value = key[@key]
  end
end

Public Instance Methods

to_s() click to toggle source
# File lib/contracts/builtin_contracts.rb, line 385
def to_s
  "Hash<#{@key}, #{@value}>"
end
valid?(hash) click to toggle source
# File lib/contracts/builtin_contracts.rb, line 377
def valid?(hash)
  return false unless hash.is_a?(Hash)
  keys_match = hash.keys.map { |k| Contract.valid?(k, @key) }.all?
  vals_match = hash.values.map { |v| Contract.valid?(v, @value) }.all?

  [keys_match, vals_match].all?
end

Private Instance Methods

validate_hash(hash) click to toggle source
# File lib/contracts/builtin_contracts.rb, line 391
def validate_hash(hash)
  fail ArgumentError, INVALID_KEY_VALUE_PAIR unless hash.count == 1
end