optipng-r 0.3.1 → 0.4.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.
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