action_subscriber 1.0.3-java
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.
- checksums.yaml +7 -0
- data/.gitignore +21 -0
- data/.rspec +2 -0
- data/Gemfile +5 -0
- data/LICENSE +20 -0
- data/LICENSE.txt +22 -0
- data/README.md +122 -0
- data/Rakefile +8 -0
- data/action_subscriber.gemspec +38 -0
- data/examples/at_least_once.rb +17 -0
- data/examples/at_most_once.rb +15 -0
- data/examples/basic_subscriber.rb +30 -0
- data/examples/message_acknowledgement.rb +19 -0
- data/lib/action_subscriber.rb +93 -0
- data/lib/action_subscriber/base.rb +83 -0
- data/lib/action_subscriber/bunny/subscriber.rb +57 -0
- data/lib/action_subscriber/configuration.rb +68 -0
- data/lib/action_subscriber/default_routing.rb +26 -0
- data/lib/action_subscriber/dsl.rb +83 -0
- data/lib/action_subscriber/march_hare/subscriber.rb +60 -0
- data/lib/action_subscriber/middleware.rb +18 -0
- data/lib/action_subscriber/middleware/active_record/connection_management.rb +17 -0
- data/lib/action_subscriber/middleware/active_record/query_cache.rb +29 -0
- data/lib/action_subscriber/middleware/decoder.rb +33 -0
- data/lib/action_subscriber/middleware/env.rb +65 -0
- data/lib/action_subscriber/middleware/error_handler.rb +16 -0
- data/lib/action_subscriber/middleware/router.rb +17 -0
- data/lib/action_subscriber/middleware/runner.rb +16 -0
- data/lib/action_subscriber/rabbit_connection.rb +40 -0
- data/lib/action_subscriber/railtie.rb +13 -0
- data/lib/action_subscriber/rspec.rb +91 -0
- data/lib/action_subscriber/subscribable.rb +118 -0
- data/lib/action_subscriber/threadpool.rb +29 -0
- data/lib/action_subscriber/version.rb +3 -0
- data/spec/integration/basic_subscriber_spec.rb +42 -0
- data/spec/lib/action_subscriber/base_spec.rb +18 -0
- data/spec/lib/action_subscriber/configuration_spec.rb +32 -0
- data/spec/lib/action_subscriber/dsl_spec.rb +143 -0
- data/spec/lib/action_subscriber/middleware/active_record/connection_management_spec.rb +17 -0
- data/spec/lib/action_subscriber/middleware/active_record/query_cache_spec.rb +49 -0
- data/spec/lib/action_subscriber/middleware/decoder_spec.rb +31 -0
- data/spec/lib/action_subscriber/middleware/env_spec.rb +60 -0
- data/spec/lib/action_subscriber/middleware/error_handler_spec.rb +35 -0
- data/spec/lib/action_subscriber/middleware/router_spec.rb +24 -0
- data/spec/lib/action_subscriber/middleware/runner_spec.rb +6 -0
- data/spec/lib/action_subscriber/subscribable_spec.rb +128 -0
- data/spec/lib/action_subscriber/threadpool_spec.rb +35 -0
- data/spec/spec_helper.rb +26 -0
- data/spec/support/user_subscriber.rb +6 -0
- metadata +255 -0
@@ -0,0 +1,143 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe ::ActionSubscriber::DSL do
|
4
|
+
let(:subscriber) { Object.new }
|
5
|
+
before { subscriber.extend(::ActionSubscriber::DSL) }
|
6
|
+
|
7
|
+
describe "acknowledging messages" do
|
8
|
+
context "when manual_acknowledgement! is set" do
|
9
|
+
before { subscriber.manual_acknowledgement! }
|
10
|
+
|
11
|
+
it "acknowledges messages" do
|
12
|
+
expect(subscriber.acknowledge_messages?).to eq(true)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "returns expected queue subscription options" do
|
16
|
+
expect(subscriber.queue_subscription_options).to eq( :manual_ack => true )
|
17
|
+
end
|
18
|
+
|
19
|
+
it "does not acknowledge messages after processing them" do
|
20
|
+
expect(subscriber.acknowledge_messages_after_processing?).to eq(false)
|
21
|
+
end
|
22
|
+
|
23
|
+
it "does not acknowledge messages before processing them" do
|
24
|
+
expect(subscriber.acknowledge_messages_before_processing?).to eq(false)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
context "when at_most_once! is set" do
|
29
|
+
before { subscriber.at_most_once! }
|
30
|
+
|
31
|
+
it "acknowledges messages" do
|
32
|
+
expect(subscriber.acknowledge_messages?).to eq(true)
|
33
|
+
end
|
34
|
+
|
35
|
+
it "acknowledges messages before processing them" do
|
36
|
+
expect(subscriber.acknowledge_messages_before_processing?).to eq(true)
|
37
|
+
end
|
38
|
+
|
39
|
+
it "does not acknowledge messages after processing them" do
|
40
|
+
expect(subscriber.acknowledge_messages_after_processing?).to eq(false)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
context "when at_least_once! is set" do
|
45
|
+
before { subscriber.at_least_once! }
|
46
|
+
|
47
|
+
it "acknowledges messages" do
|
48
|
+
expect(subscriber.acknowledge_messages?).to eq(true)
|
49
|
+
end
|
50
|
+
|
51
|
+
it "does not acknowledge messages before processing them" do
|
52
|
+
expect(subscriber.acknowledge_messages_before_processing?).to eq(false)
|
53
|
+
end
|
54
|
+
|
55
|
+
it "acknowledges messages after processing them" do
|
56
|
+
expect(subscriber.acknowledge_messages_after_processing?).to eq(true)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
context "when no_acknowledgement! is set" do
|
61
|
+
before { subscriber.no_acknowledgement! }
|
62
|
+
|
63
|
+
it "does not acknowledge messages" do
|
64
|
+
expect(subscriber.acknowledge_messages?).to eq(false)
|
65
|
+
end
|
66
|
+
|
67
|
+
it "does not acknowledge messages after processing them" do
|
68
|
+
expect(subscriber.acknowledge_messages_after_processing?).to eq(false)
|
69
|
+
end
|
70
|
+
|
71
|
+
it "does not acknowledge messages before processing them" do
|
72
|
+
expect(subscriber.acknowledge_messages_before_processing?).to eq(false)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
context "default" do
|
77
|
+
it "does not acknowledge messages" do
|
78
|
+
expect(subscriber.acknowledge_messages?).to eq(false)
|
79
|
+
end
|
80
|
+
|
81
|
+
it "does not acknowledge messages after processing them" do
|
82
|
+
expect(subscriber.acknowledge_messages_after_processing?).to eq(false)
|
83
|
+
end
|
84
|
+
|
85
|
+
it "does not acknowledge messages before processing them" do
|
86
|
+
expect(subscriber.acknowledge_messages_before_processing?).to eq(false)
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
describe "exchange_names" do
|
92
|
+
context "when exchange names are set" do
|
93
|
+
before { subscriber.exchange_names :foo, :bar }
|
94
|
+
|
95
|
+
it "returns an array of exchange names" do
|
96
|
+
expect(subscriber.exchange_names).to eq(["foo", "bar"])
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
context "when exchange names are not set" do
|
101
|
+
before { subscriber.instance_variable_set(:@_exchange_names, nil) }
|
102
|
+
|
103
|
+
it "returns the default exchange" do
|
104
|
+
expect(subscriber.exchange_names).to eq(["events"])
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
describe "queue_for" do
|
110
|
+
before { subscriber.queue_for(:created, "my_app.app.user.created") }
|
111
|
+
|
112
|
+
it "adds the method and queue name to the queue names collection" do
|
113
|
+
expect(subscriber.queue_names).to eq({:created => "my_app.app.user.created" })
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
describe "remote_application_name" do
|
118
|
+
context "when remote appliation name is set" do
|
119
|
+
before { subscriber.remote_application_name "app" }
|
120
|
+
|
121
|
+
it "returns the remote application name" do
|
122
|
+
expect(subscriber.remote_application_name).to eq("app")
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
context "when remote application name is not set" do
|
127
|
+
before { subscriber.instance_variable_set(:@_remote_application_name, nil) }
|
128
|
+
|
129
|
+
it "returns nil" do
|
130
|
+
expect(subscriber.remote_application_name).to be_nil
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
describe "routing_key_for" do
|
136
|
+
before { subscriber.routing_key_for(:created, "app.user.created") }
|
137
|
+
|
138
|
+
it "adds the method name to the routing key names collection" do
|
139
|
+
expect(subscriber.routing_key_names).to eq({:created => "app.user.created"})
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'action_subscriber/middleware/active_record/connection_management'
|
3
|
+
|
4
|
+
describe ActionSubscriber::Middleware::ActiveRecord::ConnectionManagement do
|
5
|
+
include_context 'action subscriber middleware env'
|
6
|
+
|
7
|
+
before { allow(ActiveRecord::Base).to receive(:clear_active_connections!) }
|
8
|
+
|
9
|
+
subject { described_class.new(app) }
|
10
|
+
|
11
|
+
it_behaves_like 'an action subscriber middleware'
|
12
|
+
|
13
|
+
it "clears active connections" do
|
14
|
+
expect(ActiveRecord::Base).to receive(:clear_active_connections!)
|
15
|
+
subject.call(env)
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'action_subscriber/middleware/active_record/query_cache'
|
3
|
+
|
4
|
+
describe ActionSubscriber::Middleware::ActiveRecord::QueryCache do
|
5
|
+
include_context 'action subscriber middleware env'
|
6
|
+
|
7
|
+
let(:connection) { double(:connection, :query_cache_enabled => true) }
|
8
|
+
|
9
|
+
before do
|
10
|
+
allow(connection).to receive(:clear_query_cache)
|
11
|
+
allow(connection).to receive(:disable_query_cache!)
|
12
|
+
allow(connection).to receive(:enable_query_cache!)
|
13
|
+
|
14
|
+
allow(ActiveRecord::Base).to receive(:connection).and_return(connection)
|
15
|
+
allow(ActiveRecord::Base).to receive(:connection_id)
|
16
|
+
end
|
17
|
+
|
18
|
+
subject { described_class.new(app) }
|
19
|
+
|
20
|
+
it_behaves_like 'an action subscriber middleware'
|
21
|
+
|
22
|
+
it "enables the query cache" do
|
23
|
+
expect(connection).to receive(:enable_query_cache!)
|
24
|
+
subject.call(env)
|
25
|
+
end
|
26
|
+
|
27
|
+
it "clears the query cache" do
|
28
|
+
expect(connection).to receive(:clear_query_cache)
|
29
|
+
subject.call(env)
|
30
|
+
end
|
31
|
+
|
32
|
+
context "when the query cache is already enabled" do
|
33
|
+
before { allow(connection).to receive(:query_cache_enabled).and_return(true) }
|
34
|
+
|
35
|
+
it "does not disable the query cache" do
|
36
|
+
expect(connection).to_not receive(:disable_query_cache!)
|
37
|
+
subject.call(env)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
context "when the query cache is not already enabled" do
|
42
|
+
before { allow(connection).to receive(:query_cache_enabled).and_return(false) }
|
43
|
+
|
44
|
+
it "does disable the query cache" do
|
45
|
+
expect(connection).to receive(:disable_query_cache!)
|
46
|
+
subject.call(env)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe ActionSubscriber::Middleware::Decoder do
|
4
|
+
include_context 'action subscriber middleware env'
|
5
|
+
|
6
|
+
subject { described_class.new(app) }
|
7
|
+
|
8
|
+
it_behaves_like 'an action subscriber middleware'
|
9
|
+
|
10
|
+
let(:env) { ActionSubscriber::Middleware::Env.new(UserSubscriber, encoded_payload, message_properties) }
|
11
|
+
let(:encoded_payload) { JSON.generate(payload) }
|
12
|
+
let(:payload) { {"ohai" => "GUYZ"} }
|
13
|
+
|
14
|
+
context "when the content type has an associated decoder" do
|
15
|
+
before { message_properties[:content_type] = "application/json"}
|
16
|
+
|
17
|
+
it "decodes the payload" do
|
18
|
+
subject.call(env)
|
19
|
+
expect(env.payload).to eq(payload)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
context "when the content type does not have an associated decoder" do
|
24
|
+
before { message_properties[:content_type] = "application/foo"}
|
25
|
+
|
26
|
+
it "uses the payload as-is" do
|
27
|
+
subject.call(env)
|
28
|
+
expect(env.payload).to eq(encoded_payload)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe ActionSubscriber::Middleware::Env do
|
4
|
+
let(:channel) { double("channel") }
|
5
|
+
let(:encoded_payload) { 'encoded_payload' }
|
6
|
+
let(:properties){ {
|
7
|
+
:channel => channel,
|
8
|
+
:content_type => "application/json",
|
9
|
+
:delivery_tag => "XYZ",
|
10
|
+
:encoded_payload => encoded_payload,
|
11
|
+
:exchange => "events",
|
12
|
+
:message_id => "MSG-1234",
|
13
|
+
:routing_key => "amigo.user.created",
|
14
|
+
} }
|
15
|
+
let(:subscriber) { UserSubscriber }
|
16
|
+
|
17
|
+
subject { described_class.new(subscriber, encoded_payload, properties) }
|
18
|
+
|
19
|
+
specify { expect(subject.action).to eq("created") }
|
20
|
+
specify { expect(subject.content_type).to eq(properties[:content_type]) }
|
21
|
+
specify { expect(subject.exchange).to eq(properties[:exchange]) }
|
22
|
+
specify { expect(subject.message_id).to eq(properties[:message_id]) }
|
23
|
+
specify { expect(subject.routing_key).to eq(properties[:routing_key]) }
|
24
|
+
|
25
|
+
describe "#acknowledge" do
|
26
|
+
it "sends an acknowledgement to rabbitmq" do
|
27
|
+
expect(channel).to receive(:ack).with(properties[:delivery_tag], false)
|
28
|
+
subject.acknowledge
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe "#reject" do
|
33
|
+
it "sends an rejection to rabbitmq" do
|
34
|
+
expect(channel).to receive(:reject).with(properties[:delivery_tag], true)
|
35
|
+
subject.reject
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe "#to_hash" do
|
40
|
+
it "includes the action" do
|
41
|
+
expect(subject.to_hash).to have_key(:action)
|
42
|
+
end
|
43
|
+
|
44
|
+
it "includes the content_type" do
|
45
|
+
expect(subject.to_hash).to have_key(:content_type)
|
46
|
+
end
|
47
|
+
|
48
|
+
it "includes the exchange" do
|
49
|
+
expect(subject.to_hash).to have_key(:exchange)
|
50
|
+
end
|
51
|
+
|
52
|
+
it "includes the routing_key" do
|
53
|
+
expect(subject.to_hash).to have_key(:routing_key)
|
54
|
+
end
|
55
|
+
|
56
|
+
it "includes the payload" do
|
57
|
+
expect(subject.to_hash).to have_key(:payload)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'action_subscriber/middleware/error_handler'
|
3
|
+
|
4
|
+
describe ActionSubscriber::Middleware::ErrorHandler do
|
5
|
+
include_context 'action subscriber middleware env'
|
6
|
+
|
7
|
+
subject { described_class.new(app) }
|
8
|
+
|
9
|
+
it_behaves_like 'an action subscriber middleware'
|
10
|
+
|
11
|
+
let(:error) { ::RuntimeError.new("Boom!") }
|
12
|
+
|
13
|
+
context "when an exception occurs" do
|
14
|
+
before { allow(app).to receive(:call).and_raise(error) }
|
15
|
+
|
16
|
+
it "calls the exception handler" do
|
17
|
+
handler = ::ActionSubscriber.configuration.error_handler
|
18
|
+
expect(handler).to receive(:call).with(error, env.to_h)
|
19
|
+
|
20
|
+
subject.call(env)
|
21
|
+
end
|
22
|
+
|
23
|
+
context "when the subscriber was expecting to acknowledge the message" do
|
24
|
+
before { allow(env.subscriber).to receive(:acknowledge_messages_after_processing?).and_return(true) }
|
25
|
+
|
26
|
+
it "calls the exception handler and rejects the message" do
|
27
|
+
handler = ::ActionSubscriber.configuration.error_handler
|
28
|
+
expect(handler).to receive(:call).with(error, env.to_h)
|
29
|
+
expect(env).to receive(:reject).with(no_args)
|
30
|
+
|
31
|
+
subject.call(env)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe ActionSubscriber::Middleware::Router do
|
4
|
+
include_context 'action subscriber middleware env'
|
5
|
+
|
6
|
+
subject { described_class.new(app) }
|
7
|
+
|
8
|
+
it "routes the event to the proper action" do
|
9
|
+
allow_any_instance_of(env.subscriber).to receive(env.action)
|
10
|
+
subject.call(env)
|
11
|
+
end
|
12
|
+
|
13
|
+
it "acknowledges messages after processing if the subscriber flag is set" do
|
14
|
+
allow(env.subscriber).to receive(:acknowledge_messages_after_processing?).and_return(true)
|
15
|
+
expect(env).to receive(:acknowledge)
|
16
|
+
subject.call(env)
|
17
|
+
end
|
18
|
+
|
19
|
+
it "acknowledges messages before processing if the subscriber flag is set" do
|
20
|
+
allow(env.subscriber).to receive(:acknowledge_messages_before_processing?).and_return(true)
|
21
|
+
expect(env).to receive(:acknowledge)
|
22
|
+
subject.call(env)
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,128 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
TestSubscriber = Class.new(ActionSubscriber::Base) do
|
4
|
+
def updated
|
5
|
+
end
|
6
|
+
|
7
|
+
def updated_low
|
8
|
+
end
|
9
|
+
end
|
10
|
+
TestSubscriber.remote_application_name :bob
|
11
|
+
|
12
|
+
describe ActionSubscriber::Subscribable do
|
13
|
+
describe "allow_low_priority_methods?" do
|
14
|
+
after do
|
15
|
+
::ActionSubscriber.configure { |config| config.allow_low_priority_methods = false }
|
16
|
+
end
|
17
|
+
|
18
|
+
it "when the configuration is false is is false" do
|
19
|
+
::ActionSubscriber.configure { |config| config.allow_low_priority_methods = false }
|
20
|
+
expect(TestSubscriber.allow_low_priority_methods?).to eq(false)
|
21
|
+
end
|
22
|
+
|
23
|
+
it "when the configuration is true it is true" do
|
24
|
+
::ActionSubscriber.configure { |config| config.allow_low_priority_methods = true }
|
25
|
+
expect(TestSubscriber.allow_low_priority_methods?).to eq(true)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "filter_low_priority_methods" do
|
30
|
+
context "when allow_low_priority_methods? is false" do
|
31
|
+
before { allow(TestSubscriber).to receive(:allow_low_priority_methods?).and_return(false) }
|
32
|
+
|
33
|
+
it "removes low priority methods" do
|
34
|
+
filtered_methods = TestSubscriber.filter_low_priority_methods([:updated, :updated_low])
|
35
|
+
expect(filtered_methods).to eq([:updated])
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
context "when allow_low_priority_methods? is true" do
|
40
|
+
before { allow(TestSubscriber).to receive(:allow_low_priority_methods?).and_return(true) }
|
41
|
+
|
42
|
+
it "allows low priority methods" do
|
43
|
+
filtered_methods = TestSubscriber.filter_low_priority_methods([:updated, :updated_low])
|
44
|
+
expect(filtered_methods).to eq([:updated, :updated_low])
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe "generate_queue_name" do
|
50
|
+
it "returns a queue name" do
|
51
|
+
queue_name = TestSubscriber.generate_queue_name(:created)
|
52
|
+
expect(queue_name).to eq("alice.bob.test.created")
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
describe "generate_routing_key_name" do
|
57
|
+
it "returns a routing key name" do
|
58
|
+
routing_key_name = TestSubscriber.generate_routing_key_name(:created)
|
59
|
+
expect(routing_key_name).to eq("bob.test.created")
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
describe "local_application_name" do
|
64
|
+
it "returns the local application name" do
|
65
|
+
expect(TestSubscriber.local_application_name).to eq("alice")
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
describe "queue_name_for_method" do
|
70
|
+
before { TestSubscriber.instance_variable_set(:@_queue_names, nil) }
|
71
|
+
|
72
|
+
context "when the queue is already registered" do
|
73
|
+
it "returns the registered queue" do
|
74
|
+
TestSubscriber.queue_for(:created, "foo.bar")
|
75
|
+
queue_name = TestSubscriber.queue_name_for_method(:created)
|
76
|
+
expect(queue_name).to eq("foo.bar")
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
context "when the queue is not registered" do
|
81
|
+
it "generates a queue name" do
|
82
|
+
queue_name = TestSubscriber.queue_name_for_method(:created)
|
83
|
+
expect(queue_name).to eq("alice.bob.test.created")
|
84
|
+
end
|
85
|
+
|
86
|
+
it "registers the generated queue" do
|
87
|
+
queue_name = TestSubscriber.queue_name_for_method(:created)
|
88
|
+
expect(TestSubscriber.queue_names).to eq({:created =>"alice.bob.test.created"})
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
describe "resource_name" do
|
94
|
+
it "returns the resource name" do
|
95
|
+
expect(TestSubscriber.resource_name).to eq("test")
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
describe "routing_key_name_for_method" do
|
100
|
+
before { TestSubscriber.instance_variable_set(:@_routing_key_names, nil) }
|
101
|
+
|
102
|
+
context "when the routing key is already registered" do
|
103
|
+
it "returns the registered routing key" do
|
104
|
+
TestSubscriber.routing_key_for(:created, "bar.foo")
|
105
|
+
routing_key_name = TestSubscriber.routing_key_name_for_method(:created)
|
106
|
+
expect(routing_key_name).to eq("bar.foo")
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
context "when the routing key is not registered" do
|
111
|
+
it "generates a routing key name" do
|
112
|
+
routing_key_name = TestSubscriber.routing_key_name_for_method(:created)
|
113
|
+
expect(routing_key_name).to eq("bob.test.created")
|
114
|
+
end
|
115
|
+
|
116
|
+
it "registers the generated routing key" do
|
117
|
+
routing_key_name = TestSubscriber.routing_key_name_for_method(:created)
|
118
|
+
expect(TestSubscriber.routing_key_names).to eq({:created => "bob.test.created"})
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
describe "subscribable methods" do
|
124
|
+
it "returns the subscribable methods" do
|
125
|
+
expect(TestSubscriber.subscribable_methods).to eq([:updated])
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|