Class: Deep::Matchers::HashKeys

Inherits:
HashMatchers show all
Defined in:
parser/spec/lib/deep/hash_keys.rb

Overview

RSpec::Matchers class for testing hierarchically hashes, that are elements of deep hash.

HashKeys class tests that all keys of the Hash belong to list of Classes.

Usage

it { @hash.should have_keys_in_class [String, Symbol] }
it { @hash.should have_keys_in_class String }

Instance Method Summary (collapse)

Methods inherited from HashMatchers

#initialize

Constructor Details

This class inherits a constructor from Deep::Matchers::HashMatchers

Instance Method Details

- (Object) description



29
30
31
# File 'parser/spec/lib/deep/hash_keys.rb', line 29

def description 
  "have (recursively) every key one of class: #{[@expectation].flatten.join ','}"
end

- (Object) failure_message_for_should



58
59
60
# File 'parser/spec/lib/deep/hash_keys.rb', line 58

def failure_message_for_should
  "expected #{@target.keys.inspect} #{@actual} to be one of #{@expectation.inspect}"
end

- (Object) failure_message_for_should_not



62
63
64
# File 'parser/spec/lib/deep/hash_keys.rb', line 62

def failure_message_for_should_not
  "expected #{@target.keys.inspect} differ from  #{@expectation.inspect}"
end

- (Boolean) matches?(target)

Test that all keys of the tested Hash belong to provided list of classes

Parameters:

  • target (Hash)

    hash under test

Returns:

  • (Boolean)

    true if pass, false if fail



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'parser/spec/lib/deep/hash_keys.rb', line 39

def matches?(target)
  result = true
  
  if target.is_a? Hash

    @target, @actual = target, target.keys.map(&:class).uniq

    result &&= (@actual - @expectation).empty?

    @target.each_value do |val|
      result &&= HashKeys.new(@expectation).matches?(val) if val.is_a? Hash
      @target = val unless result
    end
  end

  result
end