mercury_amqp 0.5.0 → 0.6.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 43d54035bd40df4089510aa9839d554f2e715c8f
4
- data.tar.gz: c8e309676dbdb1f4488a23c95a060ca4e2d78f3c
3
+ metadata.gz: 1e3452ba7fb74955df9eb81a1481fd48f7d7a060
4
+ data.tar.gz: 8e119f5f19189c9cee7095bb39990ce99c8575a4
5
5
  SHA512:
6
- metadata.gz: c11bd808a2634847b2a7c1b97975a7c3f2601086a82c2b43ba4fc866aea0a068cae96d4d7ce5cd05a3c7678ff8beb69d17a1cc311a16f9c634ba0780184ef917
7
- data.tar.gz: 0d458c16c5ea7706e56ec0d39549bb6cb762989b3c057c9426f5e401bccd05974b49f567cbdf9ec30d44c06d91caeca91d23d221d0074e59d8635b3c65b3e150
6
+ metadata.gz: dd514973a3c22508ca2f1f1d92799fdfc638fd4f64fd9d06d21b260b633b4ec793858394762fdc14be96afbd3ab306d9e0cdf016d80d94e19364b99c30f1d7c4
7
+ data.tar.gz: 62df2a2d2c51ca01be73aa439d45869ee82b38b63685c82757f9c6219069b11bf677fe2ad60b3ab52f44f8324185579b995049509b956040c4989af906bd4efc
@@ -9,7 +9,7 @@ class Mercury
9
9
 
10
10
  def initialize(queue, msg, tag, headers, is_ackable)
11
11
  metadata = Metadata.new(tag, headers, proc{queue.ack_or_reject_message(self)}, proc{queue.nack(self)})
12
- @received_msg = ReceivedMessage.new(msg, metadata, work_queue_name: is_ackable ? queue.worker : nil)
12
+ @received_msg = ReceivedMessage.new(msg, metadata, nil, work_queue_name: is_ackable ? queue.worker : nil)
13
13
  @headers = headers
14
14
  @delivered = false
15
15
  end
@@ -72,6 +72,8 @@ class Mercury
72
72
  def republish(msg, &k)
73
73
  guard_public(k)
74
74
  raise 'Only messages from a work queue can be republished' unless msg.work_queue_name
75
+ raise 'A message can only be republished by the mercury instance that received it' unless msg.mercury_instance == self
76
+ raise "This message was already #{msg.action_taken}ed" if msg.action_taken
75
77
  headers = Mercury.increment_republish_count(msg).merge(ORIGINAL_TAG_HEADER => msg.tag)
76
78
  publish_internal(@channel.default_exchange, msg.content, msg.work_queue_name, headers) do
77
79
  msg.ack
@@ -212,7 +214,7 @@ class Mercury
212
214
  end
213
215
 
214
216
  def make_received_message(payload, metadata, work_queue_name: nil)
215
- msg = ReceivedMessage.new(read(payload), metadata, work_queue_name: work_queue_name)
217
+ msg = ReceivedMessage.new(read(payload), metadata, self, work_queue_name: work_queue_name)
216
218
  Logatron.msg_id = msg.headers[LOGATRAON_MSG_ID_HEADER]
217
219
  msg
218
220
  end
@@ -1,10 +1,11 @@
1
1
  class Mercury
2
2
  class ReceivedMessage
3
- attr_reader :content, :metadata, :action_taken, :work_queue_name
3
+ attr_reader :content, :metadata, :mercury_instance, :action_taken, :work_queue_name
4
4
 
5
- def initialize(content, metadata, work_queue_name: nil)
5
+ def initialize(content, metadata, mercury_instance, work_queue_name: nil)
6
6
  @content = content
7
7
  @metadata = metadata
8
+ @mercury_instance = mercury_instance
8
9
  @work_queue_name = work_queue_name
9
10
  end
10
11
 
@@ -35,6 +36,11 @@ class Mercury
35
36
  metadata.reject(requeue: true)
36
37
  end
37
38
 
39
+ def republish(&k)
40
+ k ||= proc{}
41
+ mercury_instance.republish(self, &k)
42
+ end
43
+
38
44
  private
39
45
 
40
46
  def is_ackable
@@ -1,3 +1,3 @@
1
1
  class Mercury
2
- VERSION = '0.5.0'
2
+ VERSION = '0.6.0'
3
3
  end
@@ -149,6 +149,21 @@ describe Mercury::Monadic do
149
149
  end
150
150
  end
151
151
 
152
+ it 'cannot republish acked messages' do
153
+ test_with_mercury do |m|
154
+ msgs = []
155
+ seql do
156
+ and_then { m.start_worker(worker, source, &msgs.method(:push)) }
157
+ and_then { m.publish(source, msg, tag: 'foo', headers: {bar: 123}) }
158
+ and_then { wait_until { msgs.size == 1 } }
159
+ and_lift do
160
+ msgs[0].ack
161
+ expect{msgs[0].republish}.to raise_error /acked/
162
+ end
163
+ end
164
+ end
165
+ end
166
+
152
167
  it 'propagates logatron headers' do
153
168
  real_msg_id = SecureRandom.uuid
154
169
  Logatron.msg_id = real_msg_id
@@ -36,6 +36,19 @@ describe Mercury::ReceivedMessage do
36
36
  end
37
37
  end
38
38
 
39
+ describe '#republish' do
40
+ it 'calls Mercury#republish' do
41
+ mercury_instance = double
42
+ msg = Mercury::ReceivedMessage.new('hello', make_metadata, mercury_instance, work_queue_name: 'foo')
43
+ cont = proc{}
44
+ expect(mercury_instance).to receive(:republish) do |m, &k|
45
+ expect(m).to eql msg
46
+ expect(k).to eql cont
47
+ end
48
+ msg.republish(&cont)
49
+ end
50
+ end
51
+
39
52
  describe '#action_taken' do
40
53
  it 'returns the action taken' do
41
54
  a = make_actionable
@@ -56,11 +69,11 @@ describe Mercury::ReceivedMessage do
56
69
  end
57
70
 
58
71
  def make_actionable
59
- Mercury::ReceivedMessage.new('hello', make_metadata, work_queue_name: 'foo')
72
+ Mercury::ReceivedMessage.new('hello', make_metadata, double, work_queue_name: 'foo')
60
73
  end
61
74
 
62
75
  def make_non_actionable
63
- Mercury::ReceivedMessage.new('hello', make_metadata, work_queue_name: nil)
76
+ Mercury::ReceivedMessage.new('hello', make_metadata, double, work_queue_name: nil)
64
77
  end
65
78
 
66
79
  def make_metadata
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mercury_amqp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Winton
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-05-10 00:00:00.000000000 Z
11
+ date: 2016-05-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler