amqp-boilerplate 1.1.4 → 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.
data/CHANGELOG CHANGED
@@ -1,3 +1,7 @@
1
+ = version 1.2.0
2
+
3
+ * [FEATURE] Added shutdown method that stops AMQP and EventMachine loop
4
+
1
5
  = version 1.1.4
2
6
 
3
7
  * [BUG] Prefetch option was not actually honored. Now it is :)
@@ -5,7 +9,7 @@
5
9
  = version 1.1.3
6
10
 
7
11
  * [ENHANCEMENT] Turned consumer prefetch into a global option (rverts change
8
- in 1.1.2)
12
+ in 1.1.2)
9
13
 
10
14
  = version 1.1.2
11
15
 
@@ -49,6 +49,7 @@ module AMQP
49
49
  load_consumers
50
50
 
51
51
  if AMQP::Utilities::EventLoopHelper.server_type || force_consumers
52
+ AMQP::Boilerplate.logger.debug("[#{self.name}.boot] Starting consumers")
52
53
  start_consumers
53
54
  else
54
55
  AMQP::Boilerplate.logger.debug("[#{self.name}.boot] Unknown server type, not starting consumers")
@@ -56,6 +57,24 @@ module AMQP
56
57
  end
57
58
  end
58
59
 
60
+ # Try to gracefully close channel and stop EventMachine
61
+ #
62
+ # TODO Close all open channels and not just the default one
63
+ #
64
+ # @return [void]
65
+ def self.shutdown
66
+ AMQP.stop do
67
+ AMQP::Boilerplate.logger.debug("[#{self.name}.shutdown] Attempting graceful channel and EventMachine shutdown")
68
+ EventMachine.stop
69
+ end
70
+
71
+ # 5 seconds is an arbitrary delay
72
+ EventMachine::Timer.new(5) do
73
+ AMQP::Boilerplate.logger.debug("[#{self.name}.shutdown] Graceful shutdown of EM didn't work, forcing shutdown")
74
+ EventMachine.stop
75
+ end
76
+ end
77
+
59
78
  # Configures AMQP::Boilerplate and yields AMQP::Boilerplate object to the block
60
79
  #
61
80
  # @example
@@ -92,12 +92,15 @@ module AMQP
92
92
  #
93
93
  # @see AMQP::Exchange#publish
94
94
  # @return [void]
95
- def publish
95
+ def publish(&block)
96
+ block ||= lambda {
97
+ AMQP::Boilerplate.logger.debug "[#{self.class}] Message was published"
98
+ }
99
+
96
100
  message = send(self.class.amqp_boilerplate_message.to_sym)
97
101
  if message
98
- exchange.publish(message, self.class.amqp_boilerplate_options) do
99
- AMQP::Boilerplate.logger.debug "[#{self.class}] Published message:\n#{message}"
100
- end
102
+ AMQP::Boilerplate.logger.debug "[#{self.class}] Publishing message:\n#{message}"
103
+ exchange.publish(message, self.class.amqp_boilerplate_options, &block)
101
104
  else
102
105
  AMQP::Boilerplate.logger.debug "[#{self.class}] Not publishing nil message"
103
106
  end
@@ -1,5 +1,5 @@
1
1
  module AMQP
2
2
  module Boilerplate
3
- VERSION = "1.1.4"
3
+ VERSION = "1.2.0"
4
4
  end
5
5
  end
@@ -82,8 +82,15 @@ describe AMQP::Boilerplate::Producer do
82
82
  end
83
83
 
84
84
  it "should log after delivering message" do
85
- AMQP::Boilerplate.logger.should_receive(:debug).with("[#{@producer.class}] Published message:\n#{@producer.message}")
85
+ AMQP::Boilerplate.logger.should_receive(:debug).with("[#{@producer.class}] Message was published")
86
86
  @producer.publish
87
87
  end
88
+
89
+ it "should yield to custom block when given" do
90
+ AMQP::Boilerplate.logger.should_receive(:debug).with("Custom block")
91
+ @producer.publish do
92
+ AMQP::Boilerplate.logger.debug("Custom block")
93
+ end
94
+ end
88
95
  end
89
96
  end
@@ -49,7 +49,6 @@ describe AMQP::Boilerplate do
49
49
  AMQP::Boilerplate.boot
50
50
  end
51
51
 
52
-
53
52
  it "should log server type as 'unknown'" do
54
53
  AMQP::Boilerplate.logger.should_receive(:info).with(/Server Type: unknown/)
55
54
  AMQP::Boilerplate.boot
@@ -110,6 +109,30 @@ describe AMQP::Boilerplate do
110
109
  end
111
110
  end
112
111
 
112
+ describe ".shutdown" do
113
+ subject { described_class.shutdown }
114
+
115
+ before do
116
+ EventMachine::Timer.stub(:new).and_yield
117
+ EventMachine.stub(:stop)
118
+ end
119
+
120
+ it "closes AMQP connection" do
121
+ AMQP.should_receive(:stop)
122
+ subject
123
+ end
124
+
125
+ it "stops EventMachine" do
126
+ EventMachine.should_receive(:stop)
127
+ subject
128
+ end
129
+
130
+ it "sets a one-off timer to make sure event loop shuts down" do
131
+ EventMachine::Timer.should_receive(:new)
132
+ subject
133
+ end
134
+ end
135
+
113
136
  describe ".configure" do
114
137
  after(:each) do
115
138
  AMQP::Boilerplate.logger = nil
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: amqp-boilerplate
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 31
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
- - 1
9
- - 4
10
- version: 1.1.4
8
+ - 2
9
+ - 0
10
+ version: 1.2.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Patrick Baselier
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2012-05-10 00:00:00 +02:00
19
+ date: 2012-06-05 00:00:00 +02:00
20
20
  default_executable:
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency