Class: Ears::Testing::MessageCapture

Inherits:
Object
  • Object
show all
Defined in:
lib/ears/testing/message_capture.rb

Defined Under Namespace

Classes: Message

Instance Method Summary collapse

Constructor Details

#initializeMessageCapture

Returns a new instance of MessageCapture.



15
16
17
18
# File 'lib/ears/testing/message_capture.rb', line 15

def initialize
  @messages = {}
  @mutex = Mutex.new
end

Instance Method Details

#add_message(exchange_name, data, routing_key, options = {}) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/ears/testing/message_capture.rb', line 20

def add_message(exchange_name, data, routing_key, options = {})
  @mutex.synchronize do
    @messages[exchange_name] ||= []

    message =
      Message.new(
        exchange_name: exchange_name,
        routing_key: routing_key,
        data: data,
        options: options,
        timestamp: Time.now,
        thread_id: Thread.current.object_id.to_s,
      )

    @messages[exchange_name] << message

    shift_messages(exchange_name)

    message
  end
end

#all_messagesObject



46
47
48
# File 'lib/ears/testing/message_capture.rb', line 46

def all_messages
  @mutex.synchronize { @messages.values.flatten }
end

#clearObject



50
51
52
# File 'lib/ears/testing/message_capture.rb', line 50

def clear
  @mutex.synchronize { @messages.clear }
end

#count(exchange_name = nil) ⇒ Object



54
55
56
57
58
59
60
# File 'lib/ears/testing/message_capture.rb', line 54

def count(exchange_name = nil)
  @mutex.synchronize do
    return (@messages[exchange_name] || []).size if exchange_name

    @messages.values.sum(&:size)
  end
end

#empty?Boolean

Returns:

  • (Boolean)


62
63
64
65
66
# File 'lib/ears/testing/message_capture.rb', line 62

def empty?
  @mutex.synchronize do
    @messages.empty? || @messages.values.all?(&:empty?)
  end
end

#find_messages(exchange_name: nil, routing_key: nil, data: nil) ⇒ Object



68
69
70
71
72
73
74
75
76
77
# File 'lib/ears/testing/message_capture.rb', line 68

def find_messages(exchange_name: nil, routing_key: nil, data: nil)
  messages = exchange_name ? messages_for(exchange_name) : all_messages

  messages.select do |msg|
    next false if routing_key && msg.routing_key != routing_key
    next false if data && msg.data != data

    true
  end
end

#messages_for(exchange_name) ⇒ Object



42
43
44
# File 'lib/ears/testing/message_capture.rb', line 42

def messages_for(exchange_name)
  @mutex.synchronize { (@messages[exchange_name] || []).dup }
end