paperclip-optimizer 1.0.3 → 2.0.0.beta

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: 9431f29d41af83de62dcace1d3780eeb0c9a295a
4
- data.tar.gz: faff5246fab5f3dfff07f17d5a821a3ee64d90d4
3
+ metadata.gz: c303fcd4e0213be8b4b53d2d6bdcc71df03164a8
4
+ data.tar.gz: 80a353ec95d63ffd9bad08a797c2812c86a79ff2
5
5
  SHA512:
6
- metadata.gz: f6a1909c1c7a59f25a6553d536d7733fdefd8d7b7524ea21d1e65967e5d5fb1ab032ff952f3d2b7f1347566cb3654ef48c2068a018797404d178485ea2d1361f
7
- data.tar.gz: d73cadc21f5a477abfc6a26268171bd52cd07fd3d48271c3dfb25d72991beb6028a94a4a31729ecbb5303e4477e073373f37b3241791b229034cd9eb63849d8e
6
+ metadata.gz: 5c360b3f0331e4f3a3dc1ed367e6d530c970dbde08e4af41ec2742d222e60f4baaeb45c7007202c627f82c92cae83c055f15dd0c4b0d2c7b38bfe5615738fc22
7
+ data.tar.gz: fa8fc637d6c714dfdbe6a4b34bd8cdef0af78acd98f83cd8e4483a183383b5a602d2e03ad4b00522563a62538c01951299d931059901e83e2202e818f4a9cef5
data/.rubocop.yml ADDED
@@ -0,0 +1,8 @@
1
+ AllCops:
2
+ Exclude:
3
+ - 'spec/schema.rb'
4
+
5
+ Style/SpaceInsideParens:
6
+ Enabled: false
7
+ Metrics/LineLength:
8
+ Enabled: false
data/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## 2.0.0.beta
4
+
5
+ * **all available optimization libraries are disabled by default**
6
+
7
+ Previous versions enabled jpegtran and optipng by default. You will have to
8
+ re-enable them manually if you wish to retain that behaviour
9
+
10
+ * configure PaperclipOptimizer globally, per-attachment and per-style
11
+
12
+ Thanks to [danschultzer](https://github.com/danschultzer), [braindeaf](https://github.com/braindeaf) and
13
+ [tirdadc](https://github.com/tirdadc) for pull requests, input and reports
14
+
3
15
  ## 1.0.3
4
16
 
5
17
  * updated tests, compatibility with Paperclip 4 - thanks [Sija](https://github.com/Sija)
data/README.md CHANGED
@@ -4,8 +4,8 @@
4
4
  [![Build Status](https://travis-ci.org/janfoeh/paperclip-optimizer.png)](https://travis-ci.org/janfoeh/paperclip-optimizer)
5
5
  [![Dependency Status](https://gemnasium.com/janfoeh/paperclip-optimizer.png)](https://gemnasium.com/janfoeh/paperclip-optimizer)
6
6
 
7
- PaperclipOptimizer is a processor for [Paperclip](https://github.com/thoughtbot/paperclip) that allows
8
- you to optimize and minify uploaded JPG, PNG or GIF images.
7
+ PaperclipOptimizer is a [Paperclip](https://github.com/thoughtbot/paperclip) processor for
8
+ optimizing and minifying uploaded images.
9
9
 
10
10
  It is just a thin wrapper around [ImageOptim](https://github.com/toy/image_optim),
11
11
  which supports many external optimization libraries like
@@ -13,14 +13,30 @@ which supports many external optimization libraries like
13
13
  * [advpng](http://advancemame.sourceforge.net/doc-advpng.html) from
14
14
  [AdvanceCOMP](http://advancemame.sourceforge.net/comp-readme.html)
15
15
  * [gifsicle](http://www.lcdf.org/gifsicle/)
16
+ * [jhead](http://www.sentex.net/~mwandel/jhead/)
16
17
  * [jpegoptim](http://www.kokkonen.net/tjko/projects.html)
18
+ * [jpeg-recompress](https://github.com/danielgtaylor/jpeg-archive#jpeg-recompress)
17
19
  * jpegtran from [Independent JPEG Group's JPEG library](http://www.ijg.org/)
18
20
  * [optipng](http://optipng.sourceforge.net/)
19
21
  * [pngcrush](http://pmt.sourceforge.net/pngcrush/)
20
22
  * [pngout](http://www.advsys.net/ken/util/pngout.htm)
23
+ * [pngquant](http://pngquant.org/)
24
+ * [svgo](https://github.com/svg/svgo)
21
25
 
22
26
  ### What's new
23
27
 
28
+ **2014-10-13 2.0.0.beta released**
29
+
30
+ * configure PaperclipOptimizer globally, per-attachment and per-style
31
+
32
+ Thanks to [danschultzer](https://github.com/danschultzer), [braindeaf](https://github.com/braindeaf) and
33
+ [tirdadc](https://github.com/tirdadc) for pull requests, input and reports
34
+ * **all available optimization libraries are disabled by default**
35
+
36
+ Previous versions enabled jpegtran and optipng by default. You will have to
37
+ re-enable them manually if you wish to retain that behaviour
38
+ * optimizers which are enabled but missing or broken are ignored by default
39
+
24
40
  **2014-05-02 1.0.3 released**
25
41
 
26
42
  * updated tests, compatibility with Paperclip 4 - thanks [Sija](https://github.com/Sija)
@@ -33,7 +49,7 @@ Read the [CHANGELOG](CHANGELOG.md) for previous changes.
33
49
 
34
50
  ### Dependencies
35
51
 
36
- PaperclipOptimizer is currently compatible with Paperclip 3.4.0 to 4.1.x.
52
+ PaperclipOptimizer is currently compatible with Paperclip 4.2.x.
37
53
 
38
54
  ## Installation
39
55
 
@@ -44,6 +60,29 @@ Add this line to your application's Gemfile after the Paperclip gem:
44
60
  And then execute:
45
61
 
46
62
  $ bundle
63
+
64
+ If you wish to set global configuration settings, run
65
+
66
+ $ rails generate paperclip_optimizer:install
67
+
68
+ to generate an initializer in config/initializers.
69
+
70
+ ### Caution
71
+
72
+ image_optim inserts itself into the asset pipeline and tries to compress your applications image assets as well.
73
+ Since it enables all libraries it supports by default, you might suddenly run into errors if you do not have all
74
+ of them installed.
75
+
76
+ Please note: image_optim settings made through PaperclipOptimizer do not apply here.
77
+
78
+ To disable image_optim in your asset pipeline, add
79
+
80
+ ```ruby
81
+ # config/application.rb
82
+ config.assets.image_optim = false
83
+ ```
84
+
85
+ to your config/application.rb.
47
86
 
48
87
  See [ImageOptims README](https://github.com/toy/image_optim#binaries-location)
49
88
  on how to install the various optimization libraries.
@@ -58,46 +97,93 @@ optimization binaries, compiled and ready for Herokus environment.
58
97
 
59
98
  ## Usage
60
99
 
61
- Just add ```:paperclip_optimizer``` to Paperclips ```:processors``` - setting:
100
+ Just add `:paperclip_optimizer` to Paperclips' `:processors` - setting:
62
101
 
63
102
  ```ruby
64
103
  class User < ActiveRecord::Base
65
104
  attr_accessible :avatar
66
105
  has_attached_file :avatar,
67
- :styles => { :thumb => "100x100>" },
68
- :default_url => "/images/:style/missing.png",
69
- :processors => [:thumbnail, :paperclip_optimizer]
106
+ styles: { thumb: "100x100>" },
107
+ processors: [:thumbnail, :paperclip_optimizer]
70
108
  end
71
109
  ```
72
110
 
73
- Remember to include the ```:thumbnail``` processor as well if you want to retain
111
+ Remember to include the `:thumbnail` processor as well if you want to retain
74
112
  Paperclips geometry functionality.
75
113
 
76
114
  ### Settings
77
115
 
78
- By default, PaperclipOptimizer only enables _jpegtran_ and _optipng_. You can
79
- pass configuration options to ImageOptim through the ```:styles``` hash:
116
+ You can pass configuration options to ImageOptim in three locations: globally, per attachment and per style.
117
+ Settings are merged, so more specific settings replace less specific ones.
118
+
119
+ **Global settings**
120
+
121
+ ```ruby
122
+ Paperclip::PaperclipOptimizer.default_options = {
123
+ skip_missing_workers: false
124
+ }
125
+ ```
126
+
127
+ Run `rails generate paperclip_optimizer:install` to generate an initializer for global settings.
128
+
129
+ **Per-attachment settings**
80
130
 
81
131
  ```ruby
82
132
  class User < ActiveRecord::Base
83
133
  attr_accessible :avatar
84
- has_attached_file :avatar,
85
- :styles => {
86
- :thumb => {
87
- :geometry => "100x100>",
88
- :paperclip_optimizer => {
89
- :pngout => {
90
- :strategy => 1
91
- }
134
+ has_attached_file :avatar,
135
+ processors: [:thumbnail, :paperclip_optimizer],
136
+ paperclip_optimizer: {
137
+ pngout: { strategy: 1 }
138
+ },
139
+ styles: {
140
+ thumb: { geometry: "100x100>" },
141
+ medium: { geometry: "200x200>" },
142
+ large: { geometry: "300x300>" }
143
+ }
144
+ end
145
+ ```
146
+
147
+ Just like Paperclips' `:styles` option, you can pass a lambda to `:paperclip_optimizer` which receives the `attachment` as an argument:
148
+
149
+ ```ruby
150
+ class User < ActiveRecord::Base
151
+ attr_accessible :avatar
152
+ has_attached_file :avatar,
153
+ processors: [:thumbnail, :paperclip_optimizer],
154
+ paperclip_optimizer: ->(attachment) { attachment.instance.my_model_instance_method },
155
+ styles: {
156
+ thumb: { geometry: "100x100>" },
157
+ medium: { geometry: "200x200>" },
158
+ large: { geometry: "300x300>" }
159
+ }
160
+ end
161
+ ```
162
+
163
+ **Per-style settings**
164
+
165
+ ```ruby
166
+ class User < ActiveRecord::Base
167
+ attr_accessible :avatar
168
+ has_attached_file :avatar,
169
+ processors: [:thumbnail, :paperclip_optimizer],
170
+ paperclip_optimizer: {
171
+ pngout: { strategy: 1 }
172
+ },
173
+ styles: {
174
+ thumb: { geometry: "100x100>" },
175
+ medium: { geometry: "200x200>" },
176
+ large: {
177
+ geometry: "300x300>",
178
+ paperclip_optimizer: {
179
+ pngout: { strategy: 4 }
92
180
  }
93
181
  }
94
- },
95
- :default_url => "/images/:style/missing.png",
96
- :processors => [:thumbnail, :paperclip_optimizer]
182
+ }
97
183
  end
98
184
  ```
99
185
 
100
- See [ImageOptims options](https://github.com/toy/image_optim#options) for
186
+ See [ImageOptims options](https://github.com/toy/image_optim#options) or the initializer for
101
187
  all available options.
102
188
 
103
189
  ## Contributing
data/Rakefile CHANGED
@@ -1 +1 @@
1
- require "bundler/gem_tasks"
1
+ require 'bundler/gem_tasks'
@@ -1,15 +1,23 @@
1
- require "paperclip-optimizer/version"
2
- require "paperclip-optimizer/processor"
1
+
2
+ require 'paperclip-optimizer/version'
3
+ require 'paperclip-optimizer/processor'
3
4
 
4
5
  module PaperclipOptimizer
5
- DEFAULT_SETTINGS = {
6
- pngcrush: false,
7
- pngout: false,
6
+ DEFAULT_OPTIONS = {
7
+ skip_missing_workers: true,
8
8
  advpng: false,
9
+ gifsicle: false,
10
+ jhead: false,
9
11
  jpegoptim: false,
10
- gifsicle: false
12
+ jpegrecompress: false,
13
+ jpegtran: false,
14
+ optipng: false,
15
+ pngcrush: false,
16
+ pngout: false,
17
+ pngquant: false,
18
+ svgo: false
11
19
  }.freeze
12
-
20
+
13
21
  # Helper class for capturing ImageOptims error output and redirecting it
14
22
  # to Paperclips logger instance
15
23
  class StdErrCapture
@@ -22,7 +30,7 @@ module PaperclipOptimizer
22
30
  @logger.send(@log_level, string)
23
31
  end
24
32
 
25
- alias_method "<<", :write
33
+ alias_method '<<', :write
26
34
 
27
35
  def flush; end
28
36
  end
@@ -1,32 +1,62 @@
1
- require "paperclip"
2
- require "image_optim"
1
+ require 'paperclip'
2
+ require 'image_optim'
3
3
 
4
4
  module Paperclip
5
- class PaperclipOptimizer < Processor
6
- def make
7
- settings = (@options[:paperclip_optimizer] || {}).reverse_merge(::PaperclipOptimizer::DEFAULT_SETTINGS)
5
+ class PaperclipOptimizer < Processor
6
+ def self.default_options
7
+ @default_options ||= ::PaperclipOptimizer::DEFAULT_OPTIONS
8
+ end
9
+
10
+ def self.default_options=(new_options)
11
+ @default_options = new_options
12
+ end
8
13
 
14
+ def make
9
15
  src_path = File.expand_path(@file.path)
10
16
 
11
- if settings[:verbose]
12
- Paperclip.logger.info "optimizing #{src_path} with settings: #{settings.inspect}"
17
+ if optimizer_options[:verbose]
18
+ Paperclip.logger.info "optimizing #{src_path} with settings: #{optimizer_options.inspect}"
13
19
 
14
20
  old_stderr = $stderr
15
21
  $stderr = ::PaperclipOptimizer::StdErrCapture.new(Paperclip.logger)
16
22
  end
17
23
 
18
24
  begin
19
- image_optim = ImageOptim.new(settings)
25
+ image_optim = ImageOptim.new(optimizer_options)
20
26
  compressed_file_path = image_optim.optimize_image(src_path)
21
27
  ensure
22
- $stderr = old_stderr if settings[:verbose]
28
+ $stderr = old_stderr if optimizer_options[:verbose]
23
29
  end
24
30
 
25
- if compressed_file_path && File.exists?(compressed_file_path)
31
+ if compressed_file_path && File.exist?(compressed_file_path)
26
32
  return File.open(compressed_file_path)
27
33
  else
28
34
  return @file
29
35
  end
30
36
  end
37
+
38
+ protected
39
+
40
+ def optimizer_options
41
+ optimizer_global_options
42
+ .deep_merge(optimizer_instance_options)
43
+ .deep_merge(optimizer_style_options)
44
+ .delete_if { |_key, value| value.nil? }
45
+ end
46
+
47
+ private
48
+
49
+ def optimizer_global_options
50
+ self.class.default_options
51
+ end
52
+
53
+ def optimizer_instance_options
54
+ instance_options = @attachment.options.fetch(:paperclip_optimizer, {})
55
+ instance_options.respond_to?(:call) ? instance_options.call(@attachment) : instance_options
56
+ end
57
+
58
+ def optimizer_style_options
59
+ @options.fetch(:paperclip_optimizer, {})
60
+ end
31
61
  end
32
- end
62
+ end
@@ -1,3 +1,3 @@
1
1
  module PaperclipOptimizer
2
- VERSION = "1.0.3"
2
+ VERSION = '2.0.0.beta'
3
3
  end
@@ -0,0 +1,11 @@
1
+ module PaperclipOptimizer
2
+ class InstallGenerator < Rails::Generators::Base
3
+ source_root File.expand_path('../templates', __FILE__)
4
+
5
+ desc "creates an initializer file at config/initializers for setting global options"
6
+
7
+ def create_initializer
8
+ copy_file "initializer.rb", "config/initializers/paperclip_optimizer.rb"
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,76 @@
1
+ # Set global optimisation options for all Paperclip models
2
+
3
+ # By default, image_optim enables all the compression binaries it supports and
4
+ # requires them to be present on your system, failing if one is actually missing.
5
+
6
+ # We disable everything by default and ignore missing ones with `skip_missing_workers`.
7
+ # This way, should a new version add support for a library we do not yet disable here,
8
+ # things won't suddenly break.
9
+
10
+ Paperclip::PaperclipOptimizer.default_options = {
11
+ skip_missing_workers: true,
12
+ advpng: false,
13
+ gifsicle: false,
14
+ jhead: false,
15
+ jpegoptim: false,
16
+ jpegrecompress: false,
17
+ jpegtran: false,
18
+ optipng: false,
19
+ pngcrush: false,
20
+ pngout: false,
21
+ pngquant: false,
22
+ svgo: false
23
+ }
24
+
25
+ # All available image_optim options. See https://github.com/toy/image_optim for more information
26
+
27
+ # Paperclip::PaperclipOptimizer.default_options = {
28
+ # skip_missing_workers: false, # Skip workers with missing or problematic binaries (defaults to false)
29
+ # nice: 10, # Nice level (defaults to 10)
30
+ # threads: 1, # Number of threads or disable (defaults to number of processors)
31
+ # verbose: false, # Verbose output (defaults to false)
32
+ # pack: nil, # Require image_optim_pack or disable it, by default image_optim_pack will be used if available,
33
+ # # will turn on :skip-missing-workers unless explicitly disabled (defaults to nil)
34
+ # allow_lossy: false, # Allow lossy workers and optimizations (defaults to false)
35
+ # advpng: {
36
+ # leve: 4 # Compression level: 0 - don't compress, 1 - fast, 2 - normal, 3 - extra, 4 - extreme (defaults to 4)
37
+ # },
38
+ # gifsicle: {
39
+ # interlace: true, # Interlace: true - interlace on, false - interlace off, nil - as is in original image
40
+ # # (defaults to running two instances, one with interlace off and one with on)
41
+ # level: 3, # Compression level: 1 - light and fast, 2 - normal, 3 - heavy (slower) (defaults to 3)
42
+ # careful: false # Avoid bugs with some software (defaults to false)
43
+ # },
44
+ # jhead: true, # no options
45
+ # jpegoptim: {
46
+ # strip: :all, # List of extra markers to strip: :comments, :exif, :iptc, :icc or :all (defaults to :all)
47
+ # max_quality: 100 # Maximum image quality factor 0..100 (defaults to 100)
48
+ # },
49
+ # jpegrecompress: {
50
+ # quality: 3 # JPEG quality preset: 0 - low, 1 - medium, 2 - high, 3 - veryhigh (defaults to 3)
51
+ # },
52
+ # jpegtran: {
53
+ # copy_chunks: false, # Copy all chunks (defaults to false)
54
+ # progressive: true, # Create progressive JPEG file (defaults to true)
55
+ # jpegrescan: false # Use jpegtran through jpegrescan, ignore progressive option (defaults to false)
56
+ # },
57
+ # optipng: {
58
+ # level: 6, # Optimization level preset: 0 is least, 7 is best (defaults to 6)
59
+ # interlace: false # Interlace: true - interlace on, false - interlace off, nil - as is in original image (defaults to false)
60
+ # },
61
+ # pngcrush: {
62
+ # chunks: :alla, # List of chunks to remove or :alla - all except tRNS/transparency or
63
+ # # :allb - all except tRNS and gAMA/gamma (defaults to :alla)
64
+ # fix: false, # Fix otherwise fatal conditions such as bad CRCs (defaults to false)
65
+ # brute: false # Brute force try all methods, very time-consuming and generally not worthwhile (defaults to false)
66
+ # },
67
+ # pngout: {
68
+ # copy_chunks: false, # Copy optional chunks (defaults to false)
69
+ # strategy: 0 # Strategy: 0 - xtreme, 1 - intense, 2 - longest Match, 3 - huffman Only, 4 - uncompressed (defaults to 0)
70
+ # },
71
+ # pngquant: {
72
+ # quality: 100..100, # min..max - don't save below min, use less colors below max (both in range 0..100; in yaml - !ruby/range 0..100) (defaults to 100..100)
73
+ # speed: 3 # speed/quality trade-off: 1 - slow, 3 - default, 11 - fast & rough (defaults to 3)
74
+ # },
75
+ # svgo: true # no options
76
+ # }
@@ -4,25 +4,57 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  require 'paperclip-optimizer/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
- spec.name = "paperclip-optimizer"
7
+ spec.name = 'paperclip-optimizer'
8
8
  spec.version = PaperclipOptimizer::VERSION
9
- spec.authors = ["Jan-Christian Föh"]
10
- spec.email = ["jan@programmanstalt.de"]
11
- spec.description = %q{paperclip-optimizer is a processor for Paperclip that allows you to optimize and minify uploaded JPEG and PNG files.}
12
- spec.summary = %q{Minify Paperclip JPEG and PNG attachments}
13
- spec.homepage = "https://github.com/janfoeh/paperclip-optimizer"
14
- spec.license = "MIT"
15
-
16
- spec.add_runtime_dependency "paperclip", ">= 3.4"
17
- spec.add_runtime_dependency "image_optim", "~> 0.9"
18
-
19
- spec.add_development_dependency "bundler", "~> 1.3"
20
- spec.add_development_dependency "rake", "~> 10.1"
21
- spec.add_development_dependency 'rspec', "~> 2.13"
22
- spec.add_development_dependency 'rails', ">= 3.2.13", "< 4.1.0"
23
- spec.add_development_dependency 'sqlite3', "~> 1.3.7"
24
-
25
- spec.files = `git ls-files`.split($/)
9
+ spec.authors = ['Jan-Christian Föh']
10
+ spec.email = ['jan@programmanstalt.de']
11
+ spec.description = 'paperclip-optimizer is a Paperclip processor for optimizing and minifying uploaded images.'
12
+ spec.summary = 'Minify Paperclip image attachments like JPGs, GIFs or PNGs'
13
+ spec.homepage = 'https://github.com/janfoeh/paperclip-optimizer'
14
+ spec.license = 'MIT'
15
+
16
+ spec.add_runtime_dependency 'paperclip', '>= 4.2'
17
+ spec.add_runtime_dependency 'image_optim', '~> 0.19.0'
18
+
19
+ spec.add_development_dependency 'bundler', '~> 1.3'
20
+ spec.add_development_dependency 'rake', '~> 10.1'
21
+ spec.add_development_dependency 'rspec', '~> 2.13'
22
+ spec.add_development_dependency 'rails', '>= 3.2.20', '<= 4.2.0'
23
+ spec.add_development_dependency 'sqlite3', '~> 1.3.7'
24
+ spec.add_development_dependency 'rubocop', '~> 0.26.1'
25
+
26
+ spec.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
26
27
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
27
- spec.require_paths = ["lib"]
28
+ spec.require_paths = ['lib']
29
+
30
+ spec.post_install_message = %q{
31
+ Initializer
32
+ -----------
33
+
34
+ run
35
+
36
+ rails g paperclip_optimizer:install
37
+
38
+ to create an initializer for global configuration.
39
+
40
+ Breaking changes from 1.0.3
41
+ ---------------------------
42
+
43
+ Please note that Paperclip 2 now disables all optimization libraries by default. Re-enable jpegtran
44
+ and optipng manually if you wish to retain the previous behaviour.
45
+
46
+ See https://github.com/janfoeh/paperclip-optimizer#settings for more information on the new
47
+ configuration system.
48
+
49
+ PLEASE NOTE
50
+ -----------
51
+
52
+ PaperclipOptimizer depends on image_optim, which by default inserts itself into the asset pipeline and
53
+ tries to compress your application assets. This might fail if you do not have all supported optimization
54
+ binaries installed. Add
55
+
56
+ config.assets.image_optim = false
57
+
58
+ to your config/application.rb to disable this.
59
+ }
28
60
  end
@@ -1,14 +1,15 @@
1
- require "spec_helper"
2
- require "fileutils"
1
+
2
+ require 'spec_helper'
3
+ require 'fileutils'
3
4
 
4
5
  describe Paperclip::PaperclipOptimizer do
5
6
 
6
7
  def stubbed_upload_model(*args)
7
8
  stubbed_model = Upload.dup
8
9
 
9
- # prevent ActiveModel::Validations from blowing up when error messages are
10
+ # prevent ActiveModel::Validations from blowing up when error messages are
10
11
  # accessed on an anonymous class
11
- stubbed_model.stub(:model_name => ActiveModel::Name.new(self, nil, "temp"))
12
+ stubbed_model.stub( model_name: ActiveModel::Name.new(self, nil, 'temp') )
12
13
  stubbed_model.any_instance.stub(*args)
13
14
 
14
15
  stubbed_model
@@ -18,24 +19,27 @@ describe Paperclip::PaperclipOptimizer do
18
19
  tmp_dir = File.join(File.dirname(__FILE__), 'tmp')
19
20
 
20
21
  Dir.mkdir(tmp_dir) unless File.directory?(tmp_dir)
21
-
22
+
22
23
  Dir.entries(tmp_dir).each do |f|
23
- next unless f.end_with?(".jpg", ".png")
24
+ next unless f.end_with?('.jpg', '.png')
24
25
 
25
26
  FileUtils.remove_entry_secure( File.join(tmp_dir, f) )
26
27
  end
28
+
29
+ Paperclip::PaperclipOptimizer.default_options = PaperclipOptimizer::DEFAULT_OPTIONS
27
30
  end
28
31
 
29
- it "creates smaller JPEGs" do
32
+ it 'creates smaller JPEGs with jpegtran' do
30
33
  jpg = get_fixture(:jpg)
31
- unoptimized_upload = Upload.new(:image => jpg)
34
+ unoptimized_upload = Upload.new(image: jpg)
32
35
  jpg.close
33
36
  unoptimized_upload.save
34
37
 
35
38
  jpg = get_fixture(:jpg)
36
39
  optimized_upload = stubbed_upload_model(
37
- processor_settings: [:thumbnail, :paperclip_optimizer]
38
- ).new(:image => jpg)
40
+ processor_settings: [:thumbnail, :paperclip_optimizer],
41
+ instance_settings: { jpegtran: true }
42
+ ).new(image: jpg)
39
43
  jpg.close
40
44
  optimized_upload.save
41
45
 
@@ -45,16 +49,17 @@ describe Paperclip::PaperclipOptimizer do
45
49
  expect(optimized_file_size).to be < unoptimized_file_size
46
50
  end
47
51
 
48
- it "creates smaller PNGs" do
52
+ it 'creates smaller PNGs with optipng' do
49
53
  png = get_fixture(:png)
50
- unoptimized_upload = Upload.new(:image => png)
54
+ unoptimized_upload = Upload.new(image: png)
51
55
  unoptimized_upload.save
52
56
  png.close
53
57
 
54
58
  png = get_fixture(:png)
55
59
  optimized_upload = stubbed_upload_model(
56
- processor_settings: [:thumbnail, :paperclip_optimizer]
57
- ).new(:image => png)
60
+ processor_settings: [:thumbnail, :paperclip_optimizer],
61
+ instance_settings: { optipng: true }
62
+ ).new(image: png)
58
63
  png.close
59
64
  optimized_upload.save
60
65
 
@@ -64,24 +69,24 @@ describe Paperclip::PaperclipOptimizer do
64
69
  expect(optimized_file_size).to be < unoptimized_file_size
65
70
  end
66
71
 
67
- it "should allow disabled optimization options to be reenabled" do
68
- settings = {
69
- :gifsicle => {:interlace => true}
70
- }.reverse_merge(::PaperclipOptimizer::DEFAULT_SETTINGS)
72
+ it 'merges global, per-model and per-style options' do
73
+ global_options = PaperclipOptimizer::DEFAULT_OPTIONS.merge( gifsicle: { interlace: true }, jpegtran: true )
74
+ final_merged_options = PaperclipOptimizer::DEFAULT_OPTIONS.merge( jpegtran: true, optipng: true )
75
+
76
+ Paperclip::PaperclipOptimizer.default_options = global_options
71
77
 
72
- ImageOptim.should_receive(:new).with(settings).and_call_original
78
+ ImageOptim.should_receive(:new).with(final_merged_options).and_call_original
73
79
 
74
80
  jpg = get_fixture(:jpg)
75
81
 
76
82
  stubbed_upload_model(
77
83
  processor_settings: [:paperclip_optimizer],
78
- style_settings: {
84
+ instance_settings: { gifsicle: false },
85
+ style_settings: {
79
86
  medium: {
80
- paperclip_optimizer: {
81
- gifsicle: {:interlace => true}
82
- }
87
+ paperclip_optimizer: { optipng: true }
83
88
  }
84
89
  }
85
- ).new(:image => jpg)
90
+ ).new(image: jpg)
86
91
  end
87
- end
92
+ end
data/spec/spec_helper.rb CHANGED
@@ -6,37 +6,42 @@ require 'paperclip-optimizer'
6
6
  require 'rspec'
7
7
  require 'rspec/autorun'
8
8
 
9
- require "active_record"
9
+ require 'active_record'
10
10
 
11
11
  # taken from https://github.com/tienle/docsplit-paperclip-processor/blob/master/spec/spec_helper.rb
12
12
 
13
- ActiveRecord::Base.establish_connection(
14
- "adapter" => "sqlite3",
15
- "database" => ":memory:"
16
- )
13
+ ActiveRecord::Base.establish_connection adapter: 'sqlite3', database: ':memory:'
17
14
 
18
15
  ActiveRecord::Base.logger = Logger.new(nil)
16
+
19
17
  load(File.join(File.dirname(__FILE__), 'schema.rb'))
20
18
 
21
19
  Paperclip::Railtie.insert
22
20
 
23
21
  class Upload < ActiveRecord::Base
24
- self.table_name = "uploads"
22
+ self.table_name = 'uploads'
25
23
 
26
24
  has_attached_file :image,
27
- :storage => :filesystem,
28
- :path => "./spec/tmp/:id.:extension",
29
- :url => "/spec/tmp/:id.:extension",
30
- :styles => lambda { |attachment| attachment.instance.style_settings },
31
- :processors => lambda { |instance| instance.processor_settings }
25
+ storage: :filesystem,
26
+ path: './spec/tmp/:id.:extension',
27
+ url: '/spec/tmp/:id.:extension',
28
+ styles: ->(attachment) { attachment.instance.style_settings },
29
+ processors: ->(instance) { instance.processor_settings },
30
+ paperclip_optimizer: ->(attachment) { attachment.instance.instance_settings}
32
31
 
33
32
  if self.respond_to?(:do_not_validate_attachment_file_type)
34
33
  do_not_validate_attachment_file_type :image
35
34
  end
36
35
 
37
36
  def style_settings
38
- {
39
- medium: { geometry: "500x500>" }
37
+ {
38
+ medium: { geometry: '500x500>' }
39
+ }
40
+ end
41
+
42
+ def instance_settings
43
+ {
44
+
40
45
  }
41
46
  end
42
47
 
@@ -45,9 +50,9 @@ class Upload < ActiveRecord::Base
45
50
  end
46
51
  end
47
52
 
48
- def get_fixture(file_type = :jpg, valid = "valid")
49
- file_name = "#{valid}.#{file_type.to_s}"
50
- fixtures_dir = File.join(File.dirname(__FILE__), "../fixtures")
53
+ def get_fixture(file_type = :jpg, valid = 'valid')
54
+ file_name = "#{valid}.#{file_type}"
55
+ fixtures_dir = File.join(File.dirname(__FILE__), '../fixtures')
51
56
  fixture_path = File.join(fixtures_dir, file_name)
52
57
 
53
58
  File.open(fixture_path)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: paperclip-optimizer
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 2.0.0.beta
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan-Christian Föh
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-02 00:00:00.000000000 Z
11
+ date: 2014-11-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: paperclip
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '3.4'
19
+ version: '4.2'
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: '3.4'
26
+ version: '4.2'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: image_optim
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0.9'
33
+ version: 0.19.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0.9'
40
+ version: 0.19.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -86,20 +86,20 @@ dependencies:
86
86
  requirements:
87
87
  - - ">="
88
88
  - !ruby/object:Gem::Version
89
- version: 3.2.13
90
- - - "<"
89
+ version: 3.2.20
90
+ - - "<="
91
91
  - !ruby/object:Gem::Version
92
- version: 4.1.0
92
+ version: 4.2.0
93
93
  type: :development
94
94
  prerelease: false
95
95
  version_requirements: !ruby/object:Gem::Requirement
96
96
  requirements:
97
97
  - - ">="
98
98
  - !ruby/object:Gem::Version
99
- version: 3.2.13
100
- - - "<"
99
+ version: 3.2.20
100
+ - - "<="
101
101
  - !ruby/object:Gem::Version
102
- version: 4.1.0
102
+ version: 4.2.0
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: sqlite3
105
105
  requirement: !ruby/object:Gem::Requirement
@@ -114,8 +114,22 @@ dependencies:
114
114
  - - "~>"
115
115
  - !ruby/object:Gem::Version
116
116
  version: 1.3.7
117
- description: paperclip-optimizer is a processor for Paperclip that allows you to optimize
118
- and minify uploaded JPEG and PNG files.
117
+ - !ruby/object:Gem::Dependency
118
+ name: rubocop
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: 0.26.1
124
+ type: :development
125
+ prerelease: false
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - "~>"
129
+ - !ruby/object:Gem::Version
130
+ version: 0.26.1
131
+ description: paperclip-optimizer is a Paperclip processor for optimizing and minifying
132
+ uploaded images.
119
133
  email:
120
134
  - jan@programmanstalt.de
121
135
  executables: []
@@ -124,6 +138,7 @@ extra_rdoc_files: []
124
138
  files:
125
139
  - ".gitignore"
126
140
  - ".rspec"
141
+ - ".rubocop.yml"
127
142
  - ".ruby-gemset"
128
143
  - ".ruby-version"
129
144
  - ".travis.yml"
@@ -139,6 +154,8 @@ files:
139
154
  - lib/paperclip-optimizer.rb
140
155
  - lib/paperclip-optimizer/processor.rb
141
156
  - lib/paperclip-optimizer/version.rb
157
+ - lib/rails/generators/paperclip_optimizer/install/install_generator.rb
158
+ - lib/rails/generators/paperclip_optimizer/install/templates/initializer.rb
142
159
  - paperclip-optimizer.gemspec
143
160
  - spec/paperclip-optimizer_spec.rb
144
161
  - spec/schema.rb
@@ -147,7 +164,16 @@ homepage: https://github.com/janfoeh/paperclip-optimizer
147
164
  licenses:
148
165
  - MIT
149
166
  metadata: {}
150
- post_install_message:
167
+ post_install_message: "\nInitializer\n-----------\n\nrun\n\n rails g paperclip_optimizer:install\n\nto
168
+ create an initializer for global configuration.\n\nBreaking changes from 1.0.3\n---------------------------\n\nPlease
169
+ note that Paperclip 2 now disables all optimization libraries by default. Re-enable
170
+ jpegtran\nand optipng manually if you wish to retain the previous behaviour.\n\nSee
171
+ https://github.com/janfoeh/paperclip-optimizer#settings for more information on
172
+ the new \nconfiguration system.\n\nPLEASE NOTE\n-----------\n\nPaperclipOptimizer
173
+ depends on image_optim, which by default inserts itself into the asset pipeline
174
+ and \ntries to compress your application assets. This might fail if you do not have
175
+ all supported optimization \nbinaries installed. Add\n\n config.assets.image_optim
176
+ = false\n \nto your config/application.rb to disable this.\n"
151
177
  rdoc_options: []
152
178
  require_paths:
153
179
  - lib
@@ -158,15 +184,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
158
184
  version: '0'
159
185
  required_rubygems_version: !ruby/object:Gem::Requirement
160
186
  requirements:
161
- - - ">="
187
+ - - ">"
162
188
  - !ruby/object:Gem::Version
163
- version: '0'
189
+ version: 1.3.1
164
190
  requirements: []
165
191
  rubyforge_project:
166
192
  rubygems_version: 2.2.2
167
193
  signing_key:
168
194
  specification_version: 4
169
- summary: Minify Paperclip JPEG and PNG attachments
195
+ summary: Minify Paperclip image attachments like JPGs, GIFs or PNGs
170
196
  test_files:
171
197
  - spec/paperclip-optimizer_spec.rb
172
198
  - spec/schema.rb