From e29e49dc7c3d1d9f59679f09a5eba8a6b56854a2 Mon Sep 17 00:00:00 2001 From: Tom Hughes Date: Sun, 10 Jan 2010 17:44:57 +0000 Subject: [PATCH] Add some caching for trace views. --- app/controllers/trace_controller.rb | 5 +++++ app/models/trace_sweeper.rb | 28 ++++++++++++++++++++++++++++ app/models/tracetag_sweeper.rb | 25 +++++++++++++++++++++++++ 3 files changed, 58 insertions(+) create mode 100644 app/models/trace_sweeper.rb create mode 100644 app/models/tracetag_sweeper.rb diff --git a/app/controllers/trace_controller.rb b/app/controllers/trace_controller.rb index 4c4ec60a7..9b32c32a7 100644 --- a/app/controllers/trace_controller.rb +++ b/app/controllers/trace_controller.rb @@ -15,6 +15,11 @@ class TraceController < ApplicationController before_filter :offline_redirect, :only => [:create, :edit, :delete, :data, :api_data, :api_create] around_filter :api_call_handle_error, :only => [:api_details, :api_data, :api_create] + caches_action :list, :view, :layout => false + caches_action :georss, :layout => true + cache_sweeper :trace_sweeper, :only => [:create, :edit, :delete, :api_create] + cache_sweeper :tracetag_sweeper, :only => [:create, :edit, :delete, :api_create] + # Counts and selects pages of GPX traces for various criteria (by user, tags, public etc.). # target_user - if set, specifies the user to fetch traces for. if not set will fetch all traces def list(target_user = nil, action = "list") diff --git a/app/models/trace_sweeper.rb b/app/models/trace_sweeper.rb new file mode 100644 index 000000000..52780f9e4 --- /dev/null +++ b/app/models/trace_sweeper.rb @@ -0,0 +1,28 @@ +class TraceSweeper < ActionController::Caching::Sweeper + observe Trace + + def after_create(record) + expire_cache_for(record) + end + + def after_update(record) + expire_cache_for(record) + end + + def after_destroy(record) + expire_cache_for(record) + end + +private + + def expire_cache_for(record) + expire_action(:controller => 'trace', :action => 'view', :id => record.id) + expire_action(:controller => 'trace', :action => 'view', :display_name => record.user.display_name, :id => record.id) + + expire_action(:controller => 'trace', :action => 'list', :display_name => nil, :tag => nil) + expire_action(:controller => 'trace', :action => 'list', :display_name => record.user.display_name, :tag => nil) + + expire_action(:controller => 'trace', :action => 'georss', :display_name => nil, :tag => nil) + expire_action(:controller => 'trace', :action => 'georss', :display_name => record.user.display_name, :tag => nil) + end +end diff --git a/app/models/tracetag_sweeper.rb b/app/models/tracetag_sweeper.rb new file mode 100644 index 000000000..f9de1dd82 --- /dev/null +++ b/app/models/tracetag_sweeper.rb @@ -0,0 +1,25 @@ +class TracetagSweeper < ActionController::Caching::Sweeper + observe Tracetag + + def after_create(record) + expire_cache_for(record) + end + + def after_update(record) + expire_cache_for(record) + end + + def after_destroy(record) + expire_cache_for(record) + end + +private + + def expire_cache_for(record) + expire_action(:controller => 'trace', :action => 'list', :display_name => nil, :tag => record.tag) + expire_action(:controller => 'trace', :action => 'list', :display_name => record.trace.user.display_name, :tag => record.tag) + + expire_action(:controller => 'trace', :action => 'georss', :display_name => nil, :tag => record.tag) + expire_action(:controller => 'trace', :action => 'georss', :display_name => record.trace.user.display_name, :tag => record.tag) + end +end -- 2.43.2