Skip to content

Commit f5b2db3

Browse files
author
vadim.kar
committed
Bump version to 1.6.4 and add publishing job configuration options
t а f а f f
1 parent 216e2da commit f5b2db3

File tree

4 files changed

+70
-9
lines changed

4 files changed

+70
-9
lines changed

Gemfile.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ GIT
88
PATH
99
remote: .
1010
specs:
11-
rabbit_messaging (1.6.3)
11+
rabbit_messaging (1.6.4)
1212
bunny (~> 2.0)
1313
kicks
1414

lib/rabbit.rb

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ class Config
1818
:hooks,
1919
:queue_name_conversion,
2020
:receiving_job_class_callable,
21+
:publishing_job_class_callable,
22+
:default_publishing_job_queue,
2123
:handler_resolver_callable,
2224
:exception_notifier,
2325
:before_receiving_hooks,
@@ -41,6 +43,8 @@ def initialize( # rubocop:disable Metrics/MethodLength
4143
environment: :production,
4244
queue_name_conversion: nil,
4345
receiving_job_class_callable: nil,
46+
publishing_job_class_callable: nil,
47+
default_publishing_job_queue: :default,
4448
handler_resolver_callable: nil,
4549
exception_notifier: nil,
4650
before_receiving_hooks: [],
@@ -63,6 +67,8 @@ def initialize( # rubocop:disable Metrics/MethodLength
6367
self.environment = environment.to_sym
6468
self.queue_name_conversion = queue_name_conversion
6569
self.receiving_job_class_callable = receiving_job_class_callable
70+
self.publishing_job_class_callable = publishing_job_class_callable
71+
self.default_publishing_job_queue = default_publishing_job_queue
6672
self.handler_resolver_callable = handler_resolver_callable
6773
self.exception_notifier = exception_notifier
6874
self.before_receiving_hooks = before_receiving_hooks
@@ -163,13 +169,15 @@ def configure
163169
config.validate!
164170
end
165171

166-
def publish(message_options)
172+
def publish(message_options, custom_queue_name: nil)
167173
message = Publishing::Message.new(message_options)
174+
publish_job_callable = config.publishing_job_class_callable || Publishing::Job
175+
queue_name = custom_queue_name || default_queue_name
168176

169177
if message.realtime?
170178
Publishing.publish(message)
171179
else
172-
Publishing::Job.set(queue: default_queue_name).perform_later(message.to_hash)
180+
publish_job_callable.set(queue: queue_name).perform_later(message.to_hash)
173181
end
174182
end
175183

@@ -179,6 +187,6 @@ def queue_name(queue, ignore_conversion: false)
179187
end
180188

181189
def default_queue_name(ignore_conversion: false)
182-
queue_name(:default, ignore_conversion: ignore_conversion)
190+
queue_name(config.default_publishing_job_queue, ignore_conversion: ignore_conversion)
183191
end
184192
end

lib/rabbit/version.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# frozen_string_literal: true
22

33
module Rabbit
4-
VERSION = "1.6.3"
4+
VERSION = "1.6.4"
55
end

spec/units/rabbit_spec.rb

Lines changed: 57 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
message_id: "uuid",
1313
}
1414
end
15+
let(:additional_params) { {} }
1516

1617
before do
1718
Rabbit.config.queue_name_conversion = -> (queue) { "#{queue}_prepared" }
@@ -52,8 +53,8 @@
5253

5354
it "publishes" do
5455
if expect_to_use_job
55-
set_params = { queue: "default_prepared" }
56-
expect(Rabbit::Publishing::Job).to receive(:set).with(set_params).and_call_original
56+
set_params = { queue: expected_queue }
57+
expect(job_class).to receive(:set).with(set_params).and_call_original
5758
perform_params = {
5859
routing_key: "some_queue",
5960
event: "some_event",
@@ -68,7 +69,7 @@
6869
.to receive(:perform_later).with(perform_params).and_call_original
6970

7071
else
71-
expect(Rabbit::Publishing::Job).not_to receive(:perform_later)
72+
expect(job_class).not_to receive(:perform_later)
7273
end
7374

7475
expect(publish_logger).to receive(:debug).with(<<~MSG.strip)
@@ -79,7 +80,7 @@
7980
test_group_id.test_project_id.some_exchange / some_queue / {"foo":"bar"} / some_event / \
8081
confirm: ...world"}
8182
MSG
82-
described_class.publish(message_options)
83+
described_class.publish(message_options, **additional_params)
8384
end
8485

8586
after do
@@ -96,6 +97,7 @@
9697
let(:publish_logger) { double("publish_logger") }
9798
let(:bunny) { double("bunny") }
9899
let(:channel) { double("channel") }
100+
let(:job_class) { Rabbit::Publishing::Job }
99101

100102
before do
101103
allow(Bunny).to receive_message_chain(:new, :start).and_return(bunny)
@@ -146,13 +148,64 @@
146148
context "realtime" do
147149
let(:realtime) { true }
148150
let(:expect_to_use_job) { false }
151+
let(:expected_queue) { "default_prepared" }
152+
let(:job_class) { Rabbit::Publishing::Job }
149153

150154
include_examples "publishes"
151155
end
152156

153157
context "not realtime" do
154158
let(:realtime) { false }
155159
let(:expect_to_use_job) { true }
160+
let(:expected_queue) { "default_prepared" }
161+
let(:job_class) { Rabbit::Publishing::Job }
162+
163+
include_examples "publishes"
164+
end
165+
166+
context "with custom job class" do
167+
let(:realtime) { false }
168+
let(:expect_to_use_job) { true }
169+
let(:expected_queue) { "default_prepared" }
170+
let(:job_class) { Class.new(Rabbit::Publishing::Job) }
171+
172+
before do
173+
stub_const("CustomJobClass", job_class)
174+
allow(Rabbit.config).to receive(:publishing_job_class_callable).and_return(job_class)
175+
end
176+
177+
include_examples "publishes"
178+
end
179+
180+
context "with custom default_publishing_job_queue" do
181+
let(:realtime) { false }
182+
let(:expect_to_use_job) { true }
183+
let(:job_class) { Rabbit::Publishing::Job }
184+
let(:default_publishing_job_queue) { :custom_queue }
185+
let(:expected_queue) { "passed_to_method_queue" }
186+
let(:additional_params) { { custom_queue_name: "passed_to_method_queue" } }
187+
188+
before do
189+
allow(Rabbit.config).to(
190+
receive(:default_publishing_job_queue).and_return(default_publishing_job_queue),
191+
)
192+
end
193+
194+
include_examples "publishes"
195+
end
196+
197+
context "with custom queue name" do
198+
let(:realtime) { false }
199+
let(:expect_to_use_job) { true }
200+
let(:job_class) { Rabbit::Publishing::Job }
201+
let(:default_publishing_job_queue) { :custom_queue }
202+
let(:expected_queue) { "custom_queue_prepared" }
203+
204+
before do
205+
allow(Rabbit.config).to(
206+
receive(:default_publishing_job_queue).and_return(default_publishing_job_queue),
207+
)
208+
end
156209

157210
include_examples "publishes"
158211
end

0 commit comments

Comments
 (0)