otwarchive-symphonyarchive/app/sweepers/collection_sweeper.rb

62 lines
2.1 KiB
Ruby
Raw Normal View History

2026-03-11 22:22:11 +00:00
class CollectionSweeper < ActionController::Caching::Sweeper
observe Collection, CollectionItem, CollectionParticipant, CollectionProfile, Work
def after_create(record)
record.add_to_autocomplete if record.is_a?(Collection)
end
def after_update(record)
if record.is_a?(Collection) && (record.saved_change_to_name? || record.saved_change_to_title?)
record.remove_stale_from_autocomplete
record.add_to_autocomplete
end
end
def after_save(record)
expire_collection_cache_for(record)
end
def before_destroy(record)
record.remove_from_autocomplete if record.is_a?(Collection)
end
def after_destroy(record)
expire_collection_cache_for(record)
end
private
# return one or many collections associated with the changed record
# converted into an array
def get_collections_from_record(record)
if record.is_a?(Collection)
# send collection, its parent, and any children
([record, record.parent] + record.children).compact
elsif record.respond_to?(:collection) && !record.collection.nil?
([record.collection, record.collection.parent] + record.collection.children).compact
elsif record.respond_to?(:collections)
(record.collections + record.collections.collect(&:parent) + record.collections.collect(&:children).flatten).compact
else
[]
end
end
# Whenever these records are updated, we need to blank out the collections cache
def expire_collection_cache_for(record)
collections = get_collections_from_record(record)
collections.each do |collection|
CollectionSweeper.expire_collection_blurb_and_profile(collection)
end
end
# Expire the collection blurb and profile
def self.expire_collection_blurb_and_profile(collection)
# Expire both versions of the blurb, whether the user is logged in or not.
%w[logged-in logged-out].each do |logged_in|
cache_key = "collection-blurb-#{logged_in}-#{collection.id}-v4"
ActionController::Base.new.expire_fragment(cache_key)
end
ActionController::Base.new.expire_fragment("collection-profile-#{collection.id}")
end
end