From 907eedd9fee68fd8a6c40d97193bef91ab076d37 Mon Sep 17 00:00:00 2001 From: Andrea Campi Date: Sat, 3 Mar 2012 19:52:57 +0100 Subject: [PATCH 1/2] Make sure the ETag changes when either the page model or the actual rendered content changes. Fixes #313 --- lib/locomotive/render.rb | 2 +- spec/lib/locomotive/render_spec.rb | 44 ++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/lib/locomotive/render.rb b/lib/locomotive/render.rb index 4bf0ef8c..5090210a 100644 --- a/lib/locomotive/render.rb +++ b/lib/locomotive/render.rb @@ -98,7 +98,7 @@ module Locomotive response.headers['Content-Type'] = 'text/html; charset=utf-8' if @page.with_cache? - fresh_when :etag => @page, :last_modified => @page.updated_at.utc, :public => true + fresh_when :etag => [@page, output], :last_modified => @page.updated_at.utc, :public => true if @page.cache_strategy != 'simple' # varnish response.cache_control[:max_age] = @page.cache_strategy diff --git a/spec/lib/locomotive/render_spec.rb b/spec/lib/locomotive/render_spec.rb index 49f9363e..93cc8ea4 100644 --- a/spec/lib/locomotive/render_spec.rb +++ b/spec/lib/locomotive/render_spec.rb @@ -71,6 +71,50 @@ describe 'Locomotive rendering system' do @controller.status.should == :not_found end + context 'templatized page' do + + before(:each) do + @content_type = FactoryGirl.build(:content_type, :site => nil) + @content = @content_type.contents.build(:_visible => true, :tile => 'one') + @page.templatized = true + @page.content_type = @content_type + end + + it 'sets the etag' do + @page.cache_strategy = 'simple' + @page.stubs(:updated_at).returns(Time.now) + @controller.send(:prepare_and_set_response, 'Hello world !') + @controller.response.to_a # force to build headers + @controller.response.headers['ETag'].should == "\"d232eefab45e58af59c2d00409261365\"" + end + + it 'changes the etag if the page changes' do + @page.cache_strategy = 'simple' + @page.stubs(:updated_at).returns(Time.now) + @page.stubs(:to_param).returns("1") + @controller.send(:prepare_and_set_response, 'Hello world !') + @controller.response.to_a # force to build headers + old_etag = @controller.response.headers['ETag'] + + @page.stubs(:to_param).returns("2") + @controller.send(:prepare_and_set_response, 'Hello world !') + @controller.response.to_a # force to build headers + @controller.response.headers['ETag'].should_not == old_etag + end + + it 'changes the etag if the output changes' do + @page.cache_strategy = 'simple' + @page.stubs(:updated_at).returns(Time.now) + @controller.send(:prepare_and_set_response, 'Hello world !') + @controller.response.to_a # force to build headers + old_etag = @controller.response.headers['ETag'] + + @controller.send(:prepare_and_set_response, 'Hello world !!') + @controller.response.to_a # force to build headers + @controller.response.headers['ETag'].should_not == old_etag + end + + end end context 'when retrieving page' do From 9f8ddf2b3e07b45f2e5646a54ce3c949181fc0f4 Mon Sep 17 00:00:00 2001 From: Andrea Campi Date: Sat, 3 Mar 2012 19:57:36 +0100 Subject: [PATCH 2/2] Fix filters order. Fix #294 --- app/controllers/admin/installation_controller.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/admin/installation_controller.rb b/app/controllers/admin/installation_controller.rb index f4c5b0eb..1c162287 100644 --- a/app/controllers/admin/installation_controller.rb +++ b/app/controllers/admin/installation_controller.rb @@ -11,10 +11,10 @@ module Admin skip_before_filter :validate_site_membership - before_filter :is_step_already_done? - before_filter :allow_installation? + before_filter :is_step_already_done? + skip_load_and_authorize_resource def show