philotic 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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2e126429cf9f92b56a49a1f1e609479736b965c1
4
- data.tar.gz: 2b0f1b015e34e9e7d773973cee7b4d7657186229
3
+ metadata.gz: 9801556e2c18c1147b0de999eeef96c1b3b00cf4
4
+ data.tar.gz: d43caf8f1c8aa98e67aec1b0ed11edee9aea22e2
5
5
  SHA512:
6
- metadata.gz: 18e0412f7f720e0a382e17f109d54472ec0d6328e5d739ed8eabdf45058e33f70eb322908335d28a8b3d1825f67d42f47a63f622b3bd0df19751b0648533c00a
7
- data.tar.gz: 1f06ba6e3e167d1c4d79540c7555435754b8ebee2bc62a7e3787309ab4115ec815110f036d7a2c66819e68858f08eea4993447e396196f6fbb97086ccfa0f121
6
+ metadata.gz: 3acc57d92689ff4dd1de133e968c26d7321391aab11ff532a1cd3d997f483302ae7920f387cbb7dd351a10516ccee67c596375e485d3188f5feccdf4bf8ae0e0
7
+ data.tar.gz: 2101fd35dceb87a98ef72e9327bec7497d271428bda282f8c7e58fc61dc2644362f5ebf293f847dd4b649bf58f7f340d94b2f2672bb45af6d5f85642c7e0680c
@@ -11,7 +11,7 @@ Philotic.config.message_return_handler = lambda do |basic_return, metadata, mess
11
11
  end
12
12
 
13
13
  Philotic.subscribe(header_key: 'header_1') do |message|
14
- ap header_key: message.header_key, payload_key: message.payload_key, methods: message.methods - Philotic::Message.new.methods
14
+ ap message.attributes
15
15
  end
16
16
 
17
17
  # normally we'd do:
@@ -23,5 +23,5 @@ end
23
23
  loop do
24
24
  Philotic::Message.publish({header_key: "header_#{[1, 2].sample}"}, {payload_key: 'payload_value'})
25
25
  # only send a message every two seconds so we can see whats going on
26
- sleep 2
26
+ sleep 0.1
27
27
  end
@@ -6,19 +6,19 @@ require 'philotic'
6
6
  require 'awesome_print'
7
7
 
8
8
  # sometimes ack
9
- Philotic.subscribe('flaky_queue', ack: true) do |message|
9
+ Philotic.subscribe('flaky_queue', manual_ack: true) do |message|
10
10
  ap message.attributes
11
11
  [true, false].sample ? acknowledge(message) : reject(message)
12
12
  end
13
13
 
14
14
  # always ack
15
- Philotic.subscribe('flaky_queue', ack: true) do |message|
15
+ Philotic.subscribe('flaky_queue', manual_ack: true) do |message|
16
16
  ap message.attributes
17
17
  acknowledge(message, true)
18
18
  end
19
19
 
20
20
  # always reject
21
- Philotic.subscribe('flaky_queue', ack: true) do |message|
21
+ Philotic.subscribe('flaky_queue', manual_ack: true) do |message|
22
22
  ap message.attributes
23
23
  reject message
24
24
  end
@@ -10,16 +10,16 @@ class NamedQueueConsumer < Philotic::Consumer
10
10
  # subscribe to an existing named queue
11
11
  subscribe_to :test_queue
12
12
 
13
- #use acknowledgements
14
- ack_messages
13
+ # use acknowledgements
14
+ auto_acknowledge
15
15
 
16
16
  # REQUEUE the message with RabbitMQ if consume throws these errors. I.e., something went wrong with the consumer
17
17
  # Only valid with ack_messages
18
- requeueable_errors PossiblyTransientErrorOne, PossiblyTransientErrorTwo
18
+ # requeueable_errors PossiblyTransientErrorOne, PossiblyTransientErrorTwo
19
19
 
20
20
  # REJECT the message with RabbitMQ if consume throws these errors. I.e., The message is malformed/invalid
21
21
  # Only valid with ack_messages
22
- rejectable_errors BadMessageError
22
+ # rejectable_errors BadMessageError
23
23
 
24
24
  def consume(message)
25
25
  ap named: message.attributes
@@ -5,7 +5,6 @@ module Philotic
5
5
  class Consumer < Philotic::Subscriber
6
6
 
7
7
  class << self
8
-
9
8
  def subscribe_to(subscription)
10
9
  @subscription = subscription
11
10
  end
@@ -14,16 +13,24 @@ module Philotic
14
13
  @subscription
15
14
  end
16
15
 
17
- def ack_messages
18
- @ack_messages = true
16
+ def manually_acknowledge
17
+ @manually_acknowledge = true
19
18
  end
20
19
 
21
- def exclusive
22
- @exclusive = true
20
+ def manually_acknowledge?
21
+ !!@manually_acknowledge
23
22
  end
24
23
 
25
- def ack_messages?
26
- !!@ack_messages
24
+ def auto_acknowledge
25
+ @auto_acknowledge = true
26
+ end
27
+
28
+ def auto_acknowledge?
29
+ !!@auto_acknowledge
30
+ end
31
+
32
+ def exclusive
33
+ @exclusive = true
27
34
  end
28
35
 
29
36
  def exclusive?
@@ -50,11 +57,11 @@ module Philotic
50
57
 
51
58
  def subscription_options
52
59
  {
53
- manual_ack: ack_messages?,
60
+ manual_ack: auto_acknowledge? || manually_acknowledge?,
54
61
  exclusive: exclusive?,
55
62
  }
56
63
  end
57
- end
64
+ end # end class methods
58
65
 
59
66
  def subscribe
60
67
  super(self.class.subscription, self.class.subscription_options) do |message|
@@ -69,22 +76,19 @@ module Philotic
69
76
  private
70
77
 
71
78
  def _consume(message)
72
- if self.class.ack_messages?
79
+ if self.class.auto_acknowledge?
73
80
  begin
74
81
  consume(message)
82
+ acknowledge(message)
75
83
  rescue => e
76
-
77
84
  if self.class.requeueable_errors.include? e.class
78
85
  reject(message, true)
79
- return
80
86
  elsif self.class.rejectable_errors.include? e.class
81
87
  reject(message, false)
82
- return
83
88
  else
84
89
  raise e
85
90
  end
86
91
  end
87
- acknowledge(message)
88
92
  else
89
93
  consume(message)
90
94
  end
@@ -1,3 +1,3 @@
1
1
  module Philotic
2
- VERSION = '1.0.1'
2
+ VERSION = '1.0.2'
3
3
  end
@@ -27,11 +27,19 @@ describe Philotic::Consumer do
27
27
  end
28
28
  end
29
29
 
30
- describe '.ack_messages' do
31
- it 'sets the class variable @ack_messages' do
32
- expect(subject.ack_messages?).not_to be true
33
- subject.ack_messages
34
- expect(subject.ack_messages?).to be true
30
+ describe '.manually_acknowledge' do
31
+ it 'sets the class variable @manually_acknowledge' do
32
+ expect(subject).not_to be_manually_acknowledge
33
+ subject.manually_acknowledge
34
+ expect(subject).to be_manually_acknowledge
35
+ end
36
+ end
37
+
38
+ describe '.auto_acknowledge' do
39
+ it 'sets the class variable @auto_acknowledge' do
40
+ expect(subject).not_to be_auto_acknowledge
41
+ subject.auto_acknowledge
42
+ expect(subject).to be_auto_acknowledge
35
43
  end
36
44
  end
37
45
 
@@ -91,7 +99,13 @@ describe Philotic::Consumer do
91
99
  it 'returns a hash with the exclusive and manual_ack options' do
92
100
  expect(subject.subscription_options).to match({manual_ack: false, exclusive: false})
93
101
 
94
- subject.ack_messages
102
+ subject.auto_acknowledge
103
+ expect(subject.subscription_options).to match({manual_ack: true, exclusive: false})
104
+
105
+ subject.instance_variable_set(:@auto_acknowledge, nil)
106
+ expect(subject.subscription_options).to match({manual_ack: false, exclusive: false})
107
+
108
+ subject.manually_acknowledge
95
109
  expect(subject.subscription_options).to match({manual_ack: true, exclusive: false})
96
110
 
97
111
  subject.exclusive
@@ -102,7 +116,7 @@ describe Philotic::Consumer do
102
116
  describe '#subscribe' do
103
117
  it 'proxies to Philotic::Subscriber#subscribe' do
104
118
  subject.subscribe_to named_queue
105
- subject.ack_messages
119
+ subject.auto_acknowledge
106
120
  subject.exclusive
107
121
 
108
122
  expect_any_instance_of(Philotic::Subscriber).to receive(:subscribe).with(named_queue, manual_ack: true, exclusive: true)
@@ -136,7 +150,7 @@ describe Philotic::Consumer do
136
150
  end
137
151
 
138
152
  it 'acknowledges messages when @ack_messages is set' do
139
- subject.class.ack_messages
153
+ subject.class.auto_acknowledge
140
154
 
141
155
  subject.define_singleton_method :consume do |message|
142
156
  # no op
@@ -148,7 +162,7 @@ describe Philotic::Consumer do
148
162
  end
149
163
 
150
164
  it 'requeues messages when @ack_messages is set and a requeueable error is thrown' do
151
- subject.class.ack_messages
165
+ subject.class.auto_acknowledge
152
166
  subject.class.requeueable_errors(RuntimeError)
153
167
 
154
168
  subject.define_singleton_method :consume do |message|
@@ -161,7 +175,7 @@ describe Philotic::Consumer do
161
175
  end
162
176
 
163
177
  it 'rejects messages when @ack_messages is set and a rejectable error is thrown' do
164
- subject.class.ack_messages
178
+ subject.class.auto_acknowledge
165
179
  subject.class.rejectable_errors(RuntimeError)
166
180
 
167
181
  subject.define_singleton_method :consume do |message|
@@ -174,7 +188,7 @@ describe Philotic::Consumer do
174
188
  end
175
189
 
176
190
  it 'raises all non-requeueable and non-rejectable errors' do
177
- subject.class.ack_messages
191
+ subject.class.auto_acknowledge
178
192
 
179
193
  subject.define_singleton_method :consume do |message|
180
194
  raise RuntimeError.new 'oops'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: philotic
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nathan Keyes