class HashesEqual::GenericDiffDisplayer

Attributes

actual[R]
diff[R]
expected[R]

Public Class Methods

new(expected:, actual:) click to toggle source
# File lib/hashes_equal/generic_diff_displayer.rb, line 13
def initialize(expected:, actual:)
  @expected = expected
  @actual = actual
  assert_send :expected
  assert_send :actual
  check_args
end

Public Instance Methods

call() click to toggle source
# File lib/hashes_equal/generic_diff_displayer.rb, line 21
def call
  compute_diff
  ANSI.white do
    formatted_diff
  end
end

Private Instance Methods

check_args() click to toggle source
# File lib/hashes_equal/generic_diff_displayer.rb, line 32
def check_args
  # Add specific checks if needed
end
compute_diff() click to toggle source
# File lib/hashes_equal/generic_diff_displayer.rb, line 36
def compute_diff
  @diff = perform_diff_computation
end
format_element(diff_element) click to toggle source
# File lib/hashes_equal/generic_diff_displayer.rb, line 50
def format_element(diff_element)
  # exp_val is act_val in case of "+"
  type, key, exp_val, act_val = diff_element
  return missing_value_message(key, exp_val) if type == '-'
  return spurious_value_message(key, exp_val) if type == '+'
  return value_disagreement_message(key, exp_val, act_val) if type == '~'

  raise UnprocessableHashdiff, diff_element
end
formatted_diff() click to toggle source
# File lib/hashes_equal/generic_diff_displayer.rb, line 44
def formatted_diff
  "\n" + diff.map do |diff_element|
    format_element diff_element
  end.join("\n")
end
missing_value_message(key, exp_val) click to toggle source
# File lib/hashes_equal/generic_diff_displayer.rb, line 60
def missing_value_message(key, exp_val)
  [
    "actual value for #{ANSI.red { key }} is missing, expected was",
    ANSI.green { exp_val.inspect }
  ].join("\n\t")
end
perform_diff_computation() click to toggle source
# File lib/hashes_equal/generic_diff_displayer.rb, line 40
def perform_diff_computation
  Hashdiff.diff(expected, actual)
end
spurious_value_message(key, exp_val) click to toggle source
# File lib/hashes_equal/generic_diff_displayer.rb, line 67
def spurious_value_message(key, exp_val)
  [
    "spurious value #{ANSI.red { exp_val.inspect }}",
    "for #{key} was not expected"
  ].join(' ')
end
value_disagreement_message(key, exp_val, act_val) click to toggle source
# File lib/hashes_equal/generic_diff_displayer.rb, line 74
def value_disagreement_message(key, exp_val, act_val)
  [
    "values for #{key} differ",
    "expected: #{ANSI.green { exp_val.inspect }}",
    "actual: #{ANSI.red { act_val.inspect }}"
  ].join("\n\t")
end