class CfMessageBus::MockMessageBus

Attributes

published_messages[R]
published_synchronous_messages[R]

Public Class Methods

new(config = {}) click to toggle source
# File lib/cf_message_bus/mock_message_bus.rb, line 5
def initialize(config = {})
  @logger = config[:logger]
  @requests = {}
  @synchronous_requests = {}
  @published_messages = []
  @published_synchronous_messages = []
  reset
end

Public Instance Methods

clear_published_messages() click to toggle source
# File lib/cf_message_bus/mock_message_bus.rb, line 66
def clear_published_messages
  @published_messages.clear
end
connected?() click to toggle source
# File lib/cf_message_bus/mock_message_bus.rb, line 49
def connected?
  true
end
do_recovery() click to toggle source
# File lib/cf_message_bus/mock_message_bus.rb, line 62
def do_recovery
  @recovery.call if @recovery
end
has_published?(subject) click to toggle source
# File lib/cf_message_bus/mock_message_bus.rb, line 70
def has_published?(subject)
  @published_messages.find { |message| message[:subject] == subject }
end
has_published_with_message?(subject, message) click to toggle source
# File lib/cf_message_bus/mock_message_bus.rb, line 74
def has_published_with_message?(subject, message)
  @published_messages.find do |publication|
    publication[:subject] == subject &&
      publication[:message] == message
  end
end
has_requested_synchronous_messages?(subject, data=nil, options={}) click to toggle source
# File lib/cf_message_bus/mock_message_bus.rb, line 81
def has_requested_synchronous_messages?(subject, data=nil, options={})
  @published_synchronous_messages.find do |publication|
    publication[:subject] == subject &&
      publication[:data] == data &&
      publication[:options] == options
  end
end
publish(subject, message = nil, inbox = nil, &callback) click to toggle source
# File lib/cf_message_bus/mock_message_bus.rb, line 19
def publish(subject, message = nil, inbox = nil, &callback)
  @subscriptions[subject].each do |subscription|
    subscription.call(stringify_keys(message))
  end

  @published_messages.push({subject: subject, message: message, inbox: inbox, callback: callback})

  callback.call if callback
end
recover(&block) click to toggle source
# File lib/cf_message_bus/mock_message_bus.rb, line 45
def recover(&block)
  @recovery = block
end
request(subject, data=nil, _={}, &blk) click to toggle source
# File lib/cf_message_bus/mock_message_bus.rb, line 29
def request(subject, data=nil, _={}, &blk)
  @requests[subject] = blk
  publish(subject, data)
  subject
end
reset() click to toggle source
# File lib/cf_message_bus/mock_message_bus.rb, line 89
def reset
  @subscriptions = Hash.new { |hash, key| hash[key] = [] }
end
respond_to_request(request_subject, data) click to toggle source
# File lib/cf_message_bus/mock_message_bus.rb, line 57
def respond_to_request(request_subject, data)
  block = @requests.fetch(request_subject) { lambda { |data| nil } }
  block.call(stringify_keys(data))
end
respond_to_synchronous_request(request_subject, data) click to toggle source
# File lib/cf_message_bus/mock_message_bus.rb, line 53
def respond_to_synchronous_request(request_subject, data)
  @synchronous_requests[request_subject] = data
end
subscribe(subject, opts = {}, &blk) click to toggle source
# File lib/cf_message_bus/mock_message_bus.rb, line 14
def subscribe(subject, opts = {}, &blk)
  @subscriptions[subject] << blk
  subject
end
synchronous_request(subject, data=nil, options={}) click to toggle source
# File lib/cf_message_bus/mock_message_bus.rb, line 35
def synchronous_request(subject, data=nil, options={})
  @published_synchronous_messages.push(subject: subject, data: data, options: options)
  stringify_keys(@synchronous_requests[subject])
end
unsubscribe(subscription_id) click to toggle source
# File lib/cf_message_bus/mock_message_bus.rb, line 40
def unsubscribe(subscription_id)
  @subscriptions.delete(subscription_id)
  @requests.delete(subscription_id)
end

Private Instance Methods

stringify_keys(object) click to toggle source
# File lib/cf_message_bus/mock_message_bus.rb, line 95
def stringify_keys(object)
  case object
  when Array
    object.map {|k| stringify_keys(k) }
  when Hash
    object.inject({}) do |memo, (key, value)|
      memo[key.to_s] = stringify_keys(value)
      memo
    end
  else
    object
  end
end