superbolt 0.6.0 → 0.7.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 +4 -4
- data/README.md +31 -25
- data/lib/superbolt.rb +3 -0
- data/lib/superbolt/app.rb +27 -12
- data/lib/superbolt/config.rb +4 -0
- data/lib/superbolt/error_notifier/airbrake.rb +17 -0
- data/lib/superbolt/error_notifier/none.rb +9 -0
- data/lib/superbolt/facade.rb +7 -2
- data/lib/superbolt/incoming_message.rb +1 -1
- data/lib/superbolt/runner/base.rb +4 -10
- data/lib/superbolt/runner/default.rb +5 -4
- data/lib/superbolt/version.rb +1 -1
- data/spec/app_spec.rb +37 -8
- data/spec/lib/superbolt/error_notifier/airbrake_spec.rb +41 -0
- data/spec/lib/superbolt/error_notifier/none_spec.rb +14 -0
- data/spec/lib/superbolt/runner/pg_spec.rb +1 -1
- data/spec/superbolt_spec.rb +5 -1
- data/superbolt.gemspec +1 -1
- metadata +12 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 7f7e42b8136e680635a7c00c37cb0a4bf1bc9aec
|
|
4
|
+
data.tar.gz: d43dded8b39232b7e9ed7123e1556461417a3db1
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ee3084deda5525a9ba5d20fcce3f0781431cf6cf7732556f54850cf38de4ce8cab949803c02519deec0ede961e050b0a490cead8af781facf03c9a5851697947
|
|
7
|
+
data.tar.gz: b78d27807ed2368663ff7253c1d8cbcd051557bf435ea41bce170d326f71cad19688ec97ecd3705f68e7368f090d21977349dd9aae78ff2a0864909d665a54ff
|
data/README.md
CHANGED
|
@@ -21,14 +21,14 @@ important: reading and sending messages.
|
|
|
21
21
|
|
|
22
22
|
Superbolt has two main components: a queue and an app.
|
|
23
23
|
|
|
24
|
-
The queue object acts like a queue. The queue can push, pop and peek.
|
|
25
|
-
The queue is able to spit out all or a subset of the messages on the
|
|
24
|
+
The queue object acts like a queue. The queue can push, pop and peek.
|
|
25
|
+
The queue is able to spit out all or a subset of the messages on the
|
|
26
26
|
queue. It can clear itself. In short it makes inline operations doable.
|
|
27
27
|
|
|
28
|
-
The app on the other hand is
|
|
28
|
+
The app on the other hand is long running process that takes over the
|
|
29
29
|
thread. It continually reads from a single queue until it recieves a
|
|
30
|
-
signal
|
|
31
|
-
|
|
30
|
+
signal shutting it down. It is smart; it is capable of sending exception
|
|
31
|
+
notifications exceptions in message processing to Airbrake. It also
|
|
32
32
|
listens on a separate quit queue for a graceful shutdown. A graceful
|
|
33
33
|
shutdown means no messages are lost.
|
|
34
34
|
|
|
@@ -101,12 +101,12 @@ key that is used. Actual connection params that RabbitMQ Bunny/AMQP use
|
|
|
101
101
|
can also be passed in as above. If a connection key is not found in the
|
|
102
102
|
ENV, localhost will be used. If the application uses these typical
|
|
103
103
|
conventions, then no connection configuration is required.
|
|
104
|
-
|
|
104
|
+
|
|
105
105
|
#### App Name
|
|
106
106
|
|
|
107
107
|
The application name/identifier is an important default to setup in
|
|
108
108
|
order to get all the goodness of related to messaging and its
|
|
109
|
-
conventions.
|
|
109
|
+
conventions.
|
|
110
110
|
|
|
111
111
|
If no app name is set up, a littlem or work is required to send a
|
|
112
112
|
message:
|
|
@@ -133,7 +133,7 @@ filtering is easier for the consuming application.
|
|
|
133
133
|
Superbolt doesn't want to developers worrying about exchanges,
|
|
134
134
|
durability or connection ceremony. Developers should be able to just
|
|
135
135
|
send a message. The ease of that sending depends on whether developers
|
|
136
|
-
are sticking with the Superbolt conventions or not.
|
|
136
|
+
are sticking with the Superbolt conventions or not.
|
|
137
137
|
|
|
138
138
|
#### The easiest way to message
|
|
139
139
|
|
|
@@ -154,7 +154,7 @@ This message can be received on a queue
|
|
|
154
154
|
event: 'dorothy',
|
|
155
155
|
arguments: 'On yellow brick road; has friends!'
|
|
156
156
|
}
|
|
157
|
-
|
|
157
|
+
|
|
158
158
|
#### A more customizable messaging experience
|
|
159
159
|
|
|
160
160
|
Messages can also be sent via Superbolt::Queue objects. In this case the
|
|
@@ -162,20 +162,20 @@ message can be anything and the queue name is exactly what is passed in.
|
|
|
162
162
|
|
|
163
163
|
queue = Superbolt::Queue.new('dorothy')
|
|
164
164
|
queue.push({demand: 'Surrender!'})
|
|
165
|
-
queue.pop
|
|
165
|
+
queue.pop
|
|
166
166
|
=> {
|
|
167
167
|
'demand' => 'Surrender!'
|
|
168
168
|
}
|
|
169
169
|
|
|
170
170
|
### Reading messages
|
|
171
171
|
|
|
172
|
-
Messages can be read inline or via a standalone app.
|
|
172
|
+
Messages can be read inline or via a standalone app.
|
|
173
173
|
|
|
174
174
|
#### Reading Inline
|
|
175
175
|
|
|
176
176
|
Reading messages inline is easy and to the point. The Superbolt::Queue
|
|
177
177
|
object tries to act queue-like instead of like a hard to use external
|
|
178
|
-
service.
|
|
178
|
+
service.
|
|
179
179
|
|
|
180
180
|
Popping messages off the queue will remove the message from the queue
|
|
181
181
|
immediately. If something goes wrong with eth message processing, it is
|
|
@@ -184,12 +184,12 @@ do.
|
|
|
184
184
|
|
|
185
185
|
message = queue.pop # This removes the message permanently
|
|
186
186
|
|
|
187
|
-
Messages can be read in non-destructive ways as well.
|
|
187
|
+
Messages can be read in non-destructive ways as well.
|
|
188
188
|
|
|
189
189
|
message = queue.peek
|
|
190
190
|
# Ponder or process message.
|
|
191
191
|
# It is still hanging out at the top of the queue.
|
|
192
|
-
# It can be deleted with a pop,
|
|
192
|
+
# It can be deleted with a pop,
|
|
193
193
|
# provided another consumer hasn't already deleted it!
|
|
194
194
|
|
|
195
195
|
Because of asynchronicity issues with job processing across several apps
|
|
@@ -202,7 +202,7 @@ and information gathering.
|
|
|
202
202
|
queue.delete {|m| m['level'] == 'not_important' }
|
|
203
203
|
|
|
204
204
|
# peek at messages in a certain range
|
|
205
|
-
queue.slice(2, 4)
|
|
205
|
+
queue.slice(2, 4)
|
|
206
206
|
|
|
207
207
|
# get a certain message, non-destructively
|
|
208
208
|
queue[3]
|
|
@@ -218,16 +218,9 @@ communications.
|
|
|
218
218
|
end
|
|
219
219
|
|
|
220
220
|
Exceptions raised in the processing block will not exit
|
|
221
|
-
the Superbolt app. Errors will be logged and the
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
error_queue = Superbolt::App.new('dorothy_inbox').error_queue
|
|
226
|
-
error_queue.all
|
|
227
|
-
|
|
228
|
-
The error queue is a Superbolt::Queue and methods like #pop, #delete,
|
|
229
|
-
and #[] are available to gather more data about the exceptions being
|
|
230
|
-
raised.
|
|
221
|
+
the Superbolt app. Errors will be logged and the notification will be sent
|
|
222
|
+
to the error notifier (none by default, can be airbrake) with information
|
|
223
|
+
about the exception raised.
|
|
231
224
|
|
|
232
225
|
The app can be shutdown gracefully by sending a quit message to a
|
|
233
226
|
special queue:
|
|
@@ -235,6 +228,19 @@ special queue:
|
|
|
235
228
|
quit_queue = Superbolt::App.new('dorothy_inbox').quit_queue
|
|
236
229
|
quit_queue.push(message: 'for a deploy')
|
|
237
230
|
|
|
231
|
+
## Error reporting
|
|
232
|
+
|
|
233
|
+
`Superbolt::App` can hook into Airbrake by your command:
|
|
234
|
+
|
|
235
|
+
Superbolt.error_notifier = :airbrake
|
|
236
|
+
|
|
237
|
+
Superbolt::App.new('dorothy_inbox') do
|
|
238
|
+
do_unsafe_stuff
|
|
239
|
+
end
|
|
240
|
+
|
|
241
|
+
Note that Superbolt does not have [the Airbrake gem](https://github.com/airbrake/airbrake)
|
|
242
|
+
amongst it's dependencies, so it is up to you to add it to your project.
|
|
243
|
+
|
|
238
244
|
## Installation
|
|
239
245
|
|
|
240
246
|
Add this line to your application's Gemfile:
|
data/lib/superbolt.rb
CHANGED
|
@@ -11,6 +11,9 @@ require 'active_support/inflector'
|
|
|
11
11
|
require "superbolt/version"
|
|
12
12
|
require "superbolt/config"
|
|
13
13
|
|
|
14
|
+
require "superbolt/error_notifier/airbrake"
|
|
15
|
+
require "superbolt/error_notifier/none"
|
|
16
|
+
|
|
14
17
|
require "superbolt/adapter/base"
|
|
15
18
|
require "superbolt/adapter/bunny"
|
|
16
19
|
require "superbolt/adapter/amqp"
|
data/lib/superbolt/app.rb
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
module Superbolt
|
|
2
2
|
class App
|
|
3
|
-
attr_reader :config, :env, :runner_type
|
|
3
|
+
attr_reader :config, :env, :runner_type, :error_notifier_type
|
|
4
4
|
attr_accessor :logger
|
|
5
5
|
|
|
6
6
|
def initialize(name, options={})
|
|
7
|
-
@name
|
|
8
|
-
@env
|
|
9
|
-
@logger
|
|
10
|
-
@config
|
|
11
|
-
@runner_type
|
|
7
|
+
@name = name
|
|
8
|
+
@env = options[:env] || Superbolt.env
|
|
9
|
+
@logger = options[:logger] || Logger.new($stdout)
|
|
10
|
+
@config = options[:config] || Superbolt.config
|
|
11
|
+
@runner_type = options[:runner] || config.runner || :default
|
|
12
|
+
@error_notifier_type = options[:error_notifier] || Superbolt.error_notifier
|
|
12
13
|
end
|
|
13
14
|
|
|
14
15
|
def name
|
|
@@ -20,10 +21,6 @@ module Superbolt
|
|
|
20
21
|
Queue.new("#{connection.name}.quit", connection.config)
|
|
21
22
|
end
|
|
22
23
|
|
|
23
|
-
def error_queue
|
|
24
|
-
Queue.new("#{connection.name}.error", connection.config)
|
|
25
|
-
end
|
|
26
|
-
|
|
27
24
|
def connection
|
|
28
25
|
@connection ||= Connection::Queue.new(name, config)
|
|
29
26
|
end
|
|
@@ -41,7 +38,7 @@ module Superbolt
|
|
|
41
38
|
end
|
|
42
39
|
|
|
43
40
|
def run(&block)
|
|
44
|
-
|
|
41
|
+
runner_class.new(queue, error_notifier, logger, block).run
|
|
45
42
|
# quit_subscriber_queue.subscribe do |message|
|
|
46
43
|
# (message)
|
|
47
44
|
# end
|
|
@@ -65,9 +62,27 @@ module Superbolt
|
|
|
65
62
|
runner_map[:ack_one]
|
|
66
63
|
end
|
|
67
64
|
|
|
65
|
+
def error_notifier
|
|
66
|
+
@error_notifier ||= error_notifier_class.new(logger)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def error_notifier_class
|
|
70
|
+
error_notifier_map[error_notifier_type] || default_error_notifier
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def error_notifier_map
|
|
74
|
+
{
|
|
75
|
+
airbrake: ErrorNotifier::Airbrake,
|
|
76
|
+
none: ErrorNotifier::None
|
|
77
|
+
}
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def default_error_notifier
|
|
81
|
+
error_notifier_map[:none]
|
|
82
|
+
end
|
|
83
|
+
|
|
68
84
|
def quit(message='no message given')
|
|
69
85
|
logger.info "EXITING Superbolt App listening on queue #{name}: #{message}"
|
|
70
|
-
q.channel.consumers.first[0]
|
|
71
86
|
q.channel.basic_cancel q.channel.consumers.first[0]
|
|
72
87
|
close
|
|
73
88
|
end
|
data/lib/superbolt/config.rb
CHANGED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
module Superbolt
|
|
2
|
+
module ErrorNotifier
|
|
3
|
+
class Airbrake
|
|
4
|
+
def initialize(logger)
|
|
5
|
+
@logger = logger
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def error!(exception, superbolt_message = nil)
|
|
9
|
+
if defined? ::Airbrake
|
|
10
|
+
::Airbrake.notify_or_ignore(exception, parameters: superbolt_message)
|
|
11
|
+
else
|
|
12
|
+
@logger.warn("You have configured Superbolt to send errors to Airbrake, but Airbrake is not available or is not configured!")
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
data/lib/superbolt/facade.rb
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
module Superbolt
|
|
2
|
-
|
|
2
|
+
|
|
3
3
|
def self.config=(options)
|
|
4
4
|
@config = Config.new({
|
|
5
5
|
env: env,
|
|
6
6
|
app_name: app_name,
|
|
7
|
+
error_notifier: error_notifier,
|
|
7
8
|
file_matcher: file_matcher
|
|
8
9
|
}.merge(options))
|
|
9
10
|
end
|
|
@@ -17,7 +18,7 @@ module Superbolt
|
|
|
17
18
|
end
|
|
18
19
|
|
|
19
20
|
class << self
|
|
20
|
-
attr_writer :env, :file_matcher
|
|
21
|
+
attr_writer :env, :file_matcher, :error_notifier
|
|
21
22
|
attr_accessor :app_name
|
|
22
23
|
end
|
|
23
24
|
|
|
@@ -29,6 +30,10 @@ module Superbolt
|
|
|
29
30
|
@file_matcher || /_file$/
|
|
30
31
|
end
|
|
31
32
|
|
|
33
|
+
def self.error_notifier
|
|
34
|
+
@error_notifier || :none
|
|
35
|
+
end
|
|
36
|
+
|
|
32
37
|
def self.message(args={})
|
|
33
38
|
Superbolt::Messenger.new(args)
|
|
34
39
|
end
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
module Superbolt
|
|
2
2
|
module Runner
|
|
3
3
|
class Base
|
|
4
|
-
attr_reader :queue, :
|
|
4
|
+
attr_reader :queue, :error_notifier, :logger, :block
|
|
5
5
|
|
|
6
|
-
def initialize(queue,
|
|
6
|
+
def initialize(queue, error_notifier, logger, block)
|
|
7
7
|
@queue = queue
|
|
8
|
-
@
|
|
8
|
+
@error_notifier = error_notifier
|
|
9
9
|
@logger = logger
|
|
10
10
|
@block = block
|
|
11
11
|
end
|
|
@@ -15,13 +15,7 @@ module Superbolt
|
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
def on_error(message, error)
|
|
18
|
-
|
|
19
|
-
class: error.class,
|
|
20
|
-
message: error.message,
|
|
21
|
-
backtrace: error.backtrace,
|
|
22
|
-
errored_at: Time.now
|
|
23
|
-
}})
|
|
24
|
-
error_queue.push(error_message)
|
|
18
|
+
error_notifier.error!(error, message)
|
|
25
19
|
end
|
|
26
20
|
end
|
|
27
21
|
end
|
|
@@ -14,10 +14,11 @@ module Superbolt
|
|
|
14
14
|
queue.subscribe(ack: ack, block: true) do |delivery_info, metadata, payload|
|
|
15
15
|
message = Superbolt::IncomingMessage.new(delivery_info, payload, channel)
|
|
16
16
|
processor = processor_class.new(message, logger, &block)
|
|
17
|
-
processor.perform
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
17
|
+
success = processor.perform
|
|
18
|
+
|
|
19
|
+
unless success
|
|
20
|
+
on_error(message.parse, processor.exception)
|
|
21
|
+
end
|
|
21
22
|
|
|
22
23
|
message.ack if ack
|
|
23
24
|
end
|
data/lib/superbolt/version.rb
CHANGED
data/spec/app_spec.rb
CHANGED
|
@@ -62,6 +62,7 @@ describe Superbolt::App do
|
|
|
62
62
|
it 'removes messages from the queue on successful completion' do
|
|
63
63
|
queue.push({first: 1})
|
|
64
64
|
queue.push({last: 2})
|
|
65
|
+
messages = []
|
|
65
66
|
|
|
66
67
|
app.run do |message, logger|
|
|
67
68
|
messages << message
|
|
@@ -94,16 +95,44 @@ describe Superbolt::App do
|
|
|
94
95
|
message_received.should be_true
|
|
95
96
|
end
|
|
96
97
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
98
|
+
context 'notifying errors' do
|
|
99
|
+
let(:message) { { 'oh' => 'noes' } }
|
|
100
|
+
let(:the_error) { RuntimeError.new('something went wrong') }
|
|
101
|
+
|
|
102
|
+
context 'airbrake' do
|
|
103
|
+
before { Superbolt.error_notifier = :airbrake }
|
|
104
|
+
after { Superbolt.error_notifier = nil }
|
|
105
|
+
|
|
106
|
+
it 'uses ErrorNotifiers::Airbrake' do
|
|
107
|
+
app.error_notifier.should be_an_instance_of(Superbolt::ErrorNotifier::Airbrake)
|
|
108
|
+
app.error_notifier.should_receive(:error!).with(the_error, message)
|
|
109
|
+
messages = []
|
|
100
110
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
111
|
+
queue.push(message)
|
|
112
|
+
queue.push(message)
|
|
113
|
+
|
|
114
|
+
app.run do |message|
|
|
115
|
+
messages << message
|
|
116
|
+
messages.length > 1 ? app.quit : raise(the_error)
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
context 'default' do
|
|
122
|
+
it 'does not fail' do
|
|
123
|
+
app.error_notifier.should be_an_instance_of(Superbolt::ErrorNotifier::None)
|
|
124
|
+
app.error_notifier.should_receive(:error!).with(the_error, message)
|
|
125
|
+
messages = []
|
|
126
|
+
|
|
127
|
+
queue.push(message)
|
|
128
|
+
queue.push(message)
|
|
129
|
+
|
|
130
|
+
app.run do |message|
|
|
131
|
+
messages << message
|
|
132
|
+
messages.length > 1 ? app.quit : raise(the_error)
|
|
133
|
+
end
|
|
134
|
+
end
|
|
104
135
|
end
|
|
105
|
-
queue.size.should == 0
|
|
106
|
-
error_queue.size.should == 1
|
|
107
136
|
end
|
|
108
137
|
end
|
|
109
138
|
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'stringio'
|
|
3
|
+
|
|
4
|
+
describe Superbolt::ErrorNotifier::Airbrake do
|
|
5
|
+
subject(:notifier) { described_class.new(logger) }
|
|
6
|
+
|
|
7
|
+
let(:logger) { Logger.new(out) }
|
|
8
|
+
let(:out) { StringIO.new('') }
|
|
9
|
+
|
|
10
|
+
let(:error) { RuntimeError.new('ouch!') }
|
|
11
|
+
let(:message) { { the_superbolt: 'message' } }
|
|
12
|
+
|
|
13
|
+
context 'when the app has Airbrake installed' do
|
|
14
|
+
before do
|
|
15
|
+
stub_const("::Airbrake", double(:Airbrake, notify_or_ignore: nil))
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it 'logs an error to Airbrake when there was one' do
|
|
19
|
+
expect(Airbrake).to receive(:notify_or_ignore).with(error, parameters: message)
|
|
20
|
+
notifier.error!(error, message)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it 'can live without the message' do
|
|
24
|
+
expect(Airbrake).to receive(:notify_or_ignore).with(error, parameters: nil)
|
|
25
|
+
notifier.error!(error)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
context 'when Airbrake is not there' do
|
|
30
|
+
it 'will not break' do
|
|
31
|
+
expect(defined? Airbrake).to be_nil
|
|
32
|
+
notifier.error!(error, message)
|
|
33
|
+
# no errors
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it 'will log a warning' do
|
|
37
|
+
notifier.error!(error, message)
|
|
38
|
+
expect(out.string).to include('Airbrake is not available or is not configured!')
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Superbolt::ErrorNotifier::None do
|
|
4
|
+
subject(:notifier) { described_class.new(double(:Logger)) }
|
|
5
|
+
|
|
6
|
+
let(:error) { RuntimeError.new('ouch!') }
|
|
7
|
+
let(:message) { { the_superbolt: 'message' } }
|
|
8
|
+
|
|
9
|
+
it 'does not fail' do
|
|
10
|
+
notifier.error!(error)
|
|
11
|
+
notifier.error!(error, message)
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
@@ -28,7 +28,7 @@ module PG
|
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
describe "Superbolt::Runner::Pg" do
|
|
31
|
-
let(:runner) { Superbolt::Runner::Pg.new('berkin',
|
|
31
|
+
let(:runner) { Superbolt::Runner::Pg.new('berkin', Superbolt::ErrorNotifier::None.new, 'whatever', 'some block') }
|
|
32
32
|
let(:connection) { double('connection', reset!: true) }
|
|
33
33
|
|
|
34
34
|
before do
|
data/spec/superbolt_spec.rb
CHANGED
|
@@ -6,20 +6,24 @@ describe Superbolt, 'the facade' do
|
|
|
6
6
|
@config = nil
|
|
7
7
|
end
|
|
8
8
|
end
|
|
9
|
-
|
|
9
|
+
|
|
10
10
|
describe 'total configuration' do
|
|
11
11
|
before do
|
|
12
12
|
Superbolt.app_name = 'bossanova'
|
|
13
13
|
Superbolt.env = 'production'
|
|
14
|
+
Superbolt.error_notifier = :airbrake
|
|
14
15
|
Superbolt.config = {
|
|
15
16
|
connection_key: 'SOME_RABBITMQ_URL'
|
|
16
17
|
}
|
|
17
18
|
end
|
|
18
19
|
|
|
20
|
+
after { Superbolt.error_notifier = nil }
|
|
21
|
+
|
|
19
22
|
it "should retain the configuration information" do
|
|
20
23
|
Superbolt.config.app_name.should == 'bossanova'
|
|
21
24
|
Superbolt.config.env.should == 'production'
|
|
22
25
|
Superbolt.config.env_connection_key.should == 'SOME_RABBITMQ_URL'
|
|
26
|
+
Superbolt.config.error_notifier.should == :airbrake
|
|
23
27
|
end
|
|
24
28
|
end
|
|
25
29
|
|
data/superbolt.gemspec
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: superbolt
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.7.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- socialchorus
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2014-07-
|
|
11
|
+
date: 2014-07-24 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activesupport
|
|
@@ -112,16 +112,16 @@ dependencies:
|
|
|
112
112
|
name: rspec
|
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
|
114
114
|
requirements:
|
|
115
|
-
- - '
|
|
115
|
+
- - '='
|
|
116
116
|
- !ruby/object:Gem::Version
|
|
117
|
-
version:
|
|
117
|
+
version: 2.14.1
|
|
118
118
|
type: :development
|
|
119
119
|
prerelease: false
|
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
|
121
121
|
requirements:
|
|
122
|
-
- - '
|
|
122
|
+
- - '='
|
|
123
123
|
- !ruby/object:Gem::Version
|
|
124
|
-
version:
|
|
124
|
+
version: 2.14.1
|
|
125
125
|
description: Superbolt is comprised of a standalone app, and a queue-like queue for
|
|
126
126
|
sending messages between services and applications.
|
|
127
127
|
email:
|
|
@@ -144,6 +144,8 @@ files:
|
|
|
144
144
|
- lib/superbolt/connection/app.rb
|
|
145
145
|
- lib/superbolt/connection/base.rb
|
|
146
146
|
- lib/superbolt/connection/queue.rb
|
|
147
|
+
- lib/superbolt/error_notifier/airbrake.rb
|
|
148
|
+
- lib/superbolt/error_notifier/none.rb
|
|
147
149
|
- lib/superbolt/facade.rb
|
|
148
150
|
- lib/superbolt/file_manager.rb
|
|
149
151
|
- lib/superbolt/file_packer.rb
|
|
@@ -171,6 +173,8 @@ files:
|
|
|
171
173
|
- spec/file_packer_spec.rb
|
|
172
174
|
- spec/file_unpacker_spec.rb
|
|
173
175
|
- spec/incoming_message_spec.rb
|
|
176
|
+
- spec/lib/superbolt/error_notifier/airbrake_spec.rb
|
|
177
|
+
- spec/lib/superbolt/error_notifier/none_spec.rb
|
|
174
178
|
- spec/lib/superbolt/runner/pg_spec.rb
|
|
175
179
|
- spec/messenger_spec.rb
|
|
176
180
|
- spec/queue_spec.rb
|
|
@@ -212,6 +216,8 @@ test_files:
|
|
|
212
216
|
- spec/file_packer_spec.rb
|
|
213
217
|
- spec/file_unpacker_spec.rb
|
|
214
218
|
- spec/incoming_message_spec.rb
|
|
219
|
+
- spec/lib/superbolt/error_notifier/airbrake_spec.rb
|
|
220
|
+
- spec/lib/superbolt/error_notifier/none_spec.rb
|
|
215
221
|
- spec/lib/superbolt/runner/pg_spec.rb
|
|
216
222
|
- spec/messenger_spec.rb
|
|
217
223
|
- spec/queue_spec.rb
|