wraith 4.2.3 → 4.2.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 28550759d50cdaed1ea1b698a3fb77303bc6a8fd
4
- data.tar.gz: c14df69165a2e68e4200eecbe505c1d9b6a61b54
2
+ SHA256:
3
+ metadata.gz: 0db0af6f5dd16e7a2277219f65fa5dd11809e249a6178e9a23fd83b5d528507d
4
+ data.tar.gz: 597f19e645590a2d0f7d2f33bfb4fb485c07bef157bd7fab791a2399b47e488b
5
5
  SHA512:
6
- metadata.gz: 2efc466ce8a7bbbea675899da063d3221f80418beeaf4f5c983d43595f226afb4ec09fc2cb10f7d0f87f1e72dc20445197a4181327f61e234dc6c87b4582736f
7
- data.tar.gz: b3317399aa23705af8dddc3a55912d4c0ec11b2bf6ba404230c7810df313368bcde9c30620703d44138144042d4e8f26eadea9c859ca45be864e822aa55c29f0
6
+ metadata.gz: 4bfbc11c06483924537b9566dad29e46bed9923dc58f22f6a345c1512308d363c317d144ce6f6b91d2976ead8f501c4f7a43d990a22e5e7b26caac49a5a3b18a
7
+ data.tar.gz: 5289d351bf42e7b2c19c97b62d6df870b59e4395a78285e08948d9a83913e7d191901a2d58f096d06a6256ade62f69ad9262cd6c7329820787058d3dec03609e
data/README.md CHANGED
@@ -66,7 +66,7 @@ Wraith is available to everyone under the terms of the Apache 2.0 open source li
66
66
 
67
67
  ## Selenium-Wraith
68
68
 
69
- Anyone interested in integrating selenium capability with Wraith should check out [Selenium-Wraith](https://github.com/andrewccadman/wraith-selenium) (by Andrew Tekle-Cadman of Future Visible), which was forked from BBC's Wraith on 16/04/14 and adds the following capabilities:
69
+ Anyone interested in integrating selenium capability with Wraith should check out [Selenium-Wraith](https://github.com/mathew-hall/wraith-selenium) (maintained by Mathew Hall), which was forked from BBC's Wraith on 16/04/14 and adds the following capabilities:
70
70
 
71
71
  1. Selenium integration, both running locally on a desktop or on a selenium grid
72
72
  2. Browser to browser screenshot comparison
Binary file
Binary file
@@ -31,7 +31,7 @@ class Wraith::CompareImages
31
31
  end
32
32
 
33
33
  def compare_task(base, compare, output, info)
34
- cmdline = "compare -dissimilarity-threshold 1 -fuzz #{wraith.fuzz} -metric AE -highlight-color #{wraith.highlight_color} #{base} #{compare.shellescape} #{output}"
34
+ cmdline = "compare -fuzz #{wraith.fuzz} -metric AE -highlight-color #{wraith.highlight_color} #{base} #{compare.shellescape} #{output}"
35
35
  px_value = Open3.popen3(cmdline) { |_stdin, _stdout, stderr, _wait_thr| stderr.read }.to_f
36
36
  begin
37
37
  img_size = ImageSize.path(output).size.inject(:*)
@@ -1,4 +1,5 @@
1
1
  require "wraith"
2
+ require "fileutils"
2
3
 
3
4
  class SaveMetadata
4
5
  attr_reader :wraith, :history
@@ -14,6 +15,8 @@ class SaveMetadata
14
15
 
15
16
  def file_names(width, label, domain_label)
16
17
  width = "MULTI" if width.is_a? Array
18
+
19
+ FileUtils::mkdir_p "#{wraith.directory}/#{label}" # ensure the directory exists
17
20
  "#{wraith.directory}/#{label}/#{width}_#{engine}_#{domain_label}.png"
18
21
  end
19
22
 
@@ -53,8 +53,8 @@ class Wraith::SaveImages
53
53
  compare_file_name = meta.file_names(width, label, meta.compare_label)
54
54
 
55
55
  jobs = []
56
- jobs << [label, settings.path, prepare_widths_for_cli(width), settings.base_url, base_file_name, settings.selector, wraith.before_capture, settings.before_capture]
57
- jobs << [label, settings.path, prepare_widths_for_cli(width), settings.compare_url, compare_file_name, settings.selector, wraith.before_capture, settings.before_capture] unless settings.compare_url.nil?
56
+ jobs << [label, settings.path, prepare_widths_for_cli(width), settings.base_url, base_file_name, settings.selector, wraith.before_capture, settings.before_capture, 'invalid1.jpg']
57
+ jobs << [label, settings.path, prepare_widths_for_cli(width), settings.compare_url, compare_file_name, settings.selector, wraith.before_capture, settings.before_capture, 'invalid2.jpg'] unless settings.compare_url.nil?
58
58
 
59
59
  jobs
60
60
  end
@@ -67,6 +67,7 @@ class Wraith::SaveImages
67
67
 
68
68
  def run_command(command)
69
69
  output = []
70
+ command.gsub!(/'/, '')
70
71
  IO.popen(command).each do |line|
71
72
  logger.info line
72
73
  output << line.chomp!
@@ -75,7 +76,7 @@ class Wraith::SaveImages
75
76
  end
76
77
 
77
78
  def parallel_task(jobs)
78
- Parallel.each(jobs, :in_threads => 8) do |_label, _path, width, url, filename, selector, global_before_capture, path_before_capture|
79
+ Parallel.each(jobs, :in_threads => wraith.threads) do |_label, _path, width, url, filename, selector, global_before_capture, path_before_capture|
79
80
  begin
80
81
  if meta.engine == "chrome"
81
82
  capture_image_selenium(width, url, filename, selector, global_before_capture, path_before_capture)
@@ -84,8 +85,8 @@ class Wraith::SaveImages
84
85
  attempt_image_capture(command, filename)
85
86
  end
86
87
  rescue => e
87
- logger.error e
88
- create_invalid_image(filename, width)
88
+ logger.error "#{e}\n URL = #{url}"
89
+ create_invalid_image(filename, width, invalid_image_name)
89
90
  end
90
91
  end
91
92
  end
@@ -95,12 +96,16 @@ class Wraith::SaveImages
95
96
  case meta.engine
96
97
  when "chrome"
97
98
  options = Selenium::WebDriver::Chrome::Options.new
98
- options.add_argument('--disable-gpu')
99
- options.add_argument('--headless')
100
- options.add_argument('--device-scale-factor=1') # have to change cropping for 2x. also this is faster
101
- options.add_argument('--force-device-scale-factor')
102
- options.add_argument("--window-size=1200,1500") # resize later so we can reuse drivers
103
- options.add_argument("--hide-scrollbars") # hide scrollbars from screenshots
99
+ [
100
+ 'disable-gpu',
101
+ 'headless',
102
+ 'no-sandbox',
103
+ 'device-scale-factor=1',
104
+ 'force-device-scale-factor',
105
+ 'window-size=1200,1500',
106
+ 'hide-scrollbars',
107
+ 'ignore-certificate-errors'
108
+ ].each { |arg| options.add_argument("--#{arg}") }
104
109
  Selenium::WebDriver.for :chrome, options: options
105
110
  end
106
111
  end
@@ -110,7 +115,7 @@ class Wraith::SaveImages
110
115
  width = driver.execute_script("return Math.max(document.body.scrollWidth, document.body.offsetWidth, document.documentElement.clientWidth, document.documentElement.scrollWidth, document.documentElement.offsetWidth);")
111
116
  height = driver.execute_script("return Math.max(document.body.scrollHeight, document.body.offsetHeight, document.documentElement.clientHeight, document.documentElement.scrollHeight, document.documentElement.offsetHeight);")
112
117
  driver.manage.window.resize_to(width, height)
113
- end
118
+ end
114
119
 
115
120
  # crop an image around the coordinates of an element
116
121
  def crop_selector driver, selector, image_location
@@ -122,16 +127,25 @@ class Wraith::SaveImages
122
127
 
123
128
  def capture_image_selenium(screen_sizes, url, file_name, selector, global_before_capture, path_before_capture)
124
129
  driver = get_driver
130
+ driver.manage.timeouts.implicit_wait = 10;
125
131
  screen_sizes.to_s.split(",").each do |screen_size|
126
- width, height = screen_size.split("x")
127
- new_file_name = file_name.sub('MULTI', screen_size)
128
- driver.manage.window.resize_to(width, height || 1500)
129
- driver.navigate.to url
130
- driver.execute_async_script(File.read(global_before_capture)) if global_before_capture
131
- driver.execute_async_script(File.read(path_before_capture)) if path_before_capture
132
- resize_to_fit_page(driver) unless height
133
- driver.save_screenshot(new_file_name)
134
- crop_selector(driver, selector, new_file_name) if selector && selector.length > 0
132
+ for attempt in 1..3 do
133
+ begin
134
+ width, height = screen_size.split("x")
135
+ new_file_name = file_name.sub('MULTI', screen_size)
136
+ driver.manage.window.resize_to(width, height || 1500)
137
+ driver.navigate.to url
138
+ driver.manage.timeouts.implicit_wait = wraith.settle
139
+ driver.execute_script(File.read(global_before_capture)) if global_before_capture
140
+ driver.execute_script(File.read(path_before_capture)) if path_before_capture
141
+ resize_to_fit_page(driver) unless height
142
+ driver.save_screenshot(new_file_name)
143
+ crop_selector(driver, selector, new_file_name) if selector && selector.length > 0
144
+ break
145
+ rescue Net::ReadTimeout => e
146
+ logger.error "Got #{e} on attempt #{attempt} at screen size #{screensize}. URL = #{url}"
147
+ end
148
+ end
135
149
  end
136
150
  driver.quit
137
151
  end
@@ -163,9 +177,9 @@ class Wraith::SaveImages
163
177
  wraith.resize or File.exist? filename
164
178
  end
165
179
 
166
- def create_invalid_image(filename, width)
180
+ def create_invalid_image(filename, width, invalid_image_name)
167
181
  logger.warn "Using fallback image instead"
168
- invalid = File.expand_path("../../assets/invalid.jpg", File.dirname(__FILE__))
182
+ invalid = File.expand_path("../../assets/#{invalid_image_name}", File.dirname(__FILE__))
169
183
  FileUtils.cp invalid, filename
170
184
 
171
185
  set_image_width(filename, width)
@@ -1,3 +1,3 @@
1
1
  module Wraith
2
- VERSION = "4.2.3"
2
+ VERSION = "4.2.4"
3
3
  end
@@ -72,7 +72,7 @@ class Wraith::Wraith
72
72
  end
73
73
 
74
74
  def history_dir
75
- @config["history_dir"] || false
75
+ @config.fetch('history_dir', false)
76
76
  end
77
77
 
78
78
  def engine
@@ -109,7 +109,7 @@ class Wraith::Wraith
109
109
 
110
110
  def resize
111
111
  # @TODO make this default to true, once it's been tested a bit more thoroughly
112
- @config["resize_or_reload"] ? (@config["resize_or_reload"] == "resize") : false
112
+ @config.fetch('resize_or_reload', 'reload') == "resize"
113
113
  end
114
114
 
115
115
  def domains
@@ -132,8 +132,16 @@ class Wraith::Wraith
132
132
  domains.keys[1]
133
133
  end
134
134
 
135
+ def settle
136
+ @config.fetch('settle', 10)
137
+ end
138
+
139
+ def threads
140
+ @config.fetch('threads', '8').to_i
141
+ end
142
+
135
143
  def spider_file
136
- @config["spider_file"] ? @config["spider_file"] : "spider.txt"
144
+ @config.fetch('spider_file', 'spider.txt')
137
145
  end
138
146
 
139
147
  def spider_days
@@ -157,7 +165,7 @@ class Wraith::Wraith
157
165
  end
158
166
 
159
167
  def highlight_color
160
- @config["highlight_color"] ? @config["highlight_color"] : "blue"
168
+ @config.fetch('highlight_color', 'blue')
161
169
  end
162
170
 
163
171
  def mode
@@ -169,34 +177,19 @@ class Wraith::Wraith
169
177
  end
170
178
 
171
179
  def threshold
172
- @config["threshold"] ? @config["threshold"] : 0
180
+ @config.fetch('threshold', 0)
173
181
  end
174
182
 
175
183
  def gallery_template
176
- default = "basic_template"
177
- if @config["gallery"].nil?
178
- default
179
- else
180
- @config["gallery"]["template"] || default
181
- end
184
+ @config.fetch('gallery', {}).fetch('template', 'basic_template')
182
185
  end
183
186
 
184
187
  def thumb_height
185
- default = 200
186
- if @config["gallery"].nil?
187
- default
188
- else
189
- @config["gallery"]["thumb_height"] || default
190
- end
188
+ @config.fetch('gallery', {}).fetch('thumb_height', 200)
191
189
  end
192
190
 
193
191
  def thumb_width
194
- default = 200
195
- if @config["gallery"].nil?
196
- default
197
- else
198
- @config["gallery"]["thumb_width"] || default
199
- end
192
+ @config.fetch('gallery', {}).fetch('thumb_width', 200)
200
193
  end
201
194
 
202
195
  def phantomjs_options
@@ -204,11 +197,11 @@ class Wraith::Wraith
204
197
  end
205
198
 
206
199
  def imports
207
- @config['imports'] || false
200
+ @config.fetch('imports', false)
208
201
  end
209
202
 
210
203
  def verbose
211
204
  # @TODO - also add a `--verbose` CLI flag which overrides whatever you have set in the config
212
- @config["verbose"] || false
205
+ @config.fetch('verbose', false)
213
206
  end
214
207
  end
@@ -1,6 +1,5 @@
1
1
  require "rspec"
2
2
  require "./lib/wraith/cli"
3
- require "pry"
4
3
 
5
4
  def create_diff_image
6
5
  capture_image = saving.construct_command(320, test_url1, test_image1, selector, false, false)
@@ -17,6 +17,26 @@ describe "wraith config" do
17
17
  expect(wraith.config).to include "directory" => "shots"
18
18
  end
19
19
 
20
+ it 'returns default values for threads' do
21
+ expect(wraith.threads).to eq 8
22
+ end
23
+ it 'returns default values for settle' do
24
+ expect(wraith.settle).to eq 10
25
+ end
26
+
27
+ context 'non-standard config values' do
28
+ let(:config) { YAML.load "browser: phantomjs\nthreads: 2\nsettle: 5"}
29
+ let(:non_standard_wraith) { Wraith::Wraith.new( config, { yaml_passed: true }) }
30
+
31
+ it 'returns overridden value when threads is specified in config' do
32
+ expect(non_standard_wraith.threads).to eq 2
33
+ end
34
+
35
+ it 'returns overridden value when settle is specified in config' do
36
+ expect(non_standard_wraith.settle).to eq 5
37
+ end
38
+ end
39
+
20
40
  it "should be able to import other configs" do
21
41
  config_name = get_path_relative_to __FILE__, "./configs/test_config--imports.yaml"
22
42
  wraith = Wraith::Wraith.new(config_name)
@@ -28,3 +28,6 @@ paths:
28
28
 
29
29
  #Amount of fuzz ImageMagick will use
30
30
  fuzz: '20%'
31
+
32
+ # Number of threads used when saving images
33
+ threads: 7
@@ -32,3 +32,7 @@ paths:
32
32
 
33
33
  #Amount of fuzz ImageMagick will use
34
34
  fuzz: '20%'
35
+
36
+
37
+ # Number of threads used when saving images
38
+ #threads: 7
@@ -1,4 +1,4 @@
1
- var callback = arguments[arguments.length-1];
2
- document.body.innerHTML = "&nbsp;";
3
- document.body.style['background-color'] = 'red';
4
- callback();
1
+ (function () {
2
+ document.body.innerHTML = "&nbsp;";
3
+ document.body.style['background-color'] = 'red';
4
+ })();
@@ -1,4 +1,4 @@
1
- var callback = arguments[arguments.length-1];
2
- document.body.innerHTML = "&nbsp;";
3
- document.body.style['background-color'] = 'green';
4
- callback();
1
+ (function () {
2
+ document.body.innerHTML = "&nbsp;";
3
+ document.body.style['background-color'] = 'green';
4
+ })();
@@ -21,6 +21,8 @@ describe "wraith config" do
21
21
  test: http://www.bbc.com
22
22
  paths:
23
23
  test: /mypage
24
+ directory:
25
+ test
24
26
  screen_widths:
25
27
  - 320
26
28
  - 464
@@ -41,10 +43,10 @@ describe "wraith config" do
41
43
  expect(efficient_jobs.length).to be 1
42
44
  expect(inefficient_jobs.length).to be 3 # 1 for each screen width
43
45
 
44
- # [["test", "/mypage", "320,464,624", "http://www.bbc.com/mypage", "/test/MULTI__test.png", " ", "false", "false"]]
46
+ # [["test", "/mypage", "320,464,624", "http://www.bbc.com/mypage", "test/MULTI__test.png", " ", "false", "false"]]
45
47
  expect(efficient_jobs[0][2]).to eq "320,464,624"
46
48
 
47
- # [["test", "/mypage", 320, "http://www.bbc.com/mypage", "/test/320__test.png", " ", "false", "false"], ["test", "/mypage", 464, "http://www.bbc.com/mypage", "/test/464__test.png", " ", "false", "false"], ["test", "/mypage", 624, "http://www.bbc.com/mypage", "/test/624__test.png", " ", "false", "false"]]
49
+ # [["test", "/mypage", 320, "http://www.bbc.com/mypage", "test/320__test.png", " ", "false", "false"], ["test", "/mypage", 464, "http://www.bbc.com/mypage", "/test/464__test.png", " ", "false", "false"], ["test", "/mypage", 624, "http://www.bbc.com/mypage", "/test/624__test.png", " ", "false", "false"]]
48
50
  expect(inefficient_jobs[0][2]).to eq 320
49
51
  end
50
52
  end
@@ -59,3 +59,7 @@ gallery:
59
59
  # diffs_only - only paths with a difference are shown, sorted by difference size (largest first)
60
60
  # Note: different screen widths are always grouped together.
61
61
  mode: diffs_first
62
+
63
+ # (optional) Set the number of threads to use when saving images. Raising this value can improve performance, but very high
64
+ # values can lead to server connection issues. Set to around 1.5 the available CPU cores for best performance. Default: 8
65
+ threads: 8
@@ -79,3 +79,7 @@ highlight_color: red
79
79
 
80
80
  # (optional) Parameters to pass to Phantom/Casper command line. Default: '--ignore-ssl-errors=true --ssl-protocol=tlsv1'
81
81
  phantomjs_options: ''
82
+
83
+ # (optional) Set the number of threads to use when saving images. Raising this value can improve performance, but very high
84
+ # values can lead to server connection issues. Set to around 1.5 the available CPU cores for best performance. Default: 8
85
+ threads: 8
@@ -58,3 +58,7 @@ directory: 'shots'
58
58
  # diffs_first - all paths (with or without a difference) are shown, sorted by difference size (largest first)
59
59
  # diffs_only - only paths with a difference are shown, sorted by difference size (largest first)
60
60
  mode: diffs_first
61
+
62
+ # (optional) Set the number of threads to use when saving images. Raising this value can improve performance, but very high
63
+ # values can lead to server connection issues. Set to around 1.5 the available CPU cores for best performance. Default: 8
64
+ threads: 8
@@ -8,17 +8,16 @@ Gem::Specification.new do |spec|
8
8
  spec.version = Wraith::VERSION
9
9
  spec.authors = ['Dave Blooman', 'Simon Thulbourn', 'Chris Ashton']
10
10
  spec.email = ['david.blooman@gmail.com', 'simon+github@thulbourn.com', 'chrisashtonweb@gmail.com']
11
- spec.summary = 'Wraith is a screenshot comparison tool, created by developers at BBC News.'
11
+ spec.summary = 'Wraith screenshot comparison tool'
12
12
  spec.description = 'Wraith is a screenshot comparison tool, created by developers at BBC News.'
13
13
  spec.homepage = 'https://github.com/BBC-News/wraith'
14
- spec.license = 'Apache 2'
14
+ spec.license = 'Apache-2.0'
15
15
 
16
16
  spec.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
17
17
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ['lib']
20
20
 
21
- spec.add_development_dependency 'pry'
22
21
  spec.add_development_dependency 'rspec'
23
22
  spec.add_development_dependency 'casperjs'
24
23
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wraith
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.2.3
4
+ version: 4.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dave Blooman
@@ -10,188 +10,174 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2018-07-31 00:00:00.000000000 Z
13
+ date: 2019-06-26 00:00:00.000000000 Z
14
14
  dependencies:
15
- - !ruby/object:Gem::Dependency
16
- name: pry
17
- requirement: !ruby/object:Gem::Requirement
18
- requirements:
19
- - - '>='
20
- - !ruby/object:Gem::Version
21
- version: '0'
22
- type: :development
23
- prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
- requirements:
26
- - - '>='
27
- - !ruby/object:Gem::Version
28
- version: '0'
29
15
  - !ruby/object:Gem::Dependency
30
16
  name: rspec
31
17
  requirement: !ruby/object:Gem::Requirement
32
18
  requirements:
33
- - - '>='
19
+ - - ">="
34
20
  - !ruby/object:Gem::Version
35
21
  version: '0'
36
22
  type: :development
37
23
  prerelease: false
38
24
  version_requirements: !ruby/object:Gem::Requirement
39
25
  requirements:
40
- - - '>='
26
+ - - ">="
41
27
  - !ruby/object:Gem::Version
42
28
  version: '0'
43
29
  - !ruby/object:Gem::Dependency
44
30
  name: casperjs
45
31
  requirement: !ruby/object:Gem::Requirement
46
32
  requirements:
47
- - - '>='
33
+ - - ">="
48
34
  - !ruby/object:Gem::Version
49
35
  version: '0'
50
36
  type: :development
51
37
  prerelease: false
52
38
  version_requirements: !ruby/object:Gem::Requirement
53
39
  requirements:
54
- - - '>='
40
+ - - ">="
55
41
  - !ruby/object:Gem::Version
56
42
  version: '0'
57
43
  - !ruby/object:Gem::Dependency
58
44
  name: rake
59
45
  requirement: !ruby/object:Gem::Requirement
60
46
  requirements:
61
- - - '>='
47
+ - - ">="
62
48
  - !ruby/object:Gem::Version
63
49
  version: '0'
64
50
  type: :runtime
65
51
  prerelease: false
66
52
  version_requirements: !ruby/object:Gem::Requirement
67
53
  requirements:
68
- - - '>='
54
+ - - ">="
69
55
  - !ruby/object:Gem::Version
70
56
  version: '0'
71
57
  - !ruby/object:Gem::Dependency
72
58
  name: image_size
73
59
  requirement: !ruby/object:Gem::Requirement
74
60
  requirements:
75
- - - '>='
61
+ - - ">="
76
62
  - !ruby/object:Gem::Version
77
63
  version: '0'
78
64
  type: :runtime
79
65
  prerelease: false
80
66
  version_requirements: !ruby/object:Gem::Requirement
81
67
  requirements:
82
- - - '>='
68
+ - - ">="
83
69
  - !ruby/object:Gem::Version
84
70
  version: '0'
85
71
  - !ruby/object:Gem::Dependency
86
72
  name: mini_magick
87
73
  requirement: !ruby/object:Gem::Requirement
88
74
  requirements:
89
- - - ~>
75
+ - - "~>"
90
76
  - !ruby/object:Gem::Version
91
77
  version: '4.8'
92
78
  type: :runtime
93
79
  prerelease: false
94
80
  version_requirements: !ruby/object:Gem::Requirement
95
81
  requirements:
96
- - - ~>
82
+ - - "~>"
97
83
  - !ruby/object:Gem::Version
98
84
  version: '4.8'
99
85
  - !ruby/object:Gem::Dependency
100
86
  name: anemone
101
87
  requirement: !ruby/object:Gem::Requirement
102
88
  requirements:
103
- - - '>='
89
+ - - ">="
104
90
  - !ruby/object:Gem::Version
105
91
  version: '0'
106
92
  type: :runtime
107
93
  prerelease: false
108
94
  version_requirements: !ruby/object:Gem::Requirement
109
95
  requirements:
110
- - - '>='
96
+ - - ">="
111
97
  - !ruby/object:Gem::Version
112
98
  version: '0'
113
99
  - !ruby/object:Gem::Dependency
114
100
  name: robotex
115
101
  requirement: !ruby/object:Gem::Requirement
116
102
  requirements:
117
- - - '>='
103
+ - - ">="
118
104
  - !ruby/object:Gem::Version
119
105
  version: '0'
120
106
  type: :runtime
121
107
  prerelease: false
122
108
  version_requirements: !ruby/object:Gem::Requirement
123
109
  requirements:
124
- - - '>='
110
+ - - ">="
125
111
  - !ruby/object:Gem::Version
126
112
  version: '0'
127
113
  - !ruby/object:Gem::Dependency
128
114
  name: log4r
129
115
  requirement: !ruby/object:Gem::Requirement
130
116
  requirements:
131
- - - '>='
117
+ - - ">="
132
118
  - !ruby/object:Gem::Version
133
119
  version: '0'
134
120
  type: :runtime
135
121
  prerelease: false
136
122
  version_requirements: !ruby/object:Gem::Requirement
137
123
  requirements:
138
- - - '>='
124
+ - - ">="
139
125
  - !ruby/object:Gem::Version
140
126
  version: '0'
141
127
  - !ruby/object:Gem::Dependency
142
128
  name: thor
143
129
  requirement: !ruby/object:Gem::Requirement
144
130
  requirements:
145
- - - '>='
131
+ - - ">="
146
132
  - !ruby/object:Gem::Version
147
133
  version: '0'
148
134
  type: :runtime
149
135
  prerelease: false
150
136
  version_requirements: !ruby/object:Gem::Requirement
151
137
  requirements:
152
- - - '>='
138
+ - - ">="
153
139
  - !ruby/object:Gem::Version
154
140
  version: '0'
155
141
  - !ruby/object:Gem::Dependency
156
142
  name: parallel
157
143
  requirement: !ruby/object:Gem::Requirement
158
144
  requirements:
159
- - - '>='
145
+ - - ">="
160
146
  - !ruby/object:Gem::Version
161
147
  version: '0'
162
148
  type: :runtime
163
149
  prerelease: false
164
150
  version_requirements: !ruby/object:Gem::Requirement
165
151
  requirements:
166
- - - '>='
152
+ - - ">="
167
153
  - !ruby/object:Gem::Version
168
154
  version: '0'
169
155
  - !ruby/object:Gem::Dependency
170
156
  name: selenium-webdriver
171
157
  requirement: !ruby/object:Gem::Requirement
172
158
  requirements:
173
- - - ~>
159
+ - - "~>"
174
160
  - !ruby/object:Gem::Version
175
161
  version: '3.5'
176
162
  type: :runtime
177
163
  prerelease: false
178
164
  version_requirements: !ruby/object:Gem::Requirement
179
165
  requirements:
180
- - - ~>
166
+ - - "~>"
181
167
  - !ruby/object:Gem::Version
182
168
  version: '3.5'
183
169
  - !ruby/object:Gem::Dependency
184
170
  name: chromedriver-helper
185
171
  requirement: !ruby/object:Gem::Requirement
186
172
  requirements:
187
- - - ~>
173
+ - - "~>"
188
174
  - !ruby/object:Gem::Version
189
175
  version: '1.1'
190
176
  type: :runtime
191
177
  prerelease: false
192
178
  version_requirements: !ruby/object:Gem::Requirement
193
179
  requirements:
194
- - - ~>
180
+ - - "~>"
195
181
  - !ruby/object:Gem::Version
196
182
  version: '1.1'
197
183
  description: Wraith is a screenshot comparison tool, created by developers at BBC
@@ -205,19 +191,20 @@ executables:
205
191
  extensions: []
206
192
  extra_rdoc_files: []
207
193
  files:
208
- - .gemset
209
- - .github/CONTRIBUTING.md
210
- - .github/ISSUE_TEMPLATE.md
211
- - .gitignore
212
- - .rubocop.yml
213
- - .ruby-version
214
- - .travis.yml
194
+ - ".gemset"
195
+ - ".github/CONTRIBUTING.md"
196
+ - ".github/ISSUE_TEMPLATE.md"
197
+ - ".gitignore"
198
+ - ".rubocop.yml"
199
+ - ".ruby-version"
200
+ - ".travis.yml"
215
201
  - Dockerfile
216
202
  - Gemfile
217
203
  - LICENSE
218
204
  - README.md
219
205
  - Rakefile
220
- - assets/invalid.jpg
206
+ - assets/invalid1.jpg
207
+ - assets/invalid2.jpg
221
208
  - assets/wraith-logo.png
222
209
  - bin/wraith
223
210
  - lib/wraith.rb
@@ -283,7 +270,7 @@ files:
283
270
  - wraith.gemspec
284
271
  homepage: https://github.com/BBC-News/wraith
285
272
  licenses:
286
- - Apache 2
273
+ - Apache-2.0
287
274
  metadata: {}
288
275
  post_install_message:
289
276
  rdoc_options: []
@@ -291,20 +278,20 @@ require_paths:
291
278
  - lib
292
279
  required_ruby_version: !ruby/object:Gem::Requirement
293
280
  requirements:
294
- - - '>='
281
+ - - ">="
295
282
  - !ruby/object:Gem::Version
296
283
  version: '0'
297
284
  required_rubygems_version: !ruby/object:Gem::Requirement
298
285
  requirements:
299
- - - '>='
286
+ - - ">="
300
287
  - !ruby/object:Gem::Version
301
288
  version: '0'
302
289
  requirements: []
303
290
  rubyforge_project:
304
- rubygems_version: 2.6.14
291
+ rubygems_version: 2.7.10
305
292
  signing_key:
306
293
  specification_version: 4
307
- summary: Wraith is a screenshot comparison tool, created by developers at BBC News.
294
+ summary: Wraith screenshot comparison tool
308
295
  test_files:
309
296
  - spec/_helpers.rb
310
297
  - spec/base/global.png
Binary file