Class: Fluffle::Testing::Loopback

Inherits:
Object
  • Object
show all
Defined in:
lib/fluffle/testing.rb

Overview

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

Defined Under Namespace

Classes: Channel, Connection, Exchange, Queue

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize ⇒ Loopback

Returns a new instance of Loopback.



64
65
66
# File 'lib/fluffle/testing.rb', line 64

def initialize
  @queues = Concurrent::Map.new
end

Class Method Details

.instance ⇒ Object

Singleton server instance that lives in the process



60
61
62
# File 'lib/fluffle/testing.rb', line 60

def self.instance
  @instance ||= self.new
end

Instance Method Details

#add_queue_subscriber(queue_name, block) ⇒ Object



72
73
74
75
76
# File 'lib/fluffle/testing.rb', line 72

def add_queue_subscriber(queue_name, block)
  subscribers = (@queues[queue_name] ||= Concurrent::Array.new)

  subscribers << block
end

#connection ⇒ Object



68
69
70
# File 'lib/fluffle/testing.rb', line 68

def connection
  Connection.new self
end

#publish(payload, opts) ⇒ Object



78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/fluffle/testing.rb', line 78

def publish(payload, opts)
  queue_name = opts[:routing_key]
  raise "Missing `:routing_key' in `#publish' opts" unless queue_name

  delivery_info = nil

  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