Created
October 13, 2025 13:39
-
-
Save sergio-fry/ea58049b0652ee61b88b50ebbfc276ce to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
module Automator | |
class Exchange | |
class Subscription | |
attr_reader :listener | |
def initialize(pattern, listener) | |
@pattern = pattern | |
@listener = listener | |
end | |
def listen_to?(event_type) | |
case @pattern | |
when String | |
@pattern == event_type | |
when Regexp | |
event_type.match?(@pattern) | |
else | |
raise "Unknown pattern type #{@pattern.class}" | |
end | |
end | |
def call(event_type, data) = @listener.call(event_type, data) | |
end | |
def initialize(logger:) | |
@subscripions = [] | |
@logger = logger | |
end | |
def subscribe(pattern, listener) | |
@subscripions << Subscription.new(pattern, listener) | |
end | |
def publish(event_type, data = nil) | |
@logger.debug "EVENT #{event_type} #{data.is_a?(String) ? data : data&.to_json}" | |
@subscripions.each do |subscripion| | |
execute_subscription(event_type, data, subscripion) | |
end | |
end | |
def execute_subscription(event_type, data, subscripion) | |
if subscripion.listen_to?(event_type.to_s) | |
if data.nil? | |
@logger.info "Starting #{subscripion.listener.class}" | |
else | |
@logger.info "Starting #{subscripion.listener.class} with data=#{data.to_json}" | |
end | |
subscripion.call(event_type.to_s, data) | |
@logger.info "Completed #{subscripion.listener.class}" | |
end | |
rescue StandardError => e | |
@logger.error "Error excuting #{subscripion.listener.class}" | |
@logger.error e.message | |
@logger.error e.backtrace.join("\n") | |
end | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment