friendship_sweeper.rb
970 Bytes
class FriendshipSweeper < ActiveRecord::Observer
observe :friendship
include SweeperHelper
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)
# public friends page
pages = profile.friends.count / Noosfero::Constants::PROFILE_PER_PAGE + 1
(1..pages).each do |i|
expire_timeout_fragment(profile.friends_cache_key(:npage => i.to_s))
end
# manage friends page
pages = profile.friends.count / Noosfero::Constants::PROFILE_PER_PAGE + 1
(1..pages).each do |i|
expire_timeout_fragment(profile.manage_friends_cache_key(:npage => i.to_s))
end
blocks = profile.blocks.select{|b| b.kind_of?(FriendsBlock)}
blocks.map(&:cache_keys).each{|ck|expire_timeout_fragment(ck)}
end
end