cloud-queues 1.0.1 → 1.0.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.
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