sprockets-image_compressor_holder 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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: efb078028d8af5713ba2f1aed4396e0cdbefda21
4
+ data.tar.gz: 790b170766c6c92f81c434905282b934ca87d6b4
5
+ SHA512:
6
+ metadata.gz: 70fcdd1369e4ba5b1b2230bea6068b73693bac8e4973f99bfadd55e7564ea2648388590a22fea688f1148b74b7a73f43d5aafb9e14806766ada522337a307b68
7
+ data.tar.gz: 6956c8fdc7fc12eced7734ab9fd6a83513c76bde43bd187a04ba4b498f79a637681b6edd360f3e1a0dfe4a0bc82386216947a29fcf6d199b3d00109fd277c9ee
data/.gitignore ADDED
@@ -0,0 +1,7 @@
1
+ *.gem
2
+ .ruby-version
3
+ .ruby-gemset
4
+ .rvmrc
5
+ .bundle
6
+ Gemfile.lock
7
+ pkg/*
data/.travis.yml ADDED
@@ -0,0 +1,8 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.1
4
+ # 2.1.0 throws exception until issue is resolved: https://github.com/travis-ci/travis-ci/issues/2220
5
+ before_install:
6
+ - sudo apt-get update -qq
7
+ - sudo apt-get install -y jpegoptim pngcrush
8
+
data/CHANGELOG.md ADDED
@@ -0,0 +1,39 @@
1
+ 0.2.4 (05/18/2014)
2
+ -------------------------
3
+ * Bugfix: jpgs weren't being opened in binary mode. Thanks, @JakeTheSnake3p0!
4
+
5
+ 0.2.3 (04/10/2014)
6
+ -------------------------
7
+ * Bugfix: Return original file and warn if compression fails. Thanks, @tomchentw!
8
+
9
+ 0.2.2 (09/20/2013)
10
+ -------------------------
11
+
12
+ * Bugfix: Work on Rails 4. Thanks, @dkubb!
13
+
14
+ 0.2.1 (07/20/2012)
15
+ -------------------------
16
+
17
+ * Bugfix: Work with Sprockets::Rails. Thanks, @florentmorin!
18
+ * Bugfix: Include license in gemspec. Thanks, @sunny!
19
+
20
+ 0.2.0 (01/28/2012)
21
+ -------------------------
22
+
23
+ * Feature: Fallback to vendored binaries if pngcrush and/or jpegoptim aren't installed on the system. Works on Heroku, now!
24
+
25
+ 0.1.2 (01/26/2012)
26
+ -------------------------
27
+
28
+ * Bugfix: Works on Rails 3.1 and 3.2 on Ruby 1.9
29
+
30
+ 0.1.1 (12/26/2011)
31
+ -------------------------
32
+
33
+ * Bugfix: Make sure we're using binary encoding when dealing with the image files
34
+ * Bugfix: Add basic sprockets integration tests
35
+
36
+ 0.1.0 (09/21/2011)
37
+ -------------------------
38
+
39
+ * Initial public release!
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in sprockets-image_compressor.gemspec
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1,45 @@
1
+ # Image compressor processor for Sprockets
2
+
3
+ [![Build Status](https://travis-ci.org/botandrose/sprockets-image_compressor.svg?branch=master)](https://travis-ci.org/botandrose/sprockets-image_compressor)
4
+
5
+ Sprockets preprocessor to losslessly compress .png and .jpg images using [pngcrush](http://pmt.sourceforge.net/pngcrush/) and [jpegoptim](http://www.kokkonen.net/tjko/projects.html).
6
+
7
+ ## Integration with Rails 3.1+
8
+
9
+ Just add this gem to your Gemfile:
10
+
11
+ ```ruby
12
+ gem 'sprockets-image_compressor'
13
+ ````
14
+
15
+ The gem ships with a Railtie which will automatically register the compressor preprocessors.
16
+
17
+ ## Now with vendored binary fallbacks / Heroku support!
18
+
19
+ If the environment doesn't have pngcrush and/or jpegoptim installed, the gem will fall back on binaries packaged with the gem. Currently, only 32bit and 64bit linux binaries are included. Pull requests welcome for other architectures!
20
+
21
+ ## Gotchas
22
+
23
+ If you have other sprockets processors registered for images, e.g. `sprockets-webp`, the relative order that they are required can matter. Please load `sprockets-image_compressor` _before_ the others:
24
+
25
+ ```ruby
26
+ gem 'sprockets-image_compressor'
27
+ gem 'sprockets-webp'
28
+ ```
29
+
30
+ See [#15](https://github.com/botandrose/sprockets-image_compressor/issues/15) for more information.
31
+
32
+ ## TODO
33
+
34
+ * Provide configuration hooks
35
+ * Test Railtie
36
+
37
+ ## Credits
38
+
39
+ * @nhogle for help with compiling and packaging the jpegoptim and pngcrush binaries
40
+ * @florentmorin for compatibility with sprockets-rails
41
+ * @dkubb for compatibility with Rails 4
42
+
43
+ ## License
44
+
45
+ (MIT License) - Copyright (c) 2012 Micah Geisel
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1 @@
1
+ require "sprockets/image_compressor"
@@ -0,0 +1,5 @@
1
+ require "sprockets/image_compressor/version"
2
+ require "sprockets/image_compressor/png_compressor"
3
+ require "sprockets/image_compressor/jpg_compressor"
4
+ require "sprockets/image_compressor/integration"
5
+ require "sprockets/image_compressor/railtie" if defined?(Rails)
@@ -0,0 +1,33 @@
1
+ require "tempfile"
2
+
3
+ module Sprockets
4
+ module ImageCompressor
5
+ GEM_ROOT = File.expand_path File.join(File.dirname(__FILE__), "../../../")
6
+
7
+ class Base
8
+ def binary_path
9
+ @binary_path ||= begin
10
+ try_vendored_binaries || try_system_binary 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
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,128 @@
1
+ module Sprockets
2
+ module ImageCompressor
3
+ class Integration
4
+ def self.setup env
5
+ monkey_patch_older_sprockets!
6
+
7
+ env.register_mime_type 'image/png', '.png'
8
+ env.register_postprocessor 'image/png', :png_compressor do |context, data|
9
+ PngCompressor.new.compress data
10
+ end
11
+
12
+ env.register_mime_type 'image/jpeg', '.jpg'
13
+ env.register_postprocessor 'image/jpeg', :jpg_compressor do |context, data|
14
+ JpgCompressor.new.compress data
15
+ end
16
+ end
17
+
18
+ # Rails locks down Sprockets to an older version, which will cause the image compressor to barf on ruby 1.9.
19
+ # Monkey patch in binary fixes from Sprockets 2.2.0.
20
+ def self.monkey_patch_older_sprockets!
21
+ return unless Sprockets::VERSION =~ /2\.[01]\.\d/ # Sprockets version >= 2.0.0 and < 2.2.0
22
+ return unless "".respond_to?(:valid_encoding?) # is ruby 1.9?
23
+
24
+ Sprockets::BundledAsset.class_eval do
25
+ def build_dependency_context_and_body
26
+ start_time = Time.now.to_f
27
+
28
+ context = blank_context
29
+
30
+ # Read original data once and pass it along to `Context`
31
+ mime_type = environment.mime_types(pathname.extname)
32
+ encoding = environment.encoding_for_mime_type(mime_type)
33
+ if encoding && "".respond_to?(:valid_encoding?)
34
+ data = Sprockets::Utils.read_unicode(pathname, encoding)
35
+ else
36
+ data = Sprockets::Utils.read_unicode(pathname)
37
+ end
38
+
39
+ # Prime digest cache with data, since we happen to have it
40
+ environment.file_digest(pathname, data)
41
+
42
+ # Runs all processors on `Context`
43
+ body = context.evaluate(pathname, :data => data)
44
+
45
+ @dependency_context, @body = context, body
46
+
47
+ elapsed_time = ((Time.now.to_f - start_time) * 1000).to_i
48
+ logger.info "Compiled #{logical_path} (#{elapsed_time}ms) (pid #{Process.pid})"
49
+
50
+ return context, body
51
+ end
52
+ end
53
+
54
+ Sprockets::Context.class_eval do
55
+ def evaluate(path, options = {})
56
+ pathname = resolve(path)
57
+ attributes = environment.attributes_for(pathname)
58
+ processors = options[:processors] || attributes.processors
59
+
60
+ if options[:data]
61
+ result = options[:data]
62
+ else
63
+ mime_type = environment.mime_types(pathname.extname)
64
+ encoding = environment.encoding_for_mime_type(mime_type)
65
+ if encoding && "".respond_to?(:valid_encoding?)
66
+ result = Sprockets::Utils.read_unicode(pathname, encoding)
67
+ else
68
+ result = Sprockets::Utils.read_unicode(pathname)
69
+ end
70
+ end
71
+
72
+ processors.each do |processor|
73
+ begin
74
+ template = processor.new(pathname.to_s) { result }
75
+ result = template.render(self, {})
76
+ rescue Exception => e
77
+ annotate_exception! e
78
+ raise
79
+ end
80
+ end
81
+
82
+ result
83
+ end
84
+ end
85
+
86
+ Sprockets::Mime.module_eval do
87
+ # Mime types that should be opened with BINARY encoding.
88
+ def binary_mime_types
89
+ @binary_mime_types ||= [ %r{^(image|audio|video)/} ]
90
+ end
91
+
92
+ # Returns the correct encoding for a given mime type, while falling
93
+ # back on the default external encoding, if it exists.
94
+ def encoding_for_mime_type(type)
95
+ encoding = "BINARY" if binary_mime_types.any? { |matcher| matcher === type }
96
+ encoding ||= default_external_encoding if respond_to?(:default_external_encoding)
97
+ encoding
98
+ end
99
+ end
100
+
101
+ Sprockets::Utils.module_eval do
102
+ def self.utf8_bom_pattern
103
+ @ut8_bom_pattern ||= Regexp.new("\\A\uFEFF".encode('utf-8'))
104
+ end
105
+
106
+ def self.read_unicode(pathname, external_encoding = Encoding.default_external)
107
+ pathname.open("r:#{external_encoding}") do |f|
108
+ f.read.tap do |data|
109
+ # Eager validate the file's encoding. In most cases we
110
+ # expect it to be UTF-8 unless `default_external` is set to
111
+ # something else. An error is usually raised if the file is
112
+ # saved as UTF-16 when we expected UTF-8.
113
+ if !data.valid_encoding?
114
+ raise EncodingError, "#{pathname} has a invalid " +
115
+ "#{data.encoding} byte sequence"
116
+
117
+ # If the file is UTF-8 and theres a BOM, strip it for safe concatenation.
118
+ elsif data.encoding.name == "UTF-8" && data =~ utf8_bom_pattern
119
+ data.sub!(utf8_bom_pattern, "")
120
+ end
121
+ end
122
+ end
123
+ end
124
+ end
125
+ end
126
+ end
127
+ end
128
+ end
@@ -0,0 +1,24 @@
1
+ require "sprockets/image_compressor/base"
2
+
3
+ module Sprockets
4
+ module ImageCompressor
5
+ class JpgCompressor < Base
6
+ def initialize
7
+ @name = "convert"
8
+ end
9
+
10
+ def compress(content)
11
+ compressed_jpg_data = ""
12
+ Tempfile.open ["file", ".jpg"] do |file|
13
+ file.binmode
14
+ file.write content
15
+ file.close
16
+
17
+ out = `#{binary_path} -strip -interlace Plance #{file.path} 2>&1`
18
+ compressed_jpg_data = IO.binread(file.path)
19
+ end
20
+ compressed_jpg_data
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,32 @@
1
+ require "sprockets/image_compressor/base"
2
+
3
+ module Sprockets
4
+ module ImageCompressor
5
+ class PngCompressor < Base
6
+ def initialize
7
+ @name = "pngcrush"
8
+ end
9
+
10
+ def compress(content)
11
+ compressed_png_data = ""
12
+ Tempfile.open ["in_file", ".png"] do |in_file|
13
+ in_file.binmode
14
+ out_file_path = in_file.path + ".optimized.png"
15
+ in_file.write content
16
+ in_file.close
17
+
18
+ out = `#{binary_path} -rem alla -rem text #{in_file.path} #{out_file_path} 2>&1`
19
+ compressed_png_data = IO.binread(out_file_path)
20
+ File.unlink out_file_path
21
+ end
22
+ compressed_png_data
23
+
24
+ rescue Errno::ENOENT => e
25
+ # error during compression so out_file not found
26
+ # return original content as a fallback
27
+ warn "sprockets-image_compressor: PNG compression failed... returning original."
28
+ content
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,9 @@
1
+ module Sprockets
2
+ module ImageCompressor
3
+ class Railtie < ::Rails.version < '4.0' ? ::Rails::Engine : ::Rails::Railtie
4
+ initializer :setup_image_compressors do |app|
5
+ Integration.setup app.assets if app.config.assets.compress
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,5 @@
1
+ module Sprockets
2
+ module Imagecompressor
3
+ VERSION = "0.3.0"
4
+ end
5
+ end
@@ -0,0 +1,40 @@
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
@@ -0,0 +1,47 @@
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
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,3 @@
1
+ html {
2
+ body: red; // UTF8 ☃
3
+ }
@@ -0,0 +1,33 @@
1
+ require "rack/test"
2
+ require "sprockets"
3
+ require "sprockets/image_compressor"
4
+
5
+ describe "sprockets integration" do
6
+ include Rack::Test::Methods
7
+
8
+ let(:app) do
9
+ Sprockets::Environment.new.tap do |env|
10
+ Sprockets::ImageCompressor::Integration.setup env
11
+ env.append_path "spec/fixtures"
12
+ end
13
+ end
14
+
15
+ it "should compress pngs" do
16
+ big_response = get "/largepng.png"
17
+ small_response = get "/smallpng.png"
18
+ big_response.headers["Content-Length"].should == small_response.headers["Content-Length"]
19
+ big_response.body.should == small_response.body
20
+ end
21
+
22
+ it "should compress jpgs" do
23
+ big_response = get "/largejpg.jpg"
24
+ small_response = get "/smalljpg.jpg"
25
+ big_response.headers["Content-Length"].should == small_response.headers["Content-Length"]
26
+ big_response.body.should == small_response.body
27
+ end
28
+
29
+ it "should still serve text assets" do
30
+ response = get "/test.css"
31
+ response.status.should == 200
32
+ end
33
+ end
@@ -0,0 +1,28 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "sprockets/image_compressor/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "sprockets-image_compressor_holder"
7
+ s.version = Sprockets::Imagecompressor::VERSION
8
+ s.authors = ["Micah Geisel"]
9
+ s.email = ["micah@botandrose.com"]
10
+ s.homepage = ""
11
+ s.summary = %q{Losslessly compress images in the Rails asset pipeline}
12
+ s.description = %q{Losslessly compress images in the Rails asset pipeline}
13
+ s.license = "MIT"
14
+
15
+ s.rubyforge_project = "sprockets-image_compressor_holder"
16
+
17
+ s.files = `git ls-files`.split("\n")
18
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
+ s.require_paths = ["lib"]
21
+
22
+ s.add_runtime_dependency "sprockets"
23
+
24
+ s.add_development_dependency "rspec"
25
+ s.add_development_dependency "rack-test"
26
+ s.add_development_dependency "byebug"
27
+ s.add_development_dependency "rake"
28
+ end
metadata ADDED
@@ -0,0 +1,153 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sprockets-image_compressor_holder
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.0
5
+ platform: ruby
6
+ authors:
7
+ - Micah Geisel
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-05-08 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: sprockets
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rack-test
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: byebug
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ description: Losslessly compress images in the Rails asset pipeline
84
+ email:
85
+ - micah@botandrose.com
86
+ executables:
87
+ - jpegoptim.i386.linux
88
+ - jpegoptim.x86_64.linux
89
+ - pngcrush.i386.linux
90
+ - pngcrush.x86_64.linux
91
+ extensions: []
92
+ extra_rdoc_files: []
93
+ files:
94
+ - ".gitignore"
95
+ - ".travis.yml"
96
+ - CHANGELOG.md
97
+ - Gemfile
98
+ - README.md
99
+ - Rakefile
100
+ - bin/jpegoptim.i386.linux
101
+ - bin/jpegoptim.x86_64.linux
102
+ - bin/pngcrush.i386.linux
103
+ - bin/pngcrush.x86_64.linux
104
+ - lib/sprockets-image_compressor.rb
105
+ - lib/sprockets/image_compressor.rb
106
+ - lib/sprockets/image_compressor/base.rb
107
+ - lib/sprockets/image_compressor/integration.rb
108
+ - lib/sprockets/image_compressor/jpg_compressor.rb
109
+ - lib/sprockets/image_compressor/png_compressor.rb
110
+ - lib/sprockets/image_compressor/railtie.rb
111
+ - lib/sprockets/image_compressor/version.rb
112
+ - spec/compressors/jpg_compressor_spec.rb
113
+ - spec/compressors/png_compressor_spec.rb
114
+ - spec/fixtures/largejpg.jpg
115
+ - spec/fixtures/largepng.png
116
+ - spec/fixtures/smalljpg.jpg
117
+ - spec/fixtures/smallpng.png
118
+ - spec/fixtures/test.css
119
+ - spec/integration/sprockets_integration_spec.rb
120
+ - sprockets-image_compressor.gemspec
121
+ homepage: ''
122
+ licenses:
123
+ - MIT
124
+ metadata: {}
125
+ post_install_message:
126
+ rdoc_options: []
127
+ require_paths:
128
+ - lib
129
+ required_ruby_version: !ruby/object:Gem::Requirement
130
+ requirements:
131
+ - - ">="
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
134
+ required_rubygems_version: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ requirements: []
140
+ rubyforge_project: sprockets-image_compressor_holder
141
+ rubygems_version: 2.4.6
142
+ signing_key:
143
+ specification_version: 4
144
+ summary: Losslessly compress images in the Rails asset pipeline
145
+ test_files:
146
+ - spec/compressors/jpg_compressor_spec.rb
147
+ - spec/compressors/png_compressor_spec.rb
148
+ - spec/fixtures/largejpg.jpg
149
+ - spec/fixtures/largepng.png
150
+ - spec/fixtures/smalljpg.jpg
151
+ - spec/fixtures/smallpng.png
152
+ - spec/fixtures/test.css
153
+ - spec/integration/sprockets_integration_spec.rb