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.
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