class Warren::Handler::Broadcast::Channel

Wraps a Bunny::Channel @see rubydoc.info/gems/bunny/Bunny/Channel

Attributes

routing_key_prefix[R]

Public Class Methods

new(bun_channel, routing_key_prefix:, exchange: nil) click to toggle source
# File lib/warren/handler/broadcast.rb, line 24
def initialize(bun_channel, routing_key_prefix:, exchange: nil)
  @bun_channel = bun_channel
  @exchange_name = exchange
  @routing_key_prefix = routing_key_prefix
  @routing_key_template = Handler.routing_key_template(routing_key_prefix)
end

Public Instance Methods

<<(message) click to toggle source

Publishes `message` to the configured exchange

@param message [#routing_key,#payload] A message should respond to routing_key and payload.

@see Warren::Message::Full

@return [Warren::Handler::Broadcast::Channel] returns self for chaining

# File lib/warren/handler/broadcast.rb, line 38
def <<(message)
  publish(message)
end
publish(message, exchange: configured_exchange) click to toggle source

Publishes `message` to `exchange` (Defaults to configured exchange)

@param message [#routing_key,#payload] A message should respond to routing_key and payload.

@see Warren::Message::Full

@param exchange [Bunny::Exchange] The exchange to publish to

@return [Warren::Handler::Broadcast::Channel] returns self for chaining

# File lib/warren/handler/broadcast.rb, line 50
def publish(message, exchange: configured_exchange)
  exchange.publish(message.payload, routing_key: key_for(message), headers: message.headers)
  self
end

Private Instance Methods

configured_exchange() click to toggle source
# File lib/warren/handler/broadcast.rb, line 57
def configured_exchange
  raise StandardError, 'No exchange configured' if @exchange_name.nil?

  @configured_exchange ||= exchange(@exchange_name, auto_delete: false, durable: true, type: :topic)
end
key_for(message) click to toggle source
# File lib/warren/handler/broadcast.rb, line 63
def key_for(message)
  @routing_key_template % message.routing_key
end