web_optimizer 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,18 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ .DS_Store
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in antigate_api.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Tam Vo
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,32 @@
1
+ # AntigateApi
2
+
3
+ Antigate (Decode captcha service - antigate.com) wrapper
4
+
5
+ ## Installation
6
+
7
+ $ gem install antigate_api
8
+
9
+ ## Requirement
10
+
11
+ /Users/tamvo/code/tools/yuicompressor-2.4.8pre.jar
12
+ /Users/tamvo/code/tools/compiler-latest/compiler.jar
13
+ gem install pngquant
14
+ (/usr/local/bin/pngquant)
15
+ gem install image_optim
16
+ (/Users/tamvo/.rvm/gems/ruby-1.9.3-p194@general/bin/image_optim)
17
+
18
+ ## Usage
19
+
20
+ Compress CSS
21
+ ```
22
+ WebOptimizer.compress_css(dir, ignore_paths)
23
+ WebOptimizer.compress_js(dir, ignore_paths)
24
+ ```
25
+
26
+ ## Contributing
27
+
28
+ 1. Fork it
29
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
30
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
31
+ 4. Push to the branch (`git push origin my-new-feature`)
32
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1 @@
1
+ #feature-content .hentry:hover .featured-entry-title a,#feature-content .hentry:hover .entry-content{color:#fff}#feature-content .hentry:hover{position:relative;animation:mymove4 400ms linear;-moz-animation:mymove4 400ms linear;-webkit-animation:mymove4 400ms linear}.home #feature-content .hentry{animation-timing-function:cubic-bezier(0,0,0.25,1)}.home #feature-content .hentry{-moz-animation-timing-function:cubic-bezier(0,0,0.25,1)}.home #feature-content .hentry{-webkit-animation-timing-function:cubic-bezier(0,0,0.25,1)}@keyframes mymove4{from{top:0;opacity:.2}to{top:0;opacity:1}}@-moz-keyframes mymove4{from{top:0;opacity:.2}to{top:0;opacity:1}}@-webkit-keyframes mymove4{from{top:0;opacity:.2}to{top:0;opacity:1}}#feature-content .hentry:hover .entry-img{position:relative;animation:mymove 400ms linear;-moz-animation:mymove 400ms linear;-webkit-animation:mymove 400ms linear}.home #feature-content .hentry:hover .entry-img{animation-timing-function:cubic-bezier(0,0,0.25,1)}.home #feature-content .hentry:hover .entry-img{-moz-animation-timing-function:cubic-bezier(0,0,0.25,1)}.home #feature-content .hentry:hover .entry-img{-webkit-animation-timing-function:cubic-bezier(0,0,0.25,1)}@keyframes mymove{from{top:-30px;opacity:.2}to{top:0;opacity:1}}@-moz-keyframes mymove{from{top:-30px;opacity:.2}to{top:0;opacity:1}}@-webkit-keyframes mymove{from{top:-30px;opacity:.2}to{top:0;opacity:1}}#feature-content .hentry:hover .featured-entry-title{position:relative;animation:mymove2 100ms linear;-moz-animation:mymove2 100ms linear;-webkit-animation:mymove2 100ms linear}.home #feature-content .hentry:hover .featured-entry-title{animation-timing-function:cubic-bezier(0,0,0.25,1)}.home #feature-content .hentry:hover .featured-entry-title{-moz-animation-timing-function:cubic-bezier(0,0,0.25,1)}.home #feature-content .hentry:hover .featured-entry-title{-webkit-animation-timing-function:cubic-bezier(0,0,0.25,1)}@keyframes mymove2{from{top:-110px;opacity:1}to{top:0;opacity:1}}@-moz-keyframes mymove2{from{top:-110px;opacity:1}to{top:0;opacity:1}}@-webkit-keyframes mymove2{from{top:-110px;opacity:1}to{top:0;opacity:1}}#feature-content .hentry:hover .entry-content{position:relative;animation:mymove3 300ms linear;-moz-animation:mymove3 300ms linear;-webkit-animation:mymove3 300ms linear}.home #feature-content .hentry:hover .entry-content{animation-timing-function:cubic-bezier(0,0,0.25,1)}.home #feature-content .hentry:hover .entry-content{-moz-animation-timing-function:cubic-bezier(0,0,0.25,1)}.home #feature-content .hentry:hover .entry-content{-webkit-animation-timing-function:cubic-bezier(0,0,0.25,1)}@keyframes mymove3{from{bottom:-30px;opacity:.2}to{bottom:0;opacity:1}}@-moz-keyframes mymove3{from{bottom:-30px;opacity:.2}to{bottom:0;opacity:1}}@-webkit-keyframes mymove3{from{bottom:-30px;opacity:.2}to{bottom:0;opacity:1}}
@@ -0,0 +1 @@
1
+ #feature-content .hentry:hover .featured-entry-title a,#feature-content .hentry:hover .entry-content{color:#fff}#feature-content .hentry:hover{position:relative;animation:mymove4 400ms linear;-moz-animation:mymove4 400ms linear;-webkit-animation:mymove4 400ms linear}.home #feature-content .hentry{animation-timing-function:cubic-bezier(0,0,0.25,1)}.home #feature-content .hentry{-moz-animation-timing-function:cubic-bezier(0,0,0.25,1)}.home #feature-content .hentry{-webkit-animation-timing-function:cubic-bezier(0,0,0.25,1)}@keyframes mymove4{from{top:0;opacity:.2}to{top:0;opacity:1}}@-moz-keyframes mymove4{from{top:0;opacity:.2}to{top:0;opacity:1}}@-webkit-keyframes mymove4{from{top:0;opacity:.2}to{top:0;opacity:1}}#feature-content .hentry:hover .entry-img{position:relative;animation:mymove 400ms linear;-moz-animation:mymove 400ms linear;-webkit-animation:mymove 400ms linear}.home #feature-content .hentry:hover .entry-img{animation-timing-function:cubic-bezier(0,0,0.25,1)}.home #feature-content .hentry:hover .entry-img{-moz-animation-timing-function:cubic-bezier(0,0,0.25,1)}.home #feature-content .hentry:hover .entry-img{-webkit-animation-timing-function:cubic-bezier(0,0,0.25,1)}@keyframes mymove{from{top:-30px;opacity:.2}to{top:0;opacity:1}}@-moz-keyframes mymove{from{top:-30px;opacity:.2}to{top:0;opacity:1}}@-webkit-keyframes mymove{from{top:-30px;opacity:.2}to{top:0;opacity:1}}#feature-content .hentry:hover .featured-entry-title{position:relative;animation:mymove2 100ms linear;-moz-animation:mymove2 100ms linear;-webkit-animation:mymove2 100ms linear}.home #feature-content .hentry:hover .featured-entry-title{animation-timing-function:cubic-bezier(0,0,0.25,1)}.home #feature-content .hentry:hover .featured-entry-title{-moz-animation-timing-function:cubic-bezier(0,0,0.25,1)}.home #feature-content .hentry:hover .featured-entry-title{-webkit-animation-timing-function:cubic-bezier(0,0,0.25,1)}@keyframes mymove2{from{top:-110px;opacity:1}to{top:0;opacity:1}}@-moz-keyframes mymove2{from{top:-110px;opacity:1}to{top:0;opacity:1}}@-webkit-keyframes mymove2{from{top:-110px;opacity:1}to{top:0;opacity:1}}#feature-content .hentry:hover .entry-content{position:relative;animation:mymove3 300ms linear;-moz-animation:mymove3 300ms linear;-webkit-animation:mymove3 300ms linear}.home #feature-content .hentry:hover .entry-content{animation-timing-function:cubic-bezier(0,0,0.25,1)}.home #feature-content .hentry:hover .entry-content{-moz-animation-timing-function:cubic-bezier(0,0,0.25,1)}.home #feature-content .hentry:hover .entry-content{-webkit-animation-timing-function:cubic-bezier(0,0,0.25,1)}@keyframes mymove3{from{bottom:-30px;opacity:.2}to{bottom:0;opacity:1}}@-moz-keyframes mymove3{from{bottom:-30px;opacity:.2}to{bottom:0;opacity:1}}@-webkit-keyframes mymove3{from{bottom:-30px;opacity:.2}to{bottom:0;opacity:1}}
data/data/balance.js ADDED
@@ -0,0 +1,3 @@
1
+ jQuery(function(){var b=jQuery.noConflict();Balance={setupListener:function(){var a=b("#table-payment-twitter-package-container");a.find(".icon_detail").live("click",function(){var c=b(this).closest("tr");c.hasClass("expanded")?(c.removeClass("expanded"),a.find("tr[parent_package_order_id="+c.attr("package_order_id")+"]").fadeOut()):(c.addClass("expanded"),a.find("tr[parent_package_order_id="+c.attr("package_order_id")+"]").fadeIn())})},setupPagingNavigator:function(){var a=b(".paging_container");
2
+ a.find("a.selected, a.disabled").live("click",function(){return!1});a.find("a.previous_page.click, a.next_page.click, a.page_num.click").live("click",function(){var c=b(this).attr("page_num"),a=b("#table-payment-history-container");a.mask("Loading...");var d=b("#paging-metadata .page_info[page="+c+"]");b.ajax({url:"",type:"POST",dataType:"JSON",data:{action:"load_payment_usage_history_table",page:c,payment_next:d.attr("payment_next"),cp_log_next:d.attr("cp_log_next")},success:function(b){a.html(b.html);
3
+ a.scrollToElement(500)},error:function(){alert("Exception")},complete:function(){a.unmask()}});return!1})},init:function(){Balance.setupListener();Balance.setupPagingNavigator();b("#table-payment-twitter-package-container td.plan_name > span").tipsy({html:!0})}};Balance.init()});
@@ -0,0 +1,64 @@
1
+ jQuery(function() {
2
+ var $ = jQuery.noConflict();
3
+
4
+ Balance = {}
5
+ Balance.setupListener = function() {
6
+ var $tablePackageOrder = $("#table-payment-twitter-package-container");
7
+ $tablePackageOrder.find(".icon_detail").live("click", function() {
8
+ var $row = $(this).closest("tr");
9
+ if ($row.hasClass("expanded")) {
10
+ $row.removeClass("expanded");
11
+ $tablePackageOrder.find("tr[parent_package_order_id=" + $row.attr("package_order_id") + "]").fadeOut();
12
+ } else {
13
+ $row.addClass("expanded");
14
+ $tablePackageOrder.find("tr[parent_package_order_id=" + $row.attr("package_order_id") + "]").fadeIn();
15
+ }
16
+ });
17
+ }
18
+
19
+ Balance.setupPagingNavigator = function() {
20
+ var $pagingContainer = $(".paging_container");
21
+ $pagingContainer.find("a.selected, a.disabled").live("click", function() {
22
+ return false;
23
+ });
24
+
25
+ $pagingContainer.find("a.previous_page.click, a.next_page.click, a.page_num.click").live("click", function() {
26
+ var page = $(this).attr("page_num");
27
+ var $tableOrder = $("#table-payment-history-container");
28
+ $tableOrder.mask("Loading...");
29
+ var $pagingMetadata = $("#paging-metadata .page_info[page=" + page + "]");
30
+ $.ajax({
31
+ url: "",
32
+ type: "POST",
33
+ dataType: "JSON",
34
+ data: {
35
+ action: "load_payment_usage_history_table",
36
+ page: page,
37
+ payment_next: $pagingMetadata.attr("payment_next"),
38
+ cp_log_next: $pagingMetadata.attr("cp_log_next")
39
+ },
40
+ success: function(response) {
41
+ $tableOrder.html(response.html);
42
+ $tableOrder.scrollToElement(500);
43
+ },
44
+ error: function() {
45
+ alert("Exception");
46
+ },
47
+ complete: function() {
48
+ $tableOrder.unmask();
49
+ }
50
+ });
51
+ return false;
52
+ });
53
+ }
54
+
55
+ Balance.init = function() {
56
+ Balance.setupListener();
57
+ Balance.setupPagingNavigator();
58
+
59
+ $("#table-payment-twitter-package-container td.plan_name > span").tipsy({html: true});
60
+ }
61
+
62
+ Balance.init();
63
+ });
64
+
Binary file
@@ -0,0 +1,12 @@
1
+ module WebOptimizer
2
+ module Common
3
+ def check_include_dir(ignore_dirs, child_path)
4
+ ignore_dirs.each do |ignore_dir|
5
+ return true unless child_path.match(/^#{ignore_dir}\/?/).nil?
6
+ end
7
+
8
+ false
9
+ end
10
+ end
11
+ end
12
+
@@ -0,0 +1,49 @@
1
+ require "fileutils"
2
+ require "active_support"
3
+ # require "#{File.expand_path File.dirname(__FILE__)}/common.rb"
4
+
5
+ module WebOptimizer
6
+ extend WebOptimizer::Common
7
+ def self.compress_css(dir_path, ignore_paths=[])
8
+ self.compress_css_recursive(dir_path, ignore_paths, true)
9
+ end
10
+
11
+ def self.compress_css_recursive(dir_path, ignore_paths, trict=false)
12
+ return unless File.directory? dir_path
13
+
14
+ ignore_paths = ignore_paths.map do |path|
15
+ tmp_path = Pathname.new(path)
16
+ tmp_path.absolute? ? path : File.join(dir_path, path)
17
+ end
18
+ unless check_include_dir(ignore_paths, dir_path)
19
+ Dir[File.join(dir_path, "**/*.css")].each do |css_path|
20
+ if File.directory?(css_path)
21
+ compress_css_recursive(css_path, trict)
22
+ elsif !css_path.end_with?("pack.css") && !css_path.end_with?("min.css") &&
23
+ File.extname(css_path) == ".css" && !check_include_dir(ignore_paths, css_path)
24
+
25
+ bak_css_path = "#{css_path}.bak"
26
+ from_file = bak_css_path
27
+ compile = true
28
+
29
+ if File.exists?(bak_css_path)
30
+ compile = trict
31
+ else
32
+ FileUtils.copy_file(css_path, bak_css_path)
33
+ end
34
+
35
+ if compile
36
+ puts "+ Compress: #{css_path}"
37
+ # puts "java -jar /Users/tamvo/code/tools/yuicompressor-2.4.8pre.jar #{from_file} -o #{css_path} --type css"
38
+ # sleep 2
39
+ `java -jar /Users/tamvo/code/tools/yuicompressor-2.4.8pre.jar #{from_file} -o #{css_path} --type css`
40
+ end
41
+
42
+ end
43
+ end
44
+ else
45
+ puts "- Ignore: #{dir_path}"
46
+ end
47
+ end
48
+ end
49
+
@@ -0,0 +1,49 @@
1
+ require "fileutils"
2
+ require "active_support"
3
+
4
+ module WebOptimizer
5
+ extend WebOptimizer::Common
6
+
7
+ def self.compress_js(dir_path, ignore_paths=[])
8
+ self.compress_js_recursive(dir_path, ignore_paths, false)
9
+ end
10
+
11
+ def self.compress_js_recursive(dir, ignore_paths, trict=false)
12
+ return unless File.directory? dir
13
+
14
+ ignore_paths = ignore_paths.map do |path|
15
+ tmp_path = Pathname.new(path)
16
+ tmp_path.absolute? ? path : File.join(dir, path)
17
+ end
18
+ unless check_include_dir(ignore_paths, dir)
19
+ Dir[File.join(dir, "**/*.js")].each do |js_path|
20
+ if File.directory?(js_path)
21
+ self.compress_js_recursive(js_path, trict)
22
+ elsif !js_path.end_with?("pack.js") && !js_path.end_with?("min.js") &&
23
+ File.extname(js_path) == ".js" && !check_include_dir(ignore_paths, js_path)
24
+
25
+ bak_js_path = "#{js_path}.bak"
26
+ from_file = bak_js_path
27
+ compile = true
28
+
29
+ if File.exists?(bak_js_path)
30
+ compile = trict
31
+ else
32
+ FileUtils.copy_file(js_path, bak_js_path)
33
+ end
34
+
35
+ if compile
36
+ puts "+ Compress: #{js_path}"
37
+ # puts "java -jar ~/code/tools/compiler-latest/compiler.jar --js #{from_file} --js_output_file #{js_path}"
38
+ # sleep 2
39
+ `java -jar /Users/tamvo/code/tools/compiler-latest/compiler.jar --js #{from_file} --js_output_file #{js_path}`
40
+ end
41
+
42
+ end
43
+ end
44
+ else
45
+ puts "- Ignore: #{dir}"
46
+ end
47
+ end
48
+ end
49
+
@@ -0,0 +1,26 @@
1
+ require "fileutils"
2
+ require "active_support"
3
+
4
+ TMP_EXT_NAME = "-tmp.png"
5
+
6
+ module WebOptimizer
7
+ def self.compress_img(dir)
8
+ return unless File.directory? dir
9
+
10
+ Dir[File.join(dir, "**/*")].each do |image_path|
11
+ if File.directory?(image_path)
12
+ compress_img(image_path)
13
+ elsif (file_ext = File.extname(image_path)) == ".png"
14
+ file_name = File.basename(image_path)
15
+ `/usr/local/bin/pngquant #{image_path} --ext #{TMP_EXT_NAME}`
16
+ new_file_path = image_path.gsub(file_ext, "-tmp.png")
17
+ `mv #{new_file_path} #{image_path}`
18
+ puts "[pngquant] #{image_path}"
19
+ elsif ['png'].any? { |ext| file_ext == ".#{ext}" }
20
+ puts "[image_optim] #{image_path}"
21
+ `/Users/tamvo/.rvm/gems/ruby-1.9.3-p194@general/bin/image_optim #{image_path}`
22
+ end
23
+ end
24
+ end
25
+ end
26
+
@@ -0,0 +1,3 @@
1
+ module WebOptimizer
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,9 @@
1
+ require "web_optimizer/common"
2
+ require "web_optimizer/compressor_css"
3
+ require "web_optimizer/compressor_js"
4
+ require "web_optimizer/optimize_images"
5
+ require "web_optimizer/version"
6
+
7
+ module WebOptimizer
8
+ end
9
+
data/tmp.rb ADDED
@@ -0,0 +1,7 @@
1
+ require "web_optimizer"
2
+ require "debugger"
3
+
4
+ dir = "/Users/tamvo/code/lib/ruby/web_optimizer/data"; WebOptimizer.compress_css(dir)
5
+ dir = "/Users/tamvo/code/lib/ruby/web_optimizer/data"; WebOptimizer.compress_js(dir)
6
+ dir = "/Users/tamvo/code/lib/ruby/web_optimizer/data"; WebOptimizer.compress_img(dir)
7
+
@@ -0,0 +1,24 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'web_optimizer/version'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = "web_optimizer"
8
+ gem.license = "MIT"
9
+ gem.version = WebOptimizer::VERSION
10
+ gem.authors = ["Tam Vo"]
11
+ gem.email = ["vo.mita.ov@gmail.com"]
12
+ gem.description = %q{Compress all css file in specified dir with yuicompressor}
13
+ gem.summary = %q{Compress css, js and optimize images tools}
14
+ gem.homepage = "http://github.com/tamvo/web_optimizer"
15
+
16
+ gem.files = `git ls-files`.split($/)
17
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
18
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
19
+ gem.require_paths = ["lib"]
20
+
21
+ gem.add_dependency("active_support")
22
+ gem.add_dependency("fileutils")
23
+ end
24
+
metadata ADDED
@@ -0,0 +1,97 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: web_optimizer
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Tam Vo
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2014-01-15 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: active_support
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: fileutils
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ description: Compress all css file in specified dir with yuicompressor
47
+ email:
48
+ - vo.mita.ov@gmail.com
49
+ executables: []
50
+ extensions: []
51
+ extra_rdoc_files: []
52
+ files:
53
+ - .gitignore
54
+ - Gemfile
55
+ - LICENSE.txt
56
+ - README.md
57
+ - Rakefile
58
+ - data/animation.css
59
+ - data/animation.css.bak
60
+ - data/balance.js
61
+ - data/balance.js.bak
62
+ - data/screenshot.png
63
+ - lib/web_optimizer.rb
64
+ - lib/web_optimizer/common.rb
65
+ - lib/web_optimizer/compressor_css.rb
66
+ - lib/web_optimizer/compressor_js.rb
67
+ - lib/web_optimizer/optimize_images.rb
68
+ - lib/web_optimizer/version.rb
69
+ - tmp.rb
70
+ - web_optimizer.gemspec
71
+ homepage: http://github.com/tamvo/web_optimizer
72
+ licenses:
73
+ - MIT
74
+ post_install_message:
75
+ rdoc_options: []
76
+ require_paths:
77
+ - lib
78
+ required_ruby_version: !ruby/object:Gem::Requirement
79
+ none: false
80
+ requirements:
81
+ - - ! '>='
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ required_rubygems_version: !ruby/object:Gem::Requirement
85
+ none: false
86
+ requirements:
87
+ - - ! '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ requirements: []
91
+ rubyforge_project:
92
+ rubygems_version: 1.8.25
93
+ signing_key:
94
+ specification_version: 3
95
+ summary: Compress css, js and optimize images tools
96
+ test_files: []
97
+ has_rdoc: