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