class Govuk::Diff::Pages::HtmlDiff::Differ

Constants

REPLACEMENTS

Attributes

differing_pages[R]

Public Class Methods

new(config) click to toggle source
# File lib/govuk/diff/pages/html_diff/differ.rb, line 18
def initialize(config)
  @config = config
  @template = File.read "#{Govuk::Diff::Pages.root_dir}/diff/pages/html_diff/assets/html_diff_template.erb"
  @diff_dir = File.join(Govuk::Diff::Pages.root_dir, '..', '..', @config.html_diff.directory)
  reset_html_diffs_dir
  @differing_pages = {}
end

Public Instance Methods

diff(base_path) click to toggle source
# File lib/govuk/diff/pages/html_diff/differ.rb, line 26
def diff(base_path)
  staging_html = get_normalized_html(staging_url(base_path))
  production_html = get_normalized_html(production_url(base_path))
  diffy = Diffy::Diff.new(production_html, staging_html, context: 3)
  unless diffy.diff == ""
    write_diff_page(base_path, diffy.to_s(:html))
    @differing_pages[base_path] = html_diff_filename(base_path)
  end
end

Private Instance Methods

fetch_html(url) click to toggle source
# File lib/govuk/diff/pages/html_diff/differ.rb, line 70
def fetch_html(url)
  %x[ curl -s #{url} ]
end
get_normalized_html(url) click to toggle source
# File lib/govuk/diff/pages/html_diff/differ.rb, line 62
def get_normalized_html(url)
  body_html = Nokogiri::HTML(fetch_html(url)).css('body').to_s
  REPLACEMENTS.each do |original, replacement|
    body_html.gsub!(original, replacement)
  end
  body_html
end
html_diff_filename(base_path) click to toggle source
# File lib/govuk/diff/pages/html_diff/differ.rb, line 50
def html_diff_filename(base_path)
  File.join(@diff_dir, "#{safe_filename(base_path)}.html")
end
production_url(base_path) click to toggle source
# File lib/govuk/diff/pages/html_diff/differ.rb, line 74
def production_url(base_path)
  "#{@config.domains.production}#{base_path}"
end
remove_starting_and_trailing_slash(base_path) click to toggle source
# File lib/govuk/diff/pages/html_diff/differ.rb, line 58
def remove_starting_and_trailing_slash(base_path)
  base_path.sub(/^\//, '').sub(/\/$/, '')
end
reset_html_diffs_dir() click to toggle source
# File lib/govuk/diff/pages/html_diff/differ.rb, line 38
def reset_html_diffs_dir
  Dir.mkdir(@diff_dir) unless Dir.exist?(@diff_dir)
  FileUtils.rm Dir.glob("#{@diff_dir}/*")
end
safe_filename(base_path) click to toggle source
# File lib/govuk/diff/pages/html_diff/differ.rb, line 54
def safe_filename(base_path)
  remove_starting_and_trailing_slash(base_path).tr('/', '.')
end
staging_url(base_path) click to toggle source
# File lib/govuk/diff/pages/html_diff/differ.rb, line 78
def staging_url(base_path)
  "#{@config.domains.staging}#{base_path}"
end
write_diff_page(base_path, diff_string) click to toggle source
# File lib/govuk/diff/pages/html_diff/differ.rb, line 43
def write_diff_page(base_path, diff_string)
  renderer = ERB.new(@template)
  File.open(html_diff_filename(base_path), "w") do |fp|
    fp.puts renderer.result(binding)
  end
end