class Fluffle::Testing::Loopback

Fake RabbitMQ server presented through a subset of the `Bunny` library's interface

Public Class Methods

instance() click to toggle source

Singleton server instance that lives in the process

# File lib/fluffle/testing.rb, line 62
def self.instance
  @instance ||= self.new
end
new() click to toggle source
# File lib/fluffle/testing.rb, line 66
def initialize
  @queues = Concurrent::Map.new
end

Public Instance Methods

add_queue_subscriber(queue_name, block) click to toggle source
# File lib/fluffle/testing.rb, line 74
def add_queue_subscriber(queue_name, block)
  subscribers = (@queues[queue_name] ||= Concurrent::Array.new)

  subscribers << block
end
connection() click to toggle source
# File lib/fluffle/testing.rb, line 70
def connection
  Connection.new self
end
publish(payload, opts) click to toggle source
# File lib/fluffle/testing.rb, line 80
def publish(payload, opts)
  queue_name = opts[:routing_key]
  raise "Missing `:routing_key' in `#publish' opts" unless queue_name

  delivery_info = DeliveryInfo.new Random.rand(1000000)

  properties = {
    reply_to: opts[:reply_to],
    correlation_id: opts[:correlation_id]
  }

  subscribers = @queues[queue_name]

  if subscribers.nil? || subscribers.empty?
    $stderr.puts "No subscribers active for queue '#{queue_name}'"
    return nil
  end

  subscribers.each do |subscriber|
    subscriber.call(delivery_info, properties, payload)
  end
end