class RSpec::JsonMatcher::AbstractComparer
Attributes
actual[R]
expected[R]
reason[R]
Public Class Methods
compare(*args, &reason)
click to toggle source
# File lib/rspec/json_matcher/abstract_comparer.rb, line 6 def self.compare(*args, &reason) new(*args, &reason).compare end
extract_keys(array_or_hash)
click to toggle source
# File lib/rspec/json_matcher/abstract_comparer.rb, line 10 def self.extract_keys(array_or_hash) if array_or_hash.is_a?(Array) array_or_hash.each_index.to_a else array_or_hash.keys.map(&:to_s) end end
new(actual, expected, &reason)
click to toggle source
# File lib/rspec/json_matcher/abstract_comparer.rb, line 18 def initialize(actual, expected, &reason) @actual = actual @expected = expected @reason = reason end
Public Instance Methods
compare()
click to toggle source
# File lib/rspec/json_matcher/abstract_comparer.rb, line 24 def compare has_same_value? || has_same_collection? end
Private Instance Methods
collection?()
click to toggle source
# File lib/rspec/json_matcher/abstract_comparer.rb, line 73 def collection? actual.is_a?(Array) || actual.is_a?(Hash) end
has_same_class?()
click to toggle source
# File lib/rspec/json_matcher/abstract_comparer.rb, line 30 def has_same_class? actual.class == expected.class end
has_same_collection?()
click to toggle source
# File lib/rspec/json_matcher/abstract_comparer.rb, line 53 def has_same_collection? raise NotImplementedError, "You must implement #{self.class}#has_same_collection?" end
has_same_keys?()
click to toggle source
# File lib/rspec/json_matcher/abstract_comparer.rb, line 34 def has_same_keys? actual_keys = self.class.extract_keys(actual).sort expected_keys = self.class.extract_keys(expected).sort (actual_keys == expected_keys).tap do |success| unless success diff_keys = (actual_keys - expected_keys) + (expected_keys - actual_keys) reason[diff_keys.ai] end end end
has_same_value?()
click to toggle source
# File lib/rspec/json_matcher/abstract_comparer.rb, line 45 def has_same_value? if expected.respond_to?(:call) expected.call(actual) else expected === actual end end
has_same_values?()
click to toggle source
# File lib/rspec/json_matcher/abstract_comparer.rb, line 57 def has_same_values? if expected.is_a?(Array) expected.each_index.all? do |index| (index < actual.size && self.class.compare(actual[index], expected[index], &reason)).tap do |success| reason["[#{index}]"] unless success end end else expected.keys.all? do |key| (actual.has_key?(key.to_s) && self.class.compare(actual[key.to_s], expected[key], &reason)).tap do |success| reason[key.to_s] unless success end end end end