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")
--- /dev/null
+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
--- /dev/null
+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