queueing_rabbit 0.3.7 → 0.3.8
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/.travis.yml +1 -1
- data/lib/queueing_rabbit/client/amqp.rb +16 -0
- data/lib/queueing_rabbit/client/bunny.rb +19 -2
- data/lib/queueing_rabbit/version.rb +1 -1
- data/lib/queueing_rabbit/worker.rb +8 -6
- data/lib/queueing_rabbit.rb +1 -2
- data/spec/unit/queueing_rabbit/client/amqp_spec.rb +21 -0
- data/spec/unit/queueing_rabbit/client/bunny_spec.rb +34 -0
- data/spec/unit/queueing_rabbit/worker_spec.rb +1 -0
- data/spec/unit/queueing_rabbit_spec.rb +2 -1
- metadata +4 -4
data/.travis.yml
CHANGED
@@ -141,6 +141,22 @@ module QueueingRabbit
|
|
141
141
|
raise NotImplementedError
|
142
142
|
end
|
143
143
|
|
144
|
+
def purge_queue(queue)
|
145
|
+
queue.purge do
|
146
|
+
yield if block_given?
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
def next_tick(&block)
|
151
|
+
EM.next_tick(&block)
|
152
|
+
end
|
153
|
+
|
154
|
+
def begin_worker_loop
|
155
|
+
EM.run do
|
156
|
+
yield if block_given?
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
144
160
|
private
|
145
161
|
|
146
162
|
def setup_callbacks
|
@@ -87,6 +87,11 @@ module QueueingRabbit
|
|
87
87
|
end
|
88
88
|
end
|
89
89
|
|
90
|
+
def purge_queue(queue)
|
91
|
+
queue.purge
|
92
|
+
yield if block_given?
|
93
|
+
end
|
94
|
+
|
90
95
|
def close
|
91
96
|
@connection.close
|
92
97
|
yield if block_given?
|
@@ -97,11 +102,23 @@ module QueueingRabbit
|
|
97
102
|
@connection.open?
|
98
103
|
end
|
99
104
|
|
105
|
+
def next_tick(&block)
|
106
|
+
if @continue_worker_loop
|
107
|
+
@actions_queue << block
|
108
|
+
else
|
109
|
+
block.call
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
100
113
|
def begin_worker_loop
|
101
|
-
yield
|
114
|
+
yield if block_given?
|
115
|
+
@actions_queue = []
|
102
116
|
@continue_worker_loop = true
|
103
117
|
# We may need to add signal handling here
|
104
|
-
|
118
|
+
while @continue_worker_loop
|
119
|
+
@actions_queue.take_while { |block| block.call || true }
|
120
|
+
sleep 1
|
121
|
+
end
|
105
122
|
end
|
106
123
|
|
107
124
|
private
|
@@ -58,13 +58,15 @@ module QueueingRabbit
|
|
58
58
|
end
|
59
59
|
|
60
60
|
def stop
|
61
|
-
|
61
|
+
connection = QueueingRabbit.connection
|
62
62
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
63
|
+
connection.next_tick do
|
64
|
+
connection.close do
|
65
|
+
info "gracefully shutting down the worker #{self}"
|
66
|
+
remove_pidfile
|
67
|
+
QueueingRabbit.trigger_event(:consuming_done)
|
68
|
+
end
|
69
|
+
end
|
68
70
|
end
|
69
71
|
|
70
72
|
private
|
data/lib/queueing_rabbit.rb
CHANGED
@@ -122,8 +122,7 @@ module QueueingRabbit
|
|
122
122
|
def purge_queue(job)
|
123
123
|
connection.open_channel(job.channel_options) do |c, _|
|
124
124
|
connection.define_queue(c, job.queue_name, job.queue_options) do |q|
|
125
|
-
|
126
|
-
c.close
|
125
|
+
connection.purge_queue(q) { c.close }
|
127
126
|
end
|
128
127
|
end
|
129
128
|
true
|
@@ -238,5 +238,26 @@ describe QueueingRabbit::Client::AMQP do
|
|
238
238
|
client.enqueue(exchange, payload, options)
|
239
239
|
end
|
240
240
|
end
|
241
|
+
|
242
|
+
describe '#next_tick' do
|
243
|
+
|
244
|
+
it 'schedules given action to be performed at the next EM tick' do
|
245
|
+
EM.should_receive(:next_tick)
|
246
|
+
client.next_tick {}
|
247
|
+
end
|
248
|
+
|
249
|
+
end
|
250
|
+
|
251
|
+
describe '#purge_queue' do
|
252
|
+
|
253
|
+
let(:queue) { mock }
|
254
|
+
|
255
|
+
it 'purges the queue and fires the provided callback when done' do
|
256
|
+
queue.should_receive(:purge).and_yield
|
257
|
+
expect { |b| client.purge_queue(queue, &b) }.to yield_control
|
258
|
+
end
|
259
|
+
|
260
|
+
end
|
261
|
+
|
241
262
|
end
|
242
263
|
end
|
@@ -144,5 +144,39 @@ describe QueueingRabbit::Client::Bunny do
|
|
144
144
|
|
145
145
|
end
|
146
146
|
|
147
|
+
describe '#purge_queue' do
|
148
|
+
|
149
|
+
let(:queue) { mock }
|
150
|
+
|
151
|
+
it 'purges the queue and fires the provided callback when done' do
|
152
|
+
queue.should_receive(:purge)
|
153
|
+
expect { |b| client.purge_queue(queue, &b) }.to yield_control
|
154
|
+
end
|
155
|
+
|
156
|
+
end
|
157
|
+
|
158
|
+
describe '#next_tick' do
|
159
|
+
|
160
|
+
context 'given the worker loop is running' do
|
161
|
+
|
162
|
+
it 'performs the action on next tick' do
|
163
|
+
client.connection.should_receive(:close)
|
164
|
+
Thread.new { sleep 1; client.next_tick { client.close } }
|
165
|
+
expect { Timeout.timeout(5) { client.begin_worker_loop } }.
|
166
|
+
not_to raise_error(Timeout::Error)
|
167
|
+
end
|
168
|
+
|
169
|
+
end
|
170
|
+
|
171
|
+
context 'given the worker loop is not running' do
|
172
|
+
|
173
|
+
it 'performs the action immediately' do
|
174
|
+
expect(client.next_tick { 42 }).to eq(42)
|
175
|
+
end
|
176
|
+
|
177
|
+
end
|
178
|
+
|
179
|
+
end
|
180
|
+
|
147
181
|
end
|
148
182
|
end
|
@@ -176,6 +176,7 @@ describe QueueingRabbit::Worker do
|
|
176
176
|
end
|
177
177
|
|
178
178
|
it 'closes the connection, removes the pidfile and reports the event' do
|
179
|
+
connection.should_receive(:next_tick).and_yield
|
179
180
|
connection.should_receive(:close).and_yield
|
180
181
|
File.stub(:exists?).with(file_name).and_return(true)
|
181
182
|
File.should_receive(:delete).with(file_name)
|
@@ -200,7 +200,7 @@ describe QueueingRabbit do
|
|
200
200
|
connection.should_receive(:define_queue).
|
201
201
|
with(channel, queue_name, queue_options).
|
202
202
|
and_yield(queue)
|
203
|
-
|
203
|
+
connection.should_receive(:purge_queue).and_yield
|
204
204
|
channel.should_receive(:close)
|
205
205
|
end
|
206
206
|
|
@@ -208,4 +208,5 @@ describe QueueingRabbit do
|
|
208
208
|
subject.purge_queue(job).should be_true
|
209
209
|
end
|
210
210
|
end
|
211
|
+
|
211
212
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: queueing_rabbit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.8
|
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: 2014-01-
|
12
|
+
date: 2014-01-24 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: amqp
|
@@ -174,7 +174,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
174
174
|
version: '0'
|
175
175
|
segments:
|
176
176
|
- 0
|
177
|
-
hash:
|
177
|
+
hash: -1744328126596891438
|
178
178
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
179
179
|
none: false
|
180
180
|
requirements:
|
@@ -183,7 +183,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
183
183
|
version: '0'
|
184
184
|
segments:
|
185
185
|
- 0
|
186
|
-
hash:
|
186
|
+
hash: -1744328126596891438
|
187
187
|
requirements: []
|
188
188
|
rubyforge_project:
|
189
189
|
rubygems_version: 1.8.23
|