Class: Nanoc::CLI::Commands::Compile::DiffGenerator

Inherits:
Listener
  • Object
show all
Defined in:
lib/nanoc/cli/commands/compile.rb

Overview

Generates diffs for every output file written

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Listener

#initialize

Constructor Details

This class inherits a constructor from Nanoc::CLI::Commands::Compile::Listener

Class Method Details

.enable_for?(command_runner) ⇒ Boolean

Returns:

  • (Boolean)

See Also:



70
71
72
# File 'lib/nanoc/cli/commands/compile.rb', line 70

def self.enable_for?(command_runner)
  command_runner.site.config[:enable_output_diff]
end

Instance Method Details

#startObject

See Also:



75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/nanoc/cli/commands/compile.rb', line 75

def start
  require 'tempfile'
  setup_diffs
  old_contents = {}
  Nanoc::Int::NotificationCenter.on(:will_write_rep, self) do |rep, path|
    old_contents[rep] = File.file?(path) ? File.read(path) : nil
  end
  Nanoc::Int::NotificationCenter.on(:rep_written, self) do |rep, path, _is_created, _is_modified|
    unless rep.binary?
      new_contents = File.file?(path) ? File.read(path) : nil
      if old_contents[rep] && new_contents
        generate_diff_for(path, old_contents[rep], new_contents)
      end
      old_contents.delete(rep)
    end
  end
end

#stopObject

See Also:



94
95
96
97
98
99
100
101
# File 'lib/nanoc/cli/commands/compile.rb', line 94

def stop
  super

  Nanoc::Int::NotificationCenter.remove(:will_write_rep, self)
  Nanoc::Int::NotificationCenter.remove(:rep_written, self)

  teardown_diffs
end