fake_sqs 0.4.1 → 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fc20ac34a0c6c8147c3af9692169ae145b7d2e9c
4
- data.tar.gz: 2964e38cee5d603014a322e514cfa63989cf66a8
3
+ metadata.gz: 94412f4b22bef545ab170adea1e4a11221474592
4
+ data.tar.gz: d76a7b7b49a90681f18620fcbed7732062e9a226
5
5
  SHA512:
6
- metadata.gz: 8bafd8828d1f473c9a881d4c00a07f9e447bc6153869adbad17ae2d60fb97f5c248558122830ed66635f48b563c5eebb7fd4ce37eba7bc66ea95b6036e8fe6c0
7
- data.tar.gz: e1ec826376dfb67c9f1f910903bf6852e66b73f2821014fe11e773aed50cea51251eed804d69ca99ea24cac3c8515786cf0932edc4cb0187314d7d0e2cb069fa
6
+ metadata.gz: 04e8d176460c83384dfb43c1f5aa669dfedbd68a8168adbe14d7516108271ae736ae1db352fa48bd23d02ced0686f4fa5f4a96a6b8205471af68d0b3ff111486
7
+ data.tar.gz: b3e49559fadd19e3977e5261b5ba724182ed2f2db5e7576cc66cb62d4731221cc7ba796c3d75a53b46801e9cb1d1be46f08ac0dca803df4f01b29ed529732891
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Fake SQS [![Build Status](https://secure.travis-ci.org/iain/fake_sqs.png)](http://travis-ci.org/iain/fake_sqs)
1
+ # Fake SQS [![Build Status](https://api.travis-ci.org/iain/fake_sqs.svg?branch=master)](http://travis-ci.org/iain/fake_sqs) [![Gem Version](https://badge.fury.io/rb/fake_sqs.svg)](https://badge.fury.io/rb/fake_sqs)
2
2
 
3
3
  Fake SQS is a lightweight server that mocks the Amazon SQS API.
4
4
 
@@ -11,13 +11,13 @@ Many features are supported and if you miss something, open a pull.
11
11
  ## Installation
12
12
 
13
13
  ```
14
- gem install fakesqs
14
+ gem install fake_sqs
15
15
  ```
16
16
 
17
17
  ## Running
18
18
 
19
19
  ```
20
- fakesqs --database /path/to/database.yml
20
+ fake_sqs --database /path/to/database.yml
21
21
  ```
22
22
 
23
23
  ## Development
@@ -7,14 +7,16 @@ module FakeSQS
7
7
  @responder = options.fetch(:responder)
8
8
  end
9
9
 
10
- def call(queue, params)
10
+ def call(queue_name, params)
11
+ queue = @queues.get(queue_name)
11
12
  visibility = params.fetch("VisibilityTimeout")
12
13
  receipt = params.fetch("ReceiptHandle")
13
14
 
14
- @queues.get(queue).change_message_visibility( receipt, visibility.to_i )
15
+ queue.change_message_visibility(receipt, visibility.to_i)
16
+
15
17
  @responder.call :ChangeMessageVisibility
16
18
  end
17
19
 
18
20
  end
19
21
  end
20
- end
22
+ end
@@ -7,7 +7,9 @@ module FakeSQS
7
7
  @responder = options.fetch(:responder)
8
8
  end
9
9
 
10
- def call(queue, params)
10
+ def call(queue_name, params)
11
+ queue = @queues.get(queue_name)
12
+
11
13
  keys = params.keys.map do |key|
12
14
  case key
13
15
  when /^ChangeMessageVisibilityBatchRequestEntry\.(\w+)\.Id$/
@@ -15,19 +17,17 @@ module FakeSQS
15
17
  end
16
18
  end.compact
17
19
 
18
- messages = keys.map do |key|
20
+ ids = keys.map do |key|
19
21
  receipt = params.fetch("ChangeMessageVisibilityBatchRequestEntry.#{key}.ReceiptHandle")
20
22
  timeout = params.fetch("ChangeMessageVisibilityBatchRequestEntry.#{key}.VisibilityTimeout").to_i
21
- @queues.get(queue).change_message_visibility(receipt, timeout)
23
+ queue.change_message_visibility(receipt, timeout)
22
24
  params.fetch("ChangeMessageVisibilityBatchRequestEntry.#{key}.Id")
23
25
  end
24
26
 
25
27
  @responder.call :ChangeMessageVisibilityBatch do |xml|
26
- xml.ChangeMessageVisibilityBatchResult do
27
- messages.each do |message|
28
- xml.ChangeMessageVisibilityBatchResultEntry do
29
- xml.Id message
30
- end
28
+ ids.each do |id|
29
+ xml.ChangeMessageVisibilityBatchResultEntry do
30
+ xml.Id id
31
31
  end
32
32
  end
33
33
  end
@@ -35,4 +35,4 @@ module FakeSQS
35
35
 
36
36
  end
37
37
  end
38
- end
38
+ end
@@ -8,8 +8,8 @@ module FakeSQS
8
8
  @responder = options.fetch(:responder)
9
9
  end
10
10
 
11
- def call(name, params)
12
- queue = @queues.get(name)
11
+ def call(queue_name, params)
12
+ queue = @queues.get(queue_name)
13
13
 
14
14
  receipt = params.fetch("ReceiptHandle")
15
15
  queue.delete_message(receipt)
@@ -8,16 +8,14 @@ module FakeSQS
8
8
  @responder = options.fetch(:responder)
9
9
  end
10
10
 
11
- def call(name, params)
12
- queue = @queues.get(name)
11
+ def call(queue_name, params)
12
+ queue = @queues.get(queue_name)
13
13
  receipts = params.select { |k,v| k =~ /DeleteMessageBatchRequestEntry\.\d+\.ReceiptHandle/ }
14
14
 
15
- deleted = []
16
-
17
- receipts.each do |key, value|
15
+ deleted = receipts.each do |key, value|
18
16
  id = key.split('.')[1]
19
- queue.delete_message(value)
20
- deleted << params.fetch("DeleteMessageBatchRequestEntry.#{id}.Id")
17
+ queue.delete_message(value) # Broken, can only delete in-flight messages
18
+ params.fetch("DeleteMessageBatchRequestEntry.#{id}.Id")
21
19
  end
22
20
 
23
21
  @responder.call :DeleteMessageBatch do |xml|
@@ -8,8 +8,8 @@ module FakeSQS
8
8
  @responder = options.fetch(:responder)
9
9
  end
10
10
 
11
- def call(name, params)
12
- @queues.delete(name, params)
11
+ def call(queue_name, params = {})
12
+ @queues.delete(queue_name, params)
13
13
  @responder.call :DeleteQueue
14
14
  end
15
15
 
@@ -8,8 +8,8 @@ module FakeSQS
8
8
  @responder = options.fetch(:responder)
9
9
  end
10
10
 
11
- def call(name, params)
12
- queue_arn = @queues.get(name).arn
11
+ def call(queue_name, params)
12
+ queue_arn = @queues.get(queue_name).arn
13
13
  queue_urls = @queues.list.select do |queue|
14
14
  redrive_policy = queue.attributes.fetch("RedrivePolicy", nil)
15
15
  redrive_policy && redrive_policy =~ /deadLetterTargetArn\":\"#{queue_arn}/
@@ -8,8 +8,8 @@ module FakeSQS
8
8
  @responder = options.fetch(:responder)
9
9
  end
10
10
 
11
- def call(name, params)
12
- queue = @queues.get(name)
11
+ def call(queue_name, params)
12
+ queue = @queues.get(queue_name)
13
13
  queue.reset()
14
14
  @responder.call :PurgeQueue
15
15
  end
@@ -8,8 +8,8 @@ module FakeSQS
8
8
  @responder = options.fetch(:responder)
9
9
  end
10
10
 
11
- def call(name, params)
12
- queue = @queues.get(name)
11
+ def call(queue_name, params)
12
+ queue = @queues.get(queue_name)
13
13
  filtered_attribute_names = []
14
14
  params.select{|k,v | k =~ /AttributeName\.\d+/}.each do |key, value|
15
15
  filtered_attribute_names << value
@@ -36,4 +36,4 @@ module FakeSQS
36
36
  end
37
37
  end
38
38
  end
39
- end
39
+ end
@@ -8,8 +8,8 @@ module FakeSQS
8
8
  @responder = options.fetch(:responder)
9
9
  end
10
10
 
11
- def call(name, params)
12
- queue = @queues.get(name)
11
+ def call(queue_name, params)
12
+ queue = @queues.get(queue_name)
13
13
  message = queue.send_message(params)
14
14
  @responder.call :SendMessage do |xml|
15
15
  xml.MD5OfMessageBody message.md5
@@ -8,9 +8,8 @@ module FakeSQS
8
8
  @responder = options.fetch(:responder)
9
9
  end
10
10
 
11
- def call(name, params)
12
- queue = @queues.get(name)
13
-
11
+ def call(queue_name, params)
12
+ queue = @queues.get(queue_name)
14
13
  messages = params.select { |k,v| k =~ /SendMessageBatchRequestEntry\.\d+\.MessageBody/ }
15
14
 
16
15
  results = {}
@@ -29,7 +29,7 @@ module FakeSQS
29
29
  @timer = Thread.new do
30
30
  while @run_timer
31
31
  queues.timeout_messages!
32
- sleep(5)
32
+ sleep(0.1)
33
33
  end
34
34
  end
35
35
  end
@@ -56,6 +56,7 @@ module FakeSQS
56
56
  end
57
57
 
58
58
  def delete(key)
59
+ @queue_objects.delete(key)
59
60
  storage.delete(key)
60
61
  end
61
62
 
@@ -0,0 +1,12 @@
1
+ require 'sinatra/base'
2
+
3
+ module FakeSQS
4
+ class Helper
5
+
6
+ def queue_from_url(queue_url)
7
+ uri = URI.parse(queue_url)
8
+ return uri.path.tr('/', '')
9
+ end
10
+
11
+ end
12
+ end
@@ -1,4 +1,5 @@
1
1
  require 'securerandom'
2
+ require 'digest/sha1'
2
3
 
3
4
  module FakeSQS
4
5
  class Message
@@ -52,5 +53,9 @@ module FakeSQS
52
53
  }
53
54
  end
54
55
 
56
+ def receipt
57
+ Digest::SHA1.hexdigest self.id
58
+ end
59
+
55
60
  end
56
61
  end
@@ -2,6 +2,7 @@ require 'monitor'
2
2
  require 'securerandom'
3
3
  require 'fake_sqs/collection_view'
4
4
  require 'json'
5
+
5
6
  module FakeSQS
6
7
 
7
8
  MessageNotInflight = Class.new(RuntimeError)
@@ -47,7 +48,9 @@ module FakeSQS
47
48
  def send_message(options = {})
48
49
  with_lock do
49
50
  message = options.fetch(:message){ message_factory.new(options) }
50
- @messages << message
51
+ if message
52
+ @messages[message.receipt] = message
53
+ end
51
54
  message
52
55
  end
53
56
  end
@@ -64,17 +67,16 @@ module FakeSQS
64
67
 
65
68
  with_lock do
66
69
  actual_amount = amount > published_size ? published_size : amount
67
- published_messages = @messages.select { |m| m.published? }
70
+ published_messages = @messages.values.select { |m| m.published? }
68
71
 
69
72
  actual_amount.times do
70
73
  message = published_messages.delete_at(rand(published_size))
71
- @messages.delete(message)
74
+ @messages.delete(message.receipt)
72
75
  unless check_message_for_dlq(message, options)
73
76
  message.expire_at(visibility_timeout)
74
77
  message.receive!
75
- receipt = generate_receipt
76
- @messages_in_flight[receipt] = message
77
- result[receipt] = message
78
+ @messages_in_flight[message.receipt] = message
79
+ result[message.receipt] = message
78
80
  end
79
81
  end
80
82
  end
@@ -100,8 +102,8 @@ module FakeSQS
100
102
  end
101
103
  expired.each do |receipt,message|
102
104
  message.expire!
103
- @messages << message
104
- delete_message(receipt)
105
+ @messages[receipt] = message
106
+ @messages_in_flight.delete(receipt)
105
107
  end
106
108
  end
107
109
  end
@@ -113,8 +115,8 @@ module FakeSQS
113
115
 
114
116
  if visibility == 0
115
117
  message.expire!
116
- @messages << message
117
- delete_message(receipt)
118
+ @messages[receipt] = message
119
+ @messages_in_flight.delete(receipt)
118
120
  else
119
121
  message.expire_at(visibility)
120
122
  end
@@ -134,13 +136,14 @@ module FakeSQS
134
136
 
135
137
  def delete_message(receipt)
136
138
  with_lock do
139
+ @messages.delete(receipt)
137
140
  @messages_in_flight.delete(receipt)
138
141
  end
139
142
  end
140
143
 
141
144
  def reset
142
145
  with_lock do
143
- @messages = []
146
+ @messages = {}
144
147
  @messages_view = FakeSQS::CollectionView.new(@messages)
145
148
  reset_messages_in_flight
146
149
  end
@@ -148,7 +151,8 @@ module FakeSQS
148
151
 
149
152
  def expire
150
153
  with_lock do
151
- @messages += @messages_in_flight.values
154
+ @messages.merge!(@messages_in_flight)
155
+ @messages_in_flight.clear()
152
156
  reset_messages_in_flight
153
157
  end
154
158
  end
@@ -169,15 +173,11 @@ module FakeSQS
169
173
  end
170
174
 
171
175
  def size
172
- messages.size
176
+ @messages.size
173
177
  end
174
178
 
175
179
  def published_size
176
- messages.select { |m| m.published? }.size
177
- end
178
-
179
- def generate_receipt
180
- SecureRandom.hex
180
+ @messages.values.select { |m| m.published? }.size
181
181
  end
182
182
 
183
183
  def with_lock
@@ -75,7 +75,7 @@ module FakeSQS
75
75
  end
76
76
 
77
77
  def verbose
78
- if debug?
78
+ if options[:verbose]
79
79
  "--verbose"
80
80
  else
81
81
  "--no-verbose"
@@ -1,3 +1,3 @@
1
1
  module FakeSQS
2
- VERSION = "0.4.1"
2
+ VERSION = "0.4.2"
3
3
  end
@@ -1,4 +1,5 @@
1
1
  require 'sinatra/base'
2
+ require 'fake_sqs/helper'
2
3
  require 'fake_sqs/catch_errors'
3
4
  require 'fake_sqs/error_response'
4
5
 
@@ -37,15 +38,15 @@ module FakeSQS
37
38
 
38
39
  handle "/", [:get, :post] do
39
40
  if params['QueueUrl']
40
- queue = URI.parse(params['QueueUrl']).path.gsub(/\//, '')
41
- return settings.api.call(action, request, queue, params) unless queue.empty?
41
+ queue_name = Helper::queue_from_url(params['QueueUrl'])
42
+ return settings.api.call(action, request, queue_name, params) unless queue_name.empty?
42
43
  end
43
44
 
44
45
  settings.api.call(action, request, params)
45
46
  end
46
47
 
47
- handle "/:queue", [:get, :post] do |queue|
48
- settings.api.call(action, request, queue, params)
48
+ handle "/:queue_name", [:get, :post] do |queue_name|
49
+ settings.api.call(action, request, queue_name, params)
49
50
  end
50
51
  end
51
52
  end
@@ -11,7 +11,6 @@ RSpec.describe "Actions for Messages", :sqs do
11
11
  end
12
12
 
13
13
  let(:sqs) { Aws::SQS::Client.new }
14
-
15
14
  let(:queue_url) { sqs.get_queue_url(queue_name: QUEUE_NAME).queue_url }
16
15
 
17
16
  specify "SendMessage" do
@@ -94,13 +93,13 @@ RSpec.describe "Actions for Messages", :sqs do
94
93
  queue_url: queue_url,
95
94
  ).messages.first
96
95
 
96
+ let_messages_in_flight_expire
97
+
97
98
  sqs.delete_message(
98
99
  queue_url: queue_url,
99
100
  receipt_handle: message1.receipt_handle,
100
101
  )
101
102
 
102
- let_messages_in_flight_expire
103
-
104
103
  response = sqs.receive_message(
105
104
  queue_url: queue_url,
106
105
  )
@@ -121,25 +120,26 @@ RSpec.describe "Actions for Messages", :sqs do
121
120
  queue_url: queue_url,
122
121
  max_number_of_messages: 2,
123
122
  )
123
+ expect(messages_response.messages.size).to eq 2
124
124
 
125
- entries = messages_response.messages.map { |msg|
126
- {
127
- id: SecureRandom.uuid,
128
- receipt_handle: msg.receipt_handle,
129
- }
130
- }
125
+ let_messages_in_flight_expire
131
126
 
132
- sqs.delete_message_batch(
127
+ response = sqs.delete_message_batch(
133
128
  queue_url: queue_url,
134
- entries: entries,
129
+ entries: messages_response.messages.map { |msg|
130
+ {
131
+ id: SecureRandom.uuid,
132
+ receipt_handle: msg.receipt_handle,
133
+ }
134
+ },
135
135
  )
136
+ expect(response.successful.size).to eq(2)
136
137
 
137
- let_messages_in_flight_expire
138
-
139
- response = sqs.receive_message(
138
+ messages_response = sqs.receive_message(
140
139
  queue_url: queue_url,
140
+ max_number_of_messages: 2,
141
141
  )
142
- expect(response.messages.size).to eq 0
142
+ expect(messages_response.messages.size).to eq 0
143
143
  end
144
144
 
145
145
  specify "PurgeQueue" do
@@ -163,7 +163,7 @@ RSpec.describe "Actions for Messages", :sqs do
163
163
  end
164
164
 
165
165
  specify "DeleteQueue" do
166
- sqs.send_message(
166
+ sent_message = sqs.send_message(
167
167
  queue_url: queue_url,
168
168
  message_body: "test1"
169
169
  )
@@ -171,8 +171,11 @@ RSpec.describe "Actions for Messages", :sqs do
171
171
  response = sqs.receive_message(
172
172
  queue_url: queue_url,
173
173
  )
174
+ expect(response.messages[0].message_id).to eq sent_message.message_id
174
175
  expect(response.messages.size).to eq 1
175
176
 
177
+ let_messages_in_flight_expire
178
+
176
179
  sqs.delete_queue(queue_url: queue_url)
177
180
  sqs.create_queue(queue_name: QUEUE_NAME)
178
181
 
@@ -185,7 +188,7 @@ RSpec.describe "Actions for Messages", :sqs do
185
188
  specify "SendMessageBatch" do
186
189
  bodies = %w(a b c)
187
190
 
188
- sqs.send_message_batch(
191
+ response = sqs.send_message_batch(
189
192
  queue_url: queue_url,
190
193
  entries: bodies.map { |bd|
191
194
  {
@@ -194,12 +197,12 @@ RSpec.describe "Actions for Messages", :sqs do
194
197
  }
195
198
  }
196
199
  )
200
+ expect(response.successful.size).to eq(3)
197
201
 
198
202
  messages_response = sqs.receive_message(
199
203
  queue_url: queue_url,
200
204
  max_number_of_messages: 3,
201
205
  )
202
-
203
206
  expect(messages_response.messages.map(&:body)).to match_array bodies
204
207
  end
205
208
 
@@ -213,14 +216,14 @@ RSpec.describe "Actions for Messages", :sqs do
213
216
 
214
217
  message = sqs.receive_message(
215
218
  queue_url: queue_url,
219
+ visibility_timeout: 10,
216
220
  ).messages.first
217
-
218
221
  expect(message.body).to eq body
219
222
 
220
223
  sqs.change_message_visibility(
221
224
  queue_url: queue_url,
222
225
  receipt_handle: message.receipt_handle,
223
- visibility_timeout: 0
226
+ visibility_timeout: 0,
224
227
  )
225
228
 
226
229
  same_message = sqs.receive_message(
@@ -239,13 +242,14 @@ RSpec.describe "Actions for Messages", :sqs do
239
242
 
240
243
  message = sqs.receive_message(
241
244
  queue_url: queue_url,
245
+ visibility_timeout: 10,
242
246
  ).messages.first
243
247
  expect(message.body).to eq body
244
248
 
245
249
  sqs.change_message_visibility(
246
250
  queue_url: queue_url,
247
251
  receipt_handle: message.receipt_handle,
248
- visibility_timeout: 2
252
+ visibility_timeout: 1,
249
253
  )
250
254
 
251
255
  nothing = sqs.receive_message(
@@ -253,9 +257,7 @@ RSpec.describe "Actions for Messages", :sqs do
253
257
  )
254
258
  expect(nothing.messages.size).to eq 0
255
259
 
256
- # Changed from sleep 5 to sleep 7 due to race conditions in Travis build
257
- # see https://github.com/iain/fake_sqs/pull/32
258
- sleep(7)
260
+ sleep(2)
259
261
 
260
262
  same_message = sqs.receive_message(
261
263
  queue_url: queue_url,
@@ -264,27 +266,15 @@ RSpec.describe "Actions for Messages", :sqs do
264
266
  end
265
267
 
266
268
  specify 'should fail if trying to update the visibility_timeout for a message that is not in flight' do
267
- body = 'some-sample-message'
268
- sqs.send_message(
269
- queue_url: queue_url,
270
- message_body: body,
271
- )
272
-
273
- message = sqs.receive_message(
274
- queue_url: queue_url,
275
- ).messages.first
276
- expect(message.body).to eq body
277
-
278
- sqs.change_message_visibility(
269
+ response = sqs.send_message(
279
270
  queue_url: queue_url,
280
- receipt_handle: message.receipt_handle,
281
- visibility_timeout: 0
271
+ message_body: 'some-sample-message',
282
272
  )
283
273
 
284
274
  expect {
285
275
  sqs.change_message_visibility(
286
276
  queue_url: queue_url,
287
- receipt_handle: message.receipt_handle,
277
+ receipt_handle: response.message_id,
288
278
  visibility_timeout: 30
289
279
  )
290
280
  }.to raise_error(Aws::SQS::Errors::MessageNotInflight)
@@ -292,7 +282,7 @@ RSpec.describe "Actions for Messages", :sqs do
292
282
 
293
283
  specify 'ChangeMessageVisibilityBatch' do
294
284
  bodies = (1..10).map { |n| n.to_s }
295
- sqs.send_message_batch(
285
+ response = sqs.send_message_batch(
296
286
  queue_url: queue_url,
297
287
  entries: bodies.map { |bd|
298
288
  {
@@ -301,15 +291,16 @@ RSpec.describe "Actions for Messages", :sqs do
301
291
  }
302
292
  }
303
293
  )
294
+ expect(response.successful.size).to eq(10)
295
+
304
296
  message = sqs.receive_message(
305
297
  queue_url: queue_url,
306
298
  max_number_of_messages: 10,
307
- visibility_timeout: 0,
299
+ visibility_timeout: 1,
308
300
  )
309
-
310
301
  expect(message.messages.size).to eq(10)
311
302
 
312
- sqs.change_message_visibility_batch(
303
+ response = sqs.change_message_visibility_batch(
313
304
  queue_url: queue_url,
314
305
  entries: message.messages.map { |m|
315
306
  {
@@ -319,12 +310,14 @@ RSpec.describe "Actions for Messages", :sqs do
319
310
  }
320
311
  }
321
312
  )
313
+ expect(response.successful.size).to eq(10)
314
+
315
+ sleep(2)
322
316
 
323
317
  message = sqs.receive_message(
324
318
  queue_url: queue_url,
325
319
  max_number_of_messages: 10,
326
320
  )
327
-
328
321
  expect(message.messages.size).to eq(0)
329
322
  end
330
323
 
@@ -367,7 +360,7 @@ RSpec.describe "Actions for Messages", :sqs do
367
360
  sqs.change_message_visibility(
368
361
  queue_url: queue_url,
369
362
  receipt_handle: message.receipt_handle,
370
- visibility_timeout: 0
363
+ visibility_timeout: 0,
371
364
  )
372
365
  end
373
366
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fake_sqs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - iain
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-07-22 00:00:00.000000000 Z
11
+ date: 2017-07-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -191,6 +191,7 @@ files:
191
191
  - lib/fake_sqs/databases/memory.rb
192
192
  - lib/fake_sqs/error_response.rb
193
193
  - lib/fake_sqs/error_responses.yml
194
+ - lib/fake_sqs/helper.rb
194
195
  - lib/fake_sqs/message.rb
195
196
  - lib/fake_sqs/queue.rb
196
197
  - lib/fake_sqs/queue_factory.rb