a little cleanup, add cucumber, add support for ignoring particular browsers
This commit is contained in:
parent
67d07df724
commit
e223e1ddbf
11
Guardfile
11
Guardfile
@ -1,7 +1,7 @@
|
||||
# A sample Guardfile
|
||||
# More info at https://github.com/guard/guard#readme
|
||||
# A sample Guardfile
|
||||
# More info at https://github.com/guard/guard#readme
|
||||
|
||||
guard 'rspec', :version => 2 do
|
||||
guard 'rspec', :version => 2, :cli => '-c' do
|
||||
watch(%r{^spec/.+_spec\.rb$})
|
||||
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
|
||||
watch('spec/spec_helper.rb') { "spec" }
|
||||
@ -10,3 +10,8 @@ end
|
||||
guard 'livereload' do
|
||||
watch('index.html')
|
||||
end
|
||||
|
||||
guard 'cucumber' do
|
||||
watch(%r{^features/.+\.feature$})
|
||||
watch(%r{^features/support/.+$}) { 'features' }
|
||||
end
|
||||
|
6
Rakefile
6
Rakefile
@ -24,5 +24,9 @@ require 'rspec/core/rake_task'
|
||||
|
||||
RSpec::Core::RakeTask.new(:spec)
|
||||
|
||||
task :default => :spec
|
||||
require 'cucumber/rake/task'
|
||||
|
||||
Cucumber::Rake::Task.new(:cucumber)
|
||||
|
||||
task :default => [ :spec, :cucumber ]
|
||||
|
||||
|
11
features/skip_certain_browsers.feature
Normal file
11
features/skip_certain_browsers.feature
Normal file
@ -0,0 +1,11 @@
|
||||
Feature: Skip Certain Browsers
|
||||
Scenario Outline:
|
||||
Given I have a Rack app with Rack::LiveReload
|
||||
When I make a request to "/" with the following headers:
|
||||
| HTTP_USER_AGENT | <user agent> |
|
||||
Then I should not have any Rack::LiveReload code
|
||||
|
||||
Scenarios: Browsers to check for
|
||||
| user agent |
|
||||
| MSIE |
|
||||
|
@ -0,0 +1,7 @@
|
||||
Given /^I have a Rack app with Rack::LiveReload$/ do
|
||||
@app = Rack::Builder.new do
|
||||
use Rack::LiveReload
|
||||
|
||||
run lambda { |env| [ 200, { 'Content-Type' => 'text/html' }, [ "<html><head></head><body></body></html>" ] ] }
|
||||
end
|
||||
end
|
@ -0,0 +1,4 @@
|
||||
Then /^I should not have any Rack::LiveReload code$/ do
|
||||
@response.body.should_not include("rack/livereload.js")
|
||||
end
|
||||
|
@ -0,0 +1,6 @@
|
||||
When /^I make a request to "([^"]*)" with the following headers:$/ do |uri, table|
|
||||
@request = Rack::MockRequest.new(@app)
|
||||
|
||||
@response = @request.get(uri, table.rows_hash)
|
||||
end
|
||||
|
3
features/support/env.rb
Normal file
3
features/support/env.rb
Normal file
@ -0,0 +1,3 @@
|
||||
require 'rack'
|
||||
require 'rack-livereload'
|
||||
|
@ -1,2 +1,2 @@
|
||||
<html>
|
||||
<head><title>Hi</title></head><body>Lats</body></html>
|
||||
<head><title>Hi</title></head><body>Rats</body></html>
|
||||
|
@ -5,11 +5,12 @@ module Rack
|
||||
LIVERELOAD_JS_PATH = '/__rack/livereload.js'
|
||||
LIVERELOAD_LOCAL_URI = 'http://localhost:35729/livereload.js'
|
||||
|
||||
BAD_USER_AGENTS = [ %r{MSIE} ]
|
||||
|
||||
attr_reader :app
|
||||
|
||||
def initialize(app, options = {})
|
||||
@app = app
|
||||
@options = options
|
||||
@app, @options = app, options
|
||||
end
|
||||
|
||||
def use_vendored?
|
||||
@ -48,9 +49,8 @@ module Rack
|
||||
else
|
||||
status, headers, body = @app.call(env)
|
||||
|
||||
if !@options[:ignore] || !@options[:ignore].any? { |filter| env['PATH_INFO'][filter] }
|
||||
case headers['Content-Type']
|
||||
when %r{text/html}
|
||||
if !ignored?(env['PATH_INFO']) && !bad_browser?(env['HTTP_USER_AGENT'])
|
||||
if headers['Content-Type'][%r{text/html}]
|
||||
content_length = 0
|
||||
|
||||
body.each do |line|
|
||||
@ -85,6 +85,14 @@ module Rack
|
||||
end
|
||||
end
|
||||
|
||||
def ignored?(path_info)
|
||||
@options[:ignore] and @options[:ignore].any? { |filter| path_info[filter] }
|
||||
end
|
||||
|
||||
def bad_browser?(user_agent)
|
||||
BAD_USER_AGENTS.any? { |pattern| (user_agent || '')[pattern] }
|
||||
end
|
||||
|
||||
private
|
||||
def deliver_file(file)
|
||||
type = case ::File.extname(file)
|
||||
|
@ -20,6 +20,7 @@ Gem::Specification.new do |s|
|
||||
|
||||
# specify any dependencies here; for example:
|
||||
s.add_development_dependency "rspec"
|
||||
s.add_development_dependency "cucumber"
|
||||
s.add_development_dependency "httparty"
|
||||
s.add_development_dependency "sinatra"
|
||||
s.add_development_dependency "shotgun"
|
||||
@ -28,6 +29,7 @@ Gem::Specification.new do |s|
|
||||
s.add_development_dependency "mocha"
|
||||
s.add_development_dependency "guard"
|
||||
s.add_development_dependency "guard-rspec"
|
||||
s.add_development_dependency "guard-cucumber"
|
||||
s.add_development_dependency "guard-livereload"
|
||||
s.add_development_dependency "webmock"
|
||||
|
||||
|
@ -165,5 +165,25 @@ describe Rack::LiveReload do
|
||||
middleware.call(env).should be_true
|
||||
end
|
||||
end
|
||||
|
||||
describe '#ignored?' do
|
||||
let(:path_info) { 'path info' }
|
||||
|
||||
context 'no ignore set' do
|
||||
it { should_not be_ignored(path_info) }
|
||||
end
|
||||
|
||||
context 'ignore set' do
|
||||
let(:options) { { :ignore => [ %r{#{path_info}} ] } }
|
||||
|
||||
it { should be_ignored(path_info) }
|
||||
end
|
||||
end
|
||||
|
||||
describe '#bad_browser?' do
|
||||
let(:user_agent) { described_class::BAD_USER_AGENTS.first.source }
|
||||
|
||||
it { should be_bad_browser(user_agent) }
|
||||
end
|
||||
end
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user