class Yael::Bus

Public Class Methods

shared() click to toggle source
# File lib/yael/bus.rb, line 6
def shared
  unless @shared
    @shared = Bus.new
    path = Rails.root.join("config/events.rb")
    if path.exist?
      reloader = Rails.configuration.file_watcher.new([path]) do
        load path
      end
      Rails.application.reloader.to_prepare do
        reloader.execute_if_updated
      end
      Rails.application.reloaders << reloader
      reloader.execute
    end
  end
  @shared
end

Public Instance Methods

dispatch(name, stream:, payload:) click to toggle source
# File lib/yael/bus.rb, line 33
def dispatch(name, stream:, payload:)
  stream = Event.stream_for(stream) unless stream.is_a?(String)
  DispatchJob.perform_later(name: name, stream: stream, payload: payload, created_at: DateTime.current)
end
process(event) click to toggle source
# File lib/yael/bus.rb, line 38
def process(event)
  routes.each do |route|
    route.dispatch(event) if route.matches? event.name
  end
end
routes() click to toggle source
# File lib/yael/bus.rb, line 25
def routes
  @routes ||= []
end
routing(&block) click to toggle source
# File lib/yael/bus.rb, line 29
def routing(&block)
  @routes = DispatchMap.new(block).routes
end