61 lines
2.1 KiB
Ruby
61 lines
2.1 KiB
Ruby
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
|