Class: Deep::Matchers::HashValues

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

Overview

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

HashValues class tests that all values of the Hash belong to list of Classes.

Usage

it { @hash.should have_values_in_class [String, Symbol] }
it { @hash.should have_values_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



31
32
33
# File 'parser/spec/lib/deep/hash_values.rb', line 31

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

- (Object) failure_message_for_should



59
60
61
# File 'parser/spec/lib/deep/hash_values.rb', line 59

def failure_message_for_should
  "expected #{@target.values.inspect} to have values of classes #{@expectation.inspect}"
end

- (Object) failure_message_for_should_not



63
64
65
# File 'parser/spec/lib/deep/hash_values.rb', line 63

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

- (Boolean) matches?(target)

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

Parameters:

  • target (Hash)

    hash under test

Returns:

  • (Boolean)

    true if pass, false if fail



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

def matches?(target)
  result = true

  if target.is_a? Hash
    @target, @actual = target, target.values.map(&:class).uniq

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

  result
end