rack-livereload 0.3.3 → 0.3.4

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/Guardfile CHANGED
@@ -1,7 +1,7 @@
1
- # A sample Guardfile
2
- # More info at https://github.com/guard/guard#readme
1
+ # A sample Guardfile
2
+ # More info at https://github.com/guard/guard#readme
3
3
 
4
- guard 'rspec', :version => 2 do
4
+ guard 'rspec', :version => 2, :cli => '-c' do
5
5
  watch(%r{^spec/.+_spec\.rb$})
6
6
  watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
7
7
  watch('spec/spec_helper.rb') { "spec" }
@@ -10,3 +10,8 @@ end
10
10
  guard 'livereload' do
11
11
  watch('index.html')
12
12
  end
13
+
14
+ guard 'cucumber' do
15
+ watch(%r{^features/.+\.feature$})
16
+ watch(%r{^features/support/.+$}) { 'features' }
17
+ end
data/Rakefile CHANGED
@@ -24,5 +24,9 @@ require 'rspec/core/rake_task'
24
24
 
25
25
  RSpec::Core::RakeTask.new(:spec)
26
26
 
27
- task :default => :spec
27
+ require 'cucumber/rake/task'
28
+
29
+ Cucumber::Rake::Task.new(:cucumber)
30
+
31
+ task :default => [ :spec, :cucumber ]
28
32
 
@@ -0,0 +1,11 @@
1
+ Feature: Skip Certain Browsers
2
+ Scenario Outline:
3
+ Given I have a Rack app with Rack::LiveReload
4
+ When I make a request to "/" with the following headers:
5
+ | HTTP_USER_AGENT | <user agent> |
6
+ Then I should not have any Rack::LiveReload code
7
+
8
+ Scenarios: Browsers to check for
9
+ | user agent |
10
+ | MSIE |
11
+
@@ -0,0 +1,7 @@
1
+ Given /^I have a Rack app with Rack::LiveReload$/ do
2
+ @app = Rack::Builder.new do
3
+ use Rack::LiveReload
4
+
5
+ run lambda { |env| [ 200, { 'Content-Type' => 'text/html' }, [ "<html><head></head><body></body></html>" ] ] }
6
+ end
7
+ end
@@ -0,0 +1,4 @@
1
+ Then /^I should not have any Rack::LiveReload code$/ do
2
+ @response.body.should_not include("rack/livereload.js")
3
+ end
4
+
@@ -0,0 +1,6 @@
1
+ When /^I make a request to "([^"]*)" with the following headers:$/ do |uri, table|
2
+ @request = Rack::MockRequest.new(@app)
3
+
4
+ @response = @request.get(uri, table.rows_hash)
5
+ end
6
+
@@ -0,0 +1,3 @@
1
+ require 'rack'
2
+ require 'rack-livereload'
3
+
data/index.html CHANGED
@@ -1,2 +1,2 @@
1
1
  <html>
2
- <head><title>Hi</title></head><body>Lats</body></html>
2
+ <head><title>Hi</title></head><body>Rats</body></html>
@@ -1,6 +1,6 @@
1
1
  require "rack/livereload"
2
2
 
3
3
  class Rack::LiveReload
4
- VERSION = '0.3.3'
4
+ VERSION = '0.3.4'
5
5
  end
6
6
 
@@ -5,11 +5,12 @@ module Rack
5
5
  LIVERELOAD_JS_PATH = '/__rack/livereload.js'
6
6
  LIVERELOAD_LOCAL_URI = 'http://localhost:35729/livereload.js'
7
7
 
8
+ BAD_USER_AGENTS = [ %r{MSIE} ]
9
+
8
10
  attr_reader :app
9
11
 
10
12
  def initialize(app, options = {})
11
- @app = app
12
- @options = options
13
+ @app, @options = app, options
13
14
  end
14
15
 
15
16
  def use_vendored?
@@ -48,9 +49,8 @@ module Rack
48
49
  else
49
50
  status, headers, body = @app.call(env)
50
51
 
51
- if !@options[:ignore] || !@options[:ignore].any? { |filter| env['PATH_INFO'][filter] }
52
- case headers['Content-Type']
53
- when %r{text/html}
52
+ if !ignored?(env['PATH_INFO']) && !bad_browser?(env['HTTP_USER_AGENT'])
53
+ if headers['Content-Type'] && headers['Content-Type'][%r{text/html}]
54
54
  content_length = 0
55
55
 
56
56
  body.each do |line|
@@ -74,7 +74,7 @@ module Rack
74
74
  headers["X-Rack-LiveReload"] = '1'
75
75
  end
76
76
 
77
- content_length += line.length
77
+ content_length += line.bytesize
78
78
  end
79
79
 
80
80
  headers['Content-Length'] = content_length.to_s
@@ -85,6 +85,14 @@ module Rack
85
85
  end
86
86
  end
87
87
 
88
+ def ignored?(path_info)
89
+ @options[:ignore] and @options[:ignore].any? { |filter| path_info[filter] }
90
+ end
91
+
92
+ def bad_browser?(user_agent)
93
+ BAD_USER_AGENTS.any? { |pattern| (user_agent || '')[pattern] }
94
+ end
95
+
88
96
  private
89
97
  def deliver_file(file)
90
98
  type = case ::File.extname(file)
@@ -20,6 +20,7 @@ Gem::Specification.new do |s|
20
20
 
21
21
  # specify any dependencies here; for example:
22
22
  s.add_development_dependency "rspec"
23
+ s.add_development_dependency "cucumber"
23
24
  s.add_development_dependency "httparty"
24
25
  s.add_development_dependency "sinatra"
25
26
  s.add_development_dependency "shotgun"
@@ -28,6 +29,7 @@ Gem::Specification.new do |s|
28
29
  s.add_development_dependency "mocha"
29
30
  s.add_development_dependency "guard"
30
31
  s.add_development_dependency "guard-rspec"
32
+ s.add_development_dependency "guard-cucumber"
31
33
  s.add_development_dependency "guard-livereload"
32
34
  s.add_development_dependency "webmock"
33
35
 
@@ -53,6 +53,18 @@ describe Rack::LiveReload do
53
53
  end
54
54
  end
55
55
 
56
+ context 'unknown Content-Type' do
57
+ let(:ret) { [ 200, {}, [ 'hey ho' ] ] }
58
+
59
+ before do
60
+ app.stubs(:call).with(env).returns(ret)
61
+ end
62
+
63
+ it 'should not break' do
64
+ middleware.call(env).should_not raise_error(NoMethodError, /You have a nil object/)
65
+ end
66
+ end
67
+
56
68
  context 'text/html' do
57
69
  before do
58
70
  app.stubs(:call).with(env).returns([ 200, { 'Content-Type' => 'text/html', 'Content-Length' => 0 }, [ '<head></head>' ] ])
@@ -165,5 +177,25 @@ describe Rack::LiveReload do
165
177
  middleware.call(env).should be_true
166
178
  end
167
179
  end
180
+
181
+ describe '#ignored?' do
182
+ let(:path_info) { 'path info' }
183
+
184
+ context 'no ignore set' do
185
+ it { should_not be_ignored(path_info) }
186
+ end
187
+
188
+ context 'ignore set' do
189
+ let(:options) { { :ignore => [ %r{#{path_info}} ] } }
190
+
191
+ it { should be_ignored(path_info) }
192
+ end
193
+ end
194
+
195
+ describe '#bad_browser?' do
196
+ let(:user_agent) { described_class::BAD_USER_AGENTS.first.source }
197
+
198
+ it { should be_bad_browser(user_agent) }
199
+ end
168
200
  end
169
201
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-livereload
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.3.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-12-02 00:00:00.000000000Z
12
+ date: 2012-01-24 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &2165312940 !ruby/object:Gem::Requirement
16
+ requirement: &2159654600 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,21 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *2165312940
24
+ version_requirements: *2159654600
25
+ - !ruby/object:Gem::Dependency
26
+ name: cucumber
27
+ requirement: &2159654080 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *2159654080
25
36
  - !ruby/object:Gem::Dependency
26
37
  name: httparty
27
- requirement: &2165312500 !ruby/object:Gem::Requirement
38
+ requirement: &2159653540 !ruby/object:Gem::Requirement
28
39
  none: false
29
40
  requirements:
30
41
  - - ! '>='
@@ -32,10 +43,10 @@ dependencies:
32
43
  version: '0'
33
44
  type: :development
34
45
  prerelease: false
35
- version_requirements: *2165312500
46
+ version_requirements: *2159653540
36
47
  - !ruby/object:Gem::Dependency
37
48
  name: sinatra
38
- requirement: &2165312080 !ruby/object:Gem::Requirement
49
+ requirement: &2159652960 !ruby/object:Gem::Requirement
39
50
  none: false
40
51
  requirements:
41
52
  - - ! '>='
@@ -43,10 +54,10 @@ dependencies:
43
54
  version: '0'
44
55
  type: :development
45
56
  prerelease: false
46
- version_requirements: *2165312080
57
+ version_requirements: *2159652960
47
58
  - !ruby/object:Gem::Dependency
48
59
  name: shotgun
49
- requirement: &2165311640 !ruby/object:Gem::Requirement
60
+ requirement: &2159651760 !ruby/object:Gem::Requirement
50
61
  none: false
51
62
  requirements:
52
63
  - - ! '>='
@@ -54,10 +65,10 @@ dependencies:
54
65
  version: '0'
55
66
  type: :development
56
67
  prerelease: false
57
- version_requirements: *2165311640
68
+ version_requirements: *2159651760
58
69
  - !ruby/object:Gem::Dependency
59
70
  name: thin
60
- requirement: &2165311120 !ruby/object:Gem::Requirement
71
+ requirement: &2159650780 !ruby/object:Gem::Requirement
61
72
  none: false
62
73
  requirements:
63
74
  - - ! '>='
@@ -65,10 +76,10 @@ dependencies:
65
76
  version: '0'
66
77
  type: :development
67
78
  prerelease: false
68
- version_requirements: *2165311120
79
+ version_requirements: *2159650780
69
80
  - !ruby/object:Gem::Dependency
70
81
  name: rake
71
- requirement: &2165310680 !ruby/object:Gem::Requirement
82
+ requirement: &2159650360 !ruby/object:Gem::Requirement
72
83
  none: false
73
84
  requirements:
74
85
  - - ! '>='
@@ -76,10 +87,10 @@ dependencies:
76
87
  version: '0'
77
88
  type: :development
78
89
  prerelease: false
79
- version_requirements: *2165310680
90
+ version_requirements: *2159650360
80
91
  - !ruby/object:Gem::Dependency
81
92
  name: mocha
82
- requirement: &2165310180 !ruby/object:Gem::Requirement
93
+ requirement: &2159649820 !ruby/object:Gem::Requirement
83
94
  none: false
84
95
  requirements:
85
96
  - - ! '>='
@@ -87,10 +98,10 @@ dependencies:
87
98
  version: '0'
88
99
  type: :development
89
100
  prerelease: false
90
- version_requirements: *2165310180
101
+ version_requirements: *2159649820
91
102
  - !ruby/object:Gem::Dependency
92
103
  name: guard
93
- requirement: &2165309580 !ruby/object:Gem::Requirement
104
+ requirement: &2159649400 !ruby/object:Gem::Requirement
94
105
  none: false
95
106
  requirements:
96
107
  - - ! '>='
@@ -98,10 +109,21 @@ dependencies:
98
109
  version: '0'
99
110
  type: :development
100
111
  prerelease: false
101
- version_requirements: *2165309580
112
+ version_requirements: *2159649400
102
113
  - !ruby/object:Gem::Dependency
103
114
  name: guard-rspec
104
- requirement: &2165309020 !ruby/object:Gem::Requirement
115
+ requirement: &2159648980 !ruby/object:Gem::Requirement
116
+ none: false
117
+ requirements:
118
+ - - ! '>='
119
+ - !ruby/object:Gem::Version
120
+ version: '0'
121
+ type: :development
122
+ prerelease: false
123
+ version_requirements: *2159648980
124
+ - !ruby/object:Gem::Dependency
125
+ name: guard-cucumber
126
+ requirement: &2159648540 !ruby/object:Gem::Requirement
105
127
  none: false
106
128
  requirements:
107
129
  - - ! '>='
@@ -109,10 +131,10 @@ dependencies:
109
131
  version: '0'
110
132
  type: :development
111
133
  prerelease: false
112
- version_requirements: *2165309020
134
+ version_requirements: *2159648540
113
135
  - !ruby/object:Gem::Dependency
114
136
  name: guard-livereload
115
- requirement: &2165308460 !ruby/object:Gem::Requirement
137
+ requirement: &2159647940 !ruby/object:Gem::Requirement
116
138
  none: false
117
139
  requirements:
118
140
  - - ! '>='
@@ -120,10 +142,10 @@ dependencies:
120
142
  version: '0'
121
143
  type: :development
122
144
  prerelease: false
123
- version_requirements: *2165308460
145
+ version_requirements: *2159647940
124
146
  - !ruby/object:Gem::Dependency
125
147
  name: webmock
126
- requirement: &2165307920 !ruby/object:Gem::Requirement
148
+ requirement: &2159647400 !ruby/object:Gem::Requirement
127
149
  none: false
128
150
  requirements:
129
151
  - - ! '>='
@@ -131,10 +153,10 @@ dependencies:
131
153
  version: '0'
132
154
  type: :development
133
155
  prerelease: false
134
- version_requirements: *2165307920
156
+ version_requirements: *2159647400
135
157
  - !ruby/object:Gem::Dependency
136
158
  name: rack
137
- requirement: &2165307300 !ruby/object:Gem::Requirement
159
+ requirement: &2159646740 !ruby/object:Gem::Requirement
138
160
  none: false
139
161
  requirements:
140
162
  - - ! '>='
@@ -142,7 +164,7 @@ dependencies:
142
164
  version: '0'
143
165
  type: :runtime
144
166
  prerelease: false
145
- version_requirements: *2165307300
167
+ version_requirements: *2159646740
146
168
  description: Insert LiveReload into your app easily as Rack middleware
147
169
  email:
148
170
  - john@coswellproductions.com
@@ -156,6 +178,11 @@ files:
156
178
  - README.md
157
179
  - Rakefile
158
180
  - config.ru
181
+ - features/skip_certain_browsers.feature
182
+ - features/step_definitions/given/i_have_a_rack_app_with_live_reload.rb
183
+ - features/step_definitions/then/i_should_not_have_livereload_code.rb
184
+ - features/step_definitions/when/i_make_a_request_with_headers.rb
185
+ - features/support/env.rb
159
186
  - index.html
160
187
  - js/WebSocketMain.swf
161
188
  - js/livereload.js
@@ -181,7 +208,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
181
208
  version: '0'
182
209
  segments:
183
210
  - 0
184
- hash: 1628985309489539439
211
+ hash: 1893206504661372736
185
212
  required_rubygems_version: !ruby/object:Gem::Requirement
186
213
  none: false
187
214
  requirements:
@@ -190,13 +217,18 @@ required_rubygems_version: !ruby/object:Gem::Requirement
190
217
  version: '0'
191
218
  segments:
192
219
  - 0
193
- hash: 1628985309489539439
220
+ hash: 1893206504661372736
194
221
  requirements: []
195
222
  rubyforge_project: rack-livereload
196
- rubygems_version: 1.8.11
223
+ rubygems_version: 1.8.15
197
224
  signing_key:
198
225
  specification_version: 3
199
226
  summary: Insert LiveReload into your app easily as Rack middleware
200
227
  test_files:
228
+ - features/skip_certain_browsers.feature
229
+ - features/step_definitions/given/i_have_a_rack_app_with_live_reload.rb
230
+ - features/step_definitions/then/i_should_not_have_livereload_code.rb
231
+ - features/step_definitions/when/i_make_a_request_with_headers.rb
232
+ - features/support/env.rb
201
233
  - spec/rack/livereload_spec.rb
202
234
  - spec/spec_helper.rb