optipng-r 0.3.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (7) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +4 -4
  3. data/Gemfile.lock +3 -5
  4. data/Rakefile +5 -9
  5. data/lib/optipng.rb +107 -102
  6. data/optipng.gemspec +14 -28
  7. metadata +4 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 075430feb1a375aef9a41faec7e6e129946541d4
4
- data.tar.gz: 74ae39ce1e97b63b1be4c91f82d2790bd8b9e485
3
+ metadata.gz: fe66587475756541e77b98e04cece132a115c43a
4
+ data.tar.gz: def6fb1397bd895f93c6bbc220d1bf8437aef8cc
5
5
  SHA512:
6
- metadata.gz: c597c0c6046cd3e574ee0edd956cbbb6eaec983cf0b2a997678283d624e582e204a3e0bd5995ad764ec69cc2ca32db174fafdedf077e8e11e5d4d0f7140a5ed8
7
- data.tar.gz: bf7cb46d53f543f0eac36d1dce08511e981b7648f4224b40b6094c438f6d08c50908de0a7623b74c90070ff36bcaeef012c1d7fcf90a8f018defffbc01a7e2f1
6
+ metadata.gz: 36c122227f4755108a73472f0d51bf2b9776ce5e8a62ae535a90afe771f7d62431ee3c9b1c6504802f47e126a611646ef1ec4b11a2773cc1c520192ac605d69c
7
+ data.tar.gz: 84ec24493accd2bcc10e99f5c95f89e11beb51df090c6adcc0d743a30daefee76ef3324560a3afdd9a3da090260d727f0afdb92a2a591e12c6d8723cf5d00aed
data/Gemfile CHANGED
@@ -1,11 +1,11 @@
1
- source "http://rubygems.org"
1
+ source 'http://rubygems.org'
2
2
  # Add dependencies required to use your gem here.
3
3
  # Example:
4
- gem "command-builder", ">= 0.2.0"
4
+ gem 'command-builder', '>= 0.3.2'
5
5
 
6
6
  # Add dependencies to develop your gem here.
7
7
  # Include everything needed to run rake, tests, features, etc.
8
8
  group :development do
9
- gem "bundler", ">= 1.0.0"
10
- gem "jeweler", ">= 1.5.2"
9
+ gem 'bundler', '>= 1.0.0'
10
+ gem 'jeweler', '>= 1.5.2'
11
11
  end
data/Gemfile.lock CHANGED
@@ -1,16 +1,14 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
- command-builder (0.2.0)
5
- hash-utils (>= 0.18.0)
4
+ command-builder (0.3.2)
6
5
  pipe-run (>= 0.2.1)
7
6
  git (1.2.5)
8
- hash-utils (0.18.0)
9
7
  jeweler (1.6.4)
10
8
  bundler (~> 1.0)
11
9
  git (>= 1.2.5)
12
10
  rake
13
- pipe-run (0.2.1)
11
+ pipe-run (0.3.0)
14
12
  rake (0.9.2)
15
13
 
16
14
  PLATFORMS
@@ -18,5 +16,5 @@ PLATFORMS
18
16
 
19
17
  DEPENDENCIES
20
18
  bundler (>= 1.0.0)
21
- command-builder (>= 0.2.0)
19
+ command-builder (>= 0.3.2)
22
20
  jeweler (>= 1.5.2)
data/Rakefile CHANGED
@@ -15,15 +15,11 @@ require 'jeweler'
15
15
 
16
16
  Jeweler::Tasks.new do |gem|
17
17
  # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
18
- gem.name = "optipng-i"
19
- gem.homepage = "https://github.com/Artie18/optipng"
20
- gem.license = "MIT"
18
+ gem.name = 'optipng-r'
19
+ gem.homepage = 'https://github.com/Artie18/optipng'
20
+ gem.license = 'MIT'
21
21
  gem.summary = "Ruby interface to 'optipng' tool."
22
- gem.email = "artyomfedenko@hotmail.com"
23
- gem.authors = ["Artyom Fedenko"]
24
- # Include your dependencies below. Runtime dependencies are required when using your gem,
25
- # and development dependencies are only needed for development (ie running rake tasks, tests, etc)
26
- # gem.add_runtime_dependency 'jabber4r', '> 0.1'
27
- # gem.add_development_dependency 'rspec', '> 1.2.3'
22
+ gem.email = 'artyomfedenko@hotmail.com'
23
+ gem.authors = ['Artyom Fedenko']
28
24
  end
29
25
  Jeweler::RubygemsDotOrgTasks.new
data/lib/optipng.rb CHANGED
@@ -12,127 +12,132 @@ require 'mkmf'
12
12
 
13
13
  module Optipng
14
14
 
15
- ##
16
- # Holds +optipng+ command.
17
- #
18
-
19
- COMMAND = :optipng
20
-
21
- ##
22
- # Result structure.
23
- #
24
-
25
- Result = Struct::new(:succeed, :errors)
26
-
27
- ##
28
- # Holds output matchers.
29
- #
30
-
31
- MATCHERS = [
32
- /^Processing\:\s*(.*)/,
33
- /^Error:\s*(.*)/,
34
- /(\d+\.\d+)%/,
35
- /already optimized\.$/,
36
- ]
37
-
38
- ##
39
- # Checks if +jpegoptim+ is available.
40
- # @return [Boolean] +true+ if it is, +false+ in otherwise
41
- #
42
-
43
- def self.available?
44
- find_executable(self::COMMAND.to_s).nil? ? false : true
15
+ ##
16
+ # Holds +optipng+ command.
17
+ #
18
+
19
+ COMMAND = :optipng
20
+
21
+ ##
22
+ # Result structure.
23
+ #
24
+
25
+ Result = Struct::new(:succeed, :errors)
26
+
27
+ ##
28
+ # Holds output matchers.
29
+ #
30
+
31
+ MATCHERS = [
32
+ /^Processing\:\s*(.*)/,
33
+ /^Error:\s*(.*)/,
34
+ /(\d+\.\d+)%/,
35
+ /already optimized\.$/,
36
+ ]
37
+
38
+ ##
39
+ # Checks if +jpegoptim+ is available.
40
+ # @return [Boolean] +true+ if it is, +false+ in otherwise
41
+ #
42
+
43
+ def self.available?
44
+ find_executable(self::COMMAND.to_s).nil? ? false : true
45
+ end
46
+
47
+ ##
48
+ # Performs optimizations above file or set of files.
49
+ #
50
+ # If block is given, runs +optipng+ asynchronously. In that case,
51
+ # +em-pipe-run+ file must be already required.
52
+ #
53
+ # @param [String, Array] paths file path or array of paths for optimizing
54
+ # @param [Hash] options options
55
+ # @param [Proc] block block for giving back the results
56
+ # @option options [Integer] :level optimization level (0-7)
57
+ # @option options [Boolean] :debug turn on debugging mode, so command will be put out to the +STDERR+
58
+ # @return [Struct] see {Result}
59
+ #
60
+
61
+ def self.optimize(paths, options = {}, &block)
62
+
63
+ # Check if optipng available
64
+ unless options[:is_available] && self.available?
65
+ throw Exception.new('Optipng is not installed')
45
66
  end
46
67
 
47
- ##
48
- # Performs optimizations above file or set of files.
49
- #
50
- # If block is given, runs +optipng+ asynchronously. In that case,
51
- # +em-pipe-run+ file must be already required.
52
- #
53
- # @param [String, Array] paths file path or array of paths for optimizing
54
- # @param [Hash] options options
55
- # @param [Proc] block block for giving back the results
56
- # @option options [Integer] :level optimization level (0-7)
57
- # @option options [Boolean] :debug turn on debugging mode, so command will be put out to the +STDERR+
58
- # @return [Struct] see {Result}
59
- #
60
-
61
- def self.optimize(paths, options = { }, &block)
62
-
63
- # Command
64
- cmd = CommandBuilder::new(self::COMMAND)
65
-
66
- # Max
67
- if options[:level].kind_of? Integer
68
- cmd.arg(:o, options[:level].to_i)
69
- end
68
+ # Command
69
+ cmd = CommandBuilder::new(self::COMMAND)
70
70
 
71
- # Files
72
- if paths.kind_of? String
73
- paths = [paths]
74
- end
71
+ # Max
72
+ if options[:level].kind_of? Integer
73
+ cmd.arg(:o, options[:level].to_i)
74
+ end
75
75
 
76
- # Runs the command
77
- cmd << paths
76
+ # Files
77
+ if paths.kind_of? String
78
+ paths = [paths]
79
+ end
78
80
 
79
- if options[:debug] == true
80
- STDERR.write cmd.to_s + "\n"
81
- end
81
+ # Runs the command
82
+ cmd << paths
82
83
 
83
- # Blocking
84
- if block.nil?
85
- output = cmd.execute!
84
+ if options[:debug]
85
+ STDERR.write "#{cmd.to_s}\n"
86
+ end
86
87
 
87
- # Parses output
88
- succeed, errors = __parse_output(output)
89
- return self::Result::new(succeed, errors)
88
+ # Blocking
89
+ if block.nil?
90
+ output = cmd.execute!
90
91
 
91
- # Non-blocking
92
- else
93
- cmd.execute do |output|
94
- succeed, errors = __parse_output(output)
95
- block.call(self::Result::new(succeed, errors))
96
- end
97
- end
92
+ # Parses output
93
+ succeed, errors = __parse_output(output)
94
+ return self::Result::new(succeed, errors)
98
95
 
96
+ # Non-blocking
97
+ else
98
+ cmd.execute do |output|
99
+ succeed, errors = __parse_output(output)
100
+ block.call(self::Result::new(succeed, errors))
101
+ end
99
102
  end
100
103
 
104
+ end
101
105
 
102
- private
103
106
 
104
- ##
105
- # Parses output.
106
- #
107
+ private
107
108
 
108
- def self.__parse_output(output)
109
- errors = [ ]
110
- succeed = { }
109
+ ##
110
+ # Parses output.
111
+ #
111
112
 
112
- output.split("**").each do |section|
113
- section.strip!
114
- if section.start_with? "Processing:"
113
+ def self.__parse_output(output)
114
+ errors = []
115
+ succeed = {}
115
116
 
116
- # Scans each line
117
- filename = nil
117
+ output.split('**').each do |section|
118
+ section.strip!
119
+ if section.start_with? 'Processing:'
118
120
 
119
- section.each_line do |line|
120
- if m = line.match(self::MATCHERS[0])
121
- filename = m[1]
122
- elsif m = line.match(self::MATCHERS[1])
123
- errors << [filename, m[1]]
124
- next
125
- elsif m = line.match(self::MATCHERS[2])
126
- succeed[filename] = -1 * m[1].to_f
127
- next
128
- elsif m = line.match(self::MATCHERS[3])
129
- succeed[filename] = 0.0
130
- end
131
- end
121
+ # Scans each line
122
+ filename = nil
132
123
 
133
- end
124
+ section.each_line do |line|
125
+ if m = line.match(self::MATCHERS[0])
126
+ filename = m[1]
127
+ elsif m = line.match(self::MATCHERS[1])
128
+ errors << [filename, m[1]]
129
+ next
130
+ elsif m = line.match(self::MATCHERS[2])
131
+ succeed[filename] = -1 * m[1].to_f
132
+ next
133
+ elsif line.match(self::MATCHERS[3])
134
+ succeed[filename] = 0.0
135
+ end
134
136
  end
135
137
 
136
- return [succeed, errors]
138
+ end
137
139
  end
140
+
141
+ return [succeed, errors]
142
+ end
138
143
  end
data/optipng.gemspec CHANGED
@@ -5,28 +5,14 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{optipng-r}
8
- s.version = "0.3.1"
8
+ s.version = '0.4.0'
9
9
 
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
10
+ s.required_rubygems_version = Gem::Requirement.new('>= 0') if s.respond_to? :required_rubygems_version=
11
11
  s.authors = [%q{Artyom Fedenko}]
12
- s.date = %q{2015-09-30}
12
+ s.date = %q{2015-09-31}
13
13
  s.email = %q{artyomfedenko@hotmail.com}
14
- s.extra_rdoc_files = [
15
- "LICENSE.txt",
16
- "README.md"
17
- ]
18
- s.files = [
19
- ".document",
20
- "Gemfile",
21
- "Gemfile.lock",
22
- "LICENSE.txt",
23
- "README.md",
24
- "Rakefile",
25
- "VERSION",
26
- "lib/optipng.rb",
27
- "optipng.gemspec",
28
- "test"
29
- ]
14
+ s.extra_rdoc_files = %w(LICENSE.txt README.md)
15
+ s.files = %w(.document Gemfile Gemfile.lock LICENSE.txt README.md Rakefile VERSION lib/optipng.rb optipng.gemspec test)
30
16
  s.homepage = %q{https://github.com/artie18/optipng}
31
17
  s.licenses = [%q{MIT}]
32
18
  s.require_paths = [%q{lib}]
@@ -37,17 +23,17 @@ Gem::Specification.new do |s|
37
23
  s.specification_version = 3
38
24
 
39
25
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
40
- s.add_runtime_dependency(%q<command-builder>, [">= 0.2.0"])
41
- s.add_development_dependency(%q<bundler>, [">= 1.0.0"])
42
- s.add_development_dependency(%q<jeweler>, [">= 1.5.2"])
26
+ s.add_runtime_dependency(%q<command-builder>, ['>= 0.3.2'])
27
+ s.add_development_dependency(%q<bundler>, ['>= 1.0.0'])
28
+ s.add_development_dependency(%q<jeweler>, ['>= 1.5.2'])
43
29
  else
44
- s.add_dependency(%q<command-builder>, [">= 0.2.0"])
45
- s.add_dependency(%q<bundler>, [">= 1.0.0"])
46
- s.add_dependency(%q<jeweler>, [">= 1.5.2"])
30
+ s.add_dependency(%q<command-builder>, ['>= 0.3.2'])
31
+ s.add_dependency(%q<bundler>, ['>= 1.0.0'])
32
+ s.add_dependency(%q<jeweler>, ['>= 1.5.2'])
47
33
  end
48
34
  else
49
- s.add_dependency(%q<command-builder>, [">= 0.2.0"])
50
- s.add_dependency(%q<bundler>, [">= 1.0.0"])
51
- s.add_dependency(%q<jeweler>, [">= 1.5.2"])
35
+ s.add_dependency(%q<command-builder>, ['>= 0.3.2'])
36
+ s.add_dependency(%q<bundler>, ['>= 1.0.0'])
37
+ s.add_dependency(%q<jeweler>, ['>= 1.5.2'])
52
38
  end
53
39
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: optipng-r
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Artyom Fedenko
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-09-30 00:00:00.000000000 Z
11
+ date: 2015-10-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: command-builder
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 0.2.0
19
+ version: 0.3.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: 0.2.0
26
+ version: 0.3.2
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement