class ImageDiff
Public Class Methods
new(baseline, screenshot, acceptant_criteria)
click to toggle source
# File lib/image_comparable/image_diff.rb, line 3 def initialize(baseline, screenshot, acceptant_criteria) @baseline = baseline.image @screenshot = screenshot.image @diff = [] @baseline.height.times do |y| @baseline.row(y).each_with_index do |pixel, x| @diff << [x, y] unless pixel == @screenshot[x, y] end end @x = @diff.map { |xy| xy[0] } @y = @diff.map { |xy| xy[1] } @acceptant_criteria = acceptant_criteria end
Public Instance Methods
calculate_score(diff, screenshot, acceptant_criteria)
click to toggle source
# File lib/image_comparable/image_diff.rb, line 27 def calculate_score(diff, screenshot, acceptant_criteria) raise 'Acceptant criteria cannot be null' if acceptant_criteria.nil? acceptant_criteria = acceptant_criteria.to_f result = (diff.length.to_f / screenshot.pixels.length) * 100 return unless result > acceptant_criteria raise "The score result: #{result}%, is minor then " \ "acceptant_criteria: #{acceptant_criteria}%" end
draw()
click to toggle source
# File lib/image_comparable/image_diff.rb, line 38 def draw @screenshot.rect(@x.min, @y.min, @x.max, @y.max, ChunkyPNG::Color::BLACK) end
file_name()
click to toggle source
# File lib/image_comparable/image_diff.rb, line 46 def file_name "#{Time.now.strftime('%Y%m%d')}_diff.png" end
path()
click to toggle source
# File lib/image_comparable/image_diff.rb, line 42 def path @path ||= File.join(FileUtils.pwd, 'diff_images') end
save()
click to toggle source
# File lib/image_comparable/image_diff.rb, line 20 def save Dir.mkdir(path) unless Dir.exist?(path) draw.save(File.join(path, file_name)) calculate_score(@diff, @screenshot, @acceptant_criteria) end