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.
@@ -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
- # ch.close
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) do |q|
29
- routing_keys.each { |key| q.bind(exchange, :routing_key => key.to_s) }
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,3 +1,3 @@
1
1
  module QueueingRabbit
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.3"
3
3
  end
@@ -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
- version: 0.1.2
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
- date: 2013-03-22 00:00:00.000000000 Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
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
- version_requirements: !ruby/object:Gem::Requirement
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
- - !ruby/object:Gem::Dependency
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
- version_requirements: !ruby/object:Gem::Requirement
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
- - !ruby/object:Gem::Dependency
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
- version_requirements: !ruby/object:Gem::Requirement
57
+ type: :runtime
58
+ version_requirements: &id003 !ruby/object:Gem::Requirement
57
59
  none: false
58
- requirements:
59
- - - ! '>='
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- - !ruby/object:Gem::Dependency
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
- version_requirements: !ruby/object:Gem::Requirement
71
+ type: :runtime
72
+ version_requirements: &id004 !ruby/object:Gem::Requirement
73
73
  none: false
74
- requirements:
75
- - - ! '>='
76
- - !ruby/object:Gem::Version
77
- version: '0'
78
- description: ! " QueueingRabbit is a Ruby library providing convenient object-oriented
79
- syntax\n for managing background jobs using AMQP. All jobs' argumets are serialized\n
80
- \ to JSON and transfered to jobs using AMQP message payload. The library\n implements
81
- amqp and bunny gems as adapters making it possible to use\n synchronous publishing
82
- and asynchronous consuming, which might be useful for\n Rails app running on
83
- non-EventMachine based application servers (i. e.\n Passenger).\n\n Any Ruby
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
- extra_rdoc_files:
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
- version: '0'
154
- segments:
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ hash: 3
146
+ segments:
155
147
  - 0
156
- hash: -404030946286887403
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
- version: '0'
163
- segments:
151
+ requirements:
152
+ - - ">="
153
+ - !ruby/object:Gem::Version
154
+ hash: 3
155
+ segments:
164
156
  - 0
165
- hash: -404030946286887403
157
+ version: "0"
166
158
  requirements: []
159
+
167
160
  rubyforge_project:
168
- rubygems_version: 1.8.25
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