Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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 })
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement