action_subscriber 1.1.1 → 1.2.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d1695f4f608496ca1f5032a65162ea5336e93971
4
- data.tar.gz: 26da07204de5366ae6ec142c6fdd7fc605fd05c7
3
+ metadata.gz: 81810a9b42c428f46bdf5c4ee1ddae28c8b1c0d9
4
+ data.tar.gz: 592323b59305d76ab8eb989ddb1f48f02c05974f
5
5
  SHA512:
6
- metadata.gz: 35c1fb75fd1c0ee206c0845d8c0f0d09fe15b67ba93175cf290ed4e59d6adf55fe728635bc964ab3e24022c95aff298ab33c1d6f392d5f6206e98aeaa5dc57d0
7
- data.tar.gz: 9c4f23eb00dbc8d877849b5cdef933824506e0204e2210a35ead55c0132c0ce4f9526efb75ada0d2cbe8405a5541675b1e29bde3581c465b47fe2815b7d788f9
6
+ metadata.gz: 2e66ba065d0ce05d32e9981915c4e3008f9216e5e671e02dbc37784645b14b68b42bf0c53200fbae027290eecb6231f7b5cccfb30ecab582d9519bd38e8865e9
7
+ data.tar.gz: 3215858c226c65d6c54929381b41d7dcb9ca5639ab2b5f2b1bf2dc38e19eb3b655a5588e91fffe58a0c25055605caff77b55938538baebe7699c047dbf889dff
@@ -20,6 +20,7 @@ require "action_subscriber/subscribable"
20
20
  require "action_subscriber/bunny/subscriber"
21
21
  require "action_subscriber/march_hare/subscriber"
22
22
  require "action_subscriber/babou"
23
+ require "action_subscriber/publisher"
23
24
  require "action_subscriber/threadpool"
24
25
  require "action_subscriber/base"
25
26
 
@@ -92,3 +93,7 @@ module ActionSubscriber
92
93
  end
93
94
 
94
95
  require "action_subscriber/railtie" if defined?(Rails)
96
+
97
+ at_exit do
98
+ ::ActionSubscriber::RabbitConnection.publisher_disconnect!
99
+ end
@@ -11,11 +11,12 @@ module ActionSubscriber
11
11
  :pop_interval,
12
12
  :port,
13
13
  :prefetch,
14
+ :publisher_confirms,
14
15
  :threadpool_size,
15
16
  :timeout,
16
17
  :times_to_pop
17
18
 
18
- DEFAULTS = {
19
+ DEFAULTS = {
19
20
  :allow_low_priority_methods => false,
20
21
  :default_exchange => 'events',
21
22
  :heartbeat => 5,
@@ -25,6 +26,7 @@ module ActionSubscriber
25
26
  :pop_interval => 100, # in milliseconds
26
27
  :port => 5672,
27
28
  :prefetch => 200,
29
+ :publisher_confirms => false,
28
30
  :threadpool_size => 8,
29
31
  :timeout => 1,
30
32
  :times_to_pop => 8
@@ -51,7 +53,6 @@ module ActionSubscriber
51
53
  ##
52
54
  # Instance Methods
53
55
  #
54
-
55
56
  def initialize
56
57
  self.decoder = {
57
58
  'application/json' => lambda { |payload| JSON.parse(payload) },
@@ -0,0 +1,44 @@
1
+ module ActionSubscriber
2
+ module Publisher
3
+ # Publish a message to RabbitMQ
4
+ #
5
+ # @param [String] route The routing key to use for this message.
6
+ # @param [String] payload The message you are sending. Should already be encoded as a string.
7
+ # @param [String] exchange The exchange you want to publish to.
8
+ # @param [Hash] options hash to set message parameters (e.g. headers)
9
+ def self.publish(route, payload, exchange_name, options = {})
10
+ with_exchange(exchange_name) do |exchange|
11
+ exchange.publish(payload, publishing_options(route, options))
12
+ end
13
+ end
14
+
15
+ def self.with_exchange(exchange_name)
16
+ connection = RabbitConnection.publisher_connection
17
+ channel = connection.create_channel
18
+ begin
19
+ channel.confirm_select if ActionSubscriber.configuration.publisher_confirms
20
+ exchange = channel.topic(exchange_name)
21
+ yield(exchange)
22
+ channel.wait_for_confirms if ActionSubscriber.configuration.publisher_confirms
23
+ ensure
24
+ channel.close rescue nil
25
+ end
26
+ end
27
+
28
+ def self.publishing_options(route, options = {})
29
+ options[:mandatory] = false unless options.key(:mandatory)
30
+ options[:persistent] = false unless options.key(:persistent)
31
+ options[:routing_key] = route
32
+
33
+ if ::RUBY_PLATFORM == "java"
34
+ java_options = {}
35
+ java_options[:mandatory] = options.delete(:mandatory)
36
+ java_options[:routing_key] = options.delete(:routing_key)
37
+ java_options[:properties] = options
38
+ java_options
39
+ else
40
+ options
41
+ end
42
+ end
43
+ end
44
+ end
@@ -1,3 +1,3 @@
1
1
  module ActionSubscriber
2
- VERSION = "1.1.1"
2
+ VERSION = "1.2.0"
3
3
  end
@@ -21,10 +21,8 @@ describe "A Basic Subscriber", :integration => true do
21
21
 
22
22
  context "ActionSubscriber.auto_pop!" do
23
23
  it "routes messages to the right place" do
24
- channel = connection.create_channel
25
- exchange = channel.topic("events")
26
- exchange.publish("Ohai Booked", :routing_key => "greg.basic_push.booked")
27
- exchange.publish("Ohai Cancelled", :routing_key => "basic.cancelled")
24
+ ::ActionSubscriber::Publisher.publish("greg.basic_push.booked", "Ohai Booked", "events")
25
+ ::ActionSubscriber::Publisher.publish("basic.cancelled", "Ohai Cancelled", "events")
28
26
 
29
27
  verify_expectation_within(2.0) do
30
28
  ::ActionSubscriber.auto_pop!
@@ -0,0 +1,35 @@
1
+ describe ::ActionSubscriber::Publisher do
2
+ let(:exchange) { double("Rabbit Exchange") }
3
+ let(:exchange_name) { "events" }
4
+ let(:payload) { "Yo Dawg" }
5
+ let(:route) { "bob.users.created" }
6
+
7
+ before { allow(described_class).to receive(:with_exchange).with(exchange_name).and_yield(exchange) }
8
+
9
+ describe '.publish' do
10
+
11
+ if ::RUBY_PLATFORM == "java"
12
+ it "publishes to the exchange with default options for march_hare" do
13
+ expect(exchange).to receive(:publish) do |published_payload, published_options|
14
+ expect(published_payload).to eq(payload)
15
+ expect(published_options[:routing_key]).to eq(route)
16
+ expect(published_options[:mandatory]).to eq(false)
17
+ expect(published_options[:properties][:persistent]).to eq(false)
18
+ end
19
+
20
+ described_class.publish(route, payload, exchange_name)
21
+ end
22
+ else
23
+ it "publishes to the exchange with default options for bunny" do
24
+ expect(exchange).to receive(:publish) do |published_payload, published_options|
25
+ expect(published_payload).to eq(payload)
26
+ expect(published_options[:routing_key]).to eq(route)
27
+ expect(published_options[:persistent]).to eq(false)
28
+ expect(published_options[:mandatory]).to eq(false)
29
+ end
30
+
31
+ described_class.publish(route, payload, exchange_name)
32
+ end
33
+ end
34
+ end
35
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: action_subscriber
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian Stien
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2015-09-25 00:00:00.000000000 Z
15
+ date: 2015-09-29 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: activesupport
@@ -197,6 +197,7 @@ files:
197
197
  - lib/action_subscriber/middleware/error_handler.rb
198
198
  - lib/action_subscriber/middleware/router.rb
199
199
  - lib/action_subscriber/middleware/runner.rb
200
+ - lib/action_subscriber/publisher.rb
200
201
  - lib/action_subscriber/rabbit_connection.rb
201
202
  - lib/action_subscriber/railtie.rb
202
203
  - lib/action_subscriber/rspec.rb
@@ -220,6 +221,7 @@ files:
220
221
  - spec/lib/action_subscriber/middleware/error_handler_spec.rb
221
222
  - spec/lib/action_subscriber/middleware/router_spec.rb
222
223
  - spec/lib/action_subscriber/middleware/runner_spec.rb
224
+ - spec/lib/action_subscriber/publisher_spec.rb
223
225
  - spec/lib/action_subscriber/subscribable_spec.rb
224
226
  - spec/lib/action_subscriber/threadpool_spec.rb
225
227
  - spec/spec_helper.rb
@@ -267,6 +269,7 @@ test_files:
267
269
  - spec/lib/action_subscriber/middleware/error_handler_spec.rb
268
270
  - spec/lib/action_subscriber/middleware/router_spec.rb
269
271
  - spec/lib/action_subscriber/middleware/runner_spec.rb
272
+ - spec/lib/action_subscriber/publisher_spec.rb
270
273
  - spec/lib/action_subscriber/subscribable_spec.rb
271
274
  - spec/lib/action_subscriber/threadpool_spec.rb
272
275
  - spec/spec_helper.rb