article_sweeper.rb 791 Bytes
class ArticleSweeper < ActiveRecord::Observer
  include SweeperHelper
  observe :article

  def after_save(article)
    expire_caches(article)
  end

  def after_destroy(article)
    expire_caches(article)
  end

protected

  def expire_caches(article)
    article.hierarchy.each { |a| a.touch if a != article }
    blocks = article.profile.blocks
    blocks += article.profile.environment.blocks if article.profile.environment
    blocks = blocks.select{|b|[RecentDocumentsBlock, BlogArchivesBlock].any?{|c| b.kind_of?(c)}}
    BlockSweeper.expire_blocks(blocks)
    env = article.profile.environment
    if env && (env.portal_community == article.profile)
      Noosfero.locales.keys.each do |locale|
        expire_fragment(env.portal_news_cache_key(locale))
      end
    end
  end

end