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