class Similatron::Run

Attributes

comparisons[R]
engines[R]
run_path[R]

Public Instance Methods

compare(expected:, actual:) click to toggle source
# File lib/similatron/run.rb, line 20
def compare(expected:, actual:)
  comparison = if File.exist?(expected)
                 real_comparison(expected, actual)
               else
                 copy_comparison(expected, actual)
               end
  comparisons << comparison

  comparison
end
compare!(expected:, actual:) click to toggle source
# File lib/similatron/run.rb, line 31
def compare!(expected:, actual:)
  comparison = compare(expected: expected, actual: actual)
  comparison.raise_when_different
end
complete() click to toggle source
# File lib/similatron/run.rb, line 16
def complete
  write_reports
end
failed_comparisons() click to toggle source
# File lib/similatron/run.rb, line 54
def failed_comparisons
  comparisons.reject(&:same?)
end
html_report_path() click to toggle source
# File lib/similatron/run.rb, line 50
def html_report_path
  File.join(run_path, "report.html")
end
json_report_path() click to toggle source
# File lib/similatron/run.rb, line 46
def json_report_path
  File.join(run_path, "report.json")
end
overwrite_comparisons() click to toggle source
# File lib/similatron/run.rb, line 58
def overwrite_comparisons
  comparisons.select(&:overwrite?)
end
start(base_path: "tmp") click to toggle source
# File lib/similatron/run.rb, line 6
def start(base_path: "tmp")
  run_id = SecureRandom.urlsafe_base64(8)
  @run_path = File.join(base_path, "run_#{run_id}")

  @engines = build_engines

  @comparisons = []
  FileUtils.mkdir_p(run_path)
end
summary() click to toggle source
# File lib/similatron/run.rb, line 36
def summary
  return "" if failed_comparisons.empty? && overwrite_comparisons.empty?
  [
    "Similatron report:",
    "#{failed_comparisons.count} failures.",
    "#{overwrite_comparisons.count} new files.",
    "Report may be found in #{html_report_path}"
  ].join("\n")
end

Private Instance Methods

best_engine(file) click to toggle source
# File lib/similatron/run.rb, line 88
def best_engine(file)
  mime_type = `file --mime -b #{file}`.chomp
  engines.detect { |engine| engine.can_handle_mime?(mime_type) }
end
build_engines() click to toggle source
# File lib/similatron/run.rb, line 76
def build_engines
  engine_classes = [
    PdfComparisonEngine,
    ImagemagickComparisonEngine,
    DiffComparisonEngine,
    BinaryDiffComparisonEngine
  ]
  engine_classes.map do |engine_class|
    engine_class.new(diffs_path: run_path)
  end
end
copy_comparison(expected, actual) click to toggle source
# File lib/similatron/run.rb, line 66
def copy_comparison(expected, actual)
  FileUtils.cp(actual, expected)
  Comparison.new(
    overwrite: true,
    expected: expected,
    actual: actual,
    score: 0
  )
end
real_comparison(expected, actual) click to toggle source
# File lib/similatron/run.rb, line 93
def real_comparison(expected, actual)
  engine = best_engine(expected)

  engine.compare(
    expected: expected,
    actual: actual
  )
end
to_html() click to toggle source
# File lib/similatron/run.rb, line 106
def to_html
  HtmlReport.new(self).render
end
to_json() click to toggle source
# File lib/similatron/run.rb, line 102
def to_json
  comparisons.map(&:as_json).to_json
end
write_reports() click to toggle source
# File lib/similatron/run.rb, line 110
def write_reports
  File.write(html_report_path, to_html)
  File.write(json_report_path, to_json)
end