sprockets-image_compressor 0.2.4 → 0.3.0

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
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