Sha256: 75d72e5f98dfd8cb586b5f324506c78e9a623ada00b99688d65f695ba53c6f1b

Contents?: true

Size: 1.97 KB

Versions: 10

Compression:

Stored size: 1.97 KB

Contents

# frozen_string_literal: true

module Hyrax
  module Listeners
    ##
    # Listens for resource deleted events and cleans up associated members
    class MemberCleanupListener
      # Called when 'object.deleted' event is published
      # @param [Dry::Events::Event] event
      # @return [void]
      def on_object_deleted(event)
        return unless event.payload.key?(:object) # legacy callback
        return if event[:object].is_a?(ActiveFedora::Base) # handled by legacy code

        Hyrax.custom_queries.find_child_file_sets(resource: event[:object]).each do |file_set|
          Hyrax.persister.delete(resource: file_set)
          Hyrax.publisher
               .publish('object.deleted', object: file_set, id: file_set.id, user: event[:user])
        rescue StandardError # we don't uncaught errors looping filesets
          Hyrax.logger.warn "Failed to delete #{file_set.class}:#{file_set.id} " \
                            "during cleanup for resource: #{event[:object]}. " \
                            'This member may now be orphaned.'
        end
      end

      # Called when 'collection.deleted' event is published
      # @param [Dry::Events::Event] event
      # @return [void]
      def on_collection_deleted(event)
        return unless event.payload.key?(:collection) # legacy callback
        return if event[:collection].is_a?(ActiveFedora::Base) # handled by legacy code

        Hyrax.custom_queries.find_members_of(collection: event[:collection]).each do |resource|
          resource.member_of_collection_ids -= [event[:collection].id]
          Hyrax.persister.save(resource: resource)
          Hyrax.publisher
               .publish('collection.membership.updated', collection: event[:collection], user: event[:user])
        rescue StandardError
          Hyrax.logger.warn "Failed to remove collection reference from #{work.class}:#{work.id} " \
                            "during cleanup for collection: #{event[:collection]}. "
        end
      end
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
hyrax-5.0.0.rc1 app/services/hyrax/listeners/member_cleanup_listener.rb
hyrax-3.6.0 app/services/hyrax/listeners/member_cleanup_listener.rb
hyrax-4.0.0 app/services/hyrax/listeners/member_cleanup_listener.rb
hyrax-4.0.0.rc3 app/services/hyrax/listeners/member_cleanup_listener.rb
hyrax-4.0.0.rc2 app/services/hyrax/listeners/member_cleanup_listener.rb
hyrax-4.0.0.rc1 app/services/hyrax/listeners/member_cleanup_listener.rb
hyrax-3.5.0 app/services/hyrax/listeners/member_cleanup_listener.rb
hyrax-4.0.0.beta2 app/services/hyrax/listeners/member_cleanup_listener.rb
hyrax-3.4.2 app/services/hyrax/listeners/member_cleanup_listener.rb
hyrax-4.0.0.beta1 app/services/hyrax/listeners/member_cleanup_listener.rb