rack-bundle 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
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