iron_mq 3.1.0 → 4.0.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 +7 -0
- data/Gemfile.lock +10 -8
- data/README.md +278 -53
- data/iron_mq.gemspec +3 -2
- data/lib/iron_mq/client.rb +32 -9
- data/lib/iron_mq/messages.rb +21 -104
- data/lib/iron_mq/queues.rb +149 -142
- data/lib/iron_mq/response.rb +16 -15
- data/lib/iron_mq/subscribers.rb +12 -21
- data/lib/iron_mq/version.rb +1 -1
- data/test/quick_run.rb +69 -39
- data/test/test_base.rb +13 -5
- data/test/test_beanstalkd.rb +26 -4
- data/test/test_bulk.rb +7 -3
- data/test/test_iron_mq.rb +370 -159
- data/test/test_push_queues.rb +21 -7
- metadata +41 -45
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: ce00af7c17301f12971aae72083ba984718c11be
|
4
|
+
data.tar.gz: 42965aeda2d296af77c3125a663132c7beb0a450
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 0f40c8007eba47c0982c091e9857b79ff2be1c112416a0094196601e3744be3516680a9f67f9c2f8ebb543d09a84418e20f5e12d1960c424d612a5413fcb0028
|
7
|
+
data.tar.gz: 162e8e411c13837561c0c8bc1e3a5bd874ccd5df8110e1ae0b832994df27560217192d3d1c8c2fc03fb295f23ca2ba344646e73bd77ebb86ea4e6c014f55d8f9
|
data/Gemfile.lock
CHANGED
@@ -1,32 +1,33 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
iron_mq (
|
4
|
+
iron_mq (4.0.0)
|
5
5
|
iron_core (>= 0.5.1)
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: https://rubygems.org/
|
9
9
|
specs:
|
10
10
|
beanstalk-client (1.1.1)
|
11
|
-
concur (
|
12
|
-
ethon (0.5.
|
11
|
+
concur (2.0.0)
|
12
|
+
ethon (0.5.9)
|
13
13
|
ffi (~> 1.2.0)
|
14
14
|
mime-types (~> 1.18)
|
15
15
|
ffi (1.2.1)
|
16
16
|
iron_core (0.5.1)
|
17
17
|
rest (>= 2.2.0)
|
18
|
-
mime-types (1.
|
19
|
-
minitest (4.
|
18
|
+
mime-types (1.21)
|
19
|
+
minitest (4.6.2)
|
20
20
|
net-http-persistent (2.8)
|
21
|
+
quicky (0.4.0)
|
21
22
|
rake (10.0.3)
|
22
23
|
rest (2.2.0)
|
23
24
|
net-http-persistent
|
24
25
|
rest-client (>= 0.3.0)
|
25
26
|
rest-client (1.6.7)
|
26
27
|
mime-types (>= 1.16)
|
27
|
-
test-unit (2.5.
|
28
|
-
typhoeus (0.
|
29
|
-
ethon (~> 0.5.
|
28
|
+
test-unit (2.5.4)
|
29
|
+
typhoeus (0.6.1)
|
30
|
+
ethon (~> 0.5.9)
|
30
31
|
uber_config (1.0.5)
|
31
32
|
|
32
33
|
PLATFORMS
|
@@ -38,6 +39,7 @@ DEPENDENCIES
|
|
38
39
|
iron_mq!
|
39
40
|
minitest
|
40
41
|
net-http-persistent
|
42
|
+
quicky
|
41
43
|
rake
|
42
44
|
test-unit
|
43
45
|
typhoeus (>= 0.5.4)
|
data/README.md
CHANGED
@@ -6,113 +6,338 @@ much as possible so if you see an option in the API docs, you can use it in the
|
|
6
6
|
|
7
7
|
http://dev.iron.io/mq/reference/api/
|
8
8
|
|
9
|
-
Getting Started
|
10
|
-
==============
|
9
|
+
#Getting Started
|
11
10
|
|
12
11
|
1\. Install the gem:
|
13
12
|
|
14
|
-
|
13
|
+
```ruby
|
14
|
+
gem install iron_mq
|
15
|
+
```
|
15
16
|
|
16
|
-
2\. Setup your Iron.io credentials: http://dev.iron.io/
|
17
|
+
2\. Setup your Iron.io credentials: http://dev.iron.io/mq/reference/configuration/
|
17
18
|
|
18
19
|
3\. Create an IronMQ client object:
|
19
20
|
|
20
|
-
|
21
|
+
```ruby
|
22
|
+
ironmq = IronMQ::Client.new
|
23
|
+
```
|
21
24
|
|
22
25
|
Or pass in credentials:
|
23
26
|
|
24
|
-
|
25
|
-
|
27
|
+
```ruby
|
28
|
+
ironmq = IronMQ::Client.new(:token => "MY_TOKEN", :project_id => "MY_PROJECT_ID")
|
29
|
+
```
|
26
30
|
|
27
|
-
The Basics
|
28
|
-
=========
|
31
|
+
#The Basics
|
29
32
|
|
30
|
-
|
33
|
+
###Get a Queue Object
|
31
34
|
|
32
35
|
You can have as many queues as you want, each with their own unique set of messages.
|
33
36
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
+
```ruby
|
38
|
+
queue = ironmq.queue("my_queue")
|
39
|
+
```
|
37
40
|
|
38
|
-
|
41
|
+
Now you can use it.
|
39
42
|
|
40
|
-
|
43
|
+
### Post a Message on a Queue
|
41
44
|
|
42
|
-
|
45
|
+
Messages are placed on the queue in a FIFO arrangement.
|
46
|
+
If a queue does not exist, it will be created upon the first posting of a message.
|
43
47
|
|
44
|
-
|
48
|
+
```ruby
|
49
|
+
queue.post("hello world!")
|
50
|
+
```
|
45
51
|
|
46
|
-
###
|
52
|
+
### Retrieve Queue Information
|
47
53
|
|
48
|
-
|
49
|
-
|
54
|
+
```ruby
|
55
|
+
queue.info # => {"id"=>"5127bf043264140e863e2283", "name"=>"my_queue", ...}
|
56
|
+
queue.id # => "5127bf043264140e863e2283"
|
57
|
+
```
|
50
58
|
|
51
|
-
Get a
|
59
|
+
### Get a Message off a Queue
|
52
60
|
|
53
|
-
|
61
|
+
```ruby
|
62
|
+
msg = queue.get
|
63
|
+
msg.body # => "hello world!"
|
64
|
+
```
|
54
65
|
|
55
|
-
When you pop/get a message from the queue, it
|
56
|
-
|
66
|
+
When you pop/get a message from the queue, it is no longer on the queue but it still exists within the system.
|
67
|
+
You have to explicitly delete the message or else it will go back onto the queue after the `timeout`.
|
68
|
+
The default `timeout` is 60 seconds. Minimal `timeout` is 30 seconds.
|
57
69
|
|
58
|
-
### Delete a
|
70
|
+
### Delete a Message from a Queue
|
59
71
|
|
60
|
-
|
72
|
+
```ruby
|
73
|
+
msg.delete
|
74
|
+
# or
|
75
|
+
queue.delete(msg.id)
|
76
|
+
```
|
61
77
|
|
62
78
|
Be sure to delete a message from the queue when you're done with it.
|
63
79
|
|
64
|
-
### Poll for messages:
|
65
80
|
|
66
|
-
|
67
|
-
|
68
|
-
|
81
|
+
#Client
|
82
|
+
|
83
|
+
`IronMQ::Client` is based on `IronCore::Client` and provides easy access to the queues and messages.
|
84
|
+
|
85
|
+
```ruby
|
86
|
+
ironmq = IronMQ::Client.new(:token => "MY_TOKEN", :project_id => "MY_PROJECT_ID")
|
87
|
+
```
|
88
|
+
|
89
|
+
### List Queues
|
90
|
+
|
91
|
+
```ruby
|
92
|
+
all_queues = ironmq.queues.list # => [#<IronMQ::Queue:...>, ...]
|
93
|
+
# or
|
94
|
+
all_queues = ironmq.queues.all # => [#<IronMQ::Queue:...>, ...]
|
95
|
+
```
|
96
|
+
|
97
|
+
**Optional parameters:**
|
98
|
+
|
99
|
+
* `page`: The 0-based page to view. The default is 0.
|
100
|
+
* `per_page`: The number of queues to return per page. The default is 30, the maximum is 100.
|
101
|
+
|
102
|
+
```ruby
|
103
|
+
queues = ironmq.queues.all(:page => 1, :per_page => 10)
|
104
|
+
```
|
105
|
+
|
106
|
+
### Get Queue by Name
|
107
|
+
|
108
|
+
```ruby
|
109
|
+
queue = ironmq.queue "my_queue" # => #<IronMQ::Queue:...>
|
110
|
+
```
|
111
|
+
|
112
|
+
**Note:** if queue with desired name does not exist it returns fake queue.
|
113
|
+
Queue will be created automatically on post of first message or queue configuration update.
|
114
|
+
|
115
|
+
#Queues
|
116
|
+
|
117
|
+
### Retrieve Queue Information
|
118
|
+
|
119
|
+
```ruby
|
120
|
+
info = queue.info # => {"id"=>"5127bf043264140e863e2283", "name"=>"my_queue", ...}
|
121
|
+
```
|
122
|
+
|
123
|
+
Shortcuts for `queue.info[key]`:
|
124
|
+
|
125
|
+
```ruby
|
126
|
+
id = queue.id # => "5127bf043264140e863e2283"
|
127
|
+
# Does queue exists on server? Alias for `queue.id.nil?`
|
128
|
+
is_new = queue.new? # => false
|
129
|
+
|
130
|
+
size = queue.size # => 7
|
131
|
+
name = queue.name # => "my_queue"
|
132
|
+
overall_messages = queue.total_messages # => 13
|
133
|
+
subscribers = queue.subscribers # => [{"url" => "http://..."}, ...]
|
134
|
+
|
135
|
+
push_type = queue.push_type # => "multicast"
|
136
|
+
# Does queue Push Queue? Alias for `queue.push_type.nil?`
|
137
|
+
is_push_queue = queue.push_queue? # => true
|
138
|
+
```
|
139
|
+
|
140
|
+
**Warning:** to be sure configuration information is up-to-date
|
141
|
+
client library call IronMQ API each time you request for any parameter except `queue.name`.
|
142
|
+
In this case you may prefer to use `queue.info` to have `Hash` with all available info parameters.
|
143
|
+
|
144
|
+
### Delete a Message Queue
|
145
|
+
|
146
|
+
```ruby
|
147
|
+
response = queue.delete_queue # => #<IronMQ::ResponseBase:...>
|
148
|
+
```
|
149
|
+
|
150
|
+
### Post Messages to a Queue
|
151
|
+
|
152
|
+
**Single message:**
|
153
|
+
|
154
|
+
```ruby
|
155
|
+
response = queue.post("something helpful") # => #<IronMQ::ResponseBase:...>
|
156
|
+
# or
|
157
|
+
response = queue.post("with parameteres", :timeout => 300) # => #<IronMQ::ResponseBase:...>
|
158
|
+
|
159
|
+
message_id = response.id # => "5847899158098068288"
|
160
|
+
status_message = response.msg # => "Messages put on queue."
|
161
|
+
http_code = response.code # => 200
|
162
|
+
```
|
163
|
+
|
164
|
+
**Multiple messages:**
|
165
|
+
```ruby
|
166
|
+
# [{:body => VALUE}, ...] format is required
|
167
|
+
messages = [{:body => "first"}, {:body => "second"}]
|
168
|
+
|
169
|
+
response = queue.post(messages) # => {"ids" => ["5847899158098068288", ...], "msg" => "Messages put on queue."}
|
170
|
+
# or
|
171
|
+
response = queue.post(messages, :timeout => 300) # => {"ids" => ["5847899158098068288", ...], "msg" => "Messages put on queue."}
|
172
|
+
```
|
173
|
+
|
174
|
+
**Optional parameters:**
|
175
|
+
|
176
|
+
* `timeout`: After timeout (in seconds), item will be placed back onto queue.
|
177
|
+
You must delete the message from the queue to ensure it does not go back onto the queue.
|
178
|
+
Default is 60 seconds. Minimum is 30 seconds. Maximum is 86,400 seconds (24 hours).
|
179
|
+
|
180
|
+
* `delay`: The item will not be available on the queue until this many seconds have passed.
|
181
|
+
Default is 0 seconds. Maximum is 604,800 seconds (7 days).
|
182
|
+
|
183
|
+
* `expires_in`: How long in seconds to keep the item on the queue before it is deleted.
|
184
|
+
Default is 604,800 seconds (7 days). Maximum is 2,592,000 seconds (30 days).
|
185
|
+
|
186
|
+
### Get Messages from a Queue
|
187
|
+
|
188
|
+
```ruby
|
189
|
+
message = queue.get # => #<IronMQ::Message:...>
|
190
|
+
|
191
|
+
# or N messages
|
192
|
+
messages = queue.get(:n => 7) # => [#<IronMQ::Message:...>, ...]
|
193
|
+
|
194
|
+
# or message by ID
|
195
|
+
message = queue.get "5127bf043264140e863e2283" # => #<IronMQ::Message:...>
|
196
|
+
```
|
197
|
+
|
198
|
+
**Optional parameters:**
|
199
|
+
|
200
|
+
* `n`: The maximum number of messages to get. Default is 1. Maximum is 100.
|
201
|
+
|
202
|
+
* `timeout`: timeout: After timeout (in seconds), item will be placed back onto queue.
|
203
|
+
You must delete the message from the queue to ensure it does not go back onto the queue.
|
204
|
+
If not set, value from POST is used. Default is 60 seconds. Minimum is 30 seconds.
|
205
|
+
Maximum is 86,400 seconds (24 hours).
|
206
|
+
|
207
|
+
When `n` parameter is specified and greater than 1 method returns `Array` of `Queue`s.
|
208
|
+
Otherwise, `Queue` object would be returned.
|
209
|
+
|
210
|
+
### Touch a Message on a Queue
|
211
|
+
|
212
|
+
Touching a reserved message extends its timeout by the duration specified when the message was created, which is 60 seconds by default.
|
213
|
+
|
214
|
+
```ruby
|
215
|
+
message = queue.get # => #<IronMQ::Message:...>
|
216
|
+
|
217
|
+
message.touch # => #<IronMQ::ResponseBase:...>
|
218
|
+
```
|
219
|
+
|
220
|
+
### Release Message
|
221
|
+
|
222
|
+
```ruby
|
223
|
+
message = queue.get => #<IronMQ::Message:...>
|
224
|
+
|
225
|
+
response = message.release # => #<IronMQ::ResponseBase:...>
|
226
|
+
# or
|
227
|
+
response = message.release(:delay => 42) # => #<IronMQ::ResponseBase:...>
|
228
|
+
```
|
229
|
+
|
230
|
+
**Optional parameters:**
|
231
|
+
|
232
|
+
* `delay`: The item will not be available on the queue until this many seconds have passed.
|
233
|
+
Default is 0 seconds. Maximum is 604,800 seconds (7 days).
|
234
|
+
|
235
|
+
### Delete a Message from a Queue
|
236
|
+
|
237
|
+
```ruby
|
238
|
+
message = queue.get # => #<IronMQ::Queue:...>
|
239
|
+
|
240
|
+
message.delete # => #<IronMQ::ResponseBase:...>
|
241
|
+
# or
|
242
|
+
queue.delete_message(message.id) # => #<IronMQ::ResponseBase:...>
|
243
|
+
```
|
244
|
+
|
245
|
+
### Peek Messages from a Queue
|
246
|
+
|
247
|
+
Peeking at a queue returns the next messages on the queue, but it does not reserve them.
|
248
|
+
|
249
|
+
```ruby
|
250
|
+
message = queue.peek # => #<IronMQ::Message:...>
|
251
|
+
# or multiple messages
|
252
|
+
messages = queue.peek(:n => 13) # => [#<IronMQ::Message:...>, ...]
|
253
|
+
```
|
254
|
+
|
255
|
+
**Optional parameters:**
|
256
|
+
|
257
|
+
* `n`: The maximum number of messages to peek. Default is 1. Maximum is 100.
|
258
|
+
|
259
|
+
### Poll for Messages
|
260
|
+
|
261
|
+
```ruby
|
262
|
+
queue.poll { |msg| puts msg.body }
|
263
|
+
```
|
69
264
|
|
70
265
|
Polling will automatically delete the message at the end of the block.
|
71
266
|
|
72
|
-
Queue
|
73
|
-
=================
|
267
|
+
### Clear a Queue
|
74
268
|
|
75
|
-
|
76
|
-
|
269
|
+
```ruby
|
270
|
+
queue.clear # => #<IronMQ::ResponseBase:...>
|
271
|
+
```
|
77
272
|
|
273
|
+
#Push Queues
|
78
274
|
|
79
|
-
|
80
|
-
|
275
|
+
IronMQ push queues allow you to setup a queue that will push to an endpoint, rather than having to poll the endpoint.
|
276
|
+
[Here's the announcement for an overview](http://blog.iron.io/2013/01/ironmq-push-queues-reliable-message.html).
|
81
277
|
|
82
|
-
|
278
|
+
### Update a Message Queue
|
83
279
|
|
84
|
-
|
280
|
+
```ruby
|
281
|
+
queue_info = queue.update(options) # => {"id"=>"5127bf043264140e863e2283", "name"=>"my_queue", ...}
|
282
|
+
```
|
85
283
|
|
86
|
-
|
284
|
+
**The following parameters are all related to Push Queues:**
|
87
285
|
|
88
|
-
|
286
|
+
* `subscribers`: An array of subscriber hashes containing a “url” field.
|
287
|
+
This set of subscribers will replace the existing subscribers.
|
288
|
+
To add or remove subscribers, see the add subscribers endpoint or the remove subscribers endpoint.
|
289
|
+
See below for example json.
|
290
|
+
* `push_type`: Either `multicast` to push to all subscribers or `unicast` to push to one and only one subscriber. Default is `multicast`.
|
291
|
+
* `retries`: How many times to retry on failure. Default is 3.
|
292
|
+
* `retries_delay`: Delay between each retry in seconds. Default is 60.
|
89
293
|
|
90
|
-
|
91
|
-
- unicast - will push to one and only one endpoint/subscriber
|
294
|
+
### Set Subscribers on a Queue
|
92
295
|
|
296
|
+
Subscribers can be any HTTP endpoint. `push_type` is one of:
|
297
|
+
|
298
|
+
* `multicast`: will push to all endpoints/subscribers
|
299
|
+
* `unicast`: will push to one and only one endpoint/subscriber
|
93
300
|
|
94
301
|
```ruby
|
95
|
-
|
96
|
-
subscribers
|
97
|
-
|
98
|
-
|
99
|
-
|
302
|
+
ptype = :multicast
|
303
|
+
subscribers = [
|
304
|
+
{url: "http://rest-test.iron.io/code/200?store=key1"}
|
305
|
+
{url: "http://rest-test.iron.io/code/200?store=key2"}
|
306
|
+
]
|
307
|
+
|
308
|
+
queue.update(:subscribers => subscribers, :push_type => ptype)
|
100
309
|
```
|
101
310
|
|
102
|
-
### Add/
|
311
|
+
### Add/Remove Subscribers on a Queue
|
103
312
|
|
104
313
|
```ruby
|
105
|
-
|
106
|
-
|
107
|
-
|
314
|
+
queue.add_subscriber({url: "http://nowhere.com"})
|
315
|
+
|
316
|
+
queue.remove_subscriber({url: "http://nowhere.com"})
|
108
317
|
```
|
109
318
|
|
110
|
-
### Get
|
319
|
+
### Get Message Push Status
|
111
320
|
|
112
321
|
After pushing a message:
|
113
322
|
|
114
323
|
```ruby
|
115
|
-
queue.
|
324
|
+
subscribers = queue.get(msg.id).subscribers # => [#<IronMQ::Subscriber:...>, ...]
|
325
|
+
# old syntax, still supported
|
326
|
+
subscribers = queue.messages.get(msg.id).subscribers # => [#<IronMQ::Subscriber:...>, ...]
|
327
|
+
|
328
|
+
subscribers.each { |ss| puts "#{ss.id}: #{(ss.code == 200) ? 'Success' : 'Fail'}" }
|
116
329
|
```
|
117
330
|
|
118
331
|
Returns an array of subscribers with status.
|
332
|
+
|
333
|
+
### Delete Message Push Status
|
334
|
+
|
335
|
+
```ruby
|
336
|
+
subscribers = queue.get(msg.id).subscribers # => [#<IronMQ::Subscriber:...>, ...]
|
337
|
+
|
338
|
+
subscribers.each { |ss| ss.delete }
|
339
|
+
```
|
340
|
+
|
341
|
+
|
342
|
+
-------------
|
343
|
+
© 2011 - 2013 Iron.io Inc. All Rights Reserved.
|
data/iron_mq.gemspec
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
require File.expand_path('../lib/iron_mq/version', __FILE__)
|
2
2
|
|
3
3
|
Gem::Specification.new do |gem|
|
4
|
-
gem.authors = ["Travis Reeder"]
|
5
|
-
gem.email = ["travis@iron.io"]
|
4
|
+
gem.authors = ["Yury Yantsevich", "Travis Reeder"]
|
5
|
+
gem.email = ["yury@iron.io", "travis@iron.io"]
|
6
6
|
gem.description = "Ruby client for IronMQ by www.iron.io"
|
7
7
|
gem.summary = "Ruby client for IronMQ by www.iron.io"
|
8
8
|
gem.homepage = "https://github.com/iron-io/iron_mq_ruby"
|
@@ -26,6 +26,7 @@ Gem::Specification.new do |gem|
|
|
26
26
|
gem.add_development_dependency "typhoeus", ">= 0.5.4"
|
27
27
|
gem.add_development_dependency "concur"
|
28
28
|
gem.add_development_dependency "net-http-persistent"
|
29
|
+
gem.add_development_dependency "quicky"
|
29
30
|
|
30
31
|
end
|
31
32
|
|
data/lib/iron_mq/client.rb
CHANGED
@@ -16,11 +16,10 @@ module IronMQ
|
|
16
16
|
:host => IronMQ::Client::AWS_US_EAST_HOST,
|
17
17
|
:port => 443,
|
18
18
|
:api_version => 1,
|
19
|
-
:user_agent => 'iron_mq_ruby-' +
|
20
|
-
:queue_name => 'default'
|
19
|
+
:user_agent => 'iron_mq_ruby-' + 'very_new' + ' (iron_core_ruby-' + IronCore.version + ')'
|
21
20
|
}
|
22
21
|
|
23
|
-
super('iron', 'mq', options, default_options, [:project_id, :token, :api_version
|
22
|
+
super('iron', 'mq', options, default_options, [:project_id, :token, :api_version])
|
24
23
|
|
25
24
|
IronCore::Logger.error 'IronMQ', "Token is not set", IronCore::Error if @token.nil?
|
26
25
|
|
@@ -35,19 +34,43 @@ module IronMQ
|
|
35
34
|
end
|
36
35
|
|
37
36
|
def base_url
|
38
|
-
|
37
|
+
@base_url = "#{super}#{@api_version}/projects/#{@project_id}/queues"
|
39
38
|
end
|
40
39
|
|
41
|
-
def
|
42
|
-
|
40
|
+
def queues_list(options = {})
|
41
|
+
response = parse_response(get('', options)) # GET base_url
|
42
|
+
# returns list of evaluated queues
|
43
|
+
response.each_with_object([]) { |q_info, ret| ret << Queue.new(self, q_info["name"]) }
|
43
44
|
end
|
44
45
|
|
45
|
-
|
46
|
-
|
46
|
+
alias_method :list, :queues_list
|
47
|
+
alias_method :all, :queues_list
|
48
|
+
|
49
|
+
def queues_get(name)
|
50
|
+
Queue.new(self, name)
|
47
51
|
end
|
48
52
|
|
53
|
+
alias_method :queue, :queues_get
|
54
|
+
|
55
|
+
# Backward compatibility for
|
56
|
+
# client.queues.get(:name => "my_queue")
|
57
|
+
# client.queues.get("name" => "my_queue")
|
58
|
+
def get(*args)
|
59
|
+
if args.size == 1 && args[0].is_a?(Hash)
|
60
|
+
queue_name = (args[0][:name] || args[0]["name"]).to_s
|
61
|
+
queue_name.empty? ? super : queues_get(queue_name)
|
62
|
+
else
|
63
|
+
super
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
# Backward compatibility, adds possibility to call
|
68
|
+
# client.queues.all
|
69
|
+
# client.queues.list
|
70
|
+
# client.queues.queue(name)
|
49
71
|
def queues
|
50
|
-
|
72
|
+
self
|
51
73
|
end
|
52
74
|
end
|
75
|
+
|
53
76
|
end
|
data/lib/iron_mq/messages.rb
CHANGED
@@ -1,128 +1,45 @@
|
|
1
1
|
require 'cgi'
|
2
2
|
|
3
3
|
module IronMQ
|
4
|
-
class Messages
|
5
4
|
|
6
|
-
|
5
|
+
class Message < ResponseBase
|
6
|
+
attr_reader :queue
|
7
7
|
|
8
|
-
def initialize(
|
9
|
-
@client = client
|
8
|
+
def initialize(queue, data)
|
10
9
|
@queue = queue
|
10
|
+
super(data, 200)
|
11
11
|
end
|
12
12
|
|
13
|
-
|
14
|
-
|
15
|
-
options[:queue_name] ||= ((@queue ? @queue.name : nil) || @client.queue_name)
|
16
|
-
options[:project_id] = @client.project_id
|
17
|
-
Messages.path(options)
|
13
|
+
def touch
|
14
|
+
call_api_and_parse_response(:post, "/touch")
|
18
15
|
end
|
19
16
|
|
20
|
-
def
|
21
|
-
|
22
|
-
if options[:msg_id]
|
23
|
-
path << "/#{options[:msg_id]}"
|
24
|
-
end
|
25
|
-
path
|
17
|
+
def release(options = {})
|
18
|
+
call_api_and_parse_response(:post, "/release", options)
|
26
19
|
end
|
27
20
|
|
28
|
-
# options
|
29
|
-
|
30
|
-
|
31
|
-
def get(options={})
|
32
|
-
if options.is_a?(String)
|
33
|
-
# assume it's an id
|
34
|
-
puts 'get_by_id'
|
35
|
-
return Message.new(self, {'id'=>options}, options)
|
36
|
-
#r = @client.get(path(:msg_id=>options))
|
37
|
-
#p r
|
38
|
-
#return r
|
39
|
-
end
|
40
|
-
res = @client.parse_response(@client.get(path(options), options))
|
41
|
-
ret = []
|
42
|
-
res["messages"].each do |m|
|
43
|
-
ret << Message.new(self, m, options)
|
44
|
-
end
|
45
|
-
if options[:n] || options['n']
|
46
|
-
return ret
|
47
|
-
else
|
48
|
-
if ret.size > 0
|
49
|
-
return ret[0]
|
50
|
-
else
|
51
|
-
return nil
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
21
|
+
# `options` was kept for backward compatibility
|
22
|
+
def subscribers(options = {})
|
23
|
+
response = call_api_and_parse_response(:get, "/subscribers", {}, false)
|
55
24
|
|
56
|
-
|
57
|
-
|
58
|
-
# :delay => time to wait before message will be available on the queue
|
59
|
-
# :timeout => The time in seconds to wait after message is taken off the queue, before it is put back on. Delete before :timeout to ensure it does not go back on the queue.
|
60
|
-
# :expires_in => After this time, message will be automatically removed from the queue.
|
61
|
-
def post(payload, options={})
|
62
|
-
batch = false
|
63
|
-
if payload.is_a?(Array)
|
64
|
-
batch = true
|
65
|
-
msgs = payload
|
66
|
-
else
|
67
|
-
options[:body] = payload
|
68
|
-
msgs = []
|
69
|
-
msgs << options
|
70
|
-
end
|
71
|
-
to_send = {}
|
72
|
-
to_send[:messages] = msgs
|
73
|
-
res = @client.parse_response(@client.post(path(options), to_send))
|
74
|
-
if batch
|
75
|
-
return res
|
76
|
-
else
|
77
|
-
return ResponseBase.new({"id"=>res["ids"][0], "msg"=>res["msg"]})
|
25
|
+
response['subscribers'].each_with_object([]) do |subscriber, ret|
|
26
|
+
ret << Subscriber.new(subscriber, self, options)
|
78
27
|
end
|
79
28
|
end
|
80
29
|
|
81
|
-
def delete(message_id, options={})
|
82
|
-
path2 = "#{self.path(options)}/#{message_id}"
|
83
|
-
res = @client.parse_response(@client.delete(path2))
|
84
|
-
return ResponseBase.new(res)
|
85
|
-
end
|
86
|
-
|
87
|
-
def release(message_id, options={})
|
88
|
-
path2 = "#{self.path(options)}/#{message_id}/release"
|
89
|
-
res = @client.parse_response(@client.post(path2, options))
|
90
|
-
return ResponseBase.new(res)
|
91
|
-
end
|
92
|
-
|
93
|
-
end
|
94
|
-
|
95
|
-
class Message < ResponseBase
|
96
|
-
attr_reader :messages
|
97
|
-
|
98
|
-
def initialize(messages, res, options={})
|
99
|
-
super(res)
|
100
|
-
@messages = messages
|
101
|
-
@options = options
|
102
|
-
end
|
103
|
-
|
104
|
-
def body
|
105
|
-
raw["body"]
|
106
|
-
end
|
107
|
-
|
108
30
|
def delete
|
109
|
-
|
31
|
+
call_api_and_parse_response(:delete)
|
110
32
|
end
|
111
33
|
|
112
|
-
def
|
113
|
-
|
114
|
-
options2 = options.merge(@options) if @options
|
115
|
-
@messages.release(self.id, options2)
|
34
|
+
def call_api_and_parse_response(meth, ext_path = "", options = {}, instantiate = true)
|
35
|
+
@queue.call_api_and_parse_response(meth, "#{path(ext_path)}", options, instantiate)
|
116
36
|
end
|
117
37
|
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
res['subscribers'].each do |m|
|
123
|
-
ret << Subscriber.new(m, self, options)
|
124
|
-
end
|
125
|
-
ret
|
38
|
+
private
|
39
|
+
|
40
|
+
def path(ext_path)
|
41
|
+
"/messages/#{id}#{ext_path}"
|
126
42
|
end
|
127
43
|
end
|
44
|
+
|
128
45
|
end
|