diff --git a/.gitignore b/.gitignore index 3904386..c5b08c6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,7 @@ *.gem .bundle Gemfile.lock +gemfiles/*.lock pkg/* *.orig +tmp/ diff --git a/.travis.yml b/.travis.yml index bc48b1c..9de1f57 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,10 +2,18 @@ rvm: - 1.8.7 - 1.9.2 - 1.9.3 + - 2.0.0 branches: only: - master gemfile: - gemfiles/rails30.gemfile - gemfiles/rails31.gemfile - - gemfiles/rails32.gemfile \ No newline at end of file + - gemfiles/rails32.gemfile + - gemfiles/rails40.gemfile +matrix: + exclude: + - rvm: 1.8.7 + gemfile: gemfiles/rails4.gemfile + - rvm: 1.9.2 + gemfile: gemfiles/rails4.gemfile diff --git a/Appraisals b/Appraisals index 1885fb9..e80ed07 100644 --- a/Appraisals +++ b/Appraisals @@ -8,4 +8,8 @@ end appraise 'rails32' do gem 'rails', '~> 3.2.0' -end \ No newline at end of file +end + +appraise 'rails40' do + gem 'rails', '~> 4.0.0' +end diff --git a/gemfiles/rails30.gemfile.lock b/gemfiles/rails30.gemfile.lock deleted file mode 100644 index 9eec6a2..0000000 --- a/gemfiles/rails30.gemfile.lock +++ /dev/null @@ -1,157 +0,0 @@ -PATH - remote: /Volumes/work/current/open_source/rack-livereload - specs: - rack-livereload (0.3.6) - rack - -GEM - remote: http://rubygems.org/ - specs: - abstract (1.0.0) - actionmailer (3.0.12) - actionpack (= 3.0.12) - mail (~> 2.2.19) - actionpack (3.0.12) - activemodel (= 3.0.12) - activesupport (= 3.0.12) - builder (~> 2.1.2) - erubis (~> 2.6.6) - i18n (~> 0.5.0) - rack (~> 1.2.5) - rack-mount (~> 0.6.14) - rack-test (~> 0.5.7) - tzinfo (~> 0.3.23) - activemodel (3.0.12) - activesupport (= 3.0.12) - builder (~> 2.1.2) - i18n (~> 0.5.0) - activerecord (3.0.12) - activemodel (= 3.0.12) - activesupport (= 3.0.12) - arel (~> 2.0.10) - tzinfo (~> 0.3.23) - activeresource (3.0.12) - activemodel (= 3.0.12) - activesupport (= 3.0.12) - activesupport (3.0.12) - addressable (2.2.8) - appraisal (0.4.1) - bundler - rake - arel (2.0.10) - builder (2.1.2) - crack (0.3.1) - cucumber (1.2.0) - builder (>= 2.1.2) - diff-lcs (>= 1.1.3) - gherkin (~> 2.10.0) - json (>= 1.4.6) - daemons (1.1.8) - diff-lcs (1.1.3) - em-websocket (0.3.6) - addressable (>= 2.1.1) - eventmachine (>= 0.12.9) - erubis (2.6.6) - abstract (>= 1.0.0) - eventmachine (0.12.10) - ffi (1.0.11) - gherkin (2.10.0) - json (>= 1.4.6) - guard (1.0.3) - ffi (>= 0.5.0) - thor (>= 0.14.6) - guard-cucumber (0.8.0) - cucumber (>= 1.2.0) - guard (>= 0.8.3) - guard-livereload (0.4.2) - em-websocket (>= 0.2.0) - guard (>= 0.10.0) - multi_json (~> 1.0) - guard-rspec (0.7.3) - guard (>= 0.10.0) - httparty (0.8.3) - multi_json (~> 1.0) - multi_xml - i18n (0.5.0) - json (1.7.3) - mail (2.2.19) - activesupport (>= 2.3.6) - i18n (>= 0.4.0) - mime-types (~> 1.16) - treetop (~> 1.4.8) - metaclass (0.0.1) - mime-types (1.18) - mocha (0.11.4) - metaclass (~> 0.0.1) - multi_json (1.3.6) - multi_xml (0.5.1) - polyglot (0.3.3) - rack (1.2.5) - rack-mount (0.6.14) - rack (>= 1.0.0) - rack-test (0.5.7) - rack (>= 1.0) - rails (3.0.12) - actionmailer (= 3.0.12) - actionpack (= 3.0.12) - activerecord (= 3.0.12) - activeresource (= 3.0.12) - activesupport (= 3.0.12) - bundler (~> 1.0) - railties (= 3.0.12) - railties (3.0.12) - actionpack (= 3.0.12) - activesupport (= 3.0.12) - rake (>= 0.8.7) - rdoc (~> 3.4) - thor (~> 0.14.4) - rake (0.9.2.2) - rdoc (3.12) - json (~> 1.4) - rspec (2.10.0) - rspec-core (~> 2.10.0) - rspec-expectations (~> 2.10.0) - rspec-mocks (~> 2.10.0) - rspec-core (2.10.1) - rspec-expectations (2.10.0) - diff-lcs (~> 1.1.3) - rspec-mocks (2.10.1) - shotgun (0.9) - rack (>= 1.0) - sinatra (1.2.8) - rack (~> 1.1) - tilt (>= 1.2.2, < 2.0) - thin (1.3.1) - daemons (>= 1.0.9) - eventmachine (>= 0.12.6) - rack (>= 1.0.0) - thor (0.14.6) - tilt (1.3.3) - treetop (1.4.10) - polyglot - polyglot (>= 0.3.1) - tzinfo (0.3.33) - webmock (1.8.7) - addressable (>= 2.2.7) - crack (>= 0.1.7) - -PLATFORMS - ruby - -DEPENDENCIES - appraisal (~> 0.4) - cucumber - guard - guard-cucumber - guard-livereload - guard-rspec - httparty - mocha - rack-livereload! - rails (~> 3.0.0) - rake - rspec - shotgun - sinatra - thin - webmock diff --git a/gemfiles/rails31.gemfile.lock b/gemfiles/rails31.gemfile.lock deleted file mode 100644 index afe9122..0000000 --- a/gemfiles/rails31.gemfile.lock +++ /dev/null @@ -1,169 +0,0 @@ -PATH - remote: /Volumes/work/current/open_source/rack-livereload - specs: - rack-livereload (0.3.6) - rack - -GEM - remote: http://rubygems.org/ - specs: - actionmailer (3.1.4) - actionpack (= 3.1.4) - mail (~> 2.3.0) - actionpack (3.1.4) - activemodel (= 3.1.4) - activesupport (= 3.1.4) - builder (~> 3.0.0) - erubis (~> 2.7.0) - i18n (~> 0.6) - rack (~> 1.3.6) - rack-cache (~> 1.1) - rack-mount (~> 0.8.2) - rack-test (~> 0.6.1) - sprockets (~> 2.0.3) - activemodel (3.1.4) - activesupport (= 3.1.4) - builder (~> 3.0.0) - i18n (~> 0.6) - activerecord (3.1.4) - activemodel (= 3.1.4) - activesupport (= 3.1.4) - arel (~> 2.2.3) - tzinfo (~> 0.3.29) - activeresource (3.1.4) - activemodel (= 3.1.4) - activesupport (= 3.1.4) - activesupport (3.1.4) - multi_json (~> 1.0) - addressable (2.2.8) - appraisal (0.4.1) - bundler - rake - arel (2.2.3) - builder (3.0.0) - crack (0.3.1) - cucumber (1.2.0) - builder (>= 2.1.2) - diff-lcs (>= 1.1.3) - gherkin (~> 2.10.0) - json (>= 1.4.6) - daemons (1.1.8) - diff-lcs (1.1.3) - em-websocket (0.3.6) - addressable (>= 2.1.1) - eventmachine (>= 0.12.9) - erubis (2.7.0) - eventmachine (0.12.10) - ffi (1.0.11) - gherkin (2.10.0) - json (>= 1.4.6) - guard (1.0.3) - ffi (>= 0.5.0) - thor (>= 0.14.6) - guard-cucumber (0.8.0) - cucumber (>= 1.2.0) - guard (>= 0.8.3) - guard-livereload (0.4.2) - em-websocket (>= 0.2.0) - guard (>= 0.10.0) - multi_json (~> 1.0) - guard-rspec (0.7.3) - guard (>= 0.10.0) - hike (1.2.1) - httparty (0.8.3) - multi_json (~> 1.0) - multi_xml - i18n (0.6.0) - json (1.7.3) - mail (2.3.3) - i18n (>= 0.4.0) - mime-types (~> 1.16) - treetop (~> 1.4.8) - metaclass (0.0.1) - mime-types (1.18) - mocha (0.11.4) - metaclass (~> 0.0.1) - multi_json (1.3.6) - multi_xml (0.5.1) - polyglot (0.3.3) - rack (1.3.6) - rack-cache (1.2) - rack (>= 0.4) - rack-mount (0.8.3) - rack (>= 1.0.0) - rack-protection (1.2.0) - rack - rack-ssl (1.3.2) - rack - rack-test (0.6.1) - rack (>= 1.0) - rails (3.1.4) - actionmailer (= 3.1.4) - actionpack (= 3.1.4) - activerecord (= 3.1.4) - activeresource (= 3.1.4) - activesupport (= 3.1.4) - bundler (~> 1.0) - railties (= 3.1.4) - railties (3.1.4) - actionpack (= 3.1.4) - activesupport (= 3.1.4) - rack-ssl (~> 1.3.2) - rake (>= 0.8.7) - rdoc (~> 3.4) - thor (~> 0.14.6) - rake (0.9.2.2) - rdoc (3.12) - json (~> 1.4) - rspec (2.10.0) - rspec-core (~> 2.10.0) - rspec-expectations (~> 2.10.0) - rspec-mocks (~> 2.10.0) - rspec-core (2.10.1) - rspec-expectations (2.10.0) - diff-lcs (~> 1.1.3) - rspec-mocks (2.10.1) - shotgun (0.9) - rack (>= 1.0) - sinatra (1.3.2) - rack (~> 1.3, >= 1.3.6) - rack-protection (~> 1.2) - tilt (~> 1.3, >= 1.3.3) - sprockets (2.0.4) - hike (~> 1.2) - rack (~> 1.0) - tilt (~> 1.1, != 1.3.0) - thin (1.3.1) - daemons (>= 1.0.9) - eventmachine (>= 0.12.6) - rack (>= 1.0.0) - thor (0.14.6) - tilt (1.3.3) - treetop (1.4.10) - polyglot - polyglot (>= 0.3.1) - tzinfo (0.3.33) - webmock (1.8.7) - addressable (>= 2.2.7) - crack (>= 0.1.7) - -PLATFORMS - ruby - -DEPENDENCIES - appraisal (~> 0.4) - cucumber - guard - guard-cucumber - guard-livereload - guard-rspec - httparty - mocha - rack-livereload! - rails (~> 3.1.0) - rake - rspec - shotgun - sinatra - thin - webmock diff --git a/gemfiles/rails32.gemfile.lock b/gemfiles/rails32.gemfile.lock deleted file mode 100644 index 0ed680f..0000000 --- a/gemfiles/rails32.gemfile.lock +++ /dev/null @@ -1,167 +0,0 @@ -PATH - remote: /Volumes/work/current/open_source/rack-livereload - specs: - rack-livereload (0.3.6) - rack - -GEM - remote: http://rubygems.org/ - specs: - actionmailer (3.2.3) - actionpack (= 3.2.3) - mail (~> 2.4.4) - actionpack (3.2.3) - activemodel (= 3.2.3) - activesupport (= 3.2.3) - builder (~> 3.0.0) - erubis (~> 2.7.0) - journey (~> 1.0.1) - rack (~> 1.4.0) - rack-cache (~> 1.2) - rack-test (~> 0.6.1) - sprockets (~> 2.1.2) - activemodel (3.2.3) - activesupport (= 3.2.3) - builder (~> 3.0.0) - activerecord (3.2.3) - activemodel (= 3.2.3) - activesupport (= 3.2.3) - arel (~> 3.0.2) - tzinfo (~> 0.3.29) - activeresource (3.2.3) - activemodel (= 3.2.3) - activesupport (= 3.2.3) - activesupport (3.2.3) - i18n (~> 0.6) - multi_json (~> 1.0) - addressable (2.2.8) - appraisal (0.4.1) - bundler - rake - arel (3.0.2) - builder (3.0.0) - crack (0.3.1) - cucumber (1.2.0) - builder (>= 2.1.2) - diff-lcs (>= 1.1.3) - gherkin (~> 2.10.0) - json (>= 1.4.6) - daemons (1.1.8) - diff-lcs (1.1.3) - em-websocket (0.3.6) - addressable (>= 2.1.1) - eventmachine (>= 0.12.9) - erubis (2.7.0) - eventmachine (0.12.10) - ffi (1.0.11) - gherkin (2.10.0) - json (>= 1.4.6) - guard (1.0.3) - ffi (>= 0.5.0) - thor (>= 0.14.6) - guard-cucumber (0.8.0) - cucumber (>= 1.2.0) - guard (>= 0.8.3) - guard-livereload (0.4.2) - em-websocket (>= 0.2.0) - guard (>= 0.10.0) - multi_json (~> 1.0) - guard-rspec (0.7.3) - guard (>= 0.10.0) - hike (1.2.1) - httparty (0.8.3) - multi_json (~> 1.0) - multi_xml - i18n (0.6.0) - journey (1.0.3) - json (1.7.3) - mail (2.4.4) - i18n (>= 0.4.0) - mime-types (~> 1.16) - treetop (~> 1.4.8) - metaclass (0.0.1) - mime-types (1.18) - mocha (0.11.4) - metaclass (~> 0.0.1) - multi_json (1.3.6) - multi_xml (0.5.1) - polyglot (0.3.3) - rack (1.4.1) - rack-cache (1.2) - rack (>= 0.4) - rack-protection (1.2.0) - rack - rack-ssl (1.3.2) - rack - rack-test (0.6.1) - rack (>= 1.0) - rails (3.2.3) - actionmailer (= 3.2.3) - actionpack (= 3.2.3) - activerecord (= 3.2.3) - activeresource (= 3.2.3) - activesupport (= 3.2.3) - bundler (~> 1.0) - railties (= 3.2.3) - railties (3.2.3) - actionpack (= 3.2.3) - activesupport (= 3.2.3) - rack-ssl (~> 1.3.2) - rake (>= 0.8.7) - rdoc (~> 3.4) - thor (~> 0.14.6) - rake (0.9.2.2) - rdoc (3.12) - json (~> 1.4) - rspec (2.10.0) - rspec-core (~> 2.10.0) - rspec-expectations (~> 2.10.0) - rspec-mocks (~> 2.10.0) - rspec-core (2.10.1) - rspec-expectations (2.10.0) - diff-lcs (~> 1.1.3) - rspec-mocks (2.10.1) - shotgun (0.9) - rack (>= 1.0) - sinatra (1.3.2) - rack (~> 1.3, >= 1.3.6) - rack-protection (~> 1.2) - tilt (~> 1.3, >= 1.3.3) - sprockets (2.1.3) - hike (~> 1.2) - rack (~> 1.0) - tilt (~> 1.1, != 1.3.0) - thin (1.3.1) - daemons (>= 1.0.9) - eventmachine (>= 0.12.6) - rack (>= 1.0.0) - thor (0.14.6) - tilt (1.3.3) - treetop (1.4.10) - polyglot - polyglot (>= 0.3.1) - tzinfo (0.3.33) - webmock (1.8.7) - addressable (>= 2.2.7) - crack (>= 0.1.7) - -PLATFORMS - ruby - -DEPENDENCIES - appraisal (~> 0.4) - cucumber - guard - guard-cucumber - guard-livereload - guard-rspec - httparty - mocha - rack-livereload! - rails (~> 3.2.0) - rake - rspec - shotgun - sinatra - thin - webmock diff --git a/gemfiles/rails40.gemfile b/gemfiles/rails40.gemfile new file mode 100644 index 0000000..bb72bc2 --- /dev/null +++ b/gemfiles/rails40.gemfile @@ -0,0 +1,7 @@ +# This file was generated by Appraisal + +source "http://rubygems.org" + +gem "rails", "~> 4.0.0" + +gemspec :path=>"../" \ No newline at end of file diff --git a/lib/rack/livereload/processing_skip_analyzer.rb b/lib/rack/livereload/processing_skip_analyzer.rb index 8c8f3b7..ba6ae63 100644 --- a/lib/rack/livereload/processing_skip_analyzer.rb +++ b/lib/rack/livereload/processing_skip_analyzer.rb @@ -16,7 +16,7 @@ module Rack end def skip_processing? - !html? || chunked? || inline? || ignored? || bad_browser? + !html? || chunked? || inline? || ignored? || bad_browser? || !get? end def chunked? @@ -38,6 +38,10 @@ module Rack def html? @headers['Content-Type'] =~ %r{text/html} end + + def get? + @env['REQUEST_METHOD'] == 'GET' + end end end end diff --git a/rack-livereload.gemspec b/rack-livereload.gemspec index be758d4..0c14dc1 100644 --- a/rack-livereload.gemspec +++ b/rack-livereload.gemspec @@ -32,7 +32,7 @@ Gem::Specification.new do |s| s.add_development_dependency "guard-cucumber" s.add_development_dependency "guard-livereload" s.add_development_dependency "webmock" - s.add_development_dependency "nokogiri" + s.add_development_dependency "nokogiri", ("< 1.6" if RUBY_VERSION < "1.9") # Nokogiri >= 1.6 requires Ruby >= 1.9 s.add_development_dependency 'appraisal', '~> 0.4' s.add_runtime_dependency "rack" end diff --git a/spec/rack/livereload/processing_skip_analyzer_spec.rb b/spec/rack/livereload/processing_skip_analyzer_spec.rb index 87fe661..e1c856e 100644 --- a/spec/rack/livereload/processing_skip_analyzer_spec.rb +++ b/spec/rack/livereload/processing_skip_analyzer_spec.rb @@ -18,45 +18,40 @@ describe Rack::LiveReload::ProcessingSkipAnalyzer do end end - describe '#bad_browser?' do - let(:user_agent) { described_class::BAD_USER_AGENTS.first.source } - - it { should be_bad_browser } - end - - context 'ignored' do + describe '#ignored?' do let(:options) { { :ignore => [ %r{file} ] } } - context 'not root' do + context 'path contains ignore pattern' do let(:env) { { 'PATH_INFO' => '/this/file' } } it { should be_ignored } end - context 'root' do + context 'root path' do let(:env) { { 'PATH_INFO' => '/' } } it { should_not be_ignored } end end - context 'not text/html' do - let(:headers) { { 'Content-Type' => 'application/pdf' } } + describe '#chunked?' do + context 'regular response' do + it { should_not be_chunked } + end - it { should_not be_html } + context 'chunked response' do + let(:headers) { { 'Transfer-Encoding' => 'chunked' } } + + it { should be_chunked } + end end - context 'chunked response' do - let(:headers) { { 'Transfer-Encoding' => 'chunked' } } + describe '#inline?' do + context 'inline disposition' do + let(:headers) { { 'Content-Disposition' => 'inline; filename=my_inlined_file' } } - it { should be_chunked } - end - - - context 'inline disposition' do - let(:headers) { { 'Content-Disposition' => 'inline; filename=my_inlined_file' } } - - it { should be_inline } + it { should be_inline } + end end describe '#ignored?' do @@ -73,5 +68,63 @@ describe Rack::LiveReload::ProcessingSkipAnalyzer do it { should be_ignored } end end + + describe '#bad_browser?' do + context 'Firefox' do + it { should_not be_bad_browser } + end + + context 'BAD browser' do + let(:user_agent) { described_class::BAD_USER_AGENTS.first.source } + + it { should be_bad_browser } + end + end + + describe '#html?' do + context 'HTML content' do + let(:headers) { { 'Content-Type' => 'text/html' } } + + it { should be_html } + end + + context 'PDF content' do + let(:headers) { { 'Content-Type' => 'application/pdf' } } + + it { should_not be_html } + end + end + + describe '#get?' do + context 'GET request' do + let(:env) { { 'REQUEST_METHOD' => 'GET' } } + + it { should be_get } + end + + context 'PUT request' do + let(:env) { { 'REQUEST_METHOD' => 'PUT' } } + + it { should_not be_get } + end + + context 'POST request' do + let(:env) { { 'REQUEST_METHOD' => 'POST' } } + + it { should_not be_get } + end + + context 'DELETE request' do + let(:env) { { 'REQUEST_METHOD' => 'DELETE' } } + + it { should_not be_get } + end + + context 'PATCH request' do + let(:env) { { 'REQUEST_METHOD' => 'PATCH' } } + + it { should_not be_get } + end + end end