middleman-webp 0.4.1 → 0.4.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +2 -0
- data/lib/middleman-webp/converter.rb +28 -25
- data/lib/middleman-webp/extension.rb +27 -23
- data/lib/middleman-webp/options.rb +3 -2
- data/lib/middleman-webp/version.rb +1 -1
- data/middleman-webp.gemspec +1 -1
- data/spec/integration/extension_spec.rb +66 -93
- data/spec/unit/converter_spec.rb +7 -7
- data/spec/unit/extension_spec.rb +15 -15
- data/spec/unit/options_spec.rb +4 -4
- data/spec/unit/pathname_matcher_spec.rb +0 -3
- metadata +6 -8
- data/lib/middleman-webp/logger.rb +0 -26
- data/spec/unit/logger_spec.rb +0 -33
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ec8dcd14e74ea71c1075c9117a650658f5e54545
|
4
|
+
data.tar.gz: 10e6ba4aa291d859481205b777a4023e1874f841
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dd04ccde3cc96ad40b07e4116eb28c2a92c17813bbefee655cd599f9855066bbed173900a51859ebc3ff8afd6808d7a9a6f0ec66636bd559e092ddde459a88a8
|
7
|
+
data.tar.gz: 99a36183da396473c3c049b69a828adea67b59ceecf94329d3a56dda9b492f0b093dbec37ef306fd605e04fb48559583fda3cec3c5e169498775459492d48548
|
data/.rubocop.yml
ADDED
@@ -2,14 +2,16 @@ require 'middleman-webp/options'
|
|
2
2
|
|
3
3
|
module Middleman
|
4
4
|
module WebP
|
5
|
+
##
|
6
|
+
# Handles finding image assets and running them through the conversion using
|
7
|
+
# external cwebp and gif2webp commandline tools
|
5
8
|
class Converter
|
6
9
|
SUFFIX_RE = /(jpe?g|png|tiff?|gif)$/i
|
7
10
|
|
8
|
-
def initialize(app, options = {}
|
11
|
+
def initialize(app, builder, options = {})
|
9
12
|
@app = app
|
10
13
|
@options = Middleman::WebP::Options.new(options)
|
11
14
|
@builder = builder
|
12
|
-
@log = logger
|
13
15
|
end
|
14
16
|
|
15
17
|
def convert
|
@@ -17,27 +19,24 @@ module Middleman
|
|
17
19
|
@converted_size = 0
|
18
20
|
|
19
21
|
convert_images(image_files) do |src, dst|
|
20
|
-
if
|
21
|
-
next reject_file(dst)
|
22
|
-
end
|
22
|
+
next reject_file(dst) if @options.allow_skip && dst.size >= src.size
|
23
23
|
|
24
24
|
@original_size += src.size
|
25
25
|
@converted_size += dst.size
|
26
|
-
@
|
26
|
+
@builder.trigger :created, "#{dst.path} "\
|
27
27
|
"(#{change_percentage(src.size, dst.size)} smaller)"
|
28
28
|
end
|
29
29
|
print_summary
|
30
30
|
end
|
31
31
|
|
32
|
-
def convert_images(paths, &
|
32
|
+
def convert_images(paths, &_after_conversion)
|
33
33
|
paths.each do |p|
|
34
34
|
begin
|
35
35
|
dst = destination_path(p)
|
36
36
|
exec_convert_tool(p, dst)
|
37
37
|
yield File.new(p), File.new(dst.to_s)
|
38
38
|
rescue StandardError => e
|
39
|
-
@
|
40
|
-
@log.debug e.to_s
|
39
|
+
@builder.trigger :error, "Converting #{p} failed", e.backtrace
|
41
40
|
end
|
42
41
|
end
|
43
42
|
end
|
@@ -55,15 +54,15 @@ module Middleman
|
|
55
54
|
end
|
56
55
|
|
57
56
|
def reject_file(file)
|
58
|
-
@
|
57
|
+
@builder.trigger :deleted, "#{file.path} skipped"
|
59
58
|
File.unlink(file)
|
60
59
|
end
|
61
60
|
|
62
61
|
def print_summary
|
63
62
|
savings = @original_size - @converted_size
|
64
|
-
@
|
65
|
-
|
66
|
-
|
63
|
+
@builder.trigger :webp, '', 'Total conversion savings: '\
|
64
|
+
"#{number_to_human_size(savings)} "\
|
65
|
+
"(#{change_percentage(@original_size, @converted_size)})"
|
67
66
|
end
|
68
67
|
|
69
68
|
# Calculate change percentage of converted file size
|
@@ -84,22 +83,16 @@ module Middleman
|
|
84
83
|
end
|
85
84
|
|
86
85
|
def destination_path(src_path)
|
87
|
-
if @options.append_extension
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
86
|
+
dst_name = if @options.append_extension
|
87
|
+
"#{src_path.basename}.webp"
|
88
|
+
else
|
89
|
+
src_path.basename.to_s.gsub(SUFFIX_RE, 'webp')
|
90
|
+
end
|
92
91
|
src_path.parent.join(dst_name)
|
93
92
|
end
|
94
93
|
|
95
94
|
def image_files
|
96
|
-
|
97
|
-
app_dir = Pathname(File.join(@app.root, @app.config[:source]))
|
98
|
-
else
|
99
|
-
app_dir = Pathname(@app.config[:build_dir])
|
100
|
-
end
|
101
|
-
|
102
|
-
all = ::Middleman::Util.all_files_under(app_dir)
|
95
|
+
all = ::Middleman::Util.all_files_under(site_dir)
|
103
96
|
images = all.select { |p| p.to_s =~ SUFFIX_RE }
|
104
97
|
|
105
98
|
# Reject files matching possible ignore patterns
|
@@ -127,6 +120,16 @@ module Middleman
|
|
127
120
|
format("%g #{units[exponent]}",
|
128
121
|
format('%.2f', n.to_f / 1024**exponent))
|
129
122
|
end
|
123
|
+
|
124
|
+
private
|
125
|
+
|
126
|
+
def site_dir
|
127
|
+
if @options.run_before_build
|
128
|
+
Pathname(File.join(@app.root, @app.config[:source]))
|
129
|
+
else
|
130
|
+
Pathname(@app.config[:build_dir])
|
131
|
+
end
|
132
|
+
end
|
130
133
|
end
|
131
134
|
end
|
132
135
|
end
|
@@ -1,20 +1,27 @@
|
|
1
1
|
require 'middleman-core'
|
2
|
-
require 'middleman-webp/logger'
|
3
2
|
require 'middleman-webp/converter'
|
4
3
|
|
5
4
|
require 'shell'
|
6
5
|
|
7
6
|
module Middleman
|
7
|
+
##
|
8
|
+
# Middleman extension for converting image assets to WebP alternatives
|
9
|
+
#
|
10
|
+
# Conversion is run using after_build or before_build according to the
|
11
|
+
# configuration, after_build being the default.
|
8
12
|
class WebPExtension < Extension
|
9
13
|
option(:conversion_options, {},
|
10
14
|
'Custom conversion options for cwebp/gif2webp')
|
11
15
|
option(:append_extension, false,
|
12
|
-
'keep the original filename and extension and append .webp
|
16
|
+
'keep the original filename and extension and append .webp '\
|
17
|
+
'(image.png => image.png.webp)')
|
13
18
|
option(:ignore, [], 'Ignores files with matching paths')
|
14
19
|
option(:verbose, false, 'Display all external command which are executed '\
|
15
20
|
'to help debugging.')
|
16
|
-
option(:allow_skip, true, 'Skip saving .webp files which are larger than
|
17
|
-
|
21
|
+
option(:allow_skip, true, 'Skip saving .webp files which are larger than '\
|
22
|
+
'their source')
|
23
|
+
option(:run_before_build, false, 'Run before build and save .webp files in'\
|
24
|
+
' source dir')
|
18
25
|
|
19
26
|
def initialize(app, options_hash = {}, &block)
|
20
27
|
super
|
@@ -22,45 +29,42 @@ module Middleman
|
|
22
29
|
end
|
23
30
|
|
24
31
|
def before_build(builder)
|
25
|
-
return unless options
|
32
|
+
return unless options.run_before_build
|
26
33
|
|
27
|
-
|
28
|
-
|
29
|
-
Middleman::WebP::Converter.new(@app, options, builder, @logger).convert
|
34
|
+
return unless dependencies_installed?(builder)
|
35
|
+
Middleman::WebP::Converter.new(@app, builder, options).convert
|
30
36
|
end
|
31
37
|
|
32
38
|
def after_build(builder)
|
33
|
-
return if options
|
39
|
+
return if options.run_before_build
|
34
40
|
|
35
|
-
|
36
|
-
|
37
|
-
Middleman::WebP::Converter.new(@app, options, builder, @logger).convert
|
41
|
+
return unless dependencies_installed? builder
|
42
|
+
Middleman::WebP::Converter.new(@app, builder, options).convert
|
38
43
|
end
|
39
44
|
|
40
45
|
# Internal: Check that cwebp and gif2webp commandline tools are available.
|
41
46
|
#
|
42
47
|
# Returns true if all is OK.
|
43
|
-
def dependencies_installed?
|
44
|
-
warn_if_gif2webp_missing
|
45
|
-
cwebp_installed?
|
46
|
-
end
|
47
|
-
|
48
|
-
def initialize_logger(builder)
|
49
|
-
@logger = Middleman::WebP::Logger.new(builder, verbose: @options.verbose)
|
48
|
+
def dependencies_installed?(builder)
|
49
|
+
warn_if_gif2webp_missing builder
|
50
|
+
cwebp_installed? builder
|
50
51
|
end
|
51
52
|
|
52
53
|
private
|
53
54
|
|
54
|
-
def warn_if_gif2webp_missing
|
55
|
+
def warn_if_gif2webp_missing(builder)
|
55
56
|
Shell.new.find_system_command('gif2webp')
|
56
57
|
rescue Shell::Error::CommandNotFound => e
|
57
|
-
|
58
|
+
builder.trigger :webp, nil, "#{e.message} Please install latest version"\
|
59
|
+
' of webp library and tools to get gif2webp and be able to convert gif'\
|
60
|
+
'files also.'
|
58
61
|
end
|
59
62
|
|
60
|
-
def cwebp_installed?
|
63
|
+
def cwebp_installed?(builder)
|
61
64
|
true if Shell.new.find_system_command('cwebp')
|
62
65
|
rescue Shell::Error::CommandNotFound => e
|
63
|
-
|
66
|
+
builder.trigger :error, "ERROR: #{e.message} Please install cwebp and "\
|
67
|
+
'gif2webp commandline tools first.'
|
64
68
|
false
|
65
69
|
end
|
66
70
|
end
|
@@ -3,7 +3,8 @@ require 'middleman-webp/pathname_matcher'
|
|
3
3
|
module Middleman
|
4
4
|
module WebP
|
5
5
|
class Options
|
6
|
-
attr_reader :ignore, :verbose, :append_extension, :allow_skip,
|
6
|
+
attr_reader :ignore, :verbose, :append_extension, :allow_skip,
|
7
|
+
:run_before_build
|
7
8
|
|
8
9
|
def initialize(options = {})
|
9
10
|
@ignore = options[:ignore] || []
|
@@ -30,7 +31,7 @@ module Middleman
|
|
30
31
|
# glob pattern matches file path and uses the one with longest
|
31
32
|
# glob, because it's assumed to be the most precise one.
|
32
33
|
def for(file)
|
33
|
-
matching = @conversion.select { |m,
|
34
|
+
matching = @conversion.select { |m, _o| m.matches? file }
|
34
35
|
|
35
36
|
return '' if matching.empty?
|
36
37
|
|
data/middleman-webp.gemspec
CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
-
spec.add_dependency "middleman-core", "~> 4.0
|
21
|
+
spec.add_dependency "middleman-core", "~> 4.0"
|
22
22
|
|
23
23
|
spec.add_development_dependency "bundler", "~> 1.5"
|
24
24
|
spec.add_development_dependency "middleman-cli", "~> 4.0.0"
|
@@ -4,15 +4,9 @@ require 'middleman-core/cli'
|
|
4
4
|
require 'thor'
|
5
5
|
require_relative '../../lib/middleman-webp/extension'
|
6
6
|
|
7
|
-
class MockBuilder
|
8
|
-
def thor
|
9
|
-
return Middleman::Cli::Build.new
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
7
|
describe Middleman::WebPExtension do
|
14
8
|
before do
|
15
|
-
@builder =
|
9
|
+
@builder = stub(thor: Middleman::Cli::Build.new)
|
16
10
|
end
|
17
11
|
|
18
12
|
after do
|
@@ -27,30 +21,17 @@ describe Middleman::WebPExtension do
|
|
27
21
|
|
28
22
|
describe '#before_build' do
|
29
23
|
it 'does not generate WebP versions by default' do
|
30
|
-
app_mock = stub(
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
.with do |msg, color|
|
42
|
-
msg =~ /Total conversion savings/
|
43
|
-
end
|
44
|
-
|
45
|
-
Middleman::WebP::Logger.any_instance.expects(:info).never
|
46
|
-
.with do |msg|
|
47
|
-
msg =~ /cwebp/
|
48
|
-
end
|
49
|
-
|
50
|
-
Middleman::WebP::Logger.any_instance.expects(:info).never
|
51
|
-
.with do |msg|
|
52
|
-
msg =~ /\.webp \([0-9.]+ % smaller\)/
|
53
|
-
end
|
24
|
+
app_mock = stub(initialized: '',
|
25
|
+
instance_available: true,
|
26
|
+
after_configuration: nil,
|
27
|
+
before_build: nil,
|
28
|
+
after_build: nil,
|
29
|
+
root: '.',
|
30
|
+
config: { source: 'spec/fixtures/ok-source' })
|
31
|
+
|
32
|
+
@builder.expects(:trigger).never.with do |event|
|
33
|
+
[:webp, :created, :error, :deleted].include? event
|
34
|
+
end
|
54
35
|
|
55
36
|
@extension = Middleman::WebPExtension.new(app_mock)
|
56
37
|
@extension.before_build(@builder)
|
@@ -59,26 +40,24 @@ describe Middleman::WebPExtension do
|
|
59
40
|
end
|
60
41
|
|
61
42
|
it 'generates WebP versions using external tools when option is set' do
|
62
|
-
app_mock = stub(
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
build_dir: 'spec/fixtures/ok-build'
|
73
|
-
}
|
43
|
+
app_mock = stub(initialized: '',
|
44
|
+
instance_available: true,
|
45
|
+
after_configuration: nil,
|
46
|
+
before_build: nil,
|
47
|
+
after_build: nil,
|
48
|
+
verbose: true,
|
49
|
+
root: '.',
|
50
|
+
config: {
|
51
|
+
source: 'spec/fixtures/ok-source',
|
52
|
+
build_dir: 'spec/fixtures/ok-build'
|
74
53
|
})
|
75
54
|
|
76
|
-
|
77
|
-
msg =~
|
55
|
+
@builder.expects(:trigger).twice.with do |event, msg|
|
56
|
+
event == :created && msg =~ /\.webp \([0-9.]+ % smaller\)/
|
78
57
|
end
|
79
58
|
|
80
|
-
|
81
|
-
|
59
|
+
@builder.expects(:trigger).once.with do |event, _target, msg|
|
60
|
+
event == :webp && msg =~ /Total conversion savings/
|
82
61
|
end
|
83
62
|
|
84
63
|
@extension = Middleman::WebPExtension.new(app_mock) do |webp|
|
@@ -92,27 +71,25 @@ describe Middleman::WebPExtension do
|
|
92
71
|
|
93
72
|
describe '#after_build' do
|
94
73
|
before do
|
95
|
-
|
96
|
-
|
97
|
-
|
74
|
+
@builder.expects(:trigger).once.with do |event, _target, msg|
|
75
|
+
event == :webp && msg =~ /Total conversion savings/
|
76
|
+
end
|
98
77
|
end
|
99
78
|
|
100
79
|
it 'generates WebP versions using external tools' do
|
101
|
-
app_mock = stub(
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
build_dir: 'spec/fixtures/ok-build'
|
111
|
-
}
|
80
|
+
app_mock = stub(initialized: '',
|
81
|
+
instance_available: true,
|
82
|
+
after_configuration: nil,
|
83
|
+
before_build: nil,
|
84
|
+
after_build: nil,
|
85
|
+
root: '.',
|
86
|
+
config: {
|
87
|
+
source: 'spec/fixtures/ok-source',
|
88
|
+
build_dir: 'spec/fixtures/ok-build'
|
112
89
|
})
|
113
90
|
|
114
|
-
|
115
|
-
msg =~ /\.webp \([0-9.]+ % smaller\)/
|
91
|
+
@builder.expects(:trigger).twice.with do |event, msg|
|
92
|
+
event == :created && msg =~ /\.webp \([0-9.]+ % smaller\)/
|
116
93
|
end
|
117
94
|
|
118
95
|
@extension = Middleman::WebPExtension.new(app_mock)
|
@@ -122,21 +99,19 @@ describe Middleman::WebPExtension do
|
|
122
99
|
end
|
123
100
|
|
124
101
|
it 'shows errors if files couldn\'t be converted' do
|
125
|
-
app_mock = stub(
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
Middleman::WebP::Logger.any_instance.expects(:error).times(3).with do |msg|
|
139
|
-
msg =~ /Converting .*empty\.(jpg|gif|png) failed/
|
102
|
+
app_mock = stub(initialized: '',
|
103
|
+
instance_available: true,
|
104
|
+
after_configuration: nil,
|
105
|
+
before_build: nil,
|
106
|
+
after_build: nil,
|
107
|
+
root: '.',
|
108
|
+
config: { build_dir: 'spec/fixtures/dummy-build' })
|
109
|
+
|
110
|
+
Middleman::WebP::Converter.any_instance
|
111
|
+
.expects(:exec_convert_tool).times(3)
|
112
|
+
|
113
|
+
@builder.expects(:trigger).times(3).with do |event, msg|
|
114
|
+
event == :error && msg =~ /Converting .*empty\.(jpg|gif|png) failed/
|
140
115
|
end
|
141
116
|
|
142
117
|
@extension = Middleman::WebPExtension.new(app_mock)
|
@@ -144,18 +119,16 @@ describe Middleman::WebPExtension do
|
|
144
119
|
end
|
145
120
|
|
146
121
|
it 'rejects file if it is larger than original' do
|
147
|
-
app_mock = stub(
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
Middleman::WebP::Converter.any_instance.
|
158
|
-
expects(:exec_convert_tool).times(3).with do |src, dst|
|
122
|
+
app_mock = stub(initialized: '',
|
123
|
+
instance_available: true,
|
124
|
+
after_configuration: nil,
|
125
|
+
before_build: nil,
|
126
|
+
after_build: nil,
|
127
|
+
root: '.',
|
128
|
+
config: { build_dir: 'spec/fixtures/dummy-build' })
|
129
|
+
|
130
|
+
Middleman::WebP::Converter.any_instance
|
131
|
+
.expects(:exec_convert_tool).times(3).with do |_src, dst|
|
159
132
|
if dst.to_s =~ /spec\/fixtures\/dummy-build\/.*webp$/
|
160
133
|
File.open(dst, 'w') do |f|
|
161
134
|
f << 'Making it larger than empty dummy original'
|
@@ -166,8 +139,9 @@ describe Middleman::WebPExtension do
|
|
166
139
|
end
|
167
140
|
end
|
168
141
|
|
169
|
-
|
170
|
-
|
142
|
+
@builder.expects(:trigger).times(3).with do |event, msg|
|
143
|
+
event == :deleted && msg =~ /.*empty.webp skipped/
|
144
|
+
end.returns(nil)
|
171
145
|
|
172
146
|
@extension = Middleman::WebPExtension.new(app_mock)
|
173
147
|
@extension.after_build(@builder)
|
@@ -175,5 +149,4 @@ describe Middleman::WebPExtension do
|
|
175
149
|
Dir.glob('spec/fixtures/dummy-build/**/*.webp').size.must_equal 0
|
176
150
|
end
|
177
151
|
end
|
178
|
-
|
179
152
|
end
|
data/spec/unit/converter_spec.rb
CHANGED
@@ -5,8 +5,8 @@ require_relative '../../lib/middleman-webp/converter'
|
|
5
5
|
|
6
6
|
describe Middleman::WebP::Converter do
|
7
7
|
before do
|
8
|
-
@app_mock = stub(config: {build_dir: 'spec/fixtures/dummy-build'})
|
9
|
-
@converter = Middleman::WebP::Converter.new
|
8
|
+
@app_mock = stub(config: { build_dir: 'spec/fixtures/dummy-build' })
|
9
|
+
@converter = Middleman::WebP::Converter.new @app_mock, nil
|
10
10
|
end
|
11
11
|
|
12
12
|
describe '#destination_path' do
|
@@ -18,7 +18,8 @@ describe Middleman::WebP::Converter do
|
|
18
18
|
|
19
19
|
describe '#destination_path with append_extension = true' do
|
20
20
|
before do
|
21
|
-
@converter = Middleman::WebP::Converter.new
|
21
|
+
@converter = Middleman::WebP::Converter.new @app_mock, nil,
|
22
|
+
append_extension: true
|
22
23
|
end
|
23
24
|
|
24
25
|
it 'returns file name with same basename and webp suffix' do
|
@@ -72,9 +73,8 @@ describe Middleman::WebP::Converter do
|
|
72
73
|
end
|
73
74
|
|
74
75
|
it 'won\'t include ignored files' do
|
75
|
-
@converter = Middleman::WebP::Converter.new
|
76
|
-
|
77
|
-
}, nil, nil)
|
76
|
+
@converter = Middleman::WebP::Converter.new @app_mock, nil,
|
77
|
+
ignore: [/jpg$/, '**/*.gif']
|
78
78
|
|
79
79
|
files_to_include = [Pathname('spec/fixtures/dummy-build/empty.png')]
|
80
80
|
@converter.image_files.must_equal files_to_include
|
@@ -84,7 +84,7 @@ describe Middleman::WebP::Converter do
|
|
84
84
|
options = {
|
85
85
|
ignore: ->(path) { path.end_with? 'jpg' }
|
86
86
|
}
|
87
|
-
@converter = Middleman::WebP::Converter.new
|
87
|
+
@converter = Middleman::WebP::Converter.new @app_mock, nil, options
|
88
88
|
|
89
89
|
@converter.image_files.size.must_equal 2
|
90
90
|
end
|
data/spec/unit/extension_spec.rb
CHANGED
@@ -2,17 +2,14 @@ require 'spec_helper'
|
|
2
2
|
require_relative '../../lib/middleman-webp/extension'
|
3
3
|
|
4
4
|
describe Middleman::WebPExtension do
|
5
|
-
|
6
5
|
before do
|
7
|
-
app_mock = stub(
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
after_build: nil
|
13
|
-
})
|
6
|
+
app_mock = stub(initialized: '',
|
7
|
+
instance_available: true,
|
8
|
+
after_configuration: nil,
|
9
|
+
before_build: nil,
|
10
|
+
after_build: nil)
|
14
11
|
@extension = Middleman::WebPExtension.new(app_mock)
|
15
|
-
@
|
12
|
+
@builder_mock = stub(trigger: nil)
|
16
13
|
end
|
17
14
|
|
18
15
|
describe '#dependencies_installed?' do
|
@@ -20,24 +17,27 @@ describe Middleman::WebPExtension do
|
|
20
17
|
Shell.any_instance.expects(:find_system_command).with('cwebp').returns('/usr/bin/cwebp')
|
21
18
|
Shell.any_instance.expects(:find_system_command).with('gif2webp').returns('/usr/bin/gif2webp')
|
22
19
|
|
23
|
-
@extension.dependencies_installed
|
20
|
+
@extension.dependencies_installed?(@builder_mock).must_equal true
|
24
21
|
end
|
25
22
|
|
26
23
|
it 'returns false and displays error if cwebp is missing' do
|
27
24
|
Shell.any_instance.expects(:find_system_command).with('cwebp').raises(Shell::Error::CommandNotFound)
|
28
25
|
Shell.any_instance.stubs(:find_system_command).with('gif2webp').returns('/usr/bin/gif2webp')
|
29
26
|
|
30
|
-
|
31
|
-
|
27
|
+
@builder_mock.expects(:trigger).once.with do |event|
|
28
|
+
event == :error
|
29
|
+
end
|
30
|
+
@extension.dependencies_installed?(@builder_mock).must_equal false
|
32
31
|
end
|
33
32
|
|
34
33
|
it 'displays error if only gif2webp is missing and returns still true' do
|
35
34
|
Shell.any_instance.expects(:find_system_command).with('gif2webp').raises(Shell::Error::CommandNotFound)
|
36
35
|
Shell.any_instance.stubs(:find_system_command).with('cwebp').returns('/usr/bin/cwebp')
|
37
36
|
|
38
|
-
|
39
|
-
|
37
|
+
@builder_mock.expects(:trigger).once.with do |event, _target, msg|
|
38
|
+
event == :webp && msg =~ /gif2webp/
|
39
|
+
end
|
40
|
+
@extension.dependencies_installed?(@builder_mock).must_equal true
|
40
41
|
end
|
41
42
|
end
|
42
|
-
|
43
43
|
end
|
data/spec/unit/options_spec.rb
CHANGED
@@ -4,17 +4,17 @@ require_relative '../../lib/middleman-webp/options'
|
|
4
4
|
|
5
5
|
describe Middleman::WebP::Options do
|
6
6
|
describe '#allow_skip' do
|
7
|
-
it
|
7
|
+
it 'should default to true' do
|
8
8
|
options = Middleman::WebP::Options.new
|
9
9
|
options.allow_skip.must_equal(true)
|
10
10
|
end
|
11
|
-
|
12
|
-
it
|
11
|
+
|
12
|
+
it 'should allow setting to true' do
|
13
13
|
options = Middleman::WebP::Options.new(allow_skip: false)
|
14
14
|
options.allow_skip.must_equal(false)
|
15
15
|
end
|
16
16
|
end
|
17
|
-
|
17
|
+
|
18
18
|
describe '#for' do
|
19
19
|
it 'returns cwebp args when given file matches option file pattern glob' do
|
20
20
|
path = Pathname.new('test_image.jpg')
|
@@ -2,7 +2,6 @@ require 'spec_helper'
|
|
2
2
|
require_relative '../../lib/middleman-webp/pathname_matcher'
|
3
3
|
|
4
4
|
describe Middleman::WebP::PathnameMatcher do
|
5
|
-
|
6
5
|
describe '#matches?' do
|
7
6
|
it 'returns true when given file matches pattern' do
|
8
7
|
patterns = ['**/*.jpg', /jpg$/, ->(path) { path.end_with?('jpg') }]
|
@@ -54,7 +53,5 @@ describe Middleman::WebP::PathnameMatcher do
|
|
54
53
|
it 'handles nil path gracefully and returns false' do
|
55
54
|
Middleman::WebP::PathnameMatcher.new('*.jpg').matches? nil
|
56
55
|
end
|
57
|
-
|
58
56
|
end
|
59
|
-
|
60
57
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: middleman-webp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Juhamatti Niemelä
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-06-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: middleman-core
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 4.0
|
19
|
+
version: '4.0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 4.0
|
26
|
+
version: '4.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -88,6 +88,7 @@ extensions: []
|
|
88
88
|
extra_rdoc_files: []
|
89
89
|
files:
|
90
90
|
- ".gitignore"
|
91
|
+
- ".rubocop.yml"
|
91
92
|
- ".travis.yml"
|
92
93
|
- CHANGELOG.md
|
93
94
|
- Gemfile
|
@@ -97,7 +98,6 @@ files:
|
|
97
98
|
- lib/middleman-webp.rb
|
98
99
|
- lib/middleman-webp/converter.rb
|
99
100
|
- lib/middleman-webp/extension.rb
|
100
|
-
- lib/middleman-webp/logger.rb
|
101
101
|
- lib/middleman-webp/options.rb
|
102
102
|
- lib/middleman-webp/pathname_matcher.rb
|
103
103
|
- lib/middleman-webp/version.rb
|
@@ -115,7 +115,6 @@ files:
|
|
115
115
|
- spec/spec_helper.rb
|
116
116
|
- spec/unit/converter_spec.rb
|
117
117
|
- spec/unit/extension_spec.rb
|
118
|
-
- spec/unit/logger_spec.rb
|
119
118
|
- spec/unit/options_spec.rb
|
120
119
|
- spec/unit/pathname_matcher_spec.rb
|
121
120
|
homepage: http://github.com/iiska/middleman-webp
|
@@ -138,7 +137,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
138
137
|
version: '0'
|
139
138
|
requirements: []
|
140
139
|
rubyforge_project:
|
141
|
-
rubygems_version: 2.
|
140
|
+
rubygems_version: 2.5.1
|
142
141
|
signing_key:
|
143
142
|
specification_version: 4
|
144
143
|
summary: WebP image conversion for Middleman
|
@@ -155,6 +154,5 @@ test_files:
|
|
155
154
|
- spec/spec_helper.rb
|
156
155
|
- spec/unit/converter_spec.rb
|
157
156
|
- spec/unit/extension_spec.rb
|
158
|
-
- spec/unit/logger_spec.rb
|
159
157
|
- spec/unit/options_spec.rb
|
160
158
|
- spec/unit/pathname_matcher_spec.rb
|
@@ -1,26 +0,0 @@
|
|
1
|
-
module Middleman
|
2
|
-
module WebP
|
3
|
-
class Logger
|
4
|
-
def initialize(builder, opts = {})
|
5
|
-
@builder = builder
|
6
|
-
@options = opts
|
7
|
-
end
|
8
|
-
|
9
|
-
def info(msg, color = nil)
|
10
|
-
@builder.thor.say_status :webp, msg, color
|
11
|
-
end
|
12
|
-
|
13
|
-
def error(msg)
|
14
|
-
info msg, :red
|
15
|
-
end
|
16
|
-
|
17
|
-
def warn(msg)
|
18
|
-
info msg, :yellow
|
19
|
-
end
|
20
|
-
|
21
|
-
def debug(msg)
|
22
|
-
info msg if @options[:verbose]
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
data/spec/unit/logger_spec.rb
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'pathname'
|
3
|
-
require_relative '../../lib/middleman-webp/logger'
|
4
|
-
|
5
|
-
describe Middleman::WebP::Logger do
|
6
|
-
before do
|
7
|
-
@thor_mock = stub({say_status: nil})
|
8
|
-
@logger = Middleman::WebP::Logger.new(stub({thor: @thor_mock}))
|
9
|
-
end
|
10
|
-
|
11
|
-
it "logs info message through Thor with given color" do
|
12
|
-
@thor_mock.expects(:say_status).once.with do |action, msg, color|
|
13
|
-
msg == 'foobar' && color == :blue
|
14
|
-
end
|
15
|
-
@logger.info 'foobar', :blue
|
16
|
-
end
|
17
|
-
|
18
|
-
[[:error, :red], [:warn, :yellow]].each do |(method, color)|
|
19
|
-
it "##{method} logs message with color #{color}" do
|
20
|
-
@thor_mock.expects(:say_status).once.with do |action, msg, col|
|
21
|
-
msg == "#{method} message" && col == color
|
22
|
-
end
|
23
|
-
@logger.send method, "#{method} message"
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
it "logs error with red" do
|
28
|
-
@thor_mock.expects(:say_status).once.with do |action, msg, color|
|
29
|
-
msg == 'foobar' && color == :red
|
30
|
-
end
|
31
|
-
@logger.error 'foobar'
|
32
|
-
end
|
33
|
-
end
|