profile_sweeper.rb
1.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# This is not a proper observer since is explicitly called in the profile model
class ProfileSweeper # < ActiveRecord::Observer
# observe :profile
include SweeperHelper
def after_update(profile)
self.delay.expire_caches profile
end
def after_create(profile)
end
protected
def expire_caches(profile)
profile.members.each do |member|
expire_communities(member) if profile.community?
expire_enterprises(member) if profile.enterprise?
expire_profile_index(member) if profile.enterprise?
end
expire_profile_index(profile) if profile.person?
profile.blocks.each do |block|
expire_timeout_fragment(block.cache_key)
end
expire_blogs(profile) if profile.organization?
end
def expire_blogs(profile)
profile.blogs.select{|b| !b.empty?}.each do |blog|
pages = blog.posts.count / blog.posts_per_page + 1
([nil] + (1..pages).to_a).each do |i|
expire_timeout_fragment(blog.cache_key({:npage => i}))
expire_timeout_fragment(blog.cache_key({:npage => i}, profile))
end
end
end
end