Module: HaveStructureMatcher
- Defined in:
- lib/support_methods.rb
Defined Under Namespace
Modules: Methods
Class Method Summary collapse
- .build_diff(actual, expected) ⇒ Object
- .match?(actual, expected) ⇒ Boolean
- .print_expected_value(expected_value) ⇒ Object
- .value_match?(actual_value, expected_value) ⇒ Boolean
Class Method Details
.build_diff(actual, expected) ⇒ Object
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/support_methods.rb', line 12 def self.build_diff(actual, expected) return expected unless actual.is_a?(Hash) keys = actual.keys | expected.keys keys.each_with_object({}) do |key, memo| if actual.key?(key) && expected.key?(key) actual_value = actual[key] expected_value = expected[key] if expected_value.is_a?(Hash) memo[key] = build_diff(actual_value, expected_value) elsif expected_value.is_a?(Array) memo[key] = expected_value.zip(actual_value).map { |(e,a)| build_diff(a, e) } elsif value_match?(actual_value, expected_value) memo[key] = actual_value else memo[key] = print_expected_value(expected_value) end elsif expected.key?(key) expected_value = expected[key] memo[key] = print_expected_value(expected_value) end end end |
.match?(actual, expected) ⇒ Boolean
8 9 10 |
# File 'lib/support_methods.rb', line 8 def self.match?(actual, expected) actual == build_diff(actual, expected) end |
.print_expected_value(expected_value) ⇒ Object
38 39 40 41 42 43 44 |
# File 'lib/support_methods.rb', line 38 def self.print_expected_value(expected_value) if expected_value.respond_to?(:call) "Proc [#{expected_value.source_location.join(':')}]" else expected_value end end |
.value_match?(actual_value, expected_value) ⇒ Boolean
46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/support_methods.rb', line 46 def self.value_match?(actual_value, expected_value) if expected_value.is_a?(Regexp) actual_value =~ expected_value elsif expected_value.is_a?(Class) actual_value.is_a?(expected_value) elsif expected_value.respond_to?(:call) expected_value.call(actual_value) else actual_value == expected_value end end |