class Isimud::TestClient
Interface for a messaging client that is suitable for testing. No network connections are used. All message deliveries are handled in a synchronous manner. When a message is published to the client, each declared queue is examined and, if the message's routing key matches any of the patterns bound to the queue, the queue's block is called with the message. Any uncaught exceptions raised within a message processing block will cause any declared exception handlers to be run. However, the message will not be re-queued should this occur.
Attributes
queues[RW]
Public Class Methods
new(connection = nil, options = {})
click to toggle source
# File lib/isimud/test_client.rb, line 63 def initialize(connection = nil, options = {}) self.queues = Hash.new end
Public Instance Methods
bind(queue_name, exchange_name, *keys, &block)
click to toggle source
# File lib/isimud/test_client.rb, line 87 def bind(queue_name, exchange_name, *keys, &block) queue = create_queue(queue_name, exchange_name, routing_keys: keys) subscribe(queue, &block) end
channel()
click to toggle source
# File lib/isimud/test_client.rb, line 71 def channel self end
close()
click to toggle source
# File lib/isimud/test_client.rb, line 79 def close end
connect()
click to toggle source
# File lib/isimud/test_client.rb, line 67 def connect self end
connected?()
click to toggle source
# File lib/isimud/test_client.rb, line 75 def connected? true end
create_queue(queue_name, exchange_name, options = {})
click to toggle source
# File lib/isimud/test_client.rb, line 96 def create_queue(queue_name, exchange_name, options = {}) keys = options[:routing_keys] || [] log "Isimud::TestClient: Binding queue #{queue_name} on exchange #{exchange_name} for keys #{keys.inspect}" queue = find_queue(queue_name) keys.each do |k| queue.bind(exchange_name, routing_key: k) end queue end
delete_queue(queue_name)
click to toggle source
# File lib/isimud/test_client.rb, line 82 def delete_queue(queue_name) log "Isimud::TestClient: deleting queue #{queue_name}" queues.delete(queue_name) end
find_queue(queue_name, _options = {})
click to toggle source
# File lib/isimud/test_client.rb, line 92 def find_queue(queue_name, _options = {}) queues[queue_name] ||= Queue.new(self, queue_name) end
publish(exchange, routing_key, payload, _options = {})
click to toggle source
# File lib/isimud/test_client.rb, line 112 def publish(exchange, routing_key, payload, _options = {}) log "Isimud::TestClient: Delivering message exchange: #{exchange} key: #{routing_key} payload: #{payload}" call_queues = queues.values.select { |queue| queue.has_matching_key?(exchange, routing_key) } call_queues.each do |queue| log "Isimud::TestClient: Queue #{queue.name} matches routing key #{routing_key}" queue.deliver(payload) end end
reconnect()
click to toggle source
# File lib/isimud/test_client.rb, line 125 def reconnect self end
reset()
click to toggle source
# File lib/isimud/test_client.rb, line 121 def reset self.queues.clear end
subscribe(queue, _options = {}, &block)
click to toggle source
# File lib/isimud/test_client.rb, line 106 def subscribe(queue, _options = {}, &block) log "Isimud::TestClient: subscribing to events on queue #{queue.name}" queue.proc = block queue end