diff --git a/lib/event_source.rb b/lib/event_source.rb index 42df869..2ca76a1 100644 --- a/lib/event_source.rb +++ b/lib/event_source.rb @@ -77,6 +77,8 @@ def initialize!(force = false) create_connections load_async_api_resources load_components + EventSource::Subscriber.initialize_subscribers + EventSource::Publisher.initialize_publishers end def config diff --git a/lib/event_source/publisher.rb b/lib/event_source/publisher.rb index d5aa9b3..9920573 100644 --- a/lib/event_source/publisher.rb +++ b/lib/event_source/publisher.rb @@ -26,6 +26,16 @@ def self.publisher_container @publisher_container ||= Concurrent::Map.new end + def self.initialization_registry + @initialization_registry ||= Concurrent::Array.new + end + + def self.initialize_publishers + self.initialization_registry.each do |pub| + pub.validate + end + end + def self.[](exchange_ref) # TODO: validate publisher already exists # raise EventSource::Error::PublisherAlreadyRegisteredError.new(id) if registry.key?(id) @@ -46,12 +56,14 @@ def included(base) } base.extend(ClassMethods) - TracePoint.trace(:end) do |t| - if base == t.self - base.validate - t.disable - end - end + + EventSource::Publisher.initialization_registry << base + # TracePoint.trace(:end) do |t| + # if base == t.self + # base.validate + # t.disable + # end + # end end # methods to register events diff --git a/lib/event_source/subscriber.rb b/lib/event_source/subscriber.rb index d62257a..e12d3e0 100644 --- a/lib/event_source/subscriber.rb +++ b/lib/event_source/subscriber.rb @@ -27,6 +27,16 @@ def self.executable_container @executable_container ||= Concurrent::Map.new end + def self.initialization_registry + @initialization_registry ||= Concurrent::Array.new + end + + def self.initialize_subscribers + self.initialization_registry.each do |sub| + sub.create_subscription + end + end + def self.[](exchange_ref) # TODO: validate publisher already exists # raise EventSource::Error::PublisherAlreadyRegisteredError.new(id) if registry.key?(id) @@ -49,12 +59,15 @@ def included(base) base.extend ClassMethods base.include InstanceMethods - TracePoint.trace(:end) do |t| - if base == t.self - base.create_subscription - t.disable - end - end + # TODO: Wrap this back in a delayed tracepoint + EventSource::Subscriber.initialization_registry << base + + # TracePoint.trace(:end) do |t| + # if base == t.self + # base.create_subscription + # t.disable + # end + # end end module InstanceMethods