juicer 0.2.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.
- data/History.txt +10 -0
- data/Manifest.txt +58 -0
- data/Rakefile +44 -0
- data/Readme.rdoc +143 -0
- data/bin/juicer +8 -0
- data/lib/juicer.rb +70 -0
- data/lib/juicer/binary.rb +173 -0
- data/lib/juicer/cache_buster.rb +45 -0
- data/lib/juicer/chainable.rb +106 -0
- data/lib/juicer/cli.rb +56 -0
- data/lib/juicer/command/install.rb +59 -0
- data/lib/juicer/command/list.rb +50 -0
- data/lib/juicer/command/merge.rb +185 -0
- data/lib/juicer/command/util.rb +32 -0
- data/lib/juicer/command/verify.rb +60 -0
- data/lib/juicer/core.rb +59 -0
- data/lib/juicer/css_cache_buster.rb +99 -0
- data/lib/juicer/install/base.rb +186 -0
- data/lib/juicer/install/jslint_installer.rb +51 -0
- data/lib/juicer/install/rhino_installer.rb +52 -0
- data/lib/juicer/install/yui_compressor_installer.rb +66 -0
- data/lib/juicer/jslint.rb +90 -0
- data/lib/juicer/merger/base.rb +74 -0
- data/lib/juicer/merger/css_dependency_resolver.rb +25 -0
- data/lib/juicer/merger/dependency_resolver.rb +82 -0
- data/lib/juicer/merger/javascript_dependency_resolver.rb +21 -0
- data/lib/juicer/merger/javascript_merger.rb +30 -0
- data/lib/juicer/merger/stylesheet_merger.rb +112 -0
- data/lib/juicer/minifyer/yui_compressor.rb +129 -0
- data/tasks/ann.rake +80 -0
- data/tasks/bones.rake +20 -0
- data/tasks/gem.rake +201 -0
- data/tasks/git.rake +40 -0
- data/tasks/notes.rake +27 -0
- data/tasks/post_load.rake +34 -0
- data/tasks/rdoc.rake +50 -0
- data/tasks/rubyforge.rake +55 -0
- data/tasks/setup.rb +300 -0
- data/tasks/spec.rake +54 -0
- data/tasks/svn.rake +47 -0
- data/tasks/test.rake +40 -0
- data/tasks/test/setup.rake +35 -0
- data/test/bin/jslint.js +474 -0
- data/test/bin/rhino1_7R1.zip +0 -0
- data/test/bin/rhino1_7R2-RC1.zip +0 -0
- data/test/bin/yuicompressor +238 -0
- data/test/bin/yuicompressor-2.3.5.zip +0 -0
- data/test/bin/yuicompressor-2.4.2.zip +0 -0
- data/test/juicer/command/test_install.rb +53 -0
- data/test/juicer/command/test_list.rb +69 -0
- data/test/juicer/command/test_merge.rb +155 -0
- data/test/juicer/command/test_util.rb +54 -0
- data/test/juicer/command/test_verify.rb +33 -0
- data/test/juicer/install/test_installer_base.rb +195 -0
- data/test/juicer/install/test_jslint_installer.rb +54 -0
- data/test/juicer/install/test_rhino_installer.rb +57 -0
- data/test/juicer/install/test_yui_compressor_installer.rb +56 -0
- data/test/juicer/merger/test_base.rb +122 -0
- data/test/juicer/merger/test_css_dependency_resolver.rb +36 -0
- data/test/juicer/merger/test_javascript_dependency_resolver.rb +39 -0
- data/test/juicer/merger/test_javascript_merger.rb +74 -0
- data/test/juicer/merger/test_stylesheet_merger.rb +178 -0
- data/test/juicer/minifyer/test_yui_compressor.rb +159 -0
- data/test/juicer/test_cache_buster.rb +58 -0
- data/test/juicer/test_chainable.rb +94 -0
- data/test/juicer/test_core.rb +47 -0
- data/test/juicer/test_css_cache_buster.rb +72 -0
- data/test/juicer/test_jslint.rb +33 -0
- data/test/test_helper.rb +146 -0
- data/test/test_juicer.rb +4 -0
- metadata +194 -0
data/test/test_helper.rb
ADDED
@@ -0,0 +1,146 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
require 'test/unit'
|
3
|
+
require File.expand_path(File.join(File.dirname(__FILE__), %w[.. lib juicer])) unless defined?(Juicer)
|
4
|
+
|
5
|
+
$data_dir = File.join(File.expand_path(File.dirname(__FILE__)), "data")
|
6
|
+
Juicer::LOGGER = Logger.new StringIO.new
|
7
|
+
|
8
|
+
# Prefixes paths with the data dir
|
9
|
+
def path(path)
|
10
|
+
File.join($data_dir, path)
|
11
|
+
end
|
12
|
+
|
13
|
+
# Allow for testing of private methods inside a block:
|
14
|
+
#
|
15
|
+
# MyClass.publicize_methods do
|
16
|
+
# assert MyClass.some_private_method
|
17
|
+
# end
|
18
|
+
class Class
|
19
|
+
def publicize_methods
|
20
|
+
saved_private_instance_methods = self.private_instance_methods
|
21
|
+
self.class_eval { public(*saved_private_instance_methods) }
|
22
|
+
yield
|
23
|
+
self.class_eval { private(*saved_private_instance_methods) }
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
#
|
28
|
+
# Intercept calls to open, and return local files
|
29
|
+
#
|
30
|
+
module Kernel
|
31
|
+
private
|
32
|
+
alias juicer_original_open open # :nodoc:
|
33
|
+
|
34
|
+
def open(name, *rest, &block)
|
35
|
+
if name =~ /http.+yuicompressor-(\d\.\d\.\d)\.zip$/
|
36
|
+
name = File.join($data_dir, "..", "bin", "yuicompressor-#{$1}.zip")
|
37
|
+
elsif name =~ /http.+yuicompressor/
|
38
|
+
name = File.join($data_dir, "..", "bin", "yuicompressor")
|
39
|
+
elsif name =~ /http.+jslint/
|
40
|
+
name = File.join($data_dir, "..", "bin", "jslint.js")
|
41
|
+
elsif name =~ /ftp.+rhino(.+)\.zip/
|
42
|
+
name = File.join($data_dir, "..", "bin", "rhino#{$1}.zip")
|
43
|
+
end
|
44
|
+
|
45
|
+
juicer_original_open(File.expand_path(name), *rest, &block)
|
46
|
+
end
|
47
|
+
|
48
|
+
module_function :open
|
49
|
+
end
|
50
|
+
|
51
|
+
module Juicer
|
52
|
+
module Test
|
53
|
+
|
54
|
+
# Alot of Juicer functionality are filesystem operations. This class sets up files
|
55
|
+
# to work on
|
56
|
+
class FileSetup
|
57
|
+
attr_reader :file_count
|
58
|
+
|
59
|
+
def initialize(dir = $data_dir)
|
60
|
+
@dir = dir
|
61
|
+
@file_count = 0
|
62
|
+
end
|
63
|
+
|
64
|
+
# Recursively deletes the data directory
|
65
|
+
def delete
|
66
|
+
res = FileUtils.rm_rf(@dir) if File.exist?(@dir)
|
67
|
+
end
|
68
|
+
|
69
|
+
# Set up files for unit tests
|
70
|
+
def create(force = false)
|
71
|
+
return if File.exist?(@dir) && !force
|
72
|
+
|
73
|
+
delete if File.exist?(@dir)
|
74
|
+
mkdir @dir
|
75
|
+
mkfile(@dir, 'a.css', "@import 'b.css';\n\n/* Dette er a.css */")
|
76
|
+
mkfile(@dir, 'a.js', "/**\n * @depend b.js\n */\n\n/* Dette er a.js */")
|
77
|
+
mkfile(@dir, 'b.css', "/* Dette er b.css */")
|
78
|
+
mkfile(@dir, 'b.js', "/**\n * @depends a.js\n */\n\n/* Dette er b.css */")
|
79
|
+
mkfile(@dir, 'a1.css', "@import 'b1.css';\n@import 'c1.css';\nbody {\n width: 800px;\n}\n")
|
80
|
+
mkfile(@dir, 'b1.css', "@import 'd1.css';\n\nhtml {\n background: red;\n}\n")
|
81
|
+
mkfile(@dir, 'c1.css', "h1 {\n font-size: 12px;\n}\n")
|
82
|
+
mkfile(@dir, 'd1.css', "h2 {\n font-size: 10px;\n}\n")
|
83
|
+
mkfile(@dir, 'ok.js', "function hey() {\n alert(\"Hey\");\n}\n")
|
84
|
+
mkfile(@dir, 'not-ok.js', "var a = 34\nb = 78;\n")
|
85
|
+
|
86
|
+
images = mkdir File.join(@dir, "images")
|
87
|
+
mkfile(images, '1.png', "")
|
88
|
+
|
89
|
+
css_dir = mkdir File.join(@dir, "css")
|
90
|
+
mkfile(css_dir, '2.gif', "")
|
91
|
+
|
92
|
+
css = <<-CSS
|
93
|
+
body {
|
94
|
+
background: url(../images/1.png);
|
95
|
+
}
|
96
|
+
|
97
|
+
h1 {
|
98
|
+
background: url(../a1.css) 0 0 no-repeat;
|
99
|
+
}
|
100
|
+
|
101
|
+
h2 {
|
102
|
+
background: url(2.gif) no-repeat;
|
103
|
+
}
|
104
|
+
CSS
|
105
|
+
|
106
|
+
mkfile(css_dir, 'test.css', css)
|
107
|
+
mkfile(css_dir, 'test2.css', "body { background: url(/images/1.png); }")
|
108
|
+
mkfile(@dir, 'path_test.css', "@import 'css/test.css';\n\nbody {\n background: url(css/2.gif) no-repeat;\n}\n")
|
109
|
+
|
110
|
+
css = <<-CSS
|
111
|
+
body {
|
112
|
+
background: url(/images/1.png);
|
113
|
+
}
|
114
|
+
|
115
|
+
h1 {
|
116
|
+
background: url(/css/2.gif);
|
117
|
+
background: url(/a1.css) 0 0 no-repeat;
|
118
|
+
}
|
119
|
+
|
120
|
+
h2 {
|
121
|
+
background: url(/css/2.gif) no-repeat;
|
122
|
+
}
|
123
|
+
|
124
|
+
p { background: url(/a2.css); }
|
125
|
+
CSS
|
126
|
+
|
127
|
+
mkfile(@dir, 'path_test2.css', css)
|
128
|
+
|
129
|
+
mkfile(@dir, 'Changelog.txt', "2008.02.09 | stb-base 1.29\n\nFEATURE: Core | Bla bla bla bla bla\nFEATURE: UI: | Bla bla bla bla bla\n\n\n2008.02.09 | stb-base 1.29\n\nFEATURE: Core | Bla bla bla bla bla\nFEATURE: UI: | Bla bla bla bla bla\n")
|
130
|
+
end
|
131
|
+
|
132
|
+
private
|
133
|
+
# Create a file
|
134
|
+
def mkfile(parent, name, content)
|
135
|
+
file = File.open(File.join(parent, name), 'w+') { |f| f.puts content }
|
136
|
+
@file_count += 1
|
137
|
+
end
|
138
|
+
|
139
|
+
def mkdir(dir)
|
140
|
+
FileUtils.mkdir(dir)
|
141
|
+
@file_count += 1
|
142
|
+
dir
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
data/test/test_juicer.rb
ADDED
metadata
ADDED
@@ -0,0 +1,194 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: juicer
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Christian Johansen
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-02-23 00:00:00 +01:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: cmdparse
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 2.0.2
|
24
|
+
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: hpricot
|
27
|
+
type: :runtime
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.6.164
|
34
|
+
version:
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: rubyzip
|
37
|
+
type: :runtime
|
38
|
+
version_requirement:
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 0.9.1
|
44
|
+
version:
|
45
|
+
- !ruby/object:Gem::Dependency
|
46
|
+
name: bones
|
47
|
+
type: :development
|
48
|
+
version_requirement:
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 2.4.0
|
54
|
+
version:
|
55
|
+
description: Juicer is a command line tool that helps you ship frontend code for production. High level overview; Juicer can * figure out which files depend on each other and merge them together, reducing the number of http requests per page view, thus improving performance * use YUI Compressor to compress code, thus improving performance * verify that your JavaScript is safe to minify/compress by running JsLint on it * cycle asset hosts in CSS files * add "cache busters" to URLs in CSS files * recalculate relative URLs in CSS files, as well as convert them to absolute (or convert absolute URLs to relative URLs)
|
56
|
+
email: christian@cjohansen.no
|
57
|
+
executables:
|
58
|
+
- juicer
|
59
|
+
extensions: []
|
60
|
+
|
61
|
+
extra_rdoc_files:
|
62
|
+
- History.txt
|
63
|
+
- Manifest.txt
|
64
|
+
- Readme.rdoc
|
65
|
+
- bin/juicer
|
66
|
+
files:
|
67
|
+
- History.txt
|
68
|
+
- Manifest.txt
|
69
|
+
- Rakefile
|
70
|
+
- Readme.rdoc
|
71
|
+
- bin/juicer
|
72
|
+
- lib/juicer.rb
|
73
|
+
- lib/juicer/binary.rb
|
74
|
+
- lib/juicer/cache_buster.rb
|
75
|
+
- lib/juicer/chainable.rb
|
76
|
+
- lib/juicer/cli.rb
|
77
|
+
- lib/juicer/command/install.rb
|
78
|
+
- lib/juicer/command/list.rb
|
79
|
+
- lib/juicer/command/merge.rb
|
80
|
+
- lib/juicer/command/util.rb
|
81
|
+
- lib/juicer/command/verify.rb
|
82
|
+
- lib/juicer/core.rb
|
83
|
+
- lib/juicer/css_cache_buster.rb
|
84
|
+
- lib/juicer/install/base.rb
|
85
|
+
- lib/juicer/install/jslint_installer.rb
|
86
|
+
- lib/juicer/install/rhino_installer.rb
|
87
|
+
- lib/juicer/install/yui_compressor_installer.rb
|
88
|
+
- lib/juicer/jslint.rb
|
89
|
+
- lib/juicer/merger/base.rb
|
90
|
+
- lib/juicer/merger/css_dependency_resolver.rb
|
91
|
+
- lib/juicer/merger/dependency_resolver.rb
|
92
|
+
- lib/juicer/merger/javascript_dependency_resolver.rb
|
93
|
+
- lib/juicer/merger/javascript_merger.rb
|
94
|
+
- lib/juicer/merger/stylesheet_merger.rb
|
95
|
+
- lib/juicer/minifyer/yui_compressor.rb
|
96
|
+
- tasks/ann.rake
|
97
|
+
- tasks/bones.rake
|
98
|
+
- tasks/gem.rake
|
99
|
+
- tasks/git.rake
|
100
|
+
- tasks/notes.rake
|
101
|
+
- tasks/post_load.rake
|
102
|
+
- tasks/rdoc.rake
|
103
|
+
- tasks/rubyforge.rake
|
104
|
+
- tasks/setup.rb
|
105
|
+
- tasks/spec.rake
|
106
|
+
- tasks/svn.rake
|
107
|
+
- tasks/test.rake
|
108
|
+
- tasks/test/setup.rake
|
109
|
+
- test/bin/jslint.js
|
110
|
+
- test/bin/rhino1_7R1.zip
|
111
|
+
- test/bin/rhino1_7R2-RC1.zip
|
112
|
+
- test/bin/yuicompressor
|
113
|
+
- test/bin/yuicompressor-2.3.5.zip
|
114
|
+
- test/bin/yuicompressor-2.4.2.zip
|
115
|
+
- test/juicer/command/test_install.rb
|
116
|
+
- test/juicer/command/test_list.rb
|
117
|
+
- test/juicer/command/test_merge.rb
|
118
|
+
- test/juicer/command/test_util.rb
|
119
|
+
- test/juicer/command/test_verify.rb
|
120
|
+
- test/juicer/install/test_installer_base.rb
|
121
|
+
- test/juicer/install/test_jslint_installer.rb
|
122
|
+
- test/juicer/install/test_rhino_installer.rb
|
123
|
+
- test/juicer/install/test_yui_compressor_installer.rb
|
124
|
+
- test/juicer/merger/test_base.rb
|
125
|
+
- test/juicer/merger/test_css_dependency_resolver.rb
|
126
|
+
- test/juicer/merger/test_javascript_dependency_resolver.rb
|
127
|
+
- test/juicer/merger/test_javascript_merger.rb
|
128
|
+
- test/juicer/merger/test_stylesheet_merger.rb
|
129
|
+
- test/juicer/minifyer/test_yui_compressor.rb
|
130
|
+
- test/juicer/test_cache_buster.rb
|
131
|
+
- test/juicer/test_chainable.rb
|
132
|
+
- test/juicer/test_core.rb
|
133
|
+
- test/juicer/test_css_cache_buster.rb
|
134
|
+
- test/juicer/test_jslint.rb
|
135
|
+
- test/test_helper.rb
|
136
|
+
- test/test_juicer.rb
|
137
|
+
has_rdoc: true
|
138
|
+
homepage: http://www.cjohansen.no/en/projects/juicer
|
139
|
+
post_install_message: |
|
140
|
+
Juicer does not ship with third party libraries. You probably want to install
|
141
|
+
Yui Compressor and JsLint now:
|
142
|
+
|
143
|
+
juicer install yui_compressor
|
144
|
+
juicer install jslint
|
145
|
+
|
146
|
+
Happy juicing!
|
147
|
+
|
148
|
+
rdoc_options:
|
149
|
+
- --main
|
150
|
+
- Readme.rdoc
|
151
|
+
require_paths:
|
152
|
+
- lib
|
153
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
154
|
+
requirements:
|
155
|
+
- - ">="
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: "0"
|
158
|
+
version:
|
159
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
160
|
+
requirements:
|
161
|
+
- - ">="
|
162
|
+
- !ruby/object:Gem::Version
|
163
|
+
version: "0"
|
164
|
+
version:
|
165
|
+
requirements: []
|
166
|
+
|
167
|
+
rubyforge_project: juicer
|
168
|
+
rubygems_version: 1.3.1
|
169
|
+
signing_key:
|
170
|
+
specification_version: 2
|
171
|
+
summary: Juicer is a command line tool that helps you ship frontend code for production
|
172
|
+
test_files:
|
173
|
+
- test/test_helper.rb
|
174
|
+
- test/juicer/test_cache_buster.rb
|
175
|
+
- test/juicer/test_chainable.rb
|
176
|
+
- test/juicer/test_jslint.rb
|
177
|
+
- test/juicer/install/test_installer_base.rb
|
178
|
+
- test/juicer/install/test_jslint_installer.rb
|
179
|
+
- test/juicer/install/test_yui_compressor_installer.rb
|
180
|
+
- test/juicer/install/test_rhino_installer.rb
|
181
|
+
- test/juicer/test_css_cache_buster.rb
|
182
|
+
- test/juicer/merger/test_javascript_dependency_resolver.rb
|
183
|
+
- test/juicer/merger/test_css_dependency_resolver.rb
|
184
|
+
- test/juicer/merger/test_base.rb
|
185
|
+
- test/juicer/merger/test_javascript_merger.rb
|
186
|
+
- test/juicer/merger/test_stylesheet_merger.rb
|
187
|
+
- test/juicer/command/test_verify.rb
|
188
|
+
- test/juicer/command/test_util.rb
|
189
|
+
- test/juicer/command/test_install.rb
|
190
|
+
- test/juicer/command/test_merge.rb
|
191
|
+
- test/juicer/command/test_list.rb
|
192
|
+
- test/juicer/test_core.rb
|
193
|
+
- test/juicer/minifyer/test_yui_compressor.rb
|
194
|
+
- test/test_juicer.rb
|