rack-bundle 0.2.0 → 0.2.1
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/VERSION +1 -1
- data/lib/rack/bundle.rb +7 -2
- data/rack-bundle.gemspec +4 -4
- data/spec/rack-bundle_spec.rb +36 -11
- metadata +57 -21
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.1
|
data/lib/rack/bundle.rb
CHANGED
@@ -30,12 +30,17 @@ module Rack
|
|
30
30
|
parse!
|
31
31
|
replace_javascripts!
|
32
32
|
replace_stylesheets!
|
33
|
-
|
33
|
+
body = @document.to_html
|
34
|
+
headers['Content-Length'] = body.length.to_s if headers['Content-Length'] # Not sure how UTF-8 plays into this
|
35
|
+
[status, headers, [body]]
|
34
36
|
end
|
35
37
|
end
|
36
38
|
|
37
39
|
def parse!
|
38
|
-
|
40
|
+
# http://github.com/logicaltext/rack-bundle/commit/8e7d0282b05b01a0cbfa59b519242046437605f6
|
41
|
+
body = ""
|
42
|
+
@response.each do |part| body << part end
|
43
|
+
@document = Nokogiri::HTML(body)
|
39
44
|
end
|
40
45
|
|
41
46
|
def replace_javascripts!
|
data/rack-bundle.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{rack-bundle}
|
8
|
-
s.version = "0.2.
|
8
|
+
s.version = "0.2.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Julio Cesar Ody"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-07-12}
|
13
13
|
s.description = %q{Javascript and CSS bundling at the Rack level}
|
14
14
|
s.email = %q{julio.ody@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -49,7 +49,7 @@ Gem::Specification.new do |s|
|
|
49
49
|
s.homepage = %q{http://github.com/juliocesar/rack-bundle}
|
50
50
|
s.rdoc_options = ["--charset=UTF-8"]
|
51
51
|
s.require_paths = ["lib"]
|
52
|
-
s.rubygems_version = %q{1.3.
|
52
|
+
s.rubygems_version = %q{1.3.7}
|
53
53
|
s.summary = %q{Javascript and CSS bundling at the Rack level}
|
54
54
|
s.test_files = [
|
55
55
|
"spec/bundles/css_bundle_spec.rb",
|
@@ -64,7 +64,7 @@ Gem::Specification.new do |s|
|
|
64
64
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
65
65
|
s.specification_version = 3
|
66
66
|
|
67
|
-
if Gem::Version.new(Gem::
|
67
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
68
68
|
s.add_runtime_dependency(%q<rack>, [">= 1.0.0"])
|
69
69
|
s.add_runtime_dependency(%q<nokogiri>, [">= 1.4.2"])
|
70
70
|
s.add_development_dependency(%q<rspec>, ["= 1.3.0"])
|
data/spec/rack-bundle_spec.rb
CHANGED
@@ -13,7 +13,7 @@ describe Rack::Bundle do
|
|
13
13
|
it 'defaults to FileSystemStore for storage' do
|
14
14
|
Rack::Bundle.new(index_page, :public_dir => '.').storage.is_a? Rack::Bundle::FileSystemStore
|
15
15
|
end
|
16
|
-
|
16
|
+
|
17
17
|
context 'serving bundles' do
|
18
18
|
before do
|
19
19
|
@jsbundle, @cssbundle = make_js_bundle, make_css_bundle
|
@@ -22,17 +22,42 @@ describe Rack::Bundle do
|
|
22
22
|
@js_request = Rack::MockRequest.env_for @bundle.send(:bundle_path, @jsbundle)
|
23
23
|
@css_request = Rack::MockRequest.env_for @bundle.send(:bundle_path, @cssbundle)
|
24
24
|
end
|
25
|
-
|
25
|
+
|
26
26
|
it "fetches a bundle from storage and serves if the request URL matches" do
|
27
27
|
@bundle.storage.should_receive(:find_bundle_by_hash).with(@jsbundle.hash).and_return(@jsbundle)
|
28
|
-
status, headers, response = @bundle.call @js_request
|
28
|
+
status, headers, response = @bundle.call @js_request
|
29
29
|
response.join.should == @jsbundle.contents
|
30
30
|
end
|
31
|
+
|
32
|
+
context 'the Content-Length header' do
|
33
|
+
it "gets updated if it's been previously set" do
|
34
|
+
app = Rack::Builder.new do
|
35
|
+
use Rack::Lint
|
36
|
+
use Rack::Bundle, :public_dir => FIXTURES_PATH
|
37
|
+
use Rack::ContentLength
|
38
|
+
run index_page
|
39
|
+
end
|
40
|
+
status, headers, response = app.call @env
|
41
|
+
output = ""
|
42
|
+
response.each do |part| output << part end
|
43
|
+
headers['Content-Length'].should == output.length.to_s
|
44
|
+
end
|
45
|
+
|
46
|
+
it "isn't touched if it's not set" do
|
47
|
+
app = Rack::Builder.new do
|
48
|
+
use Rack::Lint
|
49
|
+
use Rack::Bundle, :public_dir => FIXTURES_PATH
|
50
|
+
run index_page
|
51
|
+
end
|
52
|
+
status, headers, response = app.call(@env)
|
53
|
+
headers['Content-Length'].should == nil
|
54
|
+
end
|
55
|
+
end
|
31
56
|
end
|
32
57
|
|
33
58
|
context 'parsing the document' do
|
34
|
-
before do
|
35
|
-
status, headers, @response = @bundle.call(@env)
|
59
|
+
before do
|
60
|
+
status, headers, @response = @bundle.call(@env)
|
36
61
|
end
|
37
62
|
it "doesn't happen unless the response is HTML" do
|
38
63
|
bundle = Rack::Bundle.new plain_text, :public_dir => FIXTURES_PATH
|
@@ -49,34 +74,34 @@ describe Rack::Bundle do
|
|
49
74
|
before do
|
50
75
|
@simple = Rack::Bundle.new simple_page, :public_dir => FIXTURES_PATH
|
51
76
|
end
|
52
|
-
|
77
|
+
|
53
78
|
it "leaves externally hosted Javascripts alone" do
|
54
79
|
@bundle.call @env
|
55
80
|
@bundle.document.css
|
56
81
|
end
|
57
|
-
|
82
|
+
|
58
83
|
it "skips #replace_javascripts! if there's only one script tag linking a Javascript in" do
|
59
84
|
Rack::Bundle::JSBundle.should_not_receive :new
|
60
85
|
@simple.call @env
|
61
86
|
end
|
62
|
-
|
87
|
+
|
63
88
|
it "replaces multiple references to Javascrips to one single reference to the bundle" do
|
64
89
|
@bundle.call @env
|
65
90
|
@bundle.document.css(Rack::Bundle::SELECTORS.js).count.should == 1
|
66
91
|
end
|
67
|
-
|
92
|
+
|
68
93
|
it "skips #replace_stylesheets! if there's only one stylesheet being included in" do
|
69
94
|
Rack::Bundle::CSSBundle.should_not_receive :new
|
70
95
|
@simple.call @env
|
71
96
|
end
|
72
|
-
|
97
|
+
|
73
98
|
it "replaces references to external stylesheets of the same media type to their respective bundle" do
|
74
99
|
@bundle.call @env
|
75
100
|
styles = @bundle.document.css(Rack::Bundle::SELECTORS.css).group_by { |node| node.attribute('media').value rescue nil }
|
76
101
|
styles.each_key do |media|
|
77
102
|
styles[media].count.should == 1
|
78
103
|
end
|
79
|
-
end
|
104
|
+
end
|
80
105
|
end
|
81
106
|
|
82
107
|
context 'private methods' do
|
metadata
CHANGED
@@ -1,7 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rack-bundle
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 21
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 2
|
9
|
+
- 1
|
10
|
+
version: 0.2.1
|
5
11
|
platform: ruby
|
6
12
|
authors:
|
7
13
|
- Julio Cesar Ody
|
@@ -9,49 +15,73 @@ autorequire:
|
|
9
15
|
bindir: bin
|
10
16
|
cert_chain: []
|
11
17
|
|
12
|
-
date: 2010-
|
18
|
+
date: 2010-07-12 00:00:00 +10:00
|
13
19
|
default_executable:
|
14
20
|
dependencies:
|
15
21
|
- !ruby/object:Gem::Dependency
|
16
22
|
name: rack
|
17
|
-
|
18
|
-
|
19
|
-
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
20
26
|
requirements:
|
21
27
|
- - ">="
|
22
28
|
- !ruby/object:Gem::Version
|
29
|
+
hash: 23
|
30
|
+
segments:
|
31
|
+
- 1
|
32
|
+
- 0
|
33
|
+
- 0
|
23
34
|
version: 1.0.0
|
24
|
-
|
35
|
+
type: :runtime
|
36
|
+
version_requirements: *id001
|
25
37
|
- !ruby/object:Gem::Dependency
|
26
38
|
name: nokogiri
|
27
|
-
|
28
|
-
|
29
|
-
|
39
|
+
prerelease: false
|
40
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
30
42
|
requirements:
|
31
43
|
- - ">="
|
32
44
|
- !ruby/object:Gem::Version
|
45
|
+
hash: 3
|
46
|
+
segments:
|
47
|
+
- 1
|
48
|
+
- 4
|
49
|
+
- 2
|
33
50
|
version: 1.4.2
|
34
|
-
|
51
|
+
type: :runtime
|
52
|
+
version_requirements: *id002
|
35
53
|
- !ruby/object:Gem::Dependency
|
36
54
|
name: rspec
|
37
|
-
|
38
|
-
|
39
|
-
|
55
|
+
prerelease: false
|
56
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
40
58
|
requirements:
|
41
59
|
- - "="
|
42
60
|
- !ruby/object:Gem::Version
|
61
|
+
hash: 27
|
62
|
+
segments:
|
63
|
+
- 1
|
64
|
+
- 3
|
65
|
+
- 0
|
43
66
|
version: 1.3.0
|
44
|
-
|
67
|
+
type: :development
|
68
|
+
version_requirements: *id003
|
45
69
|
- !ruby/object:Gem::Dependency
|
46
70
|
name: rake
|
47
|
-
|
48
|
-
|
49
|
-
|
71
|
+
prerelease: false
|
72
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
50
74
|
requirements:
|
51
75
|
- - "="
|
52
76
|
- !ruby/object:Gem::Version
|
77
|
+
hash: 49
|
78
|
+
segments:
|
79
|
+
- 0
|
80
|
+
- 8
|
81
|
+
- 7
|
53
82
|
version: 0.8.7
|
54
|
-
|
83
|
+
type: :development
|
84
|
+
version_requirements: *id004
|
55
85
|
description: Javascript and CSS bundling at the Rack level
|
56
86
|
email: julio.ody@gmail.com
|
57
87
|
executables: []
|
@@ -100,21 +130,27 @@ rdoc_options:
|
|
100
130
|
require_paths:
|
101
131
|
- lib
|
102
132
|
required_ruby_version: !ruby/object:Gem::Requirement
|
133
|
+
none: false
|
103
134
|
requirements:
|
104
135
|
- - ">="
|
105
136
|
- !ruby/object:Gem::Version
|
137
|
+
hash: 3
|
138
|
+
segments:
|
139
|
+
- 0
|
106
140
|
version: "0"
|
107
|
-
version:
|
108
141
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
142
|
+
none: false
|
109
143
|
requirements:
|
110
144
|
- - ">="
|
111
145
|
- !ruby/object:Gem::Version
|
146
|
+
hash: 3
|
147
|
+
segments:
|
148
|
+
- 0
|
112
149
|
version: "0"
|
113
|
-
version:
|
114
150
|
requirements: []
|
115
151
|
|
116
152
|
rubyforge_project:
|
117
|
-
rubygems_version: 1.3.
|
153
|
+
rubygems_version: 1.3.7
|
118
154
|
signing_key:
|
119
155
|
specification_version: 3
|
120
156
|
summary: Javascript and CSS bundling at the Rack level
|