From 27667670d71957d09dbfd7a4247cfee510796bac Mon Sep 17 00:00:00 2001 From: Daniela Soares Feitosa Date: Sat, 23 May 2009 18:14:59 -0300 Subject: [PATCH] ActionItem990: adding friendship_sweeper and role_assignment_sweeper --- app/sweepers/friendship_sweeper.rb | 36 ++++++++++++++++++++++++++++++++++++ app/sweepers/role_assignment_sweeper.rb | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+), 0 deletions(-) create mode 100644 app/sweepers/friendship_sweeper.rb create mode 100644 app/sweepers/role_assignment_sweeper.rb diff --git a/app/sweepers/friendship_sweeper.rb b/app/sweepers/friendship_sweeper.rb new file mode 100644 index 0000000..4ccc683 --- /dev/null +++ b/app/sweepers/friendship_sweeper.rb @@ -0,0 +1,36 @@ +class FriendshipSweeper < ActiveRecord::Observer + observe :friendship + + def after_create(friendship) + expire_caches(friendship) + end + + def after_destroy(friendship) + expire_cache(friendship.person) + end + +protected + + def expire_caches(friendship) + expire_cache(friendship.person) + expire_cache(friendship.friend) + end + + def expire_cache(profile) + [profile.friends_cache_key, profile.manage_friends_cache_key].each { |ck| + cache_key = ck.gsub(/(.)-\d.*$/, '\1') + expire_fragment(/#{cache_key}/) + } + + blocks = profile.blocks.select{|b| b.kind_of?(FriendsBlock)} + blocks.map(&:cache_keys).each{|ck|expire_timeout_fragment(ck)} + end + + def expire_fragment(*args) + ActionController::Base.new().expire_fragment(*args) + end + + def expire_timeout_fragment(*args) + ActionController::Base.new().expire_timeout_fragment(*args) + end +end diff --git a/app/sweepers/role_assignment_sweeper.rb b/app/sweepers/role_assignment_sweeper.rb new file mode 100644 index 0000000..742e43e --- /dev/null +++ b/app/sweepers/role_assignment_sweeper.rb @@ -0,0 +1,38 @@ +class RoleAssignmentSweeper < ActiveRecord::Observer + observe :role_assignment + + def after_create(role_assignment) + expire_caches(role_assignment) + end + + def after_destroy(role_assignment) + expire_caches(role_assignment) + end + +protected + + def expire_caches(role_assignment) + expire_cache(role_assignment.accessor) + expire_cache(role_assignment.resource) if role_assignment.resource.respond_to?(:cache_keys) + end + + def expire_cache(profile) + profile.cache_keys.each { |ck| + cache_key = ck.gsub(/(.)-\d.*$/, '\1') + expire_fragment(/#{cache_key}/) + } + + profile.blocks_to_expire_cache.each { |block| + blocks = profile.blocks.select{|b| b.kind_of?(block)} + blocks.map(&:cache_keys).each{|ck|expire_timeout_fragment(ck)} + } + end + + def expire_fragment(*args) + ActionController::Base.new().expire_fragment(*args) + end + + def expire_timeout_fragment(*args) + ActionController::Base.new().expire_timeout_fragment(*args) + end +end -- libgit2 0.21.2