Class: Pact::Matchers::Differ
- Inherits:
-
Object
- Object
- Pact::Matchers::Differ
- Defined in:
- lib/pact/matchers/differ.rb
Instance Method Summary collapse
- #diff_as_object(actual, expected) ⇒ Object
-
#diff_as_string(input_data_new, input_data_old) ⇒ Object
This is snagged from diff/lcs/ldiff.rb (which is a commandline tool).
- #green(text) ⇒ Object
-
#initialize(color = false) ⇒ Differ
constructor
A new instance of Differ.
- #red(text) ⇒ Object
Constructor Details
#initialize(color = false) ⇒ Differ
Returns a new instance of Differ.
14 15 16 |
# File 'lib/pact/matchers/differ.rb', line 14 def initialize(color = false) @color = color end |
Instance Method Details
#diff_as_object(actual, expected) ⇒ Object
66 67 68 69 70 71 72 |
# File 'lib/pact/matchers/differ.rb', line 66 def diff_as_object(actual, expected) actual_as_string = object_to_string(actual) expected_as_string = object_to_string(expected) if diff = diff_as_string(actual_as_string, expected_as_string) color_diff diff end end |
#diff_as_string(input_data_new, input_data_old) ⇒ Object
This is snagged from diff/lcs/ldiff.rb (which is a commandline tool)
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/pact/matchers/differ.rb', line 19 def diff_as_string(input_data_new, input_data_old) output = matching_encoding("", input_data_old) data_old = input_data_old.split(matching_encoding("\n", input_data_old)).map! { |e| e.chomp } data_new = input_data_new.split(matching_encoding("\n", input_data_new)).map! { |e| e.chomp } diffs = Diff::LCS.diff(data_old, data_new) return output if diffs.empty? oldhunk = hunk = nil file_length_difference = 0 diffs.each do |piece| begin hunk = Diff::LCS::Hunk.new( data_old, data_new, piece, context_lines, file_length_difference ) file_length_difference = hunk.file_length_difference next unless oldhunk # Hunks may overlap, which is why we need to be careful when our # diff includes lines of context. Otherwise, we might print # redundant lines. if (context_lines > 0) and hunk.overlaps?(oldhunk) if hunk.respond_to?(:merge) # diff-lcs 1.2.x hunk.merge(oldhunk) else # diff-lcs 1.1.3 hunk.unshift(oldhunk) end else output << matching_encoding(oldhunk.diff(format).to_s, output) end ensure oldhunk = hunk output << matching_encoding("\n", output) end end #Handle the last remaining hunk output << matching_encoding(oldhunk.diff(format).to_s, output) output << matching_encoding("\n", output) color_diff output rescue Encoding::CompatibilityError if input_data_new.encoding != input_data_old.encoding "Could not produce a diff because the encoding of the actual string (#{input_data_old.encoding}) "+ "differs from the encoding of the expected string (#{input_data_new.encoding})" else "Could not produce a diff because of the encoding of the string (#{input_data_old.encoding})" end end |
#green(text) ⇒ Object
79 80 81 82 |
# File 'lib/pact/matchers/differ.rb', line 79 def green(text) return text unless @color color(text, 32) end |
#red(text) ⇒ Object
74 75 76 77 |
# File 'lib/pact/matchers/differ.rb', line 74 def red(text) return text unless @color color(text, 31) end |