File: lcs_diff.rb

package info (click to toggle)
ruby-thor 1.4.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 904 kB
  • sloc: ruby: 9,250; makefile: 8; sh: 1
file content (49 lines) | stat: -rw-r--r-- 1,189 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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
module LCSDiff
protected

  # Overwrite show_diff to show diff with colors if Diff::LCS is
  # available.
  def show_diff(destination, content) #:nodoc:
    if diff_lcs_loaded? && ENV["THOR_DIFF"].nil? && ENV["RAILS_DIFF"].nil?
      actual  = File.binread(destination).to_s.split("\n")
      content = content.to_s.split("\n")

      Diff::LCS.sdiff(actual, content).each do |diff|
        output_diff_line(diff)
      end
    else
      super
    end
  end

private

  def output_diff_line(diff) #:nodoc:
    case diff.action
    when "-"
      say "- #{diff.old_element.chomp}", :red, true
    when "+"
      say "+ #{diff.new_element.chomp}", :green, true
    when "!"
      say "- #{diff.old_element.chomp}", :red, true
      say "+ #{diff.new_element.chomp}", :green, true
    else
      say "  #{diff.old_element.chomp}", nil, true
    end
  end

  # Check if Diff::LCS is loaded. If it is, use it to create pretty output
  # for diff.
  def diff_lcs_loaded? #:nodoc:
    return true if defined?(Diff::LCS)
    return @diff_lcs_loaded unless @diff_lcs_loaded.nil?

    @diff_lcs_loaded = begin
      require "diff/lcs"
      true
    rescue LoadError
      false
    end
  end

end