Skip to content

Instantly share code, notes, and snippets.

@dvinciguerra
Created March 15, 2019 11:29
Show Gist options
  • Save dvinciguerra/9575b7f452b2fe0c6d6af7f78d52ff63 to your computer and use it in GitHub Desktop.
Save dvinciguerra/9575b7f452b2fe0c6d6af7f78d52ff63 to your computer and use it in GitHub Desktop.
Ultra simple event broker made using Ruby
class Action
attr_reader :name, :payload, :callback
def initialize(**args, &block)
@name = args[:name]
@payload = args[:payload] || {}
@callback = block || proc {}
end
def process(payload)
@callback.call(@payload.merge!(payload))
end
end
class EventBroker
def initialize
@events = {}
end
def subscribe(actions = [])
actions.each do |action|
@events[action.name.to_sym] = action
end
end
def raise(name, **args)
payload = args[:payload]
@events[name.to_sym].process(payload)
end
end
event_broker = EventBroker.new
actions = []
actions << Action.new(name: "ActionOne", payload: { arg: 1 }) do |payload|
p payload
end
event_broker.subscribe(actions)
event_broker.raise("ActionOne", payload: { timeout: 100, retry: false })
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment