summaryrefslogtreecommitdiff
path: root/lib/diff/lcs
diff options
context:
space:
mode:
authorAustin Ziegler <austin@surfeasy.com>2013-01-20 20:28:19 -0500
committerAustin Ziegler <austin@surfeasy.com>2013-01-20 20:28:19 -0500
commit1e00ec3f95849c792f8399d348f3c385244ec7d9 (patch)
tree53534e7101f7c524373a8c7070c2c7126889d1b9 /lib/diff/lcs
parent44be3864deaf16928bff7076b384fee240c400f6 (diff)
downloaddiff-lcs-1e00ec3f95849c792f8399d348f3c385244ec7d9.tar.gz
Extracting duplicated code to a private method.
Diffstat (limited to 'lib/diff/lcs')
-rw-r--r--lib/diff/lcs/callbacks.rb4
-rw-r--r--lib/diff/lcs/internals.rb28
2 files changed, 31 insertions, 1 deletions
diff --git a/lib/diff/lcs/callbacks.rb b/lib/diff/lcs/callbacks.rb
index c0658b6..8eec5fc 100644
--- a/lib/diff/lcs/callbacks.rb
+++ b/lib/diff/lcs/callbacks.rb
@@ -45,6 +45,10 @@ module Diff::LCS
#
# Diff::LCS.LCS(seq1, seq2, Diff::LCS::BalancedCallbacks)
BalancedCallbacks = DefaultCallbacks
+
+ def self.callbacks_for(callbacks)
+ callbacks.new rescue callbacks
+ end
end
# This will produce a compound array of simple diff change objects. Each
diff --git a/lib/diff/lcs/internals.rb b/lib/diff/lcs/internals.rb
index 31e7331..fe4ed9b 100644
--- a/lib/diff/lcs/internals.rb
+++ b/lib/diff/lcs/internals.rb
@@ -1,5 +1,31 @@
# -*- ruby encoding: utf-8 -*-
+class << Diff::LCS
+ def diff_traversal(method, seq1, seq2, callbacks, &block)
+ callbacks = callbacks_for(callbacks)
+ case method
+ when :diff
+ traverse_sequences(seq1, seq2, callbacks)
+ when :sdiff
+ traverse_balanced(seq1, seq2, callbacks)
+ end
+ callbacks.finish if callbacks.respond_to? :finish
+
+ if block
+ callbacks.diffs.map do |hunk|
+ if hunk.kind_of? Array
+ hunk.map { |hunk_block| block[hunk_block] }
+ else
+ block[hunk]
+ end
+ end
+ else
+ callbacks.diffs
+ end
+ end
+ private :diff_traversal
+end
+
module Diff::LCS::Internals # :nodoc:
end
@@ -117,7 +143,7 @@ class << Diff::LCS::Internals
# of one of the above.
#
# Note: This will be deprecated as a public function in a future release.
- def diff_direction(src, patchset, limit = nil)
+ def intuit_diff_direction(src, patchset, limit = nil)
string = src.kind_of?(String)
count = left_match = left_miss = right_match = right_miss = 0