tiny_png 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md CHANGED
@@ -1,4 +1,8 @@
1
- Edge
1
+ 1.1.0 - October 12, 2012
2
+
3
+ - Create TinyPng::Path class to allow for blacklisting
4
+
5
+ 1.0.0 - October 11, 2012
2
6
 
3
7
  - Capistrano recipe to shrink images on deploy
4
8
 
data/README.md CHANGED
@@ -4,6 +4,7 @@
4
4
  - [What Does This Gem Do?] (#what-does-this-gem-do)
5
5
  - [Installation] (#installation)
6
6
  - [Usage] (#usage)
7
+ - [Using Blacklists](#using-blacklists)
7
8
  - [Using From Rake](#using-from-rake)
8
9
  - [Using With Capistrano](#using-with-capistrano)
9
10
 
@@ -99,6 +100,25 @@ For each image path analyzed (whether sent in directly or picked out of a folder
99
100
  - That file must be readable and writeable
100
101
  - The file name *must* end in `.png`
101
102
 
103
+ ### Using Blacklists
104
+
105
+ There might be times where you want to shrink an entire directory, but exclude certain files. To do this, you'll need
106
+ pass a `TinyPng::Path` object to `@client.shrink`.
107
+
108
+ ```ruby
109
+ @paths = TinyPng::Path.new '/images/path'
110
+ @paths.blacklist '/images/path/blacklist.png'
111
+ @client.shrink @paths
112
+ ```
113
+
114
+ The blacklist array takes precedence over anything else inputted into this TinyPng::Path object.
115
+
116
+ **NOTE:** TinyPng::Path objects are independent of each other. If you send in multiple path objects to the `shrink` method,
117
+ the blacklist from one path object will not impact the other path object.
118
+
119
+ You can send in TinyPng::Path objects, directories, and full image paths to the shrink method, but each will
120
+ be analyzed by itself and the blacklist from any path object will be self-contained.
121
+
102
122
  ### Using From Rake
103
123
 
104
124
  Create a Rakefile in your app's root (or add this to an existing Rakefile):
@@ -144,6 +164,13 @@ Combining directories and specific image files:
144
164
  SHRINK=/image/directory,/path/to/image.png rake tiny_png:shrink
145
165
  ```
146
166
 
167
+ The Rake task uses the [blacklist method](#using-blacklists) in building out the full paths. This method allows you
168
+ to also specify blacklisted paths:
169
+
170
+ ```ruby
171
+ SHRINK=/image/directory BLACKLIST=/image/directory/blacklist.png rake tiny_png:shrink
172
+ ```
173
+
147
174
  By default, this rake task will use the settings in config/tiny_png.yml. You can overwrite specific settings by passing
148
175
  environment variables. For example, if I do not suppress exceptions in my base config, but want
149
176
  to when running a rake task, all I would need to do is set the `SUPPRESS_EXCEPTIONS` environment variable to true:
@@ -161,10 +188,10 @@ API_KEY=my_api_key SHRINK=/some/image.png rake tiny_png:shrink
161
188
  Naturally, these can all be combined in any fashion:
162
189
 
163
190
  ```ruby
164
- SUPPRESS_EXCEPTIONS=true API_KEY=my_api_key SHRINK=/image/directory,/some/image.png rake tiny_png:shrink
191
+ SUPPRESS_EXCEPTIONS=true API_KEY=my_api_key SHRINK=/image/directory,/some/image.png BLACKLIST=/image/directory/blacklist.png rake tiny_png:shrink
165
192
  ```
166
193
 
167
- ### Using In Capistrano
194
+ ### Using With Capistrano
168
195
 
169
196
  Since Photoshop doesn't support indexed PNGs with alpha transparency, you might not want to convert the
170
197
  images on your local box. With the included Capistrano recipe, you can automatically shrink all files
@@ -183,6 +210,9 @@ the assets are precompiled so that it isn't run multiple times per image:
183
210
  before 'deploy:assets:precompile', 'tiny_png:shrink'
184
211
  ```
185
212
 
213
+ Ultimately, the Capistrano recipe will build and run a Rake task on the server, so you need to have the
214
+ [Rakefile setup correctly](#using-from-rake).
215
+
186
216
  By default, this script uses the settings found in config/tiny_png.yml. It also runs through the entire
187
217
  release directory. Each option can be overwritten by setting Capistrano variables. These variables will
188
218
  be sent directly to a Rake task, so the expected format of these variables is the same as listed above:
@@ -191,6 +221,7 @@ be sent directly to a Rake task, so the expected format of these variables is th
191
221
  set :tiny_png_shrink, '/image/directory,/some/image.png'
192
222
  set :tiny_png_api_key, 'my_api_key'
193
223
  set :tiny_png_suppress_exceptions, true
224
+ set :tiny_png_blacklist, '/image/directory/blacklist.png'
194
225
  ```
195
226
 
196
227
  Also by default, the task is only run on web servers. This can be modified by setting the `tiny_png_server_role`
data/lib/tiny_png.rb CHANGED
@@ -1,5 +1,11 @@
1
1
  module TinyPng
2
2
  end
3
3
 
4
+ require 'base64'
5
+ require 'httparty'
4
6
  require 'tiny_png/client'
5
- require 'tiny_png/version'
7
+ require 'tiny_png/version'
8
+ require 'tiny_png/exceptions'
9
+ require 'tiny_png/shrink'
10
+ require 'tiny_png/exception_handling'
11
+ require 'tiny_png/path'
@@ -1,9 +1,3 @@
1
- require 'base64'
2
- require 'httparty'
3
- require 'tiny_png/exceptions'
4
- require 'tiny_png/shrink'
5
- require 'tiny_png/exception_handling'
6
-
7
1
  module TinyPng
8
2
  class Client
9
3
  include TinyPng::ExceptionHandling
@@ -1,6 +1,3 @@
1
- class InvalidFileType < Exception
2
- end
3
-
4
1
  class FileDoesntExist < Exception
5
2
  end
6
3
 
@@ -0,0 +1,66 @@
1
+ module TinyPng
2
+ class Path
3
+ #
4
+ # Create a TinyPng::Path object and optionally add .png paths to the
5
+ # show list (also transverses directories).
6
+ #
7
+ def initialize *show
8
+ @show = TinyPng::Path.get_all show
9
+ @blacklist = []
10
+ end
11
+
12
+ #
13
+ # Add paths to the list (also transverses directories).
14
+ #
15
+ def add *list
16
+ @show = (@show + TinyPng::Path.get_all(list)).uniq
17
+ end
18
+
19
+ #
20
+ # Add paths to the list (also transverses directories). The blacklist
21
+ # supercedes the add list, such that any path added to the blacklist will
22
+ # not show up in the final compilation.
23
+ #
24
+ def blacklist *list
25
+ @blacklist = (@blacklist + TinyPng::Path.get_all(list)).uniq
26
+ end
27
+
28
+ #
29
+ # Remove paths from the list (also transverses directories).
30
+ #
31
+ def remove_from_list *list
32
+ @show = @show - TinyPng::Path.get_all(list)
33
+ end
34
+
35
+ #
36
+ # Remove paths from the blacklist (also transverses directories).
37
+ #
38
+ def remove_from_blacklist *list
39
+ @blacklist = @blacklist - TinyPng::Path.get_all(list)
40
+ end
41
+
42
+ #
43
+ # Return the full list of paths, minus anything in the blacklist.
44
+ #
45
+ def list
46
+ @show.uniq - @blacklist
47
+ end
48
+
49
+ #
50
+ # Get all .png path names from the passed-in files and directories.
51
+ #
52
+ def self.get_all *list
53
+ list.flatten.uniq.collect do |path|
54
+ if path.is_a?(TinyPng::Path)
55
+ path.list
56
+ else
57
+ if File.directory?(path)
58
+ Dir.glob("#{path.gsub(/\/$/,'')}/**/*.png")
59
+ else
60
+ path.downcase.match(/\.png$/) ? path : nil
61
+ end
62
+ end
63
+ end.flatten.uniq.compact
64
+ end
65
+ end
66
+ end
@@ -17,6 +17,7 @@ Capistrano::Configuration.instance(:must_exist).load do
17
17
  env.push "API_KEY=#{self[:tiny_png_api_key]}" unless self[:tiny_png_api_key].nil?
18
18
  env.push "API_USER=#{self[:tiny_png_api_user]}" unless self[:tiny_png_api_user].nil?
19
19
  env.push "SUPPRESS_EXCEPTIONS=#{self[:tiny_png_suppress_exceptions]}" unless self[:tiny_png_suppress_exceptions].nil?
20
+ env.push "BLACKLIST=#{self[:tiny_png_blacklist]}" unless self[:tiny_png_blacklist].nil?
20
21
  env
21
22
  end
22
23
 
@@ -18,18 +18,11 @@ module TinyPng::Shrink
18
18
  # Returns: Hash { :success => [Array, Of, Paths, Successfully, Overwrittern], :failure => [Array, Of, Paths, Left, Unchanged] }
19
19
  #
20
20
 
21
- def shrink *shrinkwrap
21
+ def shrink *paths
22
22
  results = { :success => [], :failure => [] }
23
- [shrinkwrap].flatten.each do |shrinkable|
24
- if File.directory? shrinkable
25
- Dir.glob("#{shrinkable.gsub(/\/$/,'')}/**/*.png") do |image_path|
26
- key = self.shrink_in_place(image_path) ? :success : :failure
27
- results[key].push image_path
28
- end
29
- else
30
- key = shrink_in_place(shrinkable) ? :success : :failure
31
- results[key].push shrinkable
32
- end
23
+ TinyPng::Path.get_all(paths).each do |path|
24
+ key = shrink_in_place(path) ? :success : :failure
25
+ results[key].push path
33
26
  end
34
27
  results
35
28
  end
@@ -38,7 +31,6 @@ module TinyPng::Shrink
38
31
 
39
32
  def shrink_in_place image_path
40
33
  # check to make sure everything looks kosher before sending data to TinyPNG
41
- return raise_exception InvalidFileType, 'The file must be a PNG' unless image_path.downcase.match(/\.png$/)
42
34
  return raise_exception FileDoesntExist, "Can't find a file at the specified path" unless File.exists? image_path
43
35
  return raise_exception FileNotReadable, "Can't read the requested file" unless File.readable? image_path
44
36
  return raise_exception FileNotWriteable, "Can't write to the specifed file" unless File.writable? image_path
@@ -16,6 +16,9 @@ namespace :tiny_png do
16
16
  options[:suppress_exceptions] = ENV['SUPPRESS_EXCEPTIONS'].downcase == 'true'
17
17
  end
18
18
 
19
- TinyPng::Client.new(options).shrink ENV['SHRINK'].split(',')
19
+ paths = TinyPng::Path.new ENV['SHRINK'].split(',')
20
+ paths.blacklist ENV['BLACKLIST'].split(',') unless ENV['BLACKLIST'].nil?
21
+
22
+ TinyPng::Client.new(options).shrink paths
20
23
  end
21
24
  end
@@ -1,3 +1,3 @@
1
1
  module TinyPng
2
- Version = VERSION = '1.0.0'
2
+ Version = VERSION = '1.1.0'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tiny_png
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-11 00:00:00.000000000 Z
12
+ date: 2012-10-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: httparty
16
- requirement: &2156392360 !ruby/object:Gem::Requirement
16
+ requirement: &2168794500 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,7 +21,7 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *2156392360
24
+ version_requirements: *2168794500
25
25
  description: Use the TinyPNG service to minimize the size of your image files.
26
26
  email: chris@thesturgills.com
27
27
  executables: []
@@ -38,6 +38,7 @@ files:
38
38
  - lib/tiny_png/client.rb
39
39
  - lib/tiny_png/exception_handling.rb
40
40
  - lib/tiny_png/exceptions.rb
41
+ - lib/tiny_png/path.rb
41
42
  - lib/tiny_png/recipes.rb
42
43
  - lib/tiny_png/shrink.rb
43
44
  - lib/tiny_png/tasks.rb