juicer 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. data/History.txt +10 -0
  2. data/Manifest.txt +58 -0
  3. data/Rakefile +44 -0
  4. data/Readme.rdoc +143 -0
  5. data/bin/juicer +8 -0
  6. data/lib/juicer.rb +70 -0
  7. data/lib/juicer/binary.rb +173 -0
  8. data/lib/juicer/cache_buster.rb +45 -0
  9. data/lib/juicer/chainable.rb +106 -0
  10. data/lib/juicer/cli.rb +56 -0
  11. data/lib/juicer/command/install.rb +59 -0
  12. data/lib/juicer/command/list.rb +50 -0
  13. data/lib/juicer/command/merge.rb +185 -0
  14. data/lib/juicer/command/util.rb +32 -0
  15. data/lib/juicer/command/verify.rb +60 -0
  16. data/lib/juicer/core.rb +59 -0
  17. data/lib/juicer/css_cache_buster.rb +99 -0
  18. data/lib/juicer/install/base.rb +186 -0
  19. data/lib/juicer/install/jslint_installer.rb +51 -0
  20. data/lib/juicer/install/rhino_installer.rb +52 -0
  21. data/lib/juicer/install/yui_compressor_installer.rb +66 -0
  22. data/lib/juicer/jslint.rb +90 -0
  23. data/lib/juicer/merger/base.rb +74 -0
  24. data/lib/juicer/merger/css_dependency_resolver.rb +25 -0
  25. data/lib/juicer/merger/dependency_resolver.rb +82 -0
  26. data/lib/juicer/merger/javascript_dependency_resolver.rb +21 -0
  27. data/lib/juicer/merger/javascript_merger.rb +30 -0
  28. data/lib/juicer/merger/stylesheet_merger.rb +112 -0
  29. data/lib/juicer/minifyer/yui_compressor.rb +129 -0
  30. data/tasks/ann.rake +80 -0
  31. data/tasks/bones.rake +20 -0
  32. data/tasks/gem.rake +201 -0
  33. data/tasks/git.rake +40 -0
  34. data/tasks/notes.rake +27 -0
  35. data/tasks/post_load.rake +34 -0
  36. data/tasks/rdoc.rake +50 -0
  37. data/tasks/rubyforge.rake +55 -0
  38. data/tasks/setup.rb +300 -0
  39. data/tasks/spec.rake +54 -0
  40. data/tasks/svn.rake +47 -0
  41. data/tasks/test.rake +40 -0
  42. data/tasks/test/setup.rake +35 -0
  43. data/test/bin/jslint.js +474 -0
  44. data/test/bin/rhino1_7R1.zip +0 -0
  45. data/test/bin/rhino1_7R2-RC1.zip +0 -0
  46. data/test/bin/yuicompressor +238 -0
  47. data/test/bin/yuicompressor-2.3.5.zip +0 -0
  48. data/test/bin/yuicompressor-2.4.2.zip +0 -0
  49. data/test/juicer/command/test_install.rb +53 -0
  50. data/test/juicer/command/test_list.rb +69 -0
  51. data/test/juicer/command/test_merge.rb +155 -0
  52. data/test/juicer/command/test_util.rb +54 -0
  53. data/test/juicer/command/test_verify.rb +33 -0
  54. data/test/juicer/install/test_installer_base.rb +195 -0
  55. data/test/juicer/install/test_jslint_installer.rb +54 -0
  56. data/test/juicer/install/test_rhino_installer.rb +57 -0
  57. data/test/juicer/install/test_yui_compressor_installer.rb +56 -0
  58. data/test/juicer/merger/test_base.rb +122 -0
  59. data/test/juicer/merger/test_css_dependency_resolver.rb +36 -0
  60. data/test/juicer/merger/test_javascript_dependency_resolver.rb +39 -0
  61. data/test/juicer/merger/test_javascript_merger.rb +74 -0
  62. data/test/juicer/merger/test_stylesheet_merger.rb +178 -0
  63. data/test/juicer/minifyer/test_yui_compressor.rb +159 -0
  64. data/test/juicer/test_cache_buster.rb +58 -0
  65. data/test/juicer/test_chainable.rb +94 -0
  66. data/test/juicer/test_core.rb +47 -0
  67. data/test/juicer/test_css_cache_buster.rb +72 -0
  68. data/test/juicer/test_jslint.rb +33 -0
  69. data/test/test_helper.rb +146 -0
  70. data/test/test_juicer.rb +4 -0
  71. metadata +194 -0
@@ -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
@@ -0,0 +1,4 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), "test_helper")) unless defined?(Juicer)
2
+
3
+ #file_setup = Juicer::Test::FileSetup.new($DATA_DIR)
4
+ #file_setup.delete!
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