Add a sweeper to clean up cache entries when a user's visibility or
display name changes.
This commit is contained in:
parent
eba3e9f6b8
commit
86cbb404e9
2 changed files with 53 additions and 0 deletions
|
@ -16,6 +16,8 @@ class UserController < ApplicationController
|
||||||
|
|
||||||
filter_parameter_logging :password, :pass_crypt, :pass_crypt_confirmation
|
filter_parameter_logging :password, :pass_crypt, :pass_crypt_confirmation
|
||||||
|
|
||||||
|
cache_sweeper :user_sweeper, :only => [:account, :hide, :unhide, :delete]
|
||||||
|
|
||||||
def save
|
def save
|
||||||
@title = t 'user.new.title'
|
@title = t 'user.new.title'
|
||||||
|
|
||||||
|
|
51
app/models/user_sweeper.rb
Normal file
51
app/models/user_sweeper.rb
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
class UserSweeper < ActionController::Caching::Sweeper
|
||||||
|
observe User
|
||||||
|
|
||||||
|
def before_update(record)
|
||||||
|
expire_cache_for(User.find(record.id), record)
|
||||||
|
end
|
||||||
|
|
||||||
|
def before_destroy(record)
|
||||||
|
expire_cache_for(record, nil)
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def expire_cache_for(old_record, new_record)
|
||||||
|
if old_record and
|
||||||
|
(new_record.nil? or
|
||||||
|
old_record.visible != new_record.visible or
|
||||||
|
old_record.display_name != new_record.display_name)
|
||||||
|
old_record.diary_entries.each do |entry|
|
||||||
|
expire_action(:controller => 'diary_entry', :action => 'view', :id => entry.id)
|
||||||
|
expire_action(:controller => 'diary_entry', :action => 'list', :language => entry.language_code, :display_name => nil)
|
||||||
|
expire_action(:controller => 'diary_entry', :action => 'rss', :language => entry.language_code, :display_name => nil)
|
||||||
|
end
|
||||||
|
|
||||||
|
expire_action(:controller => 'diary_entry', :action => 'list', :language => nil, :display_name => nil)
|
||||||
|
expire_action(:controller => 'diary_entry', :action => 'list', :language => nil, :display_name => old_record.display_name)
|
||||||
|
|
||||||
|
expire_action(:controller => 'diary_entry', :action => 'rss', :language => nil, :display_name => nil)
|
||||||
|
expire_action(:controller => 'diary_entry', :action => 'rss', :language => nil, :display_name => old_record.display_name)
|
||||||
|
|
||||||
|
old_record.traces.each do |trace|
|
||||||
|
expire_action(:controller => 'trace', :action => 'view', :id => trace.id)
|
||||||
|
expire_action(:controller => 'trace', :action => 'view', :display_name => old_record.display_name, :id => trace.id)
|
||||||
|
|
||||||
|
trace.tags.each do |tag|
|
||||||
|
expire_action(:controller => 'trace', :action => 'list', :display_name => nil, :tag => tag.tag)
|
||||||
|
expire_action(:controller => 'trace', :action => 'list', :display_name => old_record.display_name, :tag => tag.tag)
|
||||||
|
|
||||||
|
expire_action(:controller => 'trace', :action => 'georss', :display_name => nil, :tag => tag.tag)
|
||||||
|
expire_action(:controller => 'trace', :action => 'georss', :display_name => old_record.display_name, :tag => tag.tag)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
expire_action(:controller => 'trace', :action => 'list', :display_name => nil, :tag => nil)
|
||||||
|
expire_action(:controller => 'trace', :action => 'list', :display_name => old_record.display_name, :tag => nil)
|
||||||
|
|
||||||
|
expire_action(:controller => 'trace', :action => 'georss', :display_name => nil, :tag => nil)
|
||||||
|
expire_action(:controller => 'trace', :action => 'georss', :display_name => old_record.display_name, :tag => nil)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Add table
Add a link
Reference in a new issue