sprockets-image_compressor 0.2.4 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 81df94dce44c7b5dc9574c4f67e129411a19715d
4
- data.tar.gz: dcbd97c1609a7b2330b44b68f18c085b545892a0
3
+ metadata.gz: aaed8e8733ed00024e60e873586d05562665938a
4
+ data.tar.gz: 14514d263b2cd8a2564e7549ddd623b74420786c
5
5
  SHA512:
6
- metadata.gz: 0200cb52f50b03b36692dbb1e2577ef6b900720dbd993bdc0f462dfaf588c921b0a8f71a7f6fad8798d537fe6d76c024600d966351c43618c3ae4b02d2c5a693
7
- data.tar.gz: 6c04631bccf6435785a8f317e00a5d76b4321ebfa9615af0be50fa74534ecd96b22bfc18b9ee5537ee17f7ee249945553281f25d3e00f519922293c7c2d9385e
6
+ metadata.gz: 71368ede2c27681e320663b1360c92cfce187697fbccaf508e0483d77b41e7d66dc1b6095f7e354448c5c67692daf8f4b58661f87403ac9c0f642fd8afa913c8
7
+ data.tar.gz: a8c5ab038f88e5ff1cf1a1166e0af62cad7d5ca46a2fec786ee2faef0992c43c2b29c8d2a905989de31e4d3826705e860d0e5a75c91befca17bbe6bf4a7843cb
@@ -1,3 +1,11 @@
1
+ 0.3.0 (09/17/2014)
2
+ -------------------------
3
+ * Feature: Windows support! Thanks, @JakeTheSnake3p0!
4
+
5
+ 0.2.4 (05/18/2014)
6
+ -------------------------
7
+ * Bugfix: jpgs weren't being opened in binary mode. Thanks, @JakeTheSnake3p0!
8
+
1
9
  0.2.3 (04/10/2014)
2
10
  -------------------------
3
11
  * Bugfix: Return original file and warn if compression fails. Thanks, @tomchentw!
data/README.md CHANGED
@@ -37,9 +37,10 @@ See [#15](https://github.com/botandrose/sprockets-image_compressor/issues/15) fo
37
37
  ## Credits
38
38
 
39
39
  * @nhogle for help with compiling and packaging the jpegoptim and pngcrush binaries
40
+ * @JakeTheSnake3p0 for Windows support
40
41
  * @florentmorin for compatibility with sprockets-rails
41
42
  * @dkubb for compatibility with Rails 4
42
43
 
43
44
  ## License
44
45
 
45
- (MIT License) - Copyright (c) 2012 Micah Geisel
46
+ (MIT License) - Copyright (c) 2014 Micah Geisel
@@ -1,4 +1,5 @@
1
1
  require "sprockets/image_compressor/version"
2
+ require "sprockets/image_compressor/binary_finder"
2
3
  require "sprockets/image_compressor/png_compressor"
3
4
  require "sprockets/image_compressor/jpg_compressor"
4
5
  require "sprockets/image_compressor/integration"
@@ -2,32 +2,14 @@ require "tempfile"
2
2
 
3
3
  module Sprockets
4
4
  module ImageCompressor
5
+
5
6
  GEM_ROOT = File.expand_path File.join(File.dirname(__FILE__), "../../../")
6
7
 
7
8
  class Base
8
9
  def binary_path
9
- @binary_path ||= begin
10
- try_system_binary or try_vendored_binaries or raise """
11
- Can't find an installed version of #{@name}, and none of the vendored binaries seem to work.
12
- Please install #{@name}, or open an issue on the project page at https://github.com/botandrose/sprockets-image_compressor
13
- """
14
- end
15
- end
16
-
17
- private
18
-
19
- def try_system_binary
20
- system_binary = `which #{@name}`.chomp
21
- system_binary if system_binary.length > 0
22
- end
23
-
24
- def try_vendored_binaries
25
- # use the first vendored binary that doesn't shit the bed when we ask for its version
26
- vendored_binaries = Dir["#{GEM_ROOT}/bin/#{@name}.*"].sort
27
- vendored_binaries.find do |path|
28
- system("#{path} -version 2> /dev/null > /dev/null")
29
- end
10
+ @binary_path ||= BinaryFinder.new(@name).path
30
11
  end
31
12
  end
13
+
32
14
  end
33
15
  end
@@ -0,0 +1,49 @@
1
+ module Sprockets
2
+ module ImageCompressor
3
+ class BinaryFinder
4
+ def initialize binary_name
5
+ @binary_name = binary_name
6
+ end
7
+
8
+ attr_reader :binary_name
9
+
10
+ def path
11
+ try_system_binary or try_vendored_binaries or raise NotFound
12
+ end
13
+
14
+ class NotFound < StandardError
15
+ def message
16
+ """
17
+ Can't find an installed version of #{binary_name}, and none of the vendored binaries seem to work.
18
+ Please install #{binary_name}, or open an issue on the project page at https://github.com/botandrose/sprockets-image_compressor
19
+ """
20
+ end
21
+ end
22
+
23
+ private
24
+
25
+ def try_system_binary
26
+ which(binary_name)
27
+ end
28
+
29
+ def try_vendored_binaries
30
+ # use the first vendored binary that doesn't shit the bed when we ask for its version
31
+ vendored_binaries = Dir["#{GEM_ROOT}/bin/#{ binary_name }.*"].sort
32
+ vendored_binaries.find do |path|
33
+ system("#{ path } -version 2> /dev/null > /dev/null")
34
+ end
35
+ end
36
+
37
+ def which cmd
38
+ exts = ENV["PATHEXT"] ? ENV["PATHEXT"].split(";") : [""]
39
+ ENV["PATH"].split(File::PATH_SEPARATOR).each do |path|
40
+ exts.each do |ext|
41
+ exe = File.join(path, "#{cmd}#{ext}")
42
+ return exe if File.executable?(exe) && !File.directory?(exe)
43
+ end
44
+ end
45
+ nil
46
+ end
47
+ end
48
+ end
49
+ end
@@ -1,5 +1,5 @@
1
1
  module Sprockets
2
2
  module Imagecompressor
3
- VERSION = "0.2.4"
3
+ VERSION = "0.3.0"
4
4
  end
5
5
  end
@@ -0,0 +1,33 @@
1
+ require "sprockets/image_compressor"
2
+
3
+ describe Sprockets::ImageCompressor::BinaryFinder do
4
+ subject { Sprockets::ImageCompressor::BinaryFinder.new(binary) }
5
+ let(:binary) { "example_binary_name" }
6
+ let(:path) { "/some/path/to/binary" }
7
+
8
+ describe "#path" do
9
+ context "when binary is installed locally " do
10
+ before { subject.stub try_system_binary: path }
11
+
12
+ it "prefers the system's binary" do
13
+ subject.path.should == path
14
+ end
15
+ end
16
+
17
+ context "when local binary is missing, but one of the vendored binaries works" do
18
+ before { subject.stub try_system_binary: nil, try_vendored_binaries: path }
19
+
20
+ it "falls back to the vendored binary" do
21
+ subject.path.should == path
22
+ end
23
+ end
24
+
25
+ context "when local binary is missing and none of the vendored binaries work" do
26
+ before { subject.stub try_system_binary: nil, try_vendored_binaries: nil }
27
+
28
+ it "raises an exception" do
29
+ expect { subject.path }.to raise_exception
30
+ end
31
+ end
32
+ end
33
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sprockets-image_compressor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Micah Geisel
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-19 00:00:00.000000000 Z
11
+ date: 2014-09-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sprockets
@@ -104,13 +104,13 @@ files:
104
104
  - lib/sprockets-image_compressor.rb
105
105
  - lib/sprockets/image_compressor.rb
106
106
  - lib/sprockets/image_compressor/base.rb
107
+ - lib/sprockets/image_compressor/binary_finder.rb
107
108
  - lib/sprockets/image_compressor/integration.rb
108
109
  - lib/sprockets/image_compressor/jpg_compressor.rb
109
110
  - lib/sprockets/image_compressor/png_compressor.rb
110
111
  - lib/sprockets/image_compressor/railtie.rb
111
112
  - lib/sprockets/image_compressor/version.rb
112
- - spec/compressors/jpg_compressor_spec.rb
113
- - spec/compressors/png_compressor_spec.rb
113
+ - spec/binary_finder_spec.rb
114
114
  - spec/fixtures/largejpg.jpg
115
115
  - spec/fixtures/largepng.png
116
116
  - spec/fixtures/smalljpg.jpg
@@ -1,40 +0,0 @@
1
- require "sprockets/image_compressor"
2
-
3
- describe Sprockets::ImageCompressor::JpgCompressor do
4
- let(:compressor) { Sprockets::ImageCompressor::JpgCompressor.new }
5
- let(:gem_root) { Sprockets::ImageCompressor::GEM_ROOT }
6
-
7
- describe "#binary_path" do
8
- context "when jpegoptim is installed" do
9
- before do
10
- compressor.should_receive(:`).with("which jpegoptim").and_return("/path/to/jpegoptim\n")
11
- end
12
-
13
- it "prefers the system's binary" do
14
- compressor.binary_path.should == "/path/to/jpegoptim"
15
- end
16
- end
17
-
18
- context "when jpegoptim is missing and we're on a supported system" do
19
- before do
20
- compressor.should_receive(:`).with("which jpegoptim").and_return("")
21
- compressor.should_receive(:system).and_return(true)
22
- end
23
-
24
- it "falls back to a vendored binary" do
25
- compressor.binary_path.should include("#{gem_root}/bin/jpegoptim")
26
- end
27
- end
28
-
29
- context "when jpegoptim is missing and we're on an unsupported system" do
30
- before do
31
- compressor.should_receive(:`).with("which jpegoptim").and_return("")
32
- compressor.should_receive(:system).twice.and_return(false)
33
- end
34
-
35
- it "raises hell" do
36
- lambda { compressor.binary_path }.should raise_exception
37
- end
38
- end
39
- end
40
- end
@@ -1,47 +0,0 @@
1
- require "sprockets/image_compressor"
2
-
3
- describe Sprockets::ImageCompressor::PngCompressor do
4
- let(:compressor) { Sprockets::ImageCompressor::PngCompressor.new }
5
- let(:gem_root) { Sprockets::ImageCompressor::GEM_ROOT }
6
-
7
- describe "#binary_path" do
8
- context "when pngcrush is installed" do
9
- before do
10
- compressor.should_receive(:`).with("which pngcrush").and_return("/path/to/pngcrush\n")
11
- end
12
-
13
- it "prefers the system's binary" do
14
- compressor.binary_path.should == "/path/to/pngcrush"
15
- end
16
- end
17
-
18
- context "when pngcrush is missing and we're on a supported system" do
19
- before do
20
- compressor.should_receive(:`).with("which pngcrush").and_return("")
21
- compressor.should_receive(:system).and_return(true)
22
- end
23
-
24
- it "falls back to a vendored binary" do
25
- compressor.binary_path.should include("#{gem_root}/bin/pngcrush")
26
- end
27
- end
28
-
29
- context "when pngcrush is missing and we're an unsupported system" do
30
- before do
31
- compressor.should_receive(:`).with("which pngcrush").and_return("")
32
- compressor.should_receive(:system).twice.and_return(false)
33
- end
34
-
35
- it "raises hell" do
36
- lambda { compressor.binary_path }.should raise_exception
37
- end
38
- end
39
- end
40
-
41
- describe "#compress" do
42
- it "returns uncompressable content as-is with a warning" do
43
- compressor.should_receive(:warn)
44
- compressor.compress("asdf").should == "asdf"
45
- end
46
- end
47
- end