Add some caching for trace views.
This commit is contained in:
parent
5cbaa2fca7
commit
e29e49dc7c
3 changed files with 58 additions and 0 deletions
|
@ -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")
|
||||
|
|
28
app/models/trace_sweeper.rb
Normal file
28
app/models/trace_sweeper.rb
Normal file
|
@ -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
|
25
app/models/tracetag_sweeper.rb
Normal file
25
app/models/tracetag_sweeper.rb
Normal file
|
@ -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
|
Loading…
Add table
Add a link
Reference in a new issue