piet 0.2.0 → 0.2.1

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: 16621256456a706ddf5849744e2dda16c4fdf4a4
4
- data.tar.gz: 505853c685fc0f265e2b56b83c13d4a38566e3b8
3
+ metadata.gz: f156bb74824772e7b12d94c41f0a6e16cddc35de
4
+ data.tar.gz: d621ebeb34ec00912b4691dbc135de77fd5f54bc
5
5
  SHA512:
6
- metadata.gz: de96325761b35d3a471406db191a4031c6bd71e47b5fd863beab5b692529952c363828519a1c7f8a1eb423f089797ecdefeab30bcb6316e6c4b04de68a2b73c0
7
- data.tar.gz: 9b1f84be78683f9d12c322024de53ecf9163d145ec67c2643a7549a9ec466ba04264361e457735b1105630c89e35bbbf9e570a3dd7955ca4e57d553b26178b30
6
+ metadata.gz: 434517ed09c979627074dc10dc16d7834ca53eb90f26e9f26971c9688ccfbe83637c2937c8ca638002212e4878c7ebf68d76090dbd916c9d3f940f3697e86ca1
7
+ data.tar.gz: 36592b89e4613eca1f2a6a79dbb956c40fa97c59e6d8cc78834ffaf657fd31080a618a05ed055d4b2f0829dc645d3ba07e48c4c0b2ca6a62d4564b3a00482f6a
data/.gitignore CHANGED
@@ -1 +1,8 @@
1
1
  pkg/*
2
+
3
+ # Carrierwave uploads
4
+ uploads
5
+
6
+ # RVM configuration files
7
+ .ruby-gemset
8
+ .ruby-version
data/.travis.yml ADDED
@@ -0,0 +1,4 @@
1
+ rvm:
2
+ - "1.9.3"
3
+ - "2.0.0"
4
+ - "2.1.5"
data/Gemfile.lock CHANGED
@@ -1,28 +1,59 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- piet (0.1.3)
4
+ piet (0.2.0)
5
5
  png_quantizator
6
6
 
7
7
  GEM
8
8
  remote: http://rubygems.org/
9
9
  specs:
10
- ZenTest (4.5.0)
11
- diff-lcs (1.1.3)
10
+ ZenTest (4.10.0)
11
+ activemodel (4.1.1)
12
+ activesupport (= 4.1.1)
13
+ builder (~> 3.1)
14
+ activesupport (4.1.1)
15
+ i18n (~> 0.6, >= 0.6.9)
16
+ json (~> 1.7, >= 1.7.7)
17
+ minitest (~> 5.1)
18
+ thread_safe (~> 0.1)
19
+ tzinfo (~> 1.1)
20
+ builder (3.2.2)
21
+ carrierwave (0.10.0)
22
+ activemodel (>= 3.2.0)
23
+ activesupport (>= 3.2.0)
24
+ json (>= 1.7)
25
+ mime-types (>= 1.16)
26
+ diff-lcs (1.2.5)
27
+ i18n (0.6.9)
28
+ json (1.8.1)
29
+ mime-types (2.2)
30
+ mini_magick (3.7.0)
31
+ subexec (~> 0.2.1)
32
+ minitest (5.3.3)
12
33
  png_quantizator (0.1.0)
13
- rspec (2.7.0)
14
- rspec-core (~> 2.7.0)
15
- rspec-expectations (~> 2.7.0)
16
- rspec-mocks (~> 2.7.0)
17
- rspec-core (2.7.1)
18
- rspec-expectations (2.7.0)
19
- diff-lcs (~> 1.1.2)
20
- rspec-mocks (2.7.0)
34
+ rake (10.3.2)
35
+ rmagick (2.13.2)
36
+ rspec (2.14.1)
37
+ rspec-core (~> 2.14.0)
38
+ rspec-expectations (~> 2.14.0)
39
+ rspec-mocks (~> 2.14.0)
40
+ rspec-core (2.14.8)
41
+ rspec-expectations (2.14.5)
42
+ diff-lcs (>= 1.1.3, < 2.0)
43
+ rspec-mocks (2.14.6)
44
+ subexec (0.2.3)
45
+ thread_safe (0.3.3)
46
+ tzinfo (1.1.0)
47
+ thread_safe (~> 0.1)
21
48
 
22
49
  PLATFORMS
23
50
  ruby
24
51
 
25
52
  DEPENDENCIES
26
53
  ZenTest
54
+ carrierwave
55
+ mini_magick
27
56
  piet!
57
+ rake
58
+ rmagick
28
59
  rspec
data/README.md CHANGED
@@ -1,6 +1,8 @@
1
1
  Piet
2
2
  ======
3
3
 
4
+ [![Build Status](https://secure.travis-ci.org/albertbellonch/piet.png)](http://travis-ci.org/albertbellonch/piet)
5
+
4
6
  Description
5
7
  -----------
6
8
 
@@ -62,12 +64,16 @@ and then call the **optimize** method:
62
64
  Piet.optimize(path, opts)
63
65
  ```
64
66
 
67
+ Not that this will work not by just using the file extension, but by
68
+ MIME type detection, which should be more reliable.
69
+
65
70
  The options are:
66
71
 
67
72
  * **verbose**: Whether you want to get the output of the command or not. It is interpreted as a Boolean value. Default: false.
68
73
 
69
- * **quality**: If you wanna add a compression, adjust the quality parameter. Valid values are any integer between 0 and 100 (100 means no compression and highest quality). Default: 100
74
+ * **quality**: Adjust the output compression for JPEGs. Valid values are any integer between 0 and 100 (100 means no compression and highest quality). Default: 100
70
75
 
76
+ * **level**: Adjust the optimization level for PNGs. Valid values are any integer between 0 and 7 (7 means highest compression and longest processing time). Default: 7
71
77
 
72
78
  CarrierWave integration
73
79
  -----------------------
@@ -133,7 +139,7 @@ would optimize those PNG, GIF and JPEG files but ouput nothing.
133
139
  Piet.optimize('/my/wonderful/pics/piggy.png', :verbose => true)
134
140
  ```
135
141
 
136
- would optimize that PNG/GIF file and ouput something similar to this one:
142
+ would optimize that PNG/GIF file and output something similar to this one:
137
143
 
138
144
  ** Processing: piggy.png
139
145
  340x340 pixels, 4x8 bits/pixel, RGB+alpha
@@ -182,8 +188,10 @@ TODO
182
188
  Changelog
183
189
  ---------
184
190
 
185
- * v.0.1.0 Optimization of PNGs and JPEGs, including an integration with Carrierwave
186
- * v.0.1.1 Added support for GIFs. Added an extra option to use pngquant (thanks @rogercampos). Solved problems with Carrierwave >= 0.6 (thanks @mllocs and @huacnlee).
187
- * v.0.1.2 Fixed some problems with missing processing, thanks to @lentg.
191
+ * v.0.2.1 More reliable file type detection, by not using the extension but the MIME type. Thanks to @jewlofthelotus! Also, the Carrierwave
192
+ extension is now compatible with RMagick thanks to @YoranBrondsema.
193
+ * v.0.2.0 Users of the gem can now use piet-binary gem, and bug with filenames containing spaces, parentheses and some other characters is solved too, thanks to @loureirorg. Requiring png_quantizator when it's due, thanks to @jayzes. Finally, specifying the gem version due to @jigfox interest.
188
194
  * v.0.1.3 Use png_quantizator gem instead of the own implementation.
189
- * v.0.2.0 Users of the gem can now use piet-binary gem thanks to @PikachuEXE. Fix bug with filenames containing spaces, parentheses and some other characters. Requiring png_quantizator when it's due, thanks to @jayzes. Finally, specifying the gem version due to @jigfox interest.
195
+ * v.0.1.2 Fixed some problems with missing processing, thanks to @lentg.
196
+ * v.0.1.1 Added support for GIFs. Added an extra option to use pngquant (thanks @rogercampos). Solved problems with Carrierwave >= 0.6 (thanks @mllocs and @huacnlee).
197
+ * v.0.1.0 Optimization of PNGs and JPEGs, including an integration with Carrierwave
data/Rakefile CHANGED
@@ -1,2 +1,8 @@
1
1
  require 'bundler'
2
2
  Bundler::GemHelper.install_tasks
3
+
4
+ require 'rspec/core'
5
+ require 'rspec/core/rake_task'
6
+ RSpec::Core::RakeTask.new(:spec)
7
+
8
+ task default: :spec
data/lib/piet.rb CHANGED
@@ -3,8 +3,6 @@ require 'piet/carrierwave_extension'
3
3
 
4
4
  module Piet
5
5
  class << self
6
- VALID_EXTS = %w{ png gif jpg jpeg }
7
-
8
6
  def optimize(path, opts={})
9
7
  output = optimize_for(path, opts)
10
8
  puts output if opts[:verbose]
@@ -18,20 +16,21 @@ module Piet
18
16
  private
19
17
 
20
18
  def optimize_for(path, opts)
21
- case extension(path)
19
+ case mimetype(path)
22
20
  when "png", "gif" then optimize_png(path, opts)
23
- when "jpg", "jpeg" then optimize_jpg(path, opts)
21
+ when "jpeg" then optimize_jpg(path, opts)
24
22
  end
25
23
  end
26
24
 
27
- def extension(path)
28
- path.split(".").last.downcase
25
+ def mimetype(path)
26
+ IO.popen(['file', '--brief', '--mime-type', path], in: :close, err: :close).read.chomp.sub(/image\//, '')
29
27
  end
30
28
 
31
29
  def optimize_png(path, opts)
30
+ level = (0..7).include?(opts[:level]) ? opts[:level] : 7
32
31
  vo = opts[:verbose] ? "-v" : "-quiet"
33
32
  path.gsub!(/([\(\)\[\]\{\}\*\?\\])/, '\\\\\1')
34
- `#{command_path("optipng")} -o7 #{opts[:command_options]} #{vo} #{path}`
33
+ `#{command_path("optipng")} -o#{level} #{opts[:command_options]} #{vo} #{path}`
35
34
  end
36
35
 
37
36
  def optimize_jpg(path, opts)
@@ -1,17 +1,11 @@
1
1
  module Piet
2
2
  module CarrierWaveExtension
3
- def optimize(opts={})
4
- manipulate! do |img|
5
- Piet.optimize(img.path, opts)
6
- img
7
- end
3
+ def optimize(opts = {})
4
+ ::Piet.optimize(current_path, opts)
8
5
  end
9
6
 
10
7
  def pngquant
11
- manipulate! do |img|
12
- Piet.pngquant(current_path)
13
- img
14
- end
8
+ ::Piet.pngquant(current_path)
15
9
  end
16
10
  end
17
11
  end
data/lib/piet/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Piet
2
- VERSION = "0.2.0"
2
+ VERSION = "0.2.1"
3
3
  end
data/piet.gemspec CHANGED
@@ -21,4 +21,8 @@ Gem::Specification.new do |s|
21
21
  s.add_dependency "png_quantizator"
22
22
  s.add_development_dependency "rspec"
23
23
  s.add_development_dependency "ZenTest"
24
+ s.add_development_dependency "carrierwave"
25
+ s.add_development_dependency "mini_magick"
26
+ s.add_development_dependency "rmagick"
27
+ s.add_development_dependency "rake"
24
28
  end
Binary file
Binary file
Binary file
Binary file
@@ -1 +1,96 @@
1
1
  require 'spec_helper'
2
+
3
+ class RMagickUploader < CarrierWave::Uploader::Base
4
+ include CarrierWave::RMagick
5
+ include Piet::CarrierWaveExtension
6
+ end
7
+
8
+ class MiniMagickUploader < CarrierWave::Uploader::Base
9
+ include CarrierWave::MiniMagick
10
+ include Piet::CarrierWaveExtension
11
+ end
12
+
13
+ describe Piet do
14
+ describe Piet::CarrierWaveExtension do
15
+ describe ".optimize" do
16
+ let(:real_jpg_path) { File.join('spec', 'assets', 'jpg-real.jpg') }
17
+ let(:real_jpg_image) { File.open(real_jpg_path) }
18
+
19
+ let(:fake_jpg_path) { File.join('spec', 'assets', 'jpg-fake.jpg') }
20
+ let(:fake_jpg_image) { File.open(fake_jpg_path) }
21
+
22
+ let(:real_png_path) { File.join('spec', 'assets', 'png-real.png') }
23
+ let(:real_png_image) { File.open(real_png_path) }
24
+
25
+ let(:fake_png_path) { File.join('spec', 'assets', 'png-fake.png') }
26
+ let(:fake_png_image) { File.open(fake_png_path) }
27
+
28
+ def upload_file(uploader, image)
29
+ uploader.store!(image)
30
+ uploader.manipulate! do |img|
31
+ img
32
+ end
33
+ end
34
+
35
+ it "calls the uploader's `current_path` when MiniMagick is used" do
36
+ uploader = MiniMagickUploader.new
37
+
38
+ upload_file(uploader, real_jpg_image)
39
+
40
+ expect(Piet).to receive(:optimize).with(uploader.current_path, {})
41
+
42
+ uploader.optimize
43
+ end
44
+
45
+ it "calls the uploader's `current_path` when RMagick is used" do
46
+ uploader = RMagickUploader.new
47
+
48
+ upload_file(uploader, real_jpg_image)
49
+
50
+ expect(Piet).to receive(:optimize).with(uploader.current_path, {})
51
+
52
+ uploader.optimize
53
+ end
54
+
55
+ it "calls `optimize_png` if the .png files MIME type is that of a PNG" do
56
+ uploader = MiniMagickUploader.new
57
+
58
+ upload_file(uploader, real_png_image)
59
+
60
+ expect(Piet).to receive(:optimize_png).with(uploader.current_path, {})
61
+
62
+ uploader.optimize
63
+ end
64
+
65
+ it "calls `optimize_jpg` if the .png files MIME type is that of a JPEG" do
66
+ uploader = MiniMagickUploader.new
67
+
68
+ upload_file(uploader, fake_png_image)
69
+
70
+ expect(Piet).to receive(:optimize_jpg).with(uploader.current_path, {})
71
+
72
+ uploader.optimize
73
+ end
74
+
75
+ it "calls `optimize_png` if the .jpg files MIME type is that of a PNG" do
76
+ uploader = MiniMagickUploader.new
77
+
78
+ upload_file(uploader, fake_jpg_image)
79
+
80
+ expect(Piet).to receive(:optimize_png).with(uploader.current_path, {})
81
+
82
+ uploader.optimize
83
+ end
84
+
85
+ it "calls `optimize_jpg` if the .jpg files MIME type is that of a JPEG" do
86
+ uploader = MiniMagickUploader.new
87
+
88
+ upload_file(uploader, real_jpg_image)
89
+
90
+ expect(Piet).to receive(:optimize_jpg).with(uploader.current_path, {})
91
+
92
+ uploader.optimize
93
+ end
94
+ end
95
+ end
96
+ end
data/spec/spec_helper.rb CHANGED
@@ -1 +1,2 @@
1
1
  require 'piet'
2
+ require 'carrierwave'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: piet
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Albert Bellonch
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-16 00:00:00.000000000 Z
11
+ date: 2015-02-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: png_quantizator
@@ -52,6 +52,62 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: carrierwave
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: mini_magick
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
+ - !ruby/object:Gem::Dependency
84
+ name: rmagick
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rake
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
55
111
  description: "-"
56
112
  email:
57
113
  - albert@itnig.net
@@ -60,6 +116,7 @@ extensions: []
60
116
  extra_rdoc_files: []
61
117
  files:
62
118
  - ".gitignore"
119
+ - ".travis.yml"
63
120
  - Gemfile
64
121
  - Gemfile.lock
65
122
  - README.md
@@ -68,6 +125,10 @@ files:
68
125
  - lib/piet/carrierwave_extension.rb
69
126
  - lib/piet/version.rb
70
127
  - piet.gemspec
128
+ - spec/assets/jpg-fake.jpg
129
+ - spec/assets/jpg-real.jpg
130
+ - spec/assets/png-fake.png
131
+ - spec/assets/png-real.png
71
132
  - spec/integration/piet_spec.rb
72
133
  - spec/spec_helper.rb
73
134
  homepage: http://itnig.net
@@ -95,5 +156,9 @@ signing_key:
95
156
  specification_version: 4
96
157
  summary: An image optimizer
97
158
  test_files:
159
+ - spec/assets/jpg-fake.jpg
160
+ - spec/assets/jpg-real.jpg
161
+ - spec/assets/png-fake.png
162
+ - spec/assets/png-real.png
98
163
  - spec/integration/piet_spec.rb
99
164
  - spec/spec_helper.rb