queueing_rabbit 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/queueing_rabbit.rb +3 -0
- data/lib/queueing_rabbit/client/bunny.rb +8 -4
- data/lib/queueing_rabbit/version.rb +1 -1
- data/spec/support/shared_examples.rb +0 -23
- data/spec/unit/queueing_rabbit/client/amqp_spec.rb +23 -0
- data/spec/unit/queueing_rabbit/client/bunny_spec.rb +16 -0
- data/spec/unit/queueing_rabbit_spec.rb +3 -0
- metadata +86 -93
data/lib/queueing_rabbit.rb
CHANGED
@@ -40,6 +40,7 @@ module QueueingRabbit
|
|
40
40
|
connection.open_channel(job.channel_options) do |c, _|
|
41
41
|
connection.define_queue(c, job.queue_name, job.queue_options)
|
42
42
|
connection.enqueue(c, job.queue_name, arguments)
|
43
|
+
c.close
|
43
44
|
end
|
44
45
|
|
45
46
|
true
|
@@ -51,6 +52,7 @@ module QueueingRabbit
|
|
51
52
|
connection.open_channel(job.channel_options) do |c, _|
|
52
53
|
queue = connection.define_queue(c, job.queue_name, job.queue_options)
|
53
54
|
size = connection.queue_size(queue)
|
55
|
+
c.close
|
54
56
|
end
|
55
57
|
size
|
56
58
|
end
|
@@ -58,6 +60,7 @@ module QueueingRabbit
|
|
58
60
|
def purge_queue(job)
|
59
61
|
connection.open_channel(job.channel_options) do |c, _|
|
60
62
|
connection.define_queue(c, job.queue_name, job.queue_options).purge
|
63
|
+
c.close
|
61
64
|
end
|
62
65
|
true
|
63
66
|
end
|
@@ -19,15 +19,19 @@ module QueueingRabbit
|
|
19
19
|
def open_channel(options = {})
|
20
20
|
ch = connection.create_channel
|
21
21
|
yield ch, nil
|
22
|
-
|
22
|
+
ch
|
23
23
|
end
|
24
24
|
|
25
25
|
def define_queue(channel, name, options = {})
|
26
|
-
routing_keys = [*options.delete(:routing_keys)] + [name]
|
26
|
+
routing_keys = ([*options.delete(:routing_keys)] + [name]).compact
|
27
27
|
|
28
|
-
channel.queue(name.to_s, options)
|
29
|
-
|
28
|
+
queue = channel.queue(name.to_s, options)
|
29
|
+
|
30
|
+
routing_keys.each do |key|
|
31
|
+
queue.bind(exchange(channel), :routing_key => key.to_s)
|
30
32
|
end
|
33
|
+
|
34
|
+
queue
|
31
35
|
end
|
32
36
|
|
33
37
|
def enqueue(channel, routing_key, payload)
|
@@ -1,28 +1,5 @@
|
|
1
1
|
shared_examples :client do
|
2
2
|
|
3
|
-
describe '#define_queue' do
|
4
|
-
let(:exchange) { mock }
|
5
|
-
let(:channel) { mock }
|
6
|
-
let(:queue) { mock }
|
7
|
-
let(:queue_name) { "test_queue_name" }
|
8
|
-
let(:routing_keys) { [:test_job] }
|
9
|
-
let(:options) { {:durable => false, :routing_keys => routing_keys} }
|
10
|
-
|
11
|
-
before do
|
12
|
-
client.stub(:exchange => exchange)
|
13
|
-
channel.should_receive(:queue).with(queue_name, options).
|
14
|
-
and_yield(queue)
|
15
|
-
queue.should_receive(:bind).
|
16
|
-
with(exchange, :routing_key => routing_keys.first.to_s).ordered
|
17
|
-
queue.should_receive(:bind).
|
18
|
-
with(exchange, :routing_key => queue_name).ordered
|
19
|
-
end
|
20
|
-
|
21
|
-
it "defines a queue and binds it to its name and the given routing keys" do
|
22
|
-
client.define_queue(channel, queue_name, options)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
3
|
describe '#define_exchange' do
|
27
4
|
let(:channel) { mock }
|
28
5
|
let(:options) { {:durable => true} }
|
@@ -89,6 +89,29 @@ describe QueueingRabbit::Client::AMQP do
|
|
89
89
|
|
90
90
|
it { should be }
|
91
91
|
|
92
|
+
describe '#define_queue' do
|
93
|
+
let(:exchange) { mock }
|
94
|
+
let(:channel) { mock }
|
95
|
+
let(:queue) { mock }
|
96
|
+
let(:queue_name) { "test_queue_name" }
|
97
|
+
let(:routing_keys) { [:test_job] }
|
98
|
+
let(:options) { {:durable => false, :routing_keys => routing_keys} }
|
99
|
+
|
100
|
+
before do
|
101
|
+
client.stub(:exchange => exchange)
|
102
|
+
channel.should_receive(:queue).with(queue_name, options).
|
103
|
+
and_yield(queue)
|
104
|
+
queue.should_receive(:bind).
|
105
|
+
with(exchange, :routing_key => routing_keys.first.to_s).ordered
|
106
|
+
queue.should_receive(:bind).
|
107
|
+
with(exchange, :routing_key => queue_name).ordered
|
108
|
+
end
|
109
|
+
|
110
|
+
it "defines a queue and binds it to its name and the given routing keys" do
|
111
|
+
client.define_queue(channel, queue_name, options)
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
92
115
|
describe '#listen_queue' do
|
93
116
|
let(:channel) { mock }
|
94
117
|
let(:queue_name) { mock }
|
@@ -51,6 +51,22 @@ describe QueueingRabbit::Client::Bunny do
|
|
51
51
|
end
|
52
52
|
end
|
53
53
|
|
54
|
+
describe '#define_queue' do
|
55
|
+
let(:channel) { mock }
|
56
|
+
let(:queue) { mock }
|
57
|
+
let(:exchange) { mock }
|
58
|
+
let(:name) { 'queue_name_test' }
|
59
|
+
let(:options) { {:foo => 'bar'} }
|
60
|
+
|
61
|
+
it 'creates a queue and binds it to the global exchange' do
|
62
|
+
channel.should_receive(:queue).with(name, options).and_return(queue)
|
63
|
+
client.should_receive(:exchange).with(channel).and_return(exchange)
|
64
|
+
queue.should_receive(:bind).with(exchange, :routing_key => name)
|
65
|
+
|
66
|
+
client.define_queue(channel, name, options)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
54
70
|
describe '#queue_size' do
|
55
71
|
let(:queue) { mock }
|
56
72
|
let(:status) { {:message_count => 42} }
|
@@ -47,6 +47,7 @@ describe QueueingRabbit do
|
|
47
47
|
queue_options)
|
48
48
|
connection.should_receive(:enqueue).with(channel,
|
49
49
|
queue_name, arguments)
|
50
|
+
channel.should_receive(:close)
|
50
51
|
end
|
51
52
|
|
52
53
|
it 'returns true when a message was enqueued successfully' do
|
@@ -76,6 +77,7 @@ describe QueueingRabbit do
|
|
76
77
|
with(channel, queue_name, queue_options).
|
77
78
|
and_return(queue)
|
78
79
|
connection.should_receive(:queue_size).with(queue).and_return(size)
|
80
|
+
channel.should_receive(:close)
|
79
81
|
end
|
80
82
|
|
81
83
|
it 'returns queue size for specific job' do
|
@@ -93,6 +95,7 @@ describe QueueingRabbit do
|
|
93
95
|
connection.should_receive(:define_queue).
|
94
96
|
with(channel, queue_name, queue_options).and_return(queue)
|
95
97
|
queue.should_receive(:purge).and_return(true)
|
98
|
+
channel.should_receive(:close)
|
96
99
|
end
|
97
100
|
|
98
101
|
it 'purges messages from the queue' do
|
metadata
CHANGED
@@ -1,104 +1,95 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: queueing_rabbit
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 29
|
5
5
|
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
- 3
|
10
|
+
version: 0.1.3
|
6
11
|
platform: ruby
|
7
|
-
authors:
|
12
|
+
authors:
|
8
13
|
- Artem Chistyakov
|
9
14
|
autorequire:
|
10
15
|
bindir: bin
|
11
16
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
17
|
+
|
18
|
+
date: 2013-06-19 00:00:00 Z
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
15
21
|
name: amqp
|
16
|
-
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
|
-
requirements:
|
19
|
-
- - ! '>='
|
20
|
-
- !ruby/object:Gem::Version
|
21
|
-
version: 0.9.0
|
22
|
-
type: :runtime
|
23
22
|
prerelease: false
|
24
|
-
|
23
|
+
type: :runtime
|
24
|
+
version_requirements: &id001 !ruby/object:Gem::Requirement
|
25
25
|
none: false
|
26
|
-
requirements:
|
27
|
-
- -
|
28
|
-
- !ruby/object:Gem::Version
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 59
|
30
|
+
segments:
|
31
|
+
- 0
|
32
|
+
- 9
|
33
|
+
- 0
|
29
34
|
version: 0.9.0
|
30
|
-
|
35
|
+
requirement: *id001
|
36
|
+
- !ruby/object:Gem::Dependency
|
31
37
|
name: bunny
|
32
|
-
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
|
-
requirements:
|
35
|
-
- - ! '>='
|
36
|
-
- !ruby/object:Gem::Version
|
37
|
-
version: 0.9.0.pre7
|
38
|
-
type: :runtime
|
39
38
|
prerelease: false
|
40
|
-
|
39
|
+
type: :runtime
|
40
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
41
41
|
none: false
|
42
|
-
requirements:
|
43
|
-
- -
|
44
|
-
- !ruby/object:Gem::Version
|
42
|
+
requirements:
|
43
|
+
- - ">="
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
hash: -756668528
|
46
|
+
segments:
|
47
|
+
- 0
|
48
|
+
- 9
|
49
|
+
- 0
|
50
|
+
- pre
|
51
|
+
- 7
|
45
52
|
version: 0.9.0.pre7
|
46
|
-
|
53
|
+
requirement: *id002
|
54
|
+
- !ruby/object:Gem::Dependency
|
47
55
|
name: rake
|
48
|
-
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
|
-
requirements:
|
51
|
-
- - ! '>='
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
version: '0'
|
54
|
-
type: :runtime
|
55
56
|
prerelease: false
|
56
|
-
|
57
|
+
type: :runtime
|
58
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
57
59
|
none: false
|
58
|
-
requirements:
|
59
|
-
- -
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
|
62
|
-
|
60
|
+
requirements:
|
61
|
+
- - ">="
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
hash: 3
|
64
|
+
segments:
|
65
|
+
- 0
|
66
|
+
version: "0"
|
67
|
+
requirement: *id003
|
68
|
+
- !ruby/object:Gem::Dependency
|
63
69
|
name: json
|
64
|
-
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
|
-
requirements:
|
67
|
-
- - ! '>='
|
68
|
-
- !ruby/object:Gem::Version
|
69
|
-
version: '0'
|
70
|
-
type: :runtime
|
71
70
|
prerelease: false
|
72
|
-
|
71
|
+
type: :runtime
|
72
|
+
version_requirements: &id004 !ruby/object:Gem::Requirement
|
73
73
|
none: false
|
74
|
-
requirements:
|
75
|
-
- -
|
76
|
-
- !ruby/object:Gem::Version
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
class or Module can be transformed into QueueingRabbit's background\n job by
|
85
|
-
including QueueingRabbit::Job module. It is also possible to inherit\n your class
|
86
|
-
from QueueingRabbit::AbstractJob abstract class.\n\n The library is bundled with
|
87
|
-
a Rake task which is capable of starting a\n worker processing a specified list
|
88
|
-
of jobs.\n\n To achieve the required simplicity the gem doesn't try to support
|
89
|
-
all\n features of AMQP protocol. It uses a restricted subset instead:\n\n *
|
90
|
-
Only a single direct exchange is used\n * Every job is consumed using a separate
|
91
|
-
channel\n * All jobs are consumed with acknowledgements\n * ACK is only sent
|
92
|
-
to the broker if a job was processed successfully\n * Currently all messages
|
93
|
-
are published with persistent option\n"
|
94
|
-
email:
|
74
|
+
requirements:
|
75
|
+
- - ">="
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
hash: 3
|
78
|
+
segments:
|
79
|
+
- 0
|
80
|
+
version: "0"
|
81
|
+
requirement: *id004
|
82
|
+
description: " QueueingRabbit is a Ruby library providing convenient object-oriented syntax\n for managing background jobs using AMQP. All jobs' argumets are serialized\n to JSON and transfered to jobs using AMQP message payload. The library\n implements amqp and bunny gems as adapters making it possible to use\n synchronous publishing and asynchronous consuming, which might be useful for\n Rails app running on non-EventMachine based application servers (i. e.\n Passenger).\n\n Any Ruby class or Module can be transformed into QueueingRabbit's background\n job by including QueueingRabbit::Job module. It is also possible to inherit\n your class from QueueingRabbit::AbstractJob abstract class.\n\n The library is bundled with a Rake task which is capable of starting a\n worker processing a specified list of jobs.\n\n To achieve the required simplicity the gem doesn't try to support all\n features of AMQP protocol. It uses a restricted subset instead:\n\n * Only a single direct exchange is used\n * Every job is consumed using a separate channel\n * All jobs are consumed with acknowledgements\n * ACK is only sent to the broker if a job was processed successfully\n * Currently all messages are published with persistent option\n"
|
83
|
+
email:
|
95
84
|
- chistyakov.artem@gmail.com
|
96
85
|
executables: []
|
86
|
+
|
97
87
|
extensions: []
|
98
|
-
|
88
|
+
|
89
|
+
extra_rdoc_files:
|
99
90
|
- LICENSE
|
100
91
|
- README.md
|
101
|
-
files:
|
92
|
+
files:
|
102
93
|
- .gitignore
|
103
94
|
- .rvmrc
|
104
95
|
- .travis.yml
|
@@ -140,36 +131,38 @@ files:
|
|
140
131
|
- spec/unit/queueing_rabbit_spec.rb
|
141
132
|
homepage: https://github.com/temochka/queueing_rabbit
|
142
133
|
licenses: []
|
134
|
+
|
143
135
|
post_install_message:
|
144
|
-
rdoc_options:
|
136
|
+
rdoc_options:
|
145
137
|
- --charset=UTF-8
|
146
|
-
require_paths:
|
138
|
+
require_paths:
|
147
139
|
- lib
|
148
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
140
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
149
141
|
none: false
|
150
|
-
requirements:
|
151
|
-
- -
|
152
|
-
- !ruby/object:Gem::Version
|
153
|
-
|
154
|
-
segments:
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
hash: 3
|
146
|
+
segments:
|
155
147
|
- 0
|
156
|
-
|
157
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
148
|
+
version: "0"
|
149
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
158
150
|
none: false
|
159
|
-
requirements:
|
160
|
-
- -
|
161
|
-
- !ruby/object:Gem::Version
|
162
|
-
|
163
|
-
segments:
|
151
|
+
requirements:
|
152
|
+
- - ">="
|
153
|
+
- !ruby/object:Gem::Version
|
154
|
+
hash: 3
|
155
|
+
segments:
|
164
156
|
- 0
|
165
|
-
|
157
|
+
version: "0"
|
166
158
|
requirements: []
|
159
|
+
|
167
160
|
rubyforge_project:
|
168
|
-
rubygems_version: 1.8.
|
161
|
+
rubygems_version: 1.8.24
|
169
162
|
signing_key:
|
170
163
|
specification_version: 3
|
171
164
|
summary: QueueingRabbit is an AMQP-based queueing system
|
172
|
-
test_files:
|
165
|
+
test_files:
|
173
166
|
- spec/integration/asynchronous_publishing_and_consuming_spec.rb
|
174
167
|
- spec/integration/jobs/print_line_job.rb
|
175
168
|
- spec/integration/synchronous_publishing_and_asynchronous_consuming_spec.rb
|