Skip to content

Commit ff6bb7d

Browse files
tamsin johnsondunn
authored andcommitted
retain the default listeners for future unsubscribing
subscribe the hyrax default listeners in batch. provide a hook for looking up the `Hyrax.publisher.default_listeners`. this makes it possible to unsubscribe individual listeners at a later time. these instances have to live in memory for the life of the Publisher anyway, so this shouldn't impact when they are freed for garbage collection.
1 parent 671f21b commit ff6bb7d

File tree

3 files changed

+36
-10
lines changed

3 files changed

+36
-10
lines changed

config/initializers/listeners.rb

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,10 @@
11
# frozen_string_literal: true
22

3-
Hyrax.publisher.subscribe(Hyrax::Listeners::AclIndexListener.new)
43
Hyrax.publisher.subscribe(Hyrax::Listeners::ActiveFedoraAclIndexListener.new) unless Hyrax.config.disable_wings
5-
Hyrax.publisher.subscribe(Hyrax::Listeners::BatchNotificationListener.new)
6-
Hyrax.publisher.subscribe(Hyrax::Listeners::FileMetadataListener.new)
7-
Hyrax.publisher.subscribe(Hyrax::Listeners::FileSetLifecycleListener.new)
8-
Hyrax.publisher.subscribe(Hyrax::Listeners::FileSetLifecycleNotificationListener.new)
9-
Hyrax.publisher.subscribe(Hyrax::Listeners::MemberCleanupListener.new)
10-
Hyrax.publisher.subscribe(Hyrax::Listeners::MetadataIndexListener.new)
11-
Hyrax.publisher.subscribe(Hyrax::Listeners::ObjectLifecycleListener.new)
12-
Hyrax.publisher.subscribe(Hyrax::Listeners::TrophyCleanupListener.new)
13-
Hyrax.publisher.subscribe(Hyrax::Listeners::WorkflowListener.new)
4+
5+
Hyrax.publisher.default_listeners.each do |listener|
6+
Hyrax.publisher.subscribe(listener)
7+
end
148

159
# Publish events from old style Hyrax::Callbacks to trigger the listeners
1610
# When callbacks are removed and replaced with direct event publication, drop these blocks

lib/hyrax/publisher.rb

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,5 +194,21 @@ class Publisher
194194
# @since 3.2.0
195195
# @macro a_registered_event
196196
register_event('object.file.uploaded')
197+
198+
##
199+
# @return Array[Object] the listeners Hyrax subscribes by default.
200+
def default_listeners
201+
@default_listeners ||=
202+
[Hyrax::Listeners::AclIndexListener.new,
203+
Hyrax::Listeners::BatchNotificationListener.new,
204+
Hyrax::Listeners::FileMetadataListener.new,
205+
Hyrax::Listeners::FileSetLifecycleListener.new,
206+
Hyrax::Listeners::FileSetLifecycleNotificationListener.new,
207+
Hyrax::Listeners::MemberCleanupListener.new,
208+
Hyrax::Listeners::MetadataIndexListener.new,
209+
Hyrax::Listeners::ObjectLifecycleListener.new,
210+
Hyrax::Listeners::TrophyCleanupListener.new,
211+
Hyrax::Listeners::WorkflowListener.new].freeze
212+
end
197213
end
198214
end

spec/hyrax/publisher_spec.rb

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# frozen_string_literal: true
2+
3+
RSpec.describe Hyrax::Publisher do
4+
subject(:publisher) { described_class.instance } # singleton instance
5+
6+
describe "#default_listeners" do
7+
it "returns a collection of listeners" do
8+
# listeners can be any Object, so we can't verify they are valid here
9+
expect(publisher.default_listeners).to be_a Enumerable
10+
end
11+
12+
it "returns the same collection on successive calls" do
13+
expect(publisher.default_listeners).to eql publisher.default_listeners
14+
end
15+
end
16+
end

0 commit comments

Comments
 (0)