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.



40
41
42
# File 'lib/fluffle/testing.rb', line 40

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

Class Method Details

.instanceObject

Singleton server instance that lives in the process



36
37
38
# File 'lib/fluffle/testing.rb', line 36

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

Instance Method Details

#add_queue_subscriber(queue_name, block) ⇒ Object



48
49
50
51
52
# File 'lib/fluffle/testing.rb', line 48

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

  subscribers << block
end

#connectionObject



44
45
46
# File 'lib/fluffle/testing.rb', line 44

def connection
  Connection.new self
end

#publish(payload, opts) ⇒ Object



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/fluffle/testing.rb', line 54

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