class JsonDeepCompare::NodeComparison
Constants
- ExcerptPadding
Attributes
lval[R]
rval[R]
selector[R]
Public Class Methods
new(lval, rval, selector, options = {})
click to toggle source
# File lib/json-deep-compare/node_comparison.rb, line 6 def initialize(lval, rval, selector, options = {}) @lval, @rval, @selector, @options = lval, rval, selector, options @children = [] if lval.is_a?(Hash) if rval.is_a?(Hash) lval.each do |key, left_sub_value| @children << NodeComparison.new( left_sub_value, rval[key], "#{selector} > .#{key}", options ) end end elsif lval.is_a?(Array) if rval.is_a?(Array) lval.each_with_index do |left_sub_value, i| @children << NodeComparison.new( left_sub_value, rval[i], "#{selector} :nth-child(#{i+1})", options ) end end end end
Public Instance Methods
blank?(value)
click to toggle source
# File lib/json-deep-compare/node_comparison.rb, line 34 def blank?(value) value.respond_to?(:empty?) ? value.empty? : !value end
blank_equality?()
click to toggle source
# File lib/json-deep-compare/node_comparison.rb, line 38 def blank_equality? @options[:blank_equality] end
differences()
click to toggle source
# File lib/json-deep-compare/node_comparison.rb, line 42 def differences if equal? [] else if leaf? if excerptable_difference? [excerpted_difference] else [Difference.new( @selector, "expected to be :lval but was :rval", lval: value_inspect(lval_for_equality), rval: value_inspect(rval_for_equality) )] end else @children.map(&:differences).compact.flatten end end end
equal?()
click to toggle source
# File lib/json-deep-compare/node_comparison.rb, line 62 def equal? if leaf? if selector_excluded? true elsif equality_proc equality_proc.call(lval_for_equality, rval_for_equality) elsif blank_equality? && blank?(lval_for_equality) && blank?(rval_for_equality) true else lval_for_equality == rval_for_equality end else @children.all?(&:equal?) end end
equality_proc()
click to toggle source
# File lib/json-deep-compare/node_comparison.rb, line 78 def equality_proc @options[:equality] end
excerptable_difference?()
click to toggle source
# File lib/json-deep-compare/node_comparison.rb, line 82 def excerptable_difference? @lval.is_a?(String) and @rval.is_a?(String) && ( @lval.size > ExcerptPadding * 2 || @rval.size > ExcerptPadding * 2 ) end
excerpted_difference()
click to toggle source
# File lib/json-deep-compare/node_comparison.rb, line 88 def excerpted_difference difference_start = (0..@lval.length).detect { |i| @lval[i] != @rval[i] } range_start = if difference_start > ExcerptPadding difference_start - ExcerptPadding else 0 end left_excerpt = @lval[range_start..difference_start+ExcerptPadding] right_excerpt = @rval[range_start..difference_start+ExcerptPadding] if difference_start - ExcerptPadding > 0 left_excerpt = "..." + left_excerpt right_excerpt = "..." + right_excerpt end if difference_start + ExcerptPadding < @lval.length left_excerpt = left_excerpt + '...' end if difference_start + ExcerptPadding < @rval.length right_excerpt = right_excerpt + '...' end Difference.new( @selector, "differs starting at char :difference_start: :lval differs from :rval", difference_start: difference_start.to_s, lval: left_excerpt.inspect, rval: right_excerpt.inspect ) end
has_substitution?()
click to toggle source
# File lib/json-deep-compare/node_comparison.rb, line 115 def has_substitution? @options[:substitutions] && @options[:substitutions].has_key?(selector) end
leaf?()
click to toggle source
# File lib/json-deep-compare/node_comparison.rb, line 119 def leaf? @children.empty? end
left_to_right?()
click to toggle source
# File lib/json-deep-compare/node_comparison.rb, line 123 def left_to_right? @options[:direction] == :left end
lval_for_equality()
click to toggle source
# File lib/json-deep-compare/node_comparison.rb, line 127 def lval_for_equality @_lval_for_equality ||= begin if left_to_right? && has_substitution? substitution else lval end end end
right_to_left?()
click to toggle source
# File lib/json-deep-compare/node_comparison.rb, line 137 def right_to_left? @options[:direction] == :right end
rval_for_equality()
click to toggle source
# File lib/json-deep-compare/node_comparison.rb, line 141 def rval_for_equality @_rval_for_equality ||= begin if right_to_left? && has_substitution? substitution else rval end end end
selector_excluded?()
click to toggle source
# File lib/json-deep-compare/node_comparison.rb, line 151 def selector_excluded? @options[:exclusions].any? { |exclusion| if exclusion.is_a?(String) exclusion == @selector else @selector =~ exclusion end } end
substitution()
click to toggle source
# File lib/json-deep-compare/node_comparison.rb, line 161 def substitution @options[:substitutions][selector] end
value_inspect(value)
click to toggle source
# File lib/json-deep-compare/node_comparison.rb, line 165 def value_inspect(value) str = value.inspect if str.length >= 40 "#{value.class.name} #{str[0..37]}..." else str end end