Class: BunnyMock::Queue

Inherits:
Object
  • Object
show all
Defined in:
lib/support/bunny_mock.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, attrs = {}) ⇒ Queue

Returns a new instance of Queue.



32
33
34
35
36
37
# File 'lib/support/bunny_mock.rb', line 32

def initialize(name, attrs = {})
  self.name           = name
  self.attrs          = attrs.dup
  self.messages       = []
  self.delivery_count = 0
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method, *args) ⇒ Object



65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/support/bunny_mock.rb', line 65

def method_missing(method, *args)
  method_name  = method.to_s
  is_predicate = false
  if method_name =~ /^(.*)\?$/
    key           = $1.to_sym
    is_predicate = true
  else
    key = method.to_sym
  end

  if attrs.has_key? key
    value = attrs[key]
    is_predicate ? !!value : value
  else
    super
  end
end

Instance Attribute Details

#attrsObject

Returns the value of attribute attrs.



31
32
33
# File 'lib/support/bunny_mock.rb', line 31

def attrs
  @attrs
end

#delivery_countObject

Returns the value of attribute delivery_count.



31
32
33
# File 'lib/support/bunny_mock.rb', line 31

def delivery_count
  @delivery_count
end

#messagesObject

Returns the value of attribute messages.



31
32
33
# File 'lib/support/bunny_mock.rb', line 31

def messages
  @messages
end

#nameObject

Returns the value of attribute name.



31
32
33
# File 'lib/support/bunny_mock.rb', line 31

def name
  @name
end

Instance Method Details

#bind(exchange) ⇒ Object



39
40
41
# File 'lib/support/bunny_mock.rb', line 39

def bind(exchange)
  exchange.queues << self
end

#default_consumerObject



51
52
53
# File 'lib/support/bunny_mock.rb', line 51

def default_consumer
  BunnyMock::Consumer.new(self.delivery_count)
end

#snapshot_messagesObject

NOTE: This is NOT a method that is supported on real Bunny queues.

This is a custom method to get us a deep copy of
all the messages currently in the queue. This is provided
to aid in testing a system where it is not practical for the
test to subscribe to the queue and read the messages, but we
need to verify that certain messages have been published.


61
62
63
# File 'lib/support/bunny_mock.rb', line 61

def snapshot_messages
  Marshal.load(Marshal.dump(messages))
end

#subscribe(*args, &block) ⇒ Object

Note that this doesn’t block waiting for messages like the real world.



44
45
46
47
48
49
# File 'lib/support/bunny_mock.rb', line 44

def subscribe(*args, &block)
  while message = messages.shift
    self.delivery_count += 1
    yield({:payload => message})
  end
end