philotic 1.0.1 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
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