wraith 1.3.0 → 1.3.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/Rakefile +1 -7
- data/bin/wraith +1 -1
- data/lib/wraith/cli.rb +8 -7
- data/lib/wraith/crop.rb +5 -1
- data/lib/wraith/folder.rb +2 -3
- data/lib/wraith/gallery.rb +3 -3
- data/lib/wraith/save_images.rb +10 -2
- data/lib/wraith/spider.rb +3 -12
- data/lib/wraith/thumbnails.rb +5 -1
- data/lib/wraith/version.rb +1 -1
- data/lib/wraith/wraith.rb +11 -26
- data/spec/wraith_spec.rb +4 -3
- metadata +2 -3
- data/lib/wraith/images.rb +0 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 49d53e6583e9fabf57c3f55f25567c2ac8ce32ec
|
4
|
+
data.tar.gz: 88d3d71b9c69d819769a5ab18d92a5433d1c2900
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f676037d79b75fb02c4912bc23a4ab119fd5a0ab7645bade4ecc4abb3672c0c08cda53a53942989d8f31eb71edd8c0cb1780e6435e1b64e14fac2c6b6ed68465
|
7
|
+
data.tar.gz: 7610535f0bfe23ff74df774502e32f8f63ec30423a3e42e1b1f071deb31c387b9d51249e1ef7f60895cc71f896aafd528afa908502ab33ba178ea4c9fba68ed7
|
data/.gitignore
CHANGED
data/Rakefile
CHANGED
@@ -7,7 +7,6 @@ require 'wraith/spider'
|
|
7
7
|
require 'wraith/folder'
|
8
8
|
require 'wraith/thumbnails'
|
9
9
|
require 'wraith/compare_images'
|
10
|
-
require 'wraith/images'
|
11
10
|
require 'wraith/gallery'
|
12
11
|
|
13
12
|
@config = ('config')
|
@@ -19,7 +18,7 @@ task :config, [:yaml] do |_t, custom|
|
|
19
18
|
Rake::Task['default'].invoke
|
20
19
|
end
|
21
20
|
|
22
|
-
task default: [:reset_shots_folder, :check_for_paths, :setup_folders, :save_images, :
|
21
|
+
task default: [:reset_shots_folder, :check_for_paths, :setup_folders, :save_images, :crop_images, :compare_images, :generate_thumbnails, :generate_gallery] do
|
23
22
|
puts 'Done!'
|
24
23
|
end
|
25
24
|
|
@@ -53,11 +52,6 @@ task :crop_images do
|
|
53
52
|
crop.crop_images
|
54
53
|
end
|
55
54
|
|
56
|
-
task :check_images do
|
57
|
-
image = Wraith::Images.new(@config)
|
58
|
-
image.files
|
59
|
-
end
|
60
|
-
|
61
55
|
task :generate_thumbnails do
|
62
56
|
thumbs = Wraith::Thumbnails.new(@config)
|
63
57
|
thumbs.generate_thumbnails
|
data/bin/wraith
CHANGED
data/lib/wraith/cli.rb
CHANGED
@@ -6,7 +6,6 @@ require 'wraith/spider'
|
|
6
6
|
require 'wraith/folder'
|
7
7
|
require 'wraith/thumbnails'
|
8
8
|
require 'wraith/compare_images'
|
9
|
-
require 'wraith/images'
|
10
9
|
require 'wraith/gallery'
|
11
10
|
|
12
11
|
class Wraith::CLI < Thor
|
@@ -41,11 +40,6 @@ class Wraith::CLI < Thor
|
|
41
40
|
spider = Wraith::Spidering.new(config_name)
|
42
41
|
spider.check_for_paths
|
43
42
|
end
|
44
|
-
|
45
|
-
def check_images(config_name)
|
46
|
-
image = Wraith::Images.new(config_name)
|
47
|
-
image.files
|
48
|
-
end
|
49
43
|
end
|
50
44
|
|
51
45
|
desc 'save_images [config_name]', 'captures screenshots'
|
@@ -85,10 +79,17 @@ class Wraith::CLI < Thor
|
|
85
79
|
check_for_paths(config)
|
86
80
|
setup_folders(config)
|
87
81
|
save_images(config)
|
88
|
-
check_images(config)
|
89
82
|
crop_images(config)
|
90
83
|
compare_images(config)
|
91
84
|
generate_thumbnails(config)
|
92
85
|
generate_gallery(config)
|
93
86
|
end
|
87
|
+
|
88
|
+
desc 'multi_capture [filelist]', 'A Batch of Wraith Jobs'
|
89
|
+
def multi_capture(filelist)
|
90
|
+
config_array = IO.readlines(filelist)
|
91
|
+
config_array.each do |config|
|
92
|
+
capture(config.chomp)
|
93
|
+
end
|
94
|
+
end
|
94
95
|
end
|
data/lib/wraith/crop.rb
CHANGED
@@ -26,10 +26,14 @@ class Wraith::CropImages
|
|
26
26
|
height_to_crop_to = compare_height
|
27
27
|
end
|
28
28
|
|
29
|
-
|
29
|
+
crop_task(image_to_crop, height_to_crop_to)
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
33
|
+
def crop_task(crop, height)
|
34
|
+
`convert #{crop} -background none -extent 0x#{height} #{crop}`
|
35
|
+
end
|
36
|
+
|
33
37
|
def image_height(image)
|
34
38
|
File.open(image, 'rb') do |fh|
|
35
39
|
size = ImageSize.new(fh.read).size
|
data/lib/wraith/folder.rb
CHANGED
@@ -44,17 +44,16 @@ class Wraith::FolderManager
|
|
44
44
|
|
45
45
|
# Tidy up the shots folder, removing uncessary files
|
46
46
|
#
|
47
|
-
def tidy_shots_folder
|
47
|
+
def tidy_shots_folder(dirs)
|
48
48
|
if wraith.mode == 'diffs_only'
|
49
49
|
dirs.each do |a, b|
|
50
50
|
# If we are running in "diffs_only mode, and none of the variants show a difference
|
51
51
|
# we remove the file from the shots folder
|
52
|
-
if b.none? {|
|
52
|
+
if b.none? { |_k, v| v[:data] > 0 }
|
53
53
|
FileUtils.rm_rf("#{wraith.directory}/#{a}")
|
54
54
|
dirs.delete(a)
|
55
55
|
end
|
56
56
|
end
|
57
57
|
end
|
58
58
|
end
|
59
|
-
|
60
59
|
end
|
data/lib/wraith/gallery.rb
CHANGED
@@ -70,10 +70,10 @@ class Wraith::GalleryGenerator
|
|
70
70
|
end
|
71
71
|
end
|
72
72
|
@folder_manager.tidy_shots_folder(@dirs)
|
73
|
-
if
|
74
|
-
@sorted = @dirs.sort_by { |
|
73
|
+
if %w(diffs_only diffs_first).include?(wraith.mode)
|
74
|
+
@sorted = @dirs.sort_by { |_category, sizes| -1 * sizes.max_by { |_size, dict| dict[:data] }[1][:data] }
|
75
75
|
else
|
76
|
-
@sorted = @dirs.sort_by { |category,
|
76
|
+
@sorted = @dirs.sort_by { |category, _sizes| category }
|
77
77
|
end
|
78
78
|
# The sort has made this into an enumerable, convert it back to a Hash
|
79
79
|
Hash[@sorted]
|
data/lib/wraith/save_images.rb
CHANGED
@@ -39,7 +39,7 @@ class Wraith::SaveImages
|
|
39
39
|
|
40
40
|
def attempt_image_capture(width, url, filename, max_attempts)
|
41
41
|
max_attempts.times do |i|
|
42
|
-
|
42
|
+
capture_page_image engine, url, width, filename
|
43
43
|
|
44
44
|
return if File.exist? filename
|
45
45
|
|
@@ -80,8 +80,16 @@ class Wraith::SaveImages
|
|
80
80
|
FileUtils.cp invalid, filename
|
81
81
|
|
82
82
|
# Set width of fallback image
|
83
|
-
|
83
|
+
set_image_width(filename, width)
|
84
84
|
end
|
85
85
|
end
|
86
86
|
end
|
87
|
+
|
88
|
+
def set_image_width(image, width)
|
89
|
+
`convert #{image} -background none -extent #{width}x0 #{image}`
|
90
|
+
end
|
91
|
+
|
92
|
+
def capture_page_image(browser, url, width, file_name)
|
93
|
+
puts `"#{browser}" "#{wraith.phantomjs_options}" "#{wraith.snap_file}" "#{url}" "#{width}" "#{file_name}"`
|
94
|
+
end
|
87
95
|
end
|
data/lib/wraith/spider.rb
CHANGED
@@ -4,7 +4,6 @@ require 'nokogiri'
|
|
4
4
|
require 'uri'
|
5
5
|
|
6
6
|
class Wraith::Spidering
|
7
|
-
|
8
7
|
def initialize(config)
|
9
8
|
@wraith = Wraith::Wraith.new(config)
|
10
9
|
end
|
@@ -24,7 +23,6 @@ class Wraith::Spidering
|
|
24
23
|
end
|
25
24
|
|
26
25
|
class Wraith::Spider
|
27
|
-
|
28
26
|
def initialize(wraith)
|
29
27
|
@wraith = wraith
|
30
28
|
@paths = {}
|
@@ -40,19 +38,16 @@ class Wraith::Spider
|
|
40
38
|
def write_file
|
41
39
|
File.open(@wraith.spider_file, 'w+') { |file| file.write(@paths) }
|
42
40
|
end
|
43
|
-
|
41
|
+
|
44
42
|
def add_path(path)
|
45
43
|
@paths[path == '/' ? 'home' : path.gsub('/', '__').chomp('__').downcase] = path.downcase
|
46
44
|
end
|
47
45
|
|
48
46
|
def spider
|
49
|
-
|
50
47
|
end
|
51
|
-
|
52
48
|
end
|
53
49
|
|
54
50
|
class Wraith::Crawler < Wraith::Spider
|
55
|
-
|
56
51
|
EXT = %w(flv swf png jpg gif asx zip rar tar 7z \
|
57
52
|
gz jar js css dtd xsd ico raw mp3 mp4 \
|
58
53
|
wav wmv ape aac ac3 wma aiff mpg mpeg \
|
@@ -77,15 +72,13 @@ class Wraith::Crawler < Wraith::Spider
|
|
77
72
|
def modified_since(file, since)
|
78
73
|
(Time.now - File.ctime(file)) / (24 * 3600) < since
|
79
74
|
end
|
80
|
-
|
81
75
|
end
|
82
76
|
|
83
77
|
class Wraith::Sitemap < Wraith::Spider
|
84
|
-
|
85
78
|
def spider
|
86
79
|
unless @wraith.sitemap.nil?
|
87
80
|
puts "reading sitemap.xml from #{@wraith.sitemap}"
|
88
|
-
if @wraith.sitemap =~ URI
|
81
|
+
if @wraith.sitemap =~ URI.regexp
|
89
82
|
sitemap = Nokogiri::XML(open(@wraith.sitemap))
|
90
83
|
else
|
91
84
|
sitemap = Nokogiri::XML(File.open(@wraith.sitemap))
|
@@ -94,7 +87,7 @@ class Wraith::Sitemap < Wraith::Spider
|
|
94
87
|
sitemap.css('loc').each do |loc|
|
95
88
|
path = loc.content
|
96
89
|
# Allow use of either domain in the sitemap.xml
|
97
|
-
@wraith.domains.each do |
|
90
|
+
@wraith.domains.each do |_k, v|
|
98
91
|
path.sub!(v, '')
|
99
92
|
end
|
100
93
|
if @wraith.spider_skips.nil? || @wraith.spider_skips.none? { |regex| regex.match(path) }
|
@@ -103,6 +96,4 @@ class Wraith::Sitemap < Wraith::Spider
|
|
103
96
|
end
|
104
97
|
end
|
105
98
|
end
|
106
|
-
|
107
99
|
end
|
108
|
-
|
data/lib/wraith/thumbnails.rb
CHANGED
@@ -15,7 +15,11 @@ class Wraith::Thumbnails
|
|
15
15
|
|
16
16
|
Parallel.each(files, in_processes: Parallel.processor_count) do |filename|
|
17
17
|
new_name = filename.gsub(/^#{wraith.directory}/, "#{wraith.directory}/thumbnails")
|
18
|
-
|
18
|
+
thumbnail_image(filename, new_name)
|
19
19
|
end
|
20
20
|
end
|
21
|
+
|
22
|
+
def thumbnail_image(png_path, output_path)
|
23
|
+
`convert #{png_path} -thumbnail 200 -crop 200x200+0+0 #{output_path}`
|
24
|
+
end
|
21
25
|
end
|
data/lib/wraith/version.rb
CHANGED
data/lib/wraith/wraith.rb
CHANGED
@@ -4,7 +4,14 @@ class Wraith::Wraith
|
|
4
4
|
attr_accessor :config
|
5
5
|
|
6
6
|
def initialize(config_name)
|
7
|
-
|
7
|
+
if File.exist?(config_name) && File.extname(config_name) == '.yaml'
|
8
|
+
@config = YAML.load(File.open(config_name))
|
9
|
+
else
|
10
|
+
@config = YAML.load(File.open("configs/#{config_name}.yaml"))
|
11
|
+
end
|
12
|
+
rescue
|
13
|
+
puts 'unable to find config'
|
14
|
+
exit 1
|
8
15
|
end
|
9
16
|
|
10
17
|
def directory
|
@@ -68,36 +75,14 @@ class Wraith::Wraith
|
|
68
75
|
end
|
69
76
|
|
70
77
|
def mode
|
71
|
-
if
|
78
|
+
if %w(diffs_only diffs_first alphanumeric).include?(@config['mode'])
|
72
79
|
@config['mode']
|
73
80
|
else
|
74
81
|
'alphanumeric'
|
75
82
|
end
|
76
83
|
end
|
77
84
|
|
78
|
-
def
|
79
|
-
|
80
|
-
end
|
81
|
-
|
82
|
-
def self.crop_images(crop, height)
|
83
|
-
# For compatibility with windows file structures switch commenting on the following 2 lines
|
84
|
-
`convert #{crop} -background none -extent 0x#{height} #{crop}`
|
85
|
-
# puts `convert #{crop.gsub('/', '\\')} -background none -extent 0x#{height} #{crop.gsub('/', '\\')}`
|
86
|
-
end
|
87
|
-
|
88
|
-
def crop_images(_crop, _height)
|
89
|
-
self.class.crop_images
|
90
|
-
end
|
91
|
-
|
92
|
-
def set_image_width(image, width)
|
93
|
-
# For compatibility with windows file structures switch commenting on the following 2 lines
|
94
|
-
`convert #{image} -background none -extent #{width}x0 #{image}`
|
95
|
-
# puts `convert #{image.gsub('/', '\\')} -background none -extent #{width}x0 #{image.gsub('/', '\\')}`
|
96
|
-
end
|
97
|
-
|
98
|
-
def thumbnail_image(png_path, output_path)
|
99
|
-
# For compatibility with windows file structures switch commenting on the following 2 lines
|
100
|
-
`convert #{png_path} -thumbnail 200 -crop 200x200+0+0 #{output_path}`
|
101
|
-
# `convert #{png_path.gsub('/', '\\')} -thumbnail 200 -crop 200x200+0+0 #{output_path}`
|
85
|
+
def phantomjs_options
|
86
|
+
@config['phantomjs_options']
|
102
87
|
end
|
103
88
|
end
|
data/spec/wraith_spec.rb
CHANGED
@@ -12,6 +12,7 @@ describe Wraith do
|
|
12
12
|
Given(:test_image2) { 'shots/test/test2.png' }
|
13
13
|
Given(:diff_image) { 'shots/test/test_diff.png' }
|
14
14
|
Given(:data_txt) { 'shots/test/test.txt' }
|
15
|
+
Given(:saving) { Wraith::SaveImages.new(config_name) }
|
15
16
|
|
16
17
|
When(:wraith) { Wraith::Wraith.new(config_name) }
|
17
18
|
Then { wraith.is_a? Wraith::Wraith }
|
@@ -31,7 +32,7 @@ describe Wraith do
|
|
31
32
|
# capture_page_image
|
32
33
|
When do
|
33
34
|
wraith.engine.each do |_type, engine|
|
34
|
-
|
35
|
+
saving.capture_page_image(engine, test_url1, 320, test_image1)
|
35
36
|
end
|
36
37
|
end
|
37
38
|
When(:image_size) { ImageSize.path(test_image1).size }
|
@@ -41,8 +42,8 @@ describe Wraith do
|
|
41
42
|
context 'When comparing images' do
|
42
43
|
When(:diff_image_size) do
|
43
44
|
wraith.engine.each do |_type, engine|
|
44
|
-
|
45
|
-
|
45
|
+
saving.capture_page_image(engine, test_url1, 320, test_image1)
|
46
|
+
saving.capture_page_image(engine, test_url2, 320, test_image2)
|
46
47
|
end
|
47
48
|
Wraith::CropImages.new(config_name).crop_images
|
48
49
|
Wraith::CompareImages.new(config_name).compare_task(test_image1, test_image2, diff_image, data_txt)
|
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: 1.3.
|
4
|
+
version: 1.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dave Blooman
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-08-04 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: pry
|
@@ -182,7 +182,6 @@ files:
|
|
182
182
|
- lib/wraith/gallery.rb
|
183
183
|
- lib/wraith/gallery_template/bootstrap.min.css
|
184
184
|
- lib/wraith/gallery_template/gallery_template.erb
|
185
|
-
- lib/wraith/images.rb
|
186
185
|
- lib/wraith/javascript/nojs.js
|
187
186
|
- lib/wraith/javascript/snap.js
|
188
187
|
- lib/wraith/save_images.rb
|
data/lib/wraith/images.rb
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
require 'wraith'
|
2
|
-
|
3
|
-
class Wraith::Images
|
4
|
-
attr_reader :wraith
|
5
|
-
|
6
|
-
def initialize(config)
|
7
|
-
@wraith = Wraith::Wraith.new(config)
|
8
|
-
end
|
9
|
-
|
10
|
-
def files
|
11
|
-
files = Dir.glob("#{wraith.directory}/*/*.png").sort
|
12
|
-
invalid = File.expand_path('../../assets/invalid.jpg', File.dirname(__FILE__))
|
13
|
-
files.each do |filename|
|
14
|
-
if File.stat("#{filename}").size == 0
|
15
|
-
FileUtils.cp invalid, filename
|
16
|
-
puts "#{filename} is invalid"
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|