36 lines
981 B
Ruby
36 lines
981 B
Ruby
|
|
class FeedSweeper < ActionController::Caching::Sweeper
|
||
|
|
include Rails.application.routes.url_helpers
|
||
|
|
|
||
|
|
observe Chapter, Work
|
||
|
|
|
||
|
|
def after_create(record)
|
||
|
|
if record.posted? && (record.is_a?(Work) || (record.is_a?(Chapter) && record.work.present? && record.work.posted?))
|
||
|
|
expire_caches(record)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
def after_update(record)
|
||
|
|
if record.posted?
|
||
|
|
expire_caches(record)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
private
|
||
|
|
|
||
|
|
# When a chapter or work is created, updated or destroyed, expire:
|
||
|
|
# - the cached feed page for each of its canonical tags
|
||
|
|
# - the works index caches for its canonical tags, pseuds, users and collections
|
||
|
|
def expire_caches(record)
|
||
|
|
work = record
|
||
|
|
work = record.work if record.is_a?(Chapter)
|
||
|
|
|
||
|
|
return unless work.present?
|
||
|
|
|
||
|
|
work.filters.each do |tag|
|
||
|
|
# expire the atom feed page for the tags on the work and the corresponding filter tags
|
||
|
|
ActionController::Base.expire_page feed_tag_path(tag.id, format: 'atom')
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
end
|