Class: Contracts::Builtin::HashOf

Inherits:
CallableClass show all
Defined in:
lib/contracts/builtin_contracts.rb

Overview

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

Constant Summary collapse

INVALID_KEY_VALUE_PAIR =
"You should provide only one key-value pair to HashOf contract"

Instance Method Summary collapse

Methods inherited from CallableClass

[]

Constructor Details

#initialize(key, value = nil) ⇒ HashOf

Returns a new instance of HashOf.



388
389
390
391
392
393
394
395
396
397
398
# File 'lib/contracts/builtin_contracts.rb', line 388

def initialize(key, value = nil)
  super()
  if value
    @key   = key
    @value = value
  else
    validate_hash(key)
    @key   = key.keys.first
    @value = key[@key]
  end
end

Instance Method Details

#to_sObject



409
410
411
# File 'lib/contracts/builtin_contracts.rb', line 409

def to_s
  "Hash<#{@key}, #{@value}>"
end

#valid?(hash) ⇒ Boolean

Returns:

  • (Boolean)


400
401
402
403
404
405
406
407
# File 'lib/contracts/builtin_contracts.rb', line 400

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