cloud-queues 1.0.1 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/lib/cloud-queues.rb CHANGED
@@ -8,4 +8,5 @@ require_relative "cloud-queues/version"
8
8
  require_relative "cloud-queues/client"
9
9
  require_relative "cloud-queues/queue"
10
10
  require_relative "cloud-queues/message"
11
+ require_relative "cloud-queues/messages"
11
12
  require_relative "cloud-queues/claim"
@@ -30,8 +30,7 @@ module CloudQueues
30
30
  end
31
31
 
32
32
  def messages
33
- msgs = refresh["messages"]
34
- @messages = msgs.map { |message| Message.new(queue, message) }
33
+ @messages = process_messages(refresh)
35
34
  end
36
35
 
37
36
  def update(options = {})
@@ -54,6 +53,10 @@ module CloudQueues
54
53
 
55
54
  private
56
55
 
56
+ def process_messages(body)
57
+ Messages.new(queue, body["messages"].map{|msg| Message.new(queue, msg) }, body["links"] )
58
+ end
59
+
57
60
  def refresh
58
61
  @client.request(method: :get, path: path).body
59
62
  end
@@ -0,0 +1,42 @@
1
+ module CloudQueues
2
+ class Messages
3
+ include Enumerable
4
+
5
+ attr_accessor :queue
6
+
7
+ attr_reader :marker
8
+
9
+ def initialize(queue, msgs, links)
10
+ @queue = queue
11
+ @messages = msgs
12
+
13
+ @marker = find_marker links if links
14
+ end
15
+
16
+ def each(&block)
17
+ @messages.each(&block)
18
+ end
19
+
20
+ def [](index)
21
+ @messages[index]
22
+ end
23
+
24
+ def next(options = {})
25
+ if @marker
26
+ @queue.messages options.merge(marker: @marker)
27
+ else
28
+ # We don't have a next marker because this set of messages was
29
+ # never intended to be part of a larger set.
30
+ nil
31
+ end
32
+ end
33
+
34
+ private
35
+
36
+ def find_marker(links)
37
+ uri = URI.parse(links.select{|link| link["rel"] == "next" }[0]["href"])
38
+ return uri.query.match(/marker=([^&]+)/)[1]
39
+ end
40
+
41
+ end
42
+ end
@@ -39,13 +39,17 @@ module CloudQueues
39
39
  response = @client.request_all(options.class == String ? nil : "messages",
40
40
  method: :get, path: "#{path}/messages", expects: [200, 204], query: options)
41
41
  return [] if response.status == 204
42
- response.body.class == Hash ? process_messages(response.body["messages"]) : process_messages(response.body)
42
+ if response.body.class == Hash
43
+ return process_messages(response.body["messages"], response.body["links"])
44
+ else
45
+ return process_messages(response.body)
46
+ end
43
47
  end
44
48
 
45
49
  def get(id, options = {})
46
50
  options = options[:claim_id] ? {claim_id: options[:claim_id]} : {}
47
51
  msgs = @client.request(method: :get, path: "#{path}/messages/#{id}", query: options)
48
- process_messages([msgs.body])[0]
52
+ process_message(msgs.body)
49
53
  end
50
54
 
51
55
  def put(*msgs)
@@ -132,8 +136,12 @@ module CloudQueues
132
136
 
133
137
  private
134
138
 
135
- def process_messages(msgs)
136
- msgs.map { |message| Message.new(self, message) }
139
+ def process_messages(msgs, links = nil)
140
+ Messages.new(self, msgs.map{|msg| process_message(msg) }, links)
141
+ end
142
+
143
+ def process_message(msg)
144
+ Message.new(self, msg)
137
145
  end
138
146
 
139
147
  def process_claim(claim_id, msgs)
@@ -1,3 +1,3 @@
1
1
  module CloudQueues
2
- VERSION = "1.0.1"
2
+ VERSION = "1.0.2"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cloud-queues
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-11-02 00:00:00.000000000 Z
12
+ date: 2013-11-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: excon
@@ -60,6 +60,7 @@ files:
60
60
  - lib/cloud-queues/claim.rb
61
61
  - lib/cloud-queues/client.rb
62
62
  - lib/cloud-queues/message.rb
63
+ - lib/cloud-queues/messages.rb
63
64
  - lib/cloud-queues/queue.rb
64
65
  - lib/cloud-queues/version.rb
65
66
  - lib/cloud-queues.rb