banter 1.4.0 → 2.0.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.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/.travis.yml +1 -1
  4. data/Gemfile +1 -4
  5. data/README.md +0 -33
  6. data/Rakefile +0 -28
  7. data/banter.gemspec +2 -5
  8. data/lib/banter.rb +1 -1
  9. data/lib/banter/configuration.rb +2 -4
  10. data/lib/banter/notifier.rb +16 -0
  11. data/lib/banter/publisher.rb +1 -1
  12. data/lib/banter/railtie.rb +0 -4
  13. data/lib/banter/server/client_queue_listener.rb +4 -37
  14. data/lib/banter/server/rabbit_mq_subscriber.rb +6 -6
  15. data/lib/banter/server/subscriber_server.rb +0 -13
  16. data/lib/banter/version.rb +1 -1
  17. data/spec/banter/notifier_spec.rb +40 -0
  18. data/spec/banter/server/client_queue_listener_spec.rb +36 -84
  19. data/spec/banter/server/rabbitmq_subscriber_spec.rb +14 -10
  20. data/spec/banter/server/subscriber_server_spec.rb +0 -60
  21. data/spec/banter/subscriber_spec.rb +0 -81
  22. data/spec/spec_helper.rb +1 -8
  23. data/spec/support/test_notifier.rb +17 -0
  24. metadata +33 -100
  25. data/.ruby-version +0 -1
  26. data/lib/banter/web.rb +0 -34
  27. data/lib/banter/web/application.rb +0 -85
  28. data/lib/banter/web/helpers.rb +0 -13
  29. data/lib/banter/web/models/banter_message.rb +0 -124
  30. data/lib/banter/web/models/banter_worker.rb +0 -72
  31. data/lib/banter/web/serializers/banter_message_serializer.rb +0 -35
  32. data/lib/banter/web/serializers/banter_worker_serializer.rb +0 -40
  33. data/lib/banter/web/serializers/subscriber_serializer.rb +0 -26
  34. data/spec/banter/web/application_spec.rb +0 -181
  35. data/spec/banter/web/serializers/banter_message_serializer_spec.rb +0 -42
  36. data/spec/banter/web/serializers/banter_worker_serializer_spec.rb +0 -44
  37. data/spec/factories/banter_messages.rb +0 -28
  38. data/spec/factories/banter_workers.rb +0 -17
  39. data/spec/mongoid.yml +0 -7
  40. data/web/assets/javascripts/banter.js +0 -449
  41. data/web/assets/javascripts/dashboard_app/app.coffee +0 -4
  42. data/web/assets/javascripts/dashboard_app/controllers/message_controller.coffee +0 -28
  43. data/web/assets/javascripts/dashboard_app/controllers/messages_controller.coffee +0 -58
  44. data/web/assets/javascripts/dashboard_app/controllers/subscribers_controller.coffee +0 -25
  45. data/web/assets/javascripts/dashboard_app/controllers/worker_controller.coffee +0 -30
  46. data/web/assets/javascripts/dashboard_app/controllers/workers_list_controller.coffee +0 -28
  47. data/web/assets/javascripts/dashboard_app/routes.coffee +0 -82
  48. data/web/assets/javascripts/dashboard_app/services/common_methods_service.coffee +0 -6
  49. data/web/assets/javascripts/dashboard_app/services/message_methods_service.coffee +0 -18
  50. data/web/assets/javascripts/dashboard_app/services/messages_service.coffee +0 -17
  51. data/web/assets/javascripts/dashboard_app/services/subscribers_service.coffee +0 -8
  52. data/web/assets/javascripts/dashboard_app/services/worker_methods_service.coffee +0 -11
  53. data/web/assets/javascripts/dashboard_app/services/worker_service.coffee +0 -15
  54. data/web/assets/javascripts/ng-prettyjson.js +0 -15
  55. data/web/assets/stylesheets/banter.css +0 -78
  56. data/web/views/_message.haml +0 -74
  57. data/web/views/_messages.haml +0 -77
  58. data/web/views/_subscribers.haml +0 -22
  59. data/web/views/_worker.haml +0 -52
  60. data/web/views/_workers_list.haml +0 -35
  61. data/web/views/index.haml +0 -19
  62. data/web/views/layout.haml +0 -51
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bbcfd4c67610fef0339ce5fb31e14fd975e89d69
4
- data.tar.gz: 626912b7090d2cd191f1c87d846f2c2c3f62d9d7
3
+ metadata.gz: c03308431cc8b88c19125424eb68bb908a3d4371
4
+ data.tar.gz: 40e04814acf8a8bf45890e02340eadf06442a6c6
5
5
  SHA512:
6
- metadata.gz: b35cd93ce40832b90000c56d054587a7ea49f5e2c651a3d9b960fd68ab041645ed19f17860868821619fa8f0cf1df115a49823dc4a8e743f498b5d68d4303572
7
- data.tar.gz: a9cc50ad7416642328b91c463266e7eb0db72c18d0dbd7ca0c93fef0bd8ccf91edfe9ddf9d547b8ead606b4df985dcf9f912e55b23b82b8499e7bb5746289c79
6
+ metadata.gz: df196c9fa5a9ba80aedf5bddf922f6b148522cb2a1c57b8c953ff180d87d7021d4b12f708d667e8b31edd0df1dbfd5abb1ca0f70dae448bfed5da9c32be0012e
7
+ data.tar.gz: c192baefaf7eb97f48f0cf3e879f727e8087cd118f33f626556bcf4363520460824d454eb9fb400476e3f707c57c789ebbf79beaec3f1cef90968334ef0a3111
data/.gitignore CHANGED
@@ -5,6 +5,7 @@
5
5
  .yardoc
6
6
  .project
7
7
  .ruby-gemset
8
+ .ruby-version
8
9
  Gemfile.lock
9
10
  InstalledFiles
10
11
  _yardoc
@@ -20,3 +21,4 @@ tmp
20
21
  .rspec
21
22
  .idea
22
23
  *.log
24
+ .byebug-history
@@ -1,8 +1,8 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 1.9.3
4
3
  - 2.0.0
5
4
  - 2.1.0
5
+ - 2.2.1
6
6
  services:
7
7
  - mongodb
8
8
  before_script:
data/Gemfile CHANGED
@@ -3,14 +3,11 @@ source 'https://rubygems.org'
3
3
  # Specify your gem's dependencies in banter.gemspec
4
4
  gemspec
5
5
 
6
- gem 'coffee-script'
7
6
  gem 'json'
8
7
  group :test do
9
8
  gem 'rack-test'
10
9
  gem 'rspec-its'
11
- gem 'sinatra'
12
- gem 'haml'
13
- gem 'mongoid', "~>4.0"
14
10
  gem 'timecop'
11
+ gem 'awesome_print', '~> 1.6', '>= 1.6.1'
15
12
  gem "factory_girl", "~> 4.0"
16
13
  end
data/README.md CHANGED
@@ -108,39 +108,6 @@ class UserWelcomeSubscriber < Banter::Subscriber
108
108
  end
109
109
  ```
110
110
 
111
- ### Dashboards!!!
112
-
113
- Banter provides dashboards that can be easily enabled in any Rack application.
114
-
115
- For a Rails application
116
-
117
- ```
118
- # config/application.rb
119
- config.banter.web_enabled = true
120
- ```
121
-
122
- ```
123
- #config/routes.rb
124
- mount Banter::Web::Application => '/banter'
125
- ```
126
-
127
- or
128
-
129
- ```
130
- #config.routes.rb
131
- authenticate :admin do
132
- mount Banter::Web::Application => '/banter'
133
- end
134
- ```
135
-
136
- Dashboards currently use Mongo DB (Mongoid gem) to store data, so the following gems should be added to your gemfile
137
- ```
138
- gem 'mongoid'
139
- gem 'haml'
140
- gem 'sinatra'
141
- ```
142
-
143
-
144
111
  ## Contributing
145
112
 
146
113
  1. Fork it
data/Rakefile CHANGED
@@ -6,31 +6,3 @@ begin
6
6
  task :default => :spec
7
7
  end
8
8
 
9
- begin
10
- require 'coffee-script'
11
-
12
- namespace :js do
13
- def add_javascript(js_file, output_file)
14
- js_file_souce = File.read("#{File.dirname(__FILE__)}/web/assets/javascripts/#{js_file}.js")
15
- output_file.puts js_file_souce
16
- end
17
-
18
- desc "compile coffee-scripts from ./assets/javascripts"
19
- task :compile do
20
- source = "#{File.dirname(__FILE__)}/web/assets/javascripts/**/*.coffee"
21
- target = "#{File.dirname(__FILE__)}/web/assets/javascripts/banter.js"
22
- file = File.open(target, 'w+')
23
-
24
- add_javascript("ng-prettyjson", file)
25
-
26
- Dir.glob(source) do |cf|
27
- puts cf
28
- file.puts CoffeeScript.compile File.read(cf)
29
- end
30
-
31
- file.close
32
- end
33
- end
34
-
35
-
36
- end
@@ -2,7 +2,6 @@
2
2
  lib = File.expand_path('../lib', __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
- # require all files in the folder?
6
5
  require 'banter/version'
7
6
 
8
7
  Gem::Specification.new do |spec|
@@ -20,13 +19,11 @@ Gem::Specification.new do |spec|
20
19
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
21
20
  spec.require_paths = ["lib"]
22
21
 
23
- spec.add_development_dependency "bundler", "~> 1.3"
22
+ spec.add_development_dependency "bundler", ">= 1.3"
24
23
  spec.add_development_dependency "rake", "~> 10.0"
25
24
  spec.add_development_dependency "rspec", "~> 3.0.0"
26
- spec.add_runtime_dependency "activesupport", "~> 4.1"
27
- spec.add_runtime_dependency "awesome_print", "~> 1.2.0"
25
+ spec.add_development_dependency "awesome_print", '>= 1.6.1'
28
26
  spec.add_runtime_dependency "bunny", "~> 1.2"
29
- spec.add_runtime_dependency "airbrake", "~> 3.1"
30
27
  spec.add_runtime_dependency "hashie", ">= 1.2"
31
28
  spec.add_runtime_dependency "json", ">= 1.8"
32
29
  spec.add_runtime_dependency "celluloid", ">= 0.15"
@@ -1,7 +1,6 @@
1
1
  require "active_support/all"
2
2
  require "bunny"
3
3
  require "yaml"
4
- require "airbrake"
5
4
 
6
5
  require "banter/configuration"
7
6
  require "banter/context"
@@ -14,6 +13,7 @@ require "banter/version"
14
13
  require "banter/exceptions/payload_validation_error"
15
14
  require 'banter/server'
16
15
  require 'banter/subscriber'
16
+ require 'banter/notifier'
17
17
  require 'banter/delay_publish_model'
18
18
 
19
19
  if defined?(Rails::Railtie)
@@ -29,6 +29,8 @@ module Banter
29
29
 
30
30
  mattr_accessor :logger
31
31
 
32
+ mattr_accessor :notifier
33
+
32
34
  # RabbitMQ push and subscribe logging toggle
33
35
  # @default true
34
36
  mattr_accessor :logging_enabled
@@ -44,10 +46,6 @@ module Banter
44
46
  mattr_accessor :batch_messages
45
47
  @@batch_messages = false
46
48
 
47
- # Enable web monitoring
48
- # @default false
49
- mattr_accessor :web_enabled
50
- @@web_enabled = false
51
49
 
52
50
  mattr_accessor :application_name
53
51
  @@application_name = nil
@@ -0,0 +1,16 @@
1
+ module Banter
2
+ module Notifier
3
+ def self.notify(error, params_hash)
4
+ ::Banter::Configuration.notifier.notify(error, params_hash)
5
+ end
6
+
7
+ class StdOutNotifier
8
+ def self.notify(error, params_hash)
9
+ STDOUT.puts("Error caught: #{error}, #{params_hash}")
10
+ end
11
+ end
12
+ end
13
+ end
14
+
15
+ # Is this legit to just load up and assign as default for now?
16
+ ::Banter::Configuration.notifier ||= Banter::Notifier::StdOutNotifier
@@ -52,7 +52,7 @@ module Banter
52
52
  @publisher = @channel.send(@exchange_type, @exchange, :durable => true, :auto_delete => false)
53
53
 
54
54
  rescue => e
55
- Airbrake.notify(e, parameters: { message: e.message }, environment_name: ENV['RAILS_ENV'])
55
+ ::Banter::Notifier.notify(e, parameters: { message: e.message }, environment_name: ENV['RAILS_ENV'])
56
56
  return
57
57
  end
58
58
 
@@ -17,10 +17,6 @@ module Banter
17
17
  config.after_initialize do
18
18
  Banter.logger = config.banter.logger if config.banter.logger
19
19
 
20
- if Banter::Configuration.web_enabled
21
- require 'banter/web'
22
- end
23
-
24
20
  end
25
21
 
26
22
  console do
@@ -30,33 +30,17 @@ module Banter
30
30
  Banter::RabbitLogger.log(::Logger::DEBUG, "Message received by listener on #{worker_class.name} with payload: #{envelope[:payload]}")
31
31
  worker = worker_class.new(delivery_info, properties, envelope[:context], envelope)
32
32
  payload = envelope[:payload]
33
- track_message_received(worker, payload)
34
33
  worker.perform!(payload)
35
- track_message_successful
36
34
  clear_dead_letter(worker_class.config.dead_letter_queue_name, envelope)
37
35
  rescue ::Banter::PayloadValidationError => banter_error
38
- track_message_failed(banter_error, false)
39
36
  Banter::RabbitLogger.log(::Logger::ERROR, { worker: worker_class.name, message: banter_error.message, envelope: envelope })
40
- Airbrake.notify(banter_error,
41
- parameters: {
42
- info: delivery_info,
43
- properties: properties,
44
- context: envelope[:context],
45
- payload: envelope[:payload],
46
- message: "Validation error for #{worker_class.name}"
47
- })
37
+
38
+ ::Banter::Notifier.notify(banter_error, { delivery_info: delivery_info, properties: properties, envelope: envelope})
48
39
  raise banter_error
49
40
  rescue => e
50
- track_message_failed(e, true)
51
41
  Banter::RabbitLogger.log(::Logger::ERROR, "Failed message for #{worker_class.name} #{e.message}")
52
- Airbrake.notify(e,
53
- parameters: {
54
- info: delivery_info,
55
- properties: properties,
56
- context: envelope[:context],
57
- payload: envelope[:payload],
58
- message: "Failed perform for #{worker_class.name}"
59
- })
42
+
43
+ ::Banter::Notifier.notify(e, { delivery_info: delivery_info, properties: properties, envelope: envelope})
60
44
  raise e
61
45
  end
62
46
 
@@ -67,23 +51,6 @@ module Banter
67
51
  end
68
52
  end
69
53
 
70
- protected
71
-
72
- def track_message_successful
73
- return unless Banter::Configuration.web_enabled
74
- BanterMessage.message_successful
75
- end
76
-
77
- def track_message_failed(error, errored = true)
78
- return unless Banter::Configuration.web_enabled
79
- status = errored ? BanterMessage::STATUS_ERROR : BanterMessage::STATUS_VALIDATION_FAILED
80
- BanterMessage.message_failed(error, status)
81
- end
82
-
83
- def track_message_received(worker, payload)
84
- return unless Banter::Configuration.web_enabled
85
- BanterMessage.message_received(worker_class, worker, payload)
86
- end
87
54
  end
88
55
  end
89
56
  end
@@ -28,7 +28,6 @@ module Banter
28
28
  elsif @topic.present?
29
29
  @routing_key = "#{@topic}.#"
30
30
  end
31
-
32
31
  end
33
32
 
34
33
  def start(&block)
@@ -37,7 +36,7 @@ module Banter
37
36
  @connection.start
38
37
  rescue => e
39
38
  Banter::RabbitLogger.log(Logger::ERROR, "Cannot connect to rabbitmq")
40
- Airbrake.notify(e, parameters: { message: e.message, what_happened: "RabbitMQ unreachable!" }, environment_name: environment)
39
+ ::Banter::Notifier.notify(e, parameters: { message: e.message, what_happened: "RabbitMQ unreachable!" }, environment_name: environment)
41
40
  raise e
42
41
  end
43
42
 
@@ -70,7 +69,7 @@ module Banter
70
69
 
71
70
  if delivery_info[:redelivered]
72
71
  e = StandardError.new("PubSub Message redelivery")
73
- Airbrake.notify(e, parameters: { info: delivery_info, props: properties, contents: contents }, backtrace: caller)
72
+ ::Banter::Notifier.notify(e, parameters: { info: delivery_info, props: properties, contents: contents }, backtrace: caller)
74
73
  end
75
74
 
76
75
  Banter::RabbitLogger.log_receive(delivery_info[:routing_key], envelope)
@@ -89,14 +88,14 @@ module Banter
89
88
  # Does not get put back on the queue, and instead, will need to be processed either by the log parser
90
89
  # later or by dead letter exchange
91
90
  @channel.reject(token, false)
92
- Airbrake.notify(e, parameters: { delivery_info: delivery_info, properties: properties, contents: contents, error: e.message }, environment_name: environment)
91
+ ::Banter::Notifier.notify(e, parameters: { delivery_info: delivery_info, properties: properties, contents: contents, error: e.message }, environment_name: environment)
93
92
  end
94
93
  end
95
94
 
96
95
  def notify_error(error, consumer)
97
96
  Banter::RabbitLogger.log(Logger::WARN, "Error with the message: #{error.message}: #{consumer}")
98
97
  Banter::RabbitLogger.log(Logger::WARN, "#{caller.inspect}")
99
- Airbrake.notify(error, parameters: { consumer: consumer, error: error.message }, environment_name: environment)
98
+ ::Banter::Notifier.notify(error, parameters: { consumer: consumer, error: error.message }, environment_name: environment)
100
99
  end
101
100
 
102
101
  def teardown
@@ -104,13 +103,14 @@ module Banter
104
103
  @consumer.cancel if @consumer.present?
105
104
  @connection.close if @connection.present?
106
105
  rescue => e
107
- Airbrake.notify(e, parameters: { error: e.message }, environment_name: environment)
106
+ ::Banter::Notifier.notify(e, parameters: { error: e.message }, environment_name: environment)
108
107
  end
109
108
  end
110
109
 
111
110
  def environment
112
111
  ENV['RAILS_ENV'] || ENV['RACK_ENV'] || 'development'
113
112
  end
113
+
114
114
  end
115
115
  end
116
116
  end
@@ -1,7 +1,6 @@
1
1
  require 'rubygems'
2
2
  require 'celluloid/autostart'
3
3
  require 'celluloid/io'
4
- require 'awesome_print'
5
4
  require 'active_support/all'
6
5
  require 'optparse'
7
6
  require 'fileutils'
@@ -29,7 +28,6 @@ module Banter
29
28
 
30
29
  def start
31
30
  set_information
32
- register_workers
33
31
  start_workers
34
32
  handle_interrupts
35
33
  handle_teardown
@@ -37,16 +35,10 @@ module Banter
37
35
  stop_worker
38
36
  end
39
37
 
40
- def register_workers
41
- return unless Banter::Configuration.web_enabled
42
- BanterWorker.worker_started
43
- end
44
-
45
38
  private
46
39
 
47
40
  def handle_teardown
48
41
  ::Banter::RabbitLogger.log_service("all_services", "Starting shutdown of all services")
49
- unregister_current_worker
50
42
 
51
43
  workers.each do |worker|
52
44
  ::Banter::RabbitLogger.log_service("all_services", "Tearing down worker: #{worker.worker_class.name}")
@@ -59,11 +51,6 @@ module Banter
59
51
  end
60
52
  end
61
53
 
62
- def unregister_current_worker
63
- return unless Banter::Configuration.web_enabled
64
- BanterWorker.worker_stopped
65
- end
66
-
67
54
  def handle_interrupts
68
55
  thread = Thread.current
69
56
  interrupts = ["HUP", "INT", "QUIT", "ABRT", "TERM"]
@@ -1,3 +1,3 @@
1
1
  module Banter
2
- VERSION = "1.4.0"
2
+ VERSION = "2.0.0"
3
3
  end
@@ -0,0 +1,40 @@
1
+ require 'spec_helper'
2
+ require 'bunny'
3
+
4
+
5
+ describe Banter::Notifier do
6
+
7
+ describe "self.notify" do
8
+ before do
9
+ notifier
10
+ prehook
11
+ Banter::Configuration.application_name = "TestSuite"
12
+ subject
13
+ end
14
+
15
+ let(:error) { StandardError.new("TestStandardError") }
16
+ let(:hash_error) { { keyerr1: "value1err" } }
17
+ let(:prehook) { }
18
+
19
+ subject { ::Banter::Notifier.notify(error, hash_error) }
20
+ context "without a notification class" do
21
+ let(:notifier) { }
22
+ let(:prehook) {
23
+ allow(STDOUT).to receive(:puts).and_call_original
24
+ ::Banter::Configuration.notifier = Banter::Notifier::StdOutNotifier
25
+ }
26
+ it { expect(STDOUT).to have_received(:puts).with(/Error caught/)}
27
+
28
+ end
29
+
30
+ context "with a notification class" do
31
+ let(:notifier) {
32
+ Banter::Configuration.notifier = TestNotifier
33
+ }
34
+
35
+ it { expect(TestNotifier.instance.error).to eq(error) }
36
+ it { expect(TestNotifier.instance.hash).to eq(hash_error) }
37
+ end
38
+
39
+ end
40
+ end
@@ -1,6 +1,5 @@
1
1
  require 'spec_helper'
2
2
 
3
-
4
3
  class TestSubscriber < Banter::Subscriber
5
4
  subscribe_to "some.test.key"
6
5
  end
@@ -27,35 +26,9 @@ describe Banter::Server::ClientQueueListener do
27
26
  let(:context_before) { }
28
27
  let(:validators) { [] }
29
28
  let(:banter_worker) { FactoryGirl.create(:banter_worker, process_name: 'test') }
30
- let(:enable_banter_web) {
31
- Banter::Configuration.web_enabled = true
32
- allow(BanterWorker).to receive(:current).and_return(banter_worker)
33
- }
34
29
  let!(:application_name) { "testapplication" }
35
- let(:banter_message) { BanterMessage.last }
36
30
  let(:subscriber_options) {{}}
37
31
 
38
- after(:each) { Banter::Configuration.web_enabled = false }
39
-
40
- def self.banter_message_fields_are_correct(status, error_message = nil)
41
- it { expect(BanterMessage.count).to eq 1 }
42
- it { expect(banter_message.subscriber_class).to eq('Klass') }
43
- it { expect(banter_message.queue_name).to eq("test.foo_#{application_name}") }
44
- it { expect(banter_message.subscribed_key).to eq('test.foo') }
45
- it { expect(banter_message.payload).to eq({ "hello" => "moto" }) }
46
- it { expect(banter_message.started_at.to_s).to eq(Time.now.to_s) }
47
- it { expect(banter_message.done_at.to_s).to eq(Time.now.to_s) }
48
- it { expect(banter_message.worker_id).to eq(BanterWorker.current.id) }
49
- it { expect(banter_message.status).to eq(status) }
50
- if error_message
51
- it { expect(banter_message.error_message).to eq(error_message) }
52
- it { expect(banter_message.error_backtrace).not_to be_blank }
53
- else
54
- it { expect(banter_message.error_message).to be_nil }
55
- it { expect(banter_message.error_backtrace).to be_nil }
56
- end
57
- end
58
-
59
32
  before do
60
33
  Banter::Configuration.application_name = application_name
61
34
  context_before
@@ -88,34 +61,17 @@ describe Banter::Server::ClientQueueListener do
88
61
  instance
89
62
  }
90
63
 
91
-
92
64
  before do
93
- subject.call unless respond_to? :no_call
65
+ safe_call unless respond_to? :no_call
94
66
  end
95
67
 
96
- context "banter web disabled" do
97
- context "test exception" do
98
- let(:no_call) { true }
99
- it { should_not raise_exception }
100
- end
101
-
102
- context "call" do
103
- it { expect(klass_instance).to have_received(:perform!).with(payload) }
104
- it { expect(BanterMessage.count).to eq(0) }
105
- end
68
+ context "test exception" do
69
+ let(:no_call) { true }
70
+ it { should_not raise_exception }
106
71
  end
107
72
 
108
- context "banter web enabled" do
109
- let(:context_before) { enable_banter_web }
110
-
111
- context "test exception" do
112
- let(:no_call) { true }
113
- it { should_not raise_exception }
114
- end
115
-
116
- context "call" do
117
- banter_message_fields_are_correct(BanterMessage::STATUS_SUCCESS)
118
- end
73
+ context "call" do
74
+ it { expect(klass_instance).to have_received(:perform!).with(payload) }
119
75
  end
120
76
 
121
77
  end
@@ -128,27 +84,31 @@ describe Banter::Server::ClientQueueListener do
128
84
  }
129
85
  instance
130
86
  }
87
+ let(:prehook) {}
131
88
 
132
- context "web disabled" do
133
- before do
134
- allow(Banter::RabbitLogger).to receive(:log)
135
- end
136
- it { should raise_exception }
137
- it { expect(BanterMessage.count).to eq(0) }
89
+ before do
90
+ prehook
91
+ allow(Banter::RabbitLogger).to receive(:log).and_call_original
92
+ safe_call
138
93
  end
139
94
 
140
- context "banter web enabled" do
141
- let(:context_before) { enable_banter_web }
95
+ context "without a notifier" do
96
+ let(:prehook) {
97
+ allow(STDOUT).to receive(:puts).and_call_original
98
+ }
99
+ it { expect(@raised_error).not_to be_nil }
100
+ end
142
101
 
143
- before do
144
- safe_call
145
- end
102
+ context "with a notifier" do
103
+ let(:prehook) {
104
+ Banter::Configuration.notifier = TestNotifier
105
+ allow(TestNotifier).to receive(:notify).and_call_original
106
+ }
146
107
 
147
- it { should raise_exception }
148
- it "should have called perform" do
149
- expect(klass_instance).to have_received(:perform!).with(payload)
150
- end
151
- banter_message_fields_are_correct(BanterMessage::STATUS_ERROR, 'test exception')
108
+ it { expect(@raised_error).not_to be_nil }
109
+ it { expect(TestNotifier).to have_received(:notify) }
110
+ it { expect(TestNotifier.instance.error.to_s).to match(/test exception/) }
111
+ it { expect(TestNotifier.instance.hash.keys).to match_array([:delivery_info, :envelope, :properties]) }
152
112
  end
153
113
  end
154
114
 
@@ -158,31 +118,23 @@ describe Banter::Server::ClientQueueListener do
158
118
  allow(instance).to receive(:perform!).and_raise(Banter::PayloadValidationError.new("validation failed"))
159
119
  instance
160
120
  }
161
-
162
121
  let(:result) { subject.call }
122
+ let(:prehook) {
123
+ Banter::Configuration.notifier = TestNotifier
124
+ allow(TestNotifier).to receive(:notify).and_call_original
125
+ }
126
+
163
127
 
164
128
  before do
129
+ prehook
165
130
  safe_call
166
131
  end
167
132
 
168
133
  let!(:validators) { [lambda { |payload| false }] }
169
- context "web disabled" do
170
- let(:context_before) { allow(Airbrake).to receive(:notify) }
171
- it { should raise_exception }
172
- it { expect(Airbrake).to have_received(:notify) }
173
- end
174
-
175
- context "web enabled" do
176
- let(:context_before) do
177
- allow(Airbrake).to receive(:notify)
178
- enable_banter_web
179
- end
180
-
181
- it { expect(Airbrake).to have_received(:notify) }
182
- it { should raise_exception }
183
- it { expect(klass_instance).to have_received(:perform!).with(payload) }
184
- banter_message_fields_are_correct(BanterMessage::STATUS_VALIDATION_FAILED, "validation failed")
185
- end
134
+ it { should raise_exception }
135
+ it { expect(TestNotifier).to have_received(:notify) }
136
+ it { expect(TestNotifier.instance.error.to_s).to match(/validation failed/) }
137
+ it { expect(TestNotifier.instance.hash.keys).to match_array([:delivery_info, :envelope, :properties]) }
186
138
  end
187
139
 
188
140
  context "reprocessing message" do