fake_sqs 0.0.11 → 0.1.0
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 +4 -4
- data/README.md +1 -2
- data/lib/fake_sqs.rb +1 -0
- data/lib/fake_sqs/actions/change_message_visibility.rb +21 -0
- data/lib/fake_sqs/api.rb +12 -0
- data/lib/fake_sqs/collection_view.rb +20 -0
- data/lib/fake_sqs/error_responses.yml +2 -0
- data/lib/fake_sqs/message.rb +13 -0
- data/lib/fake_sqs/queue.rb +100 -21
- data/lib/fake_sqs/queues.rb +6 -0
- data/lib/fake_sqs/version.rb +1 -1
- data/lib/fake_sqs/web_interface.rb +1 -0
- data/spec/acceptance/message_actions_spec.rb +40 -0
- data/spec/unit/collection_view_spec.rb +41 -0
- data/spec/unit/message_spec.rb +31 -0
- data/spec/unit/queue_spec.rb +2 -6
- metadata +30 -26
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 04b7e156149ca16643c8fde1933bca20aea7434b
|
4
|
+
data.tar.gz: be9d4103aa2987ddbb43839c15f3ef85955b8e18
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4ffeacbcc77e857c5c125d90c3eaafdb4bbc068c4f8fc8b11d705d4f3c0e0fa26ef82bd5427cd882ef02e317375b8f35bcdb8399aa3c8bd88aa27763c28e7a89
|
7
|
+
data.tar.gz: 2a8dc5a14fbb7317e7ae6d44e9f79983568a3d204b74359d0cc2932dadd283b9a5ee79008ecb5dc1e649b596afc5ca4d658455cb6e508a420142a706a44e0983
|
data/README.md
CHANGED
@@ -18,17 +18,16 @@ Done so far are:
|
|
18
18
|
* Receive messages (and in batch)
|
19
19
|
* Deleting messages (and in batch)
|
20
20
|
* Changing queue attributes (but not all, and no validation)
|
21
|
+
* Setting visibility timeouts for messages
|
21
22
|
|
22
23
|
Certain bits are left off on purpose, to make it easier to work with, such as:
|
23
24
|
|
24
25
|
* No checking on access keys or signatures
|
25
26
|
* No 60 second delay between deleting a queue and recreating it.
|
26
|
-
* No visibility timeouts (see below about special hooks)
|
27
27
|
|
28
28
|
Other parts are just not done yet:
|
29
29
|
|
30
30
|
* Permissions
|
31
|
-
* Changing message visibility
|
32
31
|
* Error handling
|
33
32
|
|
34
33
|
So, actually, just the basics are implemented at this point.
|
data/lib/fake_sqs.rb
CHANGED
@@ -0,0 +1,21 @@
|
|
1
|
+
module FakeSQS
|
2
|
+
module Actions
|
3
|
+
class ChangeMessageVisibility
|
4
|
+
|
5
|
+
def initialize(options = {})
|
6
|
+
@server = options.fetch(:server)
|
7
|
+
@queues = options.fetch(:queues)
|
8
|
+
@responder = options.fetch(:responder)
|
9
|
+
end
|
10
|
+
|
11
|
+
def call(queue, params)
|
12
|
+
visibility = params.fetch("VisibilityTimeout")
|
13
|
+
receipt = params.fetch("ReceiptHandle")
|
14
|
+
|
15
|
+
@queues.get(queue).change_message_visibility( receipt, visibility.to_i )
|
16
|
+
@responder.call :ChangeMessageVisibility
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/fake_sqs/api.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'fake_sqs/actions/change_message_visibility'
|
1
2
|
require 'fake_sqs/actions/create_queue'
|
2
3
|
require 'fake_sqs/actions/delete_queue'
|
3
4
|
require 'fake_sqs/actions/list_queues'
|
@@ -21,6 +22,13 @@ module FakeSQS
|
|
21
22
|
def initialize(options = {})
|
22
23
|
@queues = options.fetch(:queues)
|
23
24
|
@options = options
|
25
|
+
@run_timer = true
|
26
|
+
@timer = Thread.new do
|
27
|
+
while @run_timer
|
28
|
+
queues.timeout_messages!
|
29
|
+
sleep(5)
|
30
|
+
end
|
31
|
+
end
|
24
32
|
end
|
25
33
|
|
26
34
|
def call(action, *args)
|
@@ -44,5 +52,9 @@ module FakeSQS
|
|
44
52
|
queues.expire
|
45
53
|
end
|
46
54
|
|
55
|
+
def stop
|
56
|
+
@run_timer = false
|
57
|
+
end
|
58
|
+
|
47
59
|
end
|
48
60
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'forwardable'
|
2
|
+
|
3
|
+
module FakeSQS
|
4
|
+
class CollectionView
|
5
|
+
include Enumerable
|
6
|
+
extend Forwardable
|
7
|
+
def_delegators :@original, :[], :each, :empty?, :size, :length
|
8
|
+
|
9
|
+
UnmodifiableObjectError = Class.new(StandardError)
|
10
|
+
|
11
|
+
def initialize( original )
|
12
|
+
@original = original
|
13
|
+
end
|
14
|
+
|
15
|
+
def []=(key_or_index,value)
|
16
|
+
raise UnmodifiableObjectError.new("This is a collection view and can not be modified - #{key_or_index} => #{value}")
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
@@ -16,6 +16,7 @@ InvalidSecurity: 403
|
|
16
16
|
InvalidSecurityToken: 400
|
17
17
|
MalformedVersion: 400
|
18
18
|
MessageTooLong: 400
|
19
|
+
MessageNotInflight: 400
|
19
20
|
MissingClientTokenId: 403
|
20
21
|
MissingCredentials: 401
|
21
22
|
MissingParameter: 400
|
@@ -25,6 +26,7 @@ NotAuthorizedToUseVersion: 401
|
|
25
26
|
QueueDeletedRecently: 400
|
26
27
|
QueueNameExists: 400
|
27
28
|
ReadCountOutOfRange: 400
|
29
|
+
ReceiptHandleIsInvalid: 400
|
28
30
|
RequestExpired: 400
|
29
31
|
RequestThrottled: 403
|
30
32
|
ServiceUnavailable: 503
|
data/lib/fake_sqs/message.rb
CHANGED
@@ -4,6 +4,7 @@ module FakeSQS
|
|
4
4
|
class Message
|
5
5
|
|
6
6
|
attr_reader :body, :id, :md5
|
7
|
+
attr_accessor :visibility_timeout
|
7
8
|
|
8
9
|
def initialize(options = {})
|
9
10
|
@body = options.fetch("MessageBody")
|
@@ -11,6 +12,18 @@ module FakeSQS
|
|
11
12
|
@md5 = options.fetch("MD5") { Digest::MD5.hexdigest(@body) }
|
12
13
|
end
|
13
14
|
|
15
|
+
def expire!
|
16
|
+
self.visibility_timeout = nil
|
17
|
+
end
|
18
|
+
|
19
|
+
def expired?( limit = Time.now )
|
20
|
+
self.visibility_timeout.nil? || self.visibility_timeout < limit
|
21
|
+
end
|
22
|
+
|
23
|
+
def expire_at(seconds)
|
24
|
+
self.visibility_timeout = Time.now + seconds
|
25
|
+
end
|
26
|
+
|
14
27
|
def attributes
|
15
28
|
{
|
16
29
|
"MessageBody" => body,
|
data/lib/fake_sqs/queue.rb
CHANGED
@@ -1,12 +1,17 @@
|
|
1
1
|
require 'securerandom'
|
2
|
+
require 'fake_sqs/collection_view'
|
2
3
|
|
3
4
|
module FakeSQS
|
4
5
|
|
6
|
+
MessageNotInflight = Class.new(RuntimeError)
|
5
7
|
ReadCountOutOfRange = Class.new(RuntimeError)
|
8
|
+
ReceiptHandleIsInvalid = Class.new(RuntimeError)
|
6
9
|
|
7
10
|
class Queue
|
8
11
|
|
9
|
-
|
12
|
+
VISIBILITY_TIMEOUT = 30
|
13
|
+
|
14
|
+
attr_reader :name, :message_factory, :arn, :queue_attributes
|
10
15
|
|
11
16
|
def initialize(options = {})
|
12
17
|
@message_factory = options.fetch(:message_factory)
|
@@ -14,14 +19,15 @@ module FakeSQS
|
|
14
19
|
@name = options.fetch("QueueName")
|
15
20
|
@arn = options.fetch("Arn") { "arn:aws:sqs:us-east-1:#{SecureRandom.hex}:#{@name}" }
|
16
21
|
@queue_attributes = options.fetch("Attributes") { {} }
|
22
|
+
@lock = Monitor.new
|
17
23
|
reset
|
18
24
|
end
|
19
25
|
|
20
26
|
def to_yaml
|
21
27
|
{
|
22
|
-
"QueueName"
|
23
|
-
"Arn"
|
24
|
-
"Attributes"
|
28
|
+
"QueueName" => name,
|
29
|
+
"Arn" => arn,
|
30
|
+
"Attributes" => queue_attributes,
|
25
31
|
}
|
26
32
|
end
|
27
33
|
|
@@ -32,15 +38,17 @@ module FakeSQS
|
|
32
38
|
def attributes
|
33
39
|
queue_attributes.merge(
|
34
40
|
"QueueArn" => arn,
|
35
|
-
"ApproximateNumberOfMessages" => messages.size,
|
36
|
-
"ApproximateNumberOfMessagesNotVisible" => messages_in_flight.size,
|
41
|
+
"ApproximateNumberOfMessages" => @messages.size,
|
42
|
+
"ApproximateNumberOfMessagesNotVisible" => @messages_in_flight.size,
|
37
43
|
)
|
38
44
|
end
|
39
45
|
|
40
46
|
def send_message(options = {})
|
41
|
-
|
42
|
-
|
43
|
-
|
47
|
+
with_lock do
|
48
|
+
message = message_factory.new(options)
|
49
|
+
@messages << message
|
50
|
+
message
|
51
|
+
end
|
44
52
|
end
|
45
53
|
|
46
54
|
def receive_message(options = {})
|
@@ -48,34 +56,99 @@ module FakeSQS
|
|
48
56
|
|
49
57
|
fail ReadCountOutOfRange, amount if amount > 10
|
50
58
|
|
51
|
-
return {} if messages.empty?
|
59
|
+
return {} if @messages.empty?
|
52
60
|
|
53
61
|
result = {}
|
54
62
|
|
55
|
-
|
63
|
+
with_lock do
|
64
|
+
actual_amount = amount > size ? size : amount
|
56
65
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
66
|
+
actual_amount.times do
|
67
|
+
message = @messages.delete_at(rand(size))
|
68
|
+
message.expire_at(default_visibility_timeout)
|
69
|
+
receipt = generate_receipt
|
70
|
+
@messages_in_flight[receipt] = message
|
71
|
+
result[receipt] = message
|
72
|
+
end
|
62
73
|
end
|
63
74
|
|
64
75
|
result
|
65
76
|
end
|
66
77
|
|
78
|
+
def default_visibility_timeout
|
79
|
+
if value = attributes['VisibilityTimeout']
|
80
|
+
value.to_i
|
81
|
+
else
|
82
|
+
VISIBILITY_TIMEOUT
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def timeout_messages!
|
87
|
+
with_lock do
|
88
|
+
expired = @messages_in_flight.inject({}) do |memo,(receipt,message)|
|
89
|
+
if message.expired?
|
90
|
+
memo[receipt] = message
|
91
|
+
end
|
92
|
+
memo
|
93
|
+
end
|
94
|
+
expired.each do |receipt,message|
|
95
|
+
message.expire!
|
96
|
+
@messages << message
|
97
|
+
delete_message(receipt)
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
def change_message_visibility(receipt, visibility)
|
103
|
+
with_lock do
|
104
|
+
message = @messages_in_flight[receipt]
|
105
|
+
raise MessageNotInflight unless message
|
106
|
+
|
107
|
+
if visibility == 0
|
108
|
+
message.expire!
|
109
|
+
@messages << message
|
110
|
+
delete_message(receipt)
|
111
|
+
else
|
112
|
+
message.expire_at(visibility)
|
113
|
+
end
|
114
|
+
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
67
118
|
def delete_message(receipt)
|
68
|
-
|
119
|
+
with_lock do
|
120
|
+
@messages_in_flight.delete(receipt)
|
121
|
+
end
|
69
122
|
end
|
70
123
|
|
71
124
|
def reset
|
72
|
-
|
73
|
-
|
125
|
+
with_lock do
|
126
|
+
@messages = []
|
127
|
+
@messages_view = FakeSQS::CollectionView.new(@messages)
|
128
|
+
reset_messages_in_flight
|
129
|
+
end
|
74
130
|
end
|
75
131
|
|
76
132
|
def expire
|
77
|
-
|
78
|
-
|
133
|
+
with_lock do
|
134
|
+
@messages += @messages_in_flight.values
|
135
|
+
reset_messages_in_flight
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
def reset_messages_in_flight
|
140
|
+
with_lock do
|
141
|
+
@messages_in_flight = {}
|
142
|
+
@messages_in_flight_view = FakeSQS::CollectionView.new(@messages_in_flight)
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
def messages
|
147
|
+
@messages_view
|
148
|
+
end
|
149
|
+
|
150
|
+
def messages_in_flight
|
151
|
+
@messages_in_flight_view
|
79
152
|
end
|
80
153
|
|
81
154
|
def size
|
@@ -86,5 +159,11 @@ module FakeSQS
|
|
86
159
|
SecureRandom.hex
|
87
160
|
end
|
88
161
|
|
162
|
+
def with_lock
|
163
|
+
@lock.synchronize do
|
164
|
+
yield
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
89
168
|
end
|
90
169
|
end
|
data/lib/fake_sqs/queues.rb
CHANGED
data/lib/fake_sqs/version.rb
CHANGED
@@ -56,6 +56,46 @@ describe "Actions for Messages", :sqs do
|
|
56
56
|
messages.map(&:body).should match_array bodies
|
57
57
|
end
|
58
58
|
|
59
|
+
specify "set message timeout to 0" do
|
60
|
+
body = 'some-sample-message'
|
61
|
+
queue.send_message(body)
|
62
|
+
message = queue.receive_message
|
63
|
+
message.body.should == body
|
64
|
+
message.visibility_timeout = 0
|
65
|
+
|
66
|
+
same_message = queue.receive_message
|
67
|
+
same_message.body.should == body
|
68
|
+
end
|
69
|
+
|
70
|
+
specify 'set message timeout and wait for message to come' do
|
71
|
+
|
72
|
+
body = 'some-sample-message'
|
73
|
+
queue.send_message(body)
|
74
|
+
message = queue.receive_message
|
75
|
+
message.body.should == body
|
76
|
+
message.visibility_timeout = 3
|
77
|
+
|
78
|
+
nothing = queue.receive_message
|
79
|
+
nothing.should be_nil
|
80
|
+
|
81
|
+
sleep(10)
|
82
|
+
|
83
|
+
same_message = queue.receive_message
|
84
|
+
same_message.body.should == body
|
85
|
+
end
|
86
|
+
|
87
|
+
specify 'should fail if trying to update the visibility_timeout for a message that is not in flight' do
|
88
|
+
body = 'some-sample-message'
|
89
|
+
queue.send_message(body)
|
90
|
+
message = queue.receive_message
|
91
|
+
message.body.should == body
|
92
|
+
message.visibility_timeout = 0
|
93
|
+
|
94
|
+
expect do
|
95
|
+
message.visibility_timeout = 30
|
96
|
+
end.to raise_error(AWS::SQS::Errors::MessageNotInflight)
|
97
|
+
end
|
98
|
+
|
59
99
|
def let_messages_in_flight_expire
|
60
100
|
$fake_sqs.expire
|
61
101
|
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'fake_sqs/collection_view'
|
2
|
+
|
3
|
+
describe FakeSQS::CollectionView do
|
4
|
+
|
5
|
+
def wrap(collection)
|
6
|
+
FakeSQS::CollectionView.new(collection)
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'should correctly wrap an array' do
|
10
|
+
array = %w{one two three four}
|
11
|
+
view = wrap(array)
|
12
|
+
view[0].should == 'one'
|
13
|
+
view[1].should == 'two'
|
14
|
+
view[2].should == 'three'
|
15
|
+
view[3].should == 'four'
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'should correctly wrap a hash' do
|
19
|
+
hash = { :one => 1, :two => 2, :three => 3 }
|
20
|
+
view = wrap(hash)
|
21
|
+
view[:one].should == 1
|
22
|
+
view[:two].should == 2
|
23
|
+
view[:three].should == 3
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'should respond to empty correctly' do
|
27
|
+
wrap([]).should be_empty
|
28
|
+
wrap({'one' => 1}).should_not be_empty
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'should be enumerable' do
|
32
|
+
result = wrap([1, 2, 3]).map { |i| i * i }
|
33
|
+
result.should == [1, 4, 9]
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'should respond to size/length' do
|
37
|
+
wrap([1, 2, 3]).size.should == 3
|
38
|
+
wrap([]).length.should == 0
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
data/spec/unit/message_spec.rb
CHANGED
@@ -29,6 +29,37 @@ describe FakeSQS::Message do
|
|
29
29
|
|
30
30
|
end
|
31
31
|
|
32
|
+
describe 'visibility_timeout' do
|
33
|
+
|
34
|
+
let :message do
|
35
|
+
create_message
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'should default to nil' do
|
39
|
+
message.visibility_timeout.should be_nil
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'should be expired when it is nil' do
|
43
|
+
message.should be_expired
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'should be expired if set to a previous time' do
|
47
|
+
message.visibility_timeout = Time.now - 1
|
48
|
+
message.should be_expired
|
49
|
+
end
|
50
|
+
|
51
|
+
it 'should not be expired at a future date' do
|
52
|
+
message.visibility_timeout = Time.now + 1
|
53
|
+
message.should_not be_expired
|
54
|
+
end
|
55
|
+
|
56
|
+
it 'should not be expired when set to expire at a future date' do
|
57
|
+
message.expire_at(5)
|
58
|
+
message.visibility_timeout.should be >=(Time.now + 4)
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
|
32
63
|
def create_message(options = {})
|
33
64
|
FakeSQS::Message.new({"MessageBody" => "test"}.merge(options))
|
34
65
|
end
|
data/spec/unit/queue_spec.rb
CHANGED
@@ -1,15 +1,11 @@
|
|
1
1
|
require 'fake_sqs/queue'
|
2
|
+
require 'fake_sqs/message'
|
2
3
|
|
3
4
|
describe FakeSQS::Queue do
|
4
5
|
|
5
6
|
class MessageFactory
|
6
|
-
|
7
|
-
def initialize
|
8
|
-
@count = 0
|
9
|
-
end
|
10
|
-
|
11
7
|
def new(options = {})
|
12
|
-
|
8
|
+
FakeSQS::Message.new({'MessageBody' => 'sample-body'}.merge(options))
|
13
9
|
end
|
14
10
|
end
|
15
11
|
|
metadata
CHANGED
@@ -1,139 +1,139 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fake_sqs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- iain
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-02-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sinatra
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: builder
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rake
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: aws-sdk
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '0'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: faraday
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: '0'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- -
|
94
|
+
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: thin
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- -
|
101
|
+
- - ">="
|
102
102
|
- !ruby/object:Gem::Version
|
103
103
|
version: '0'
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- -
|
108
|
+
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: verbose_hash_fetch
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
|
-
- -
|
115
|
+
- - ">="
|
116
116
|
- !ruby/object:Gem::Version
|
117
117
|
version: '0'
|
118
118
|
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
|
-
- -
|
122
|
+
- - ">="
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '0'
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: activesupport
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
|
-
- -
|
129
|
+
- - ">="
|
130
130
|
- !ruby/object:Gem::Version
|
131
131
|
version: '0'
|
132
132
|
type: :development
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
|
-
- -
|
136
|
+
- - ">="
|
137
137
|
- !ruby/object:Gem::Version
|
138
138
|
version: '0'
|
139
139
|
description: Provides a fake SQS server that you can run locally to test against
|
@@ -144,9 +144,9 @@ executables:
|
|
144
144
|
extensions: []
|
145
145
|
extra_rdoc_files: []
|
146
146
|
files:
|
147
|
-
- .gitignore
|
148
|
-
- .rspec
|
149
|
-
- .travis.yml
|
147
|
+
- ".gitignore"
|
148
|
+
- ".rspec"
|
149
|
+
- ".travis.yml"
|
150
150
|
- Gemfile
|
151
151
|
- MIT-LICENSE.txt
|
152
152
|
- README.md
|
@@ -154,6 +154,7 @@ files:
|
|
154
154
|
- bin/fake_sqs
|
155
155
|
- fake_sqs.gemspec
|
156
156
|
- lib/fake_sqs.rb
|
157
|
+
- lib/fake_sqs/actions/change_message_visibility.rb
|
157
158
|
- lib/fake_sqs/actions/create_queue.rb
|
158
159
|
- lib/fake_sqs/actions/delete_message.rb
|
159
160
|
- lib/fake_sqs/actions/delete_message_batch.rb
|
@@ -167,6 +168,7 @@ files:
|
|
167
168
|
- lib/fake_sqs/actions/set_queue_attributes.rb
|
168
169
|
- lib/fake_sqs/api.rb
|
169
170
|
- lib/fake_sqs/catch_errors.rb
|
171
|
+
- lib/fake_sqs/collection_view.rb
|
170
172
|
- lib/fake_sqs/daemonize.rb
|
171
173
|
- lib/fake_sqs/error_response.rb
|
172
174
|
- lib/fake_sqs/error_responses.yml
|
@@ -187,6 +189,7 @@ files:
|
|
187
189
|
- spec/spec_helper.rb
|
188
190
|
- spec/unit/api_spec.rb
|
189
191
|
- spec/unit/catch_errors_spec.rb
|
192
|
+
- spec/unit/collection_view_spec.rb
|
190
193
|
- spec/unit/error_response_spec.rb
|
191
194
|
- spec/unit/message_spec.rb
|
192
195
|
- spec/unit/queue_factory_spec.rb
|
@@ -204,17 +207,17 @@ require_paths:
|
|
204
207
|
- lib
|
205
208
|
required_ruby_version: !ruby/object:Gem::Requirement
|
206
209
|
requirements:
|
207
|
-
- -
|
210
|
+
- - ">="
|
208
211
|
- !ruby/object:Gem::Version
|
209
212
|
version: '0'
|
210
213
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
211
214
|
requirements:
|
212
|
-
- -
|
215
|
+
- - ">="
|
213
216
|
- !ruby/object:Gem::Version
|
214
217
|
version: '0'
|
215
218
|
requirements: []
|
216
219
|
rubyforge_project:
|
217
|
-
rubygems_version: 2.
|
220
|
+
rubygems_version: 2.2.0
|
218
221
|
signing_key:
|
219
222
|
specification_version: 4
|
220
223
|
summary: Provides a fake SQS server that you can run locally to test against
|
@@ -224,6 +227,7 @@ test_files:
|
|
224
227
|
- spec/spec_helper.rb
|
225
228
|
- spec/unit/api_spec.rb
|
226
229
|
- spec/unit/catch_errors_spec.rb
|
230
|
+
- spec/unit/collection_view_spec.rb
|
227
231
|
- spec/unit/error_response_spec.rb
|
228
232
|
- spec/unit/message_spec.rb
|
229
233
|
- spec/unit/queue_factory_spec.rb
|