class Screenpress::Saver

Attributes

capybara[R]
filename[R]
page[R]

Public Class Methods

new(filename, capybara = nil, page = nil) click to toggle source
# File lib/screenpress/saver.rb, line 7
def initialize(filename, capybara = nil, page = nil)
  @capybara = capybara || Capybara
  @page     = page || @capybara.page
  @filename = filename
end

Public Instance Methods

comparator() click to toggle source
# File lib/screenpress/saver.rb, line 71
def comparator
  case Screenpress.config.comparator
  when "bits"
    Screenpress::Compare::Bits
  when "phashion", "phash"
    Screenpress::Compare::Phashion
  when "magick"
    raise "ImageMagick comparator not yet implemented"
  when "perceptualdiff"
    raise "perceptualdiff comparator not yet implemented"
  else
    raise "Unknown comparator"
  end
end
ensure_directory() click to toggle source
# File lib/screenpress/saver.rb, line 86
def ensure_directory
  folder = File.dirname(filename)
  return if File.directory?(folder)
  FileUtils.mkdir_p(folder)
end
same?(filename, tmp_file) click to toggle source
# File lib/screenpress/saver.rb, line 43
def same?(filename, tmp_file)
  return !File.exists?(tmp_file) if !File.exists?(filename)

  compare = comparator.new(filename, tmp_file)
  if compare.respond_to?(:difference)
    difference = compare.difference
    if compare.respond_to?(:threshold)
      threshold = compare.threshold
    else
      threshold = Screenpress.config.threshold || 0
    end
    if difference > threshold
      puts "   Screenpress #{filename} different: #{difference} > #{threshold}"
      return false
    else
      puts "   Screenpress #{filename} same: #{difference} <= #{threshold}"
      return true
    end
  else
    if compare.same?
      return true
    else
      puts "   Screenpress #{filename} different!"
      return false
    end
  end
end
save() click to toggle source
# File lib/screenpress/saver.rb, line 13
def save
  # if current_path empty then nothing to screen shot as browser has not loaded any URL
  return false if capybara.current_path.to_s.empty?
  save_screenshot
end
save_screenshot() click to toggle source
# File lib/screenpress/saver.rb, line 19
def save_screenshot
  tmp_file = self.tmp_filename

  # settings to nil because of issues in some version of capybara
  old_path = Capybara.save_and_open_page_path
  Capybara.save_and_open_page_path = nil

  ensure_directory

  return false unless Screenpress::Saver::Proxy.save!(capybara.current_driver, page.driver, tmp_file)

  # is it different?
  if same?(filename, tmp_file)
    File.delete(tmp_file)
  else
    FileUtils.mv(tmp_file, filename)
  end
  return true

rescue Exception => e
  File.delete(tmp_file) if tmp_file && File.exists?(tmp_file)
  raise e
end
tmp_filename() click to toggle source
# File lib/screenpress/saver.rb, line 92
def tmp_filename
  tmp_dir  = Screenpress.config.full_tmp_path.to_s
  tmp_file = "#{tmp_dir}/screenpress_#{File.basename(filename)}"
  tmp_file
end