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

#initializeLoopback

Returns a new instance of Loopback.



66
67
68
# File 'lib/fluffle/testing.rb', line 66

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

Class Method Details

.instanceObject

Singleton server instance that lives in the process



62
63
64
# File 'lib/fluffle/testing.rb', line 62

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

Instance Method Details

#add_queue_subscriber(queue_name, block) ⇒ Object



74
75
76
77
78
# File 'lib/fluffle/testing.rb', line 74

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

  subscribers << block
end

#connectionObject



70
71
72
# File 'lib/fluffle/testing.rb', line 70

def connection
  Connection.new self
end

#publish(payload, opts) ⇒ Object



80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# 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