Class: FakeSQS::Queue

Inherits:
Object
  • Object
show all
Defined in:
lib/fake_sqs/queue.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Queue

Returns a new instance of Queue.



11
12
13
14
15
# File 'lib/fake_sqs/queue.rb', line 11

def initialize(options = {})
  @name = options.fetch("QueueName")
  @message_factory = options.fetch(:message_factory)
  reset
end

Instance Attribute Details

#message_factoryObject (readonly)

Returns the value of attribute message_factory.



9
10
11
# File 'lib/fake_sqs/queue.rb', line 9

def message_factory
  @message_factory
end

#messagesObject (readonly)

Returns the value of attribute messages.



9
10
11
# File 'lib/fake_sqs/queue.rb', line 9

def messages
  @messages
end

#messages_in_flightObject (readonly)

Returns the value of attribute messages_in_flight.



9
10
11
# File 'lib/fake_sqs/queue.rb', line 9

def messages_in_flight
  @messages_in_flight
end

#nameObject (readonly)

Returns the value of attribute name.



9
10
11
# File 'lib/fake_sqs/queue.rb', line 9

def name
  @name
end

Instance Method Details

#delete_message(receipt) ⇒ Object



44
45
46
# File 'lib/fake_sqs/queue.rb', line 44

def delete_message(receipt)
  message = messages_in_flight.delete(receipt)
end

#expireObject



53
54
55
56
# File 'lib/fake_sqs/queue.rb', line 53

def expire
  @messages += messages_in_flight.values
  @messages_in_flight = {}
end

#generate_receiptObject



62
63
64
# File 'lib/fake_sqs/queue.rb', line 62

def generate_receipt
  SecureRandom.hex
end

#receive_message(options = {}) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/fake_sqs/queue.rb', line 23

def receive_message(options = {})
  amount = Integer options.fetch("MaxNumberOfMessages") { "1" }

  fail ReadCountOutOfRange, amount if amount > 10

  return {} if messages.empty?

  result = {}

  actual_amount = amount > size ? size : amount

  actual_amount.times do
    message = messages.delete_at(rand(size))
    receipt = generate_receipt
    messages_in_flight[receipt] = message
    result[receipt] = message
  end

  result
end

#resetObject



48
49
50
51
# File 'lib/fake_sqs/queue.rb', line 48

def reset
  @messages = []
  @messages_in_flight = {}
end

#send_message(options = {}) ⇒ Object



17
18
19
20
21
# File 'lib/fake_sqs/queue.rb', line 17

def send_message(options = {})
  message = message_factory.new(options)
  messages << message
  message
end

#sizeObject



58
59
60
# File 'lib/fake_sqs/queue.rb', line 58

def size
  messages.size
end