rapper 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +1 -1
- data/Gemfile.lock +8 -2
- data/README.markdown +8 -4
- data/VERSION +1 -1
- data/lib/rapper/compressors.rb +9 -9
- data/lib/rapper/config.rb +2 -2
- data/lib/rapper/definition.rb +4 -3
- data/rapper.gemspec +5 -5
- data/spec/fixtures/config/asset_definitions/base/javascripts.yml +2 -1
- data/spec/fixtures/config/asset_definitions/base/stylesheets.yml +2 -1
- data/spec/fixtures/config/asset_definitions/custom_destination/javascripts.yml +2 -1
- data/spec/fixtures/config/asset_definitions/missing_file/stylesheets.yml +2 -1
- data/spec/fixtures/config/assets.yml +7 -3
- data/spec/fixtures/test_cases/compression/definitions/css.yml +2 -1
- data/spec/fixtures/test_cases/compression/definitions/js.yml +2 -1
- data/spec/fixtures/test_cases/compression/expected/javascripts/base.js +1 -2
- data/spec/fixtures/test_cases/compression/expected/javascripts/base_reversed.js +1 -2
- data/spec/fixtures/test_cases/concatenation/definitions/css.yml +2 -1
- data/spec/fixtures/test_cases/concatenation/definitions/js.yml +2 -1
- data/spec/rapper_spec.rb +19 -3
- data/spec/vendor_spec.rb +4 -17
- metadata +9 -9
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,16 +1,22 @@
|
|
1
1
|
GEM
|
2
2
|
remote: http://rubygems.org/
|
3
3
|
specs:
|
4
|
+
POpen4 (0.1.4)
|
5
|
+
Platform (>= 0.4.0)
|
6
|
+
open4
|
7
|
+
Platform (0.4.0)
|
4
8
|
bluecloth (2.0.10)
|
5
|
-
closure-compiler (1.0.0)
|
6
9
|
git (1.2.5)
|
7
10
|
jeweler (1.5.2)
|
8
11
|
bundler (~> 1.0.0)
|
9
12
|
git (>= 1.2.5)
|
10
13
|
rake
|
14
|
+
open4 (1.0.1)
|
11
15
|
rake (0.8.7)
|
12
16
|
rspec (1.3.1)
|
13
17
|
yard (0.6.4)
|
18
|
+
yui-compressor (0.9.6)
|
19
|
+
POpen4 (>= 0.1.4)
|
14
20
|
|
15
21
|
PLATFORMS
|
16
22
|
ruby
|
@@ -18,8 +24,8 @@ PLATFORMS
|
|
18
24
|
DEPENDENCIES
|
19
25
|
bluecloth (~> 2.0.10)
|
20
26
|
bundler (~> 1.0.0)
|
21
|
-
closure-compiler (~> 1.0.0)
|
22
27
|
jeweler (~> 1.5.2)
|
23
28
|
rake (~> 0.8.7)
|
24
29
|
rspec (~> 1.3.1)
|
25
30
|
yard (~> 0.6.4)
|
31
|
+
yui-compressor (~> 0.9.4)
|
data/README.markdown
CHANGED
@@ -39,9 +39,11 @@ Rapper is configured using a YAML file that defines the settings to be used in v
|
|
39
39
|
compress: true
|
40
40
|
version: true
|
41
41
|
# optional, passed to Google Closure Compiler
|
42
|
-
|
43
|
-
# default:
|
44
|
-
|
42
|
+
yui_compressor:
|
43
|
+
line_break: 2000 # default: 2000
|
44
|
+
munge: false # default: false
|
45
|
+
optimize: true # default: true
|
46
|
+
preserve_semicolons: false # default: false
|
45
47
|
|
46
48
|
The only required setting is `definition_root`. (Of course, you'll still need definition files to define the asset packages that you want build. More on that below.)
|
47
49
|
|
@@ -52,7 +54,8 @@ The `definition_root` setting in the rapper config is a path to a folder contain
|
|
52
54
|
--- !omap
|
53
55
|
- root: public/javascripts
|
54
56
|
- destination_root: public/assets # optional, default: root + "/assets"
|
55
|
-
-
|
57
|
+
- component_tag_root: /javascripts
|
58
|
+
- asset_tag_root: /javascripts/assets
|
56
59
|
- suffix: js
|
57
60
|
- assets: !omap
|
58
61
|
- base: !omap
|
@@ -126,6 +129,7 @@ Rapper's got a Gemfile. You know what to do.
|
|
126
129
|
|
127
130
|
## Version history
|
128
131
|
|
132
|
+
* **0.4.0** - Switching to YUI Compressor for JavaScript compression due to its better handling of local variable compressing in scopes with eval() usage (I'm looking at you, ExtJS). Adding `component_tag_root` and `asset_tag_root` options to allow better control over URLs.
|
129
133
|
* **0.3.0** - Remove hard Closure Compiler dependency (it will still need to be installed to compress JS), shorter view helper method names.
|
130
134
|
* **0.2.4** - Add tag_paths() to get all file paths for a given asset.
|
131
135
|
* **0.2.2** - Change tag_root behavior to not add `.../assets` path suffix when a `destination_root` is defined.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.4.0
|
data/lib/rapper/compressors.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require File.expand_path( File.dirname( __FILE__ ) + "/../yui/css_compressor.rb" )
|
2
2
|
require 'fileutils'
|
3
3
|
begin
|
4
|
-
require "
|
4
|
+
require "yui/compressor"
|
5
5
|
rescue LoadError; end
|
6
6
|
|
7
7
|
module Rapper
|
@@ -15,7 +15,7 @@ module Rapper
|
|
15
15
|
def compress( file )
|
16
16
|
opts = {}
|
17
17
|
# TODO: Someday this goes away.
|
18
|
-
opts = get_config( "
|
18
|
+
opts = get_config( "yui_compressor" ) if file =~ /\.js/
|
19
19
|
Rapper::Compressors::Compressor.compress( file, opts )
|
20
20
|
end
|
21
21
|
|
@@ -99,26 +99,26 @@ module Rapper
|
|
99
99
|
end
|
100
100
|
end
|
101
101
|
|
102
|
-
# Uses
|
103
|
-
#
|
102
|
+
# Uses YUI Compressor (via Sam Stephenson's yui-compressor gem) to compress
|
103
|
+
# JavaScrpt.
|
104
104
|
class JSCompressor < Compressor
|
105
105
|
register ".js"
|
106
106
|
|
107
107
|
def self.do_compress( file_path, opts={} )
|
108
|
-
return unless
|
108
|
+
return unless compressor_available?
|
109
109
|
|
110
|
-
|
110
|
+
compressor = YUI::JavaScriptCompressor.new( opts )
|
111
111
|
|
112
112
|
js = read_file( file_path )
|
113
113
|
destination = writable_file( file_path )
|
114
114
|
|
115
|
-
destination.write(
|
115
|
+
destination.write( compressor.compress( js ) )
|
116
116
|
destination.write "\n"
|
117
117
|
destination.close
|
118
118
|
end
|
119
119
|
|
120
|
-
def self.
|
121
|
-
|
120
|
+
def self.compressor_available?
|
121
|
+
YUI::JavaScriptCompressor.is_a?( Class )
|
122
122
|
rescue NameError
|
123
123
|
false
|
124
124
|
end
|
data/lib/rapper/config.rb
CHANGED
data/lib/rapper/definition.rb
CHANGED
@@ -20,6 +20,8 @@ module Rapper
|
|
20
20
|
@definition["root"]
|
21
21
|
end
|
22
22
|
|
23
|
+
# @return [String] The root for packaged asset files. Defaults to root +
|
24
|
+
# "/assets".
|
23
25
|
def destination_root
|
24
26
|
@default_destination_root ||= @definition["root"].gsub( /\/$/, '' ) + "/assets"
|
25
27
|
@definition["destination_root"] || @default_destination_root
|
@@ -28,13 +30,12 @@ module Rapper
|
|
28
30
|
# @return [String] The public url root for the asset component files (used
|
29
31
|
# when bundling is off).
|
30
32
|
def component_tag_root
|
31
|
-
@definition["
|
33
|
+
@definition["component_tag_root"]
|
32
34
|
end
|
33
35
|
|
34
36
|
# @return [String] The public url root for packaged asset files.
|
35
37
|
def asset_tag_root
|
36
|
-
@
|
37
|
-
@definition["destination_root"] ? @default_asset_tag_root : @default_asset_tag_root + "/assets"
|
38
|
+
@definition["asset_tag_root"]
|
38
39
|
end
|
39
40
|
|
40
41
|
# @return [String] The suffix of files used in this definition.
|
data/rapper.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{rapper}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.4.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Tyson Tate"]
|
12
|
-
s.date = %q{2011-04-
|
12
|
+
s.date = %q{2011-04-08}
|
13
13
|
s.description = %q{Static asset packager and compressor with versioning and built-in view helpers. Compresses files only when they need compressing.}
|
14
14
|
s.email = %q{tyson@tysontate.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -140,7 +140,7 @@ Gem::Specification.new do |s|
|
|
140
140
|
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
141
141
|
s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
|
142
142
|
s.add_development_dependency(%q<rake>, ["~> 0.8.7"])
|
143
|
-
s.add_development_dependency(%q<
|
143
|
+
s.add_development_dependency(%q<yui-compressor>, ["~> 0.9.4"])
|
144
144
|
else
|
145
145
|
s.add_dependency(%q<rspec>, ["~> 1.3.1"])
|
146
146
|
s.add_dependency(%q<yard>, ["~> 0.6.4"])
|
@@ -148,7 +148,7 @@ Gem::Specification.new do |s|
|
|
148
148
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
149
149
|
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
150
150
|
s.add_dependency(%q<rake>, ["~> 0.8.7"])
|
151
|
-
s.add_dependency(%q<
|
151
|
+
s.add_dependency(%q<yui-compressor>, ["~> 0.9.4"])
|
152
152
|
end
|
153
153
|
else
|
154
154
|
s.add_dependency(%q<rspec>, ["~> 1.3.1"])
|
@@ -157,7 +157,7 @@ Gem::Specification.new do |s|
|
|
157
157
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
158
158
|
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
159
159
|
s.add_dependency(%q<rake>, ["~> 0.8.7"])
|
160
|
-
s.add_dependency(%q<
|
160
|
+
s.add_dependency(%q<yui-compressor>, ["~> 0.9.4"])
|
161
161
|
end
|
162
162
|
end
|
163
163
|
|
@@ -1,7 +1,8 @@
|
|
1
1
|
--- !omap
|
2
2
|
- root: spec/fixtures/javascripts
|
3
3
|
- destination_root: tmp/custom_destination
|
4
|
-
-
|
4
|
+
- component_tag_root: /javascripts/components
|
5
|
+
- asset_tag_root: /javascripts/compiled
|
5
6
|
- suffix: js
|
6
7
|
- assets: !omap
|
7
8
|
- multiple_files: !omap
|
@@ -6,9 +6,8 @@ test:
|
|
6
6
|
compress: true
|
7
7
|
tag_style: html
|
8
8
|
version: false
|
9
|
-
|
10
|
-
|
11
|
-
formatting: pretty_print
|
9
|
+
yui_compressor:
|
10
|
+
line_break: 0
|
12
11
|
test_empty:
|
13
12
|
<<: *base
|
14
13
|
test_no_definition_root:
|
@@ -32,6 +31,11 @@ test_custom_destination:
|
|
32
31
|
definition_root: spec/fixtures/config/asset_definitions/custom_destination
|
33
32
|
bundle: true
|
34
33
|
compress: false
|
34
|
+
test_custom_destination_no_bundle:
|
35
|
+
<<: *base
|
36
|
+
definition_root: spec/fixtures/config/asset_definitions/custom_destination
|
37
|
+
bundle: false
|
38
|
+
compress: false
|
35
39
|
test_missing_file:
|
36
40
|
<<: *base
|
37
41
|
definition_root: spec/fixtures/config/asset_definitions/missing_file
|
@@ -1,2 +1 @@
|
|
1
|
-
var x=1
|
2
|
-
|
1
|
+
var x=1;var y=2;function a(){return true}a=1;b=2;function b(){return false};
|
@@ -1,2 +1 @@
|
|
1
|
-
a=1;b=2;function b(){return false}var x=1
|
2
|
-
|
1
|
+
a=1;b=2;function b(){return false}var x=1;var y=2;function a(){return true};
|
data/spec/rapper_spec.rb
CHANGED
@@ -41,8 +41,8 @@ describe Rapper do
|
|
41
41
|
rapper.send( :get_config, "bundle" ).should be_true
|
42
42
|
rapper.send( :get_config, "compress" ).should be_true
|
43
43
|
rapper.send( :get_config, "version" ).should be_true
|
44
|
-
rapper.send( :get_config, "
|
45
|
-
"
|
44
|
+
rapper.send( :get_config, "yui_compressor" ).should == {
|
45
|
+
"line_break" => 2000
|
46
46
|
}
|
47
47
|
end
|
48
48
|
|
@@ -137,9 +137,25 @@ describe Rapper do
|
|
137
137
|
Dir[ "tmp/custom_destination/*" ].should == ["tmp/custom_destination/multiple_files.js"]
|
138
138
|
end
|
139
139
|
|
140
|
+
it "uses the asset tag root" do
|
141
|
+
@rapper.js_tag( "javascripts", "multiple_files" ).should ==
|
142
|
+
"<script src=\"/javascripts/compiled/multiple_files.js?v=f3d9\"></script>"
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
describe "custom definition destination, without bundling" do
|
147
|
+
before :each do
|
148
|
+
@rapper = Rapper::Engine.new( "spec/fixtures/config/assets.yml", "test_custom_destination_no_bundle" )
|
149
|
+
@rapper.package
|
150
|
+
end
|
151
|
+
|
152
|
+
it "works" do
|
153
|
+
Dir[ "tmp/custom_destination/*" ].should == ["tmp/custom_destination/multiple_files.js"]
|
154
|
+
end
|
155
|
+
|
140
156
|
it "doesn't use the defaut '/assets' tag root" do
|
141
157
|
@rapper.js_tag( "javascripts", "multiple_files" ).should ==
|
142
|
-
"<script src=\"/javascripts/
|
158
|
+
"<script src=\"/javascripts/components/simple_1.js?v=f3d9\"></script>\n<script src=\"/javascripts/components/simple_2.js?v=f3d9\"></script>"
|
143
159
|
end
|
144
160
|
end
|
145
161
|
|
data/spec/vendor_spec.rb
CHANGED
@@ -1,23 +1,10 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
2
|
|
3
|
-
describe
|
3
|
+
describe YUI::JavaScriptCompressor do
|
4
4
|
it "shoud be available" do
|
5
|
-
closure =
|
6
|
-
closure.
|
5
|
+
closure = YUI::JavaScriptCompressor.new
|
6
|
+
closure.compress( "var x = 1; var y = 2;" ).should == "var x=1;var y=2;"
|
7
7
|
end
|
8
|
-
|
9
|
-
it "provides whitespace-only, simple, and advanced compression" do
|
10
|
-
# https://github.com/documentcloud/closure-compiler/blob/master/test/unit/test_closure_compiler.rb
|
11
|
-
|
12
|
-
original = "window.hello = function(name) { return console.log('hello ' + name ); }; hello.squared = function(num) { return num * num; }; hello('world');"
|
13
|
-
compiled_whitespace = "window.hello=function(name){return console.log(\"hello \"+name)};hello.squared=function(num){return num*num};hello(\"world\");\n"
|
14
|
-
compiled_simple = "window.hello=function(a){return console.log(\"hello \"+a)};hello.squared=function(a){return a*a};hello(\"world\");\n"
|
15
|
-
compiled_advanced = "window.a=function(b){return console.log(\"hello \"+b)};hello.b=function(b){return b*b};hello(\"world\");\n"
|
16
|
-
|
17
|
-
Closure::Compiler.new( :compilation_level => "WHITESPACE_ONLY" ).compile(original).should == compiled_whitespace
|
18
|
-
Closure::Compiler.new.compile(original).should == compiled_simple
|
19
|
-
Closure::Compiler.new( :compilation_level => "ADVANCED_OPTIMIZATIONS" ).compile(original).should == compiled_advanced
|
20
|
-
end
|
21
8
|
end
|
22
9
|
|
23
10
|
describe YUI::CSS do
|
@@ -33,4 +20,4 @@ describe YUI::CSS do
|
|
33
20
|
YUI::CSS.compress( test_css ).should == expected_css
|
34
21
|
end
|
35
22
|
end
|
36
|
-
end
|
23
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rapper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 15
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
8
|
+
- 4
|
9
9
|
- 0
|
10
|
-
version: 0.
|
10
|
+
version: 0.4.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Tyson Tate
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-04-
|
18
|
+
date: 2011-04-08 00:00:00 -07:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -121,15 +121,15 @@ dependencies:
|
|
121
121
|
requirements:
|
122
122
|
- - ~>
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
hash:
|
124
|
+
hash: 51
|
125
125
|
segments:
|
126
|
-
- 1
|
127
|
-
- 0
|
128
126
|
- 0
|
129
|
-
|
127
|
+
- 9
|
128
|
+
- 4
|
129
|
+
version: 0.9.4
|
130
130
|
type: :development
|
131
131
|
requirement: *id007
|
132
|
-
name:
|
132
|
+
name: yui-compressor
|
133
133
|
description: Static asset packager and compressor with versioning and built-in view helpers. Compresses files only when they need compressing.
|
134
134
|
email: tyson@tysontate.com
|
135
135
|
executables: []
|