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 CHANGED
@@ -1 +1 @@
1
- 0.2.0
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
- [status, headers, [@document.to_html]]
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
- @document = Nokogiri::HTML(@response.join)
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.0"
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-06-18}
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.5}
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::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
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"])
@@ -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
- version: 0.2.0
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-06-18 00:00:00 +10:00
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
- type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
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
- version:
35
+ type: :runtime
36
+ version_requirements: *id001
25
37
  - !ruby/object:Gem::Dependency
26
38
  name: nokogiri
27
- type: :runtime
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
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
- version:
51
+ type: :runtime
52
+ version_requirements: *id002
35
53
  - !ruby/object:Gem::Dependency
36
54
  name: rspec
37
- type: :development
38
- version_requirement:
39
- version_requirements: !ruby/object:Gem::Requirement
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
- version:
67
+ type: :development
68
+ version_requirements: *id003
45
69
  - !ruby/object:Gem::Dependency
46
70
  name: rake
47
- type: :development
48
- version_requirement:
49
- version_requirements: !ruby/object:Gem::Requirement
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
- version:
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.5
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