bugsnag 6.3.0.beta.0 → 6.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -0
- data/VERSION +1 -1
- data/lib/bugsnag.rb +7 -10
- data/lib/bugsnag/configuration.rb +1 -8
- data/lib/bugsnag/delivery/synchronous.rb +6 -107
- data/lib/bugsnag/delivery/thread_queue.rb +2 -2
- data/lib/bugsnag/helpers.rb +0 -24
- data/lib/bugsnag/integrations/rack.rb +0 -1
- data/lib/bugsnag/integrations/rails/controller_methods.rb +0 -1
- data/lib/bugsnag/report.rb +3 -12
- data/spec/configuration_spec.rb +0 -5
- data/spec/integrations/sidekiq_spec.rb +1 -1
- data/spec/middleware_spec.rb +10 -10
- data/spec/rack_spec.rb +2 -2
- data/spec/rails3_request_spec.rb +2 -2
- data/spec/report_spec.rb +69 -61
- data/spec/spec_helper.rb +4 -18
- data/spec/stacktrace_spec.rb +5 -5
- metadata +4 -7
- data/lib/bugsnag/middleware/session_data.rb +0 -21
- data/lib/bugsnag/session_tracker.rb +0 -157
- data/spec/session_tracker_spec.rb +0 -153
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0f150d665aa4bbd126a1fcee6415449c764bfd8b
|
4
|
+
data.tar.gz: bacabc7aa6fc31be54613737742251ef95dd3cd7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 657d6eddccb62f4bd6e6c02f4f7c7220bcb89db9cca562dab98ad859c51d743be1dde6186a258ccd6b7c2ce1337a15ff1e966a2c53bc6fd6624d8ce32f8580fe
|
7
|
+
data.tar.gz: c229917814c152d2556fc3e161ebd7992da7d03ec7de27f96120bc2ca22888f88ab22aea8c5b3bce81cf302c7c6bfeb860a4a8dcb5a9d5a43a61e145804bc2d9
|
data/CHANGELOG.md
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
6.3.0
|
1
|
+
6.3.0
|
data/lib/bugsnag.rb
CHANGED
@@ -7,7 +7,6 @@ require "bugsnag/meta_data"
|
|
7
7
|
require "bugsnag/report"
|
8
8
|
require "bugsnag/cleaner"
|
9
9
|
require "bugsnag/helpers"
|
10
|
-
require "bugsnag/session_tracker"
|
11
10
|
|
12
11
|
require "bugsnag/delivery"
|
13
12
|
require "bugsnag/delivery/synchronous"
|
@@ -39,8 +38,6 @@ module Bugsnag
|
|
39
38
|
configuration.warn("No valid API key has been set, notifications will not be sent")
|
40
39
|
@key_warning = true
|
41
40
|
end
|
42
|
-
|
43
|
-
session_tracker.config = configuration
|
44
41
|
end
|
45
42
|
|
46
43
|
# Explicitly notify of an exception
|
@@ -65,6 +62,11 @@ module Bugsnag
|
|
65
62
|
return
|
66
63
|
end
|
67
64
|
|
65
|
+
if exception.respond_to?(:skip_bugsnag) && exception.skip_bugsnag
|
66
|
+
configuration.debug("Not notifying due to skip_bugsnag flag")
|
67
|
+
return
|
68
|
+
end
|
69
|
+
|
68
70
|
report = Report.new(exception, configuration, auto_notify)
|
69
71
|
|
70
72
|
# If this is an auto_notify we yield the block before the any middleware is run
|
@@ -111,8 +113,8 @@ module Bugsnag
|
|
111
113
|
|
112
114
|
# Deliver
|
113
115
|
configuration.info("Notifying #{configuration.endpoint} of #{report.exceptions.last[:errorClass]}")
|
114
|
-
|
115
|
-
Bugsnag::Delivery[configuration.delivery_method].deliver(configuration.endpoint,
|
116
|
+
payload_string = ::JSON.dump(Bugsnag::Helpers.trim_if_needed(report.as_json))
|
117
|
+
Bugsnag::Delivery[configuration.delivery_method].deliver(configuration.endpoint, payload_string, configuration)
|
116
118
|
end
|
117
119
|
end
|
118
120
|
|
@@ -122,11 +124,6 @@ module Bugsnag
|
|
122
124
|
@configuration || LOCK.synchronize { @configuration ||= Bugsnag::Configuration.new }
|
123
125
|
end
|
124
126
|
|
125
|
-
def session_tracker
|
126
|
-
@session_tracker = nil unless defined?(@session_tracker)
|
127
|
-
@session_tracker || LOCK.synchronize { @session_tracker ||= Bugsnag::SessionTracker.new(configuration)}
|
128
|
-
end
|
129
|
-
|
130
127
|
# Allow access to "before notify" callbacks
|
131
128
|
def before_notify_callbacks
|
132
129
|
Bugsnag.configuration.request_data[:before_callbacks] ||= []
|
@@ -7,7 +7,6 @@ require "bugsnag/middleware/exception_meta_data"
|
|
7
7
|
require "bugsnag/middleware/ignore_error_class"
|
8
8
|
require "bugsnag/middleware/suggestion_data"
|
9
9
|
require "bugsnag/middleware/classify_error"
|
10
|
-
require "bugsnag/middleware/session_data"
|
11
10
|
|
12
11
|
module Bugsnag
|
13
12
|
class Configuration
|
@@ -23,7 +22,7 @@ module Bugsnag
|
|
23
22
|
attr_accessor :app_type
|
24
23
|
attr_accessor :meta_data_filters
|
25
24
|
attr_accessor :endpoint
|
26
|
-
attr_accessor :logger
|
25
|
+
attr_accessor :logger
|
27
26
|
attr_accessor :middleware
|
28
27
|
attr_accessor :internal_middleware
|
29
28
|
attr_accessor :proxy_host
|
@@ -33,13 +32,10 @@ module Bugsnag
|
|
33
32
|
attr_accessor :timeout
|
34
33
|
attr_accessor :hostname
|
35
34
|
attr_accessor :ignore_classes
|
36
|
-
attr_accessor :track_sessions
|
37
|
-
attr_accessor :session_endpoint
|
38
35
|
|
39
36
|
API_KEY_REGEX = /[0-9a-f]{32}/i
|
40
37
|
THREAD_LOCAL_NAME = "bugsnag_req_data"
|
41
38
|
DEFAULT_ENDPOINT = "https://notify.bugsnag.com"
|
42
|
-
DEFAULT_SESSION_ENDPOINT = "https://sessions.bugsnag.com"
|
43
39
|
|
44
40
|
DEFAULT_META_DATA_FILTERS = [
|
45
41
|
/authorization/i,
|
@@ -61,8 +57,6 @@ module Bugsnag
|
|
61
57
|
self.hostname = default_hostname
|
62
58
|
self.timeout = 15
|
63
59
|
self.notify_release_stages = nil
|
64
|
-
self.track_sessions = false
|
65
|
-
self.session_endpoint = DEFAULT_SESSION_ENDPOINT
|
66
60
|
|
67
61
|
# SystemExit and Interrupt are common Exception types seen with successful
|
68
62
|
# exits and are not automatically reported to Bugsnag
|
@@ -87,7 +81,6 @@ module Bugsnag
|
|
87
81
|
self.internal_middleware.use Bugsnag::Middleware::IgnoreErrorClass
|
88
82
|
self.internal_middleware.use Bugsnag::Middleware::SuggestionData
|
89
83
|
self.internal_middleware.use Bugsnag::Middleware::ClassifyError
|
90
|
-
self.internal_middleware.use Bugsnag::Middleware::SessionData
|
91
84
|
|
92
85
|
self.middleware = Bugsnag::MiddlewareStack.new
|
93
86
|
self.middleware.use Bugsnag::Middleware::Callbacks
|
@@ -4,19 +4,13 @@ require "uri"
|
|
4
4
|
module Bugsnag
|
5
5
|
module Delivery
|
6
6
|
class Synchronous
|
7
|
-
|
8
|
-
BACKOFF_REQUESTS = {}
|
9
|
-
BACKOFF_LOCK = Mutex.new
|
7
|
+
HEADERS = {"Content-Type" => "application/json"}
|
10
8
|
|
11
9
|
class << self
|
12
|
-
def deliver(url, body, configuration
|
10
|
+
def deliver(url, body, configuration)
|
13
11
|
begin
|
14
|
-
response = request(url, body, configuration
|
12
|
+
response = request(url, body, configuration)
|
15
13
|
configuration.debug("Request to #{url} completed, status: #{response.code}")
|
16
|
-
success = options[:success] || '200'
|
17
|
-
if options[:backoff] && !(response.code == success)
|
18
|
-
backoff(url, body, configuration, options)
|
19
|
-
end
|
20
14
|
rescue StandardError => e
|
21
15
|
# KLUDGE: Since we don't re-raise http exceptions, this breaks rspec
|
22
16
|
raise if e.class.to_s == "RSpec::Expectations::ExpectationNotMetError"
|
@@ -28,14 +22,9 @@ module Bugsnag
|
|
28
22
|
|
29
23
|
private
|
30
24
|
|
31
|
-
def request(url, body, configuration
|
25
|
+
def request(url, body, configuration)
|
32
26
|
uri = URI.parse(url)
|
33
27
|
|
34
|
-
if options[:trim_payload]
|
35
|
-
body = Bugsnag::Helpers.trim_if_needed(body)
|
36
|
-
end
|
37
|
-
payload = ::JSON.dump(body)
|
38
|
-
|
39
28
|
if configuration.proxy_host
|
40
29
|
http = Net::HTTP.new(uri.host, uri.port, configuration.proxy_host, configuration.proxy_port, configuration.proxy_user, configuration.proxy_password)
|
41
30
|
else
|
@@ -50,104 +39,14 @@ module Bugsnag
|
|
50
39
|
http.ca_file = configuration.ca_file if configuration.ca_file
|
51
40
|
end
|
52
41
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
request = Net::HTTP::Post.new(path(uri), headers)
|
57
|
-
request.body = payload
|
58
|
-
|
42
|
+
request = Net::HTTP::Post.new(path(uri), HEADERS)
|
43
|
+
request.body = body
|
59
44
|
http.request(request)
|
60
45
|
end
|
61
46
|
|
62
|
-
def backoff(url, body, configuration, options)
|
63
|
-
# Ensure we have the latest configuration for making these requests
|
64
|
-
@latest_configuration = configuration
|
65
|
-
|
66
|
-
BACKOFF_LOCK.lock
|
67
|
-
begin
|
68
|
-
# Define an exit function once to handle outstanding requests
|
69
|
-
@registered_at_exit = false unless defined?(@registered_at_exit)
|
70
|
-
if !@registered_at_exit
|
71
|
-
@registered_at_exit = true
|
72
|
-
at_exit do
|
73
|
-
backoff_exit
|
74
|
-
end
|
75
|
-
end
|
76
|
-
if BACKOFF_REQUESTS[url] && !BACKOFF_REQUESTS[url].empty?
|
77
|
-
last_request = BACKOFF_REQUESTS[url].last
|
78
|
-
new_body_length = ::JSON.dump(body).length
|
79
|
-
old_body_length = ::JSON.dump(last_request[:body]).length
|
80
|
-
if new_body_length + old_body_length >= Bugsnag::Helpers::MAX_PAYLOAD_LENGTH
|
81
|
-
BACKOFF_REQUESTS[url].push({:body => body, :options => options})
|
82
|
-
else
|
83
|
-
Bugsnag::Helpers::deep_merge!(last_request, {:body => body, :options => options})
|
84
|
-
end
|
85
|
-
else
|
86
|
-
BACKOFF_REQUESTS[url] = [{:body => body, :options => options}]
|
87
|
-
end
|
88
|
-
if !(BACKOFF_THREADS[url] && BACKOFF_THREADS[url].status)
|
89
|
-
spawn_backoff_thread(url)
|
90
|
-
end
|
91
|
-
ensure
|
92
|
-
BACKOFF_LOCK.unlock
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
def backoff_exit
|
97
|
-
# Kill existing threads
|
98
|
-
BACKOFF_THREADS.each do |url, thread|
|
99
|
-
thread.exit
|
100
|
-
end
|
101
|
-
# Retry outstanding requests once, then exit
|
102
|
-
BACKOFF_REQUESTS.each do |url, requests|
|
103
|
-
requests.map! do |req|
|
104
|
-
response = request(url, req[:body], @latest_configuration, req[:options])
|
105
|
-
success = req[:options][:success] || '200'
|
106
|
-
response.code == success
|
107
|
-
end
|
108
|
-
requests.reject! { |i| i }
|
109
|
-
@latest_configuration.warn("Requests to #{url} finished, #{requests.size} failed")
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
def spawn_backoff_thread(url)
|
114
|
-
new_thread = Thread.new(url) do |url|
|
115
|
-
interval = 2
|
116
|
-
while BACKOFF_REQUESTS[url].size > 0
|
117
|
-
sleep(interval)
|
118
|
-
interval = interval * 2
|
119
|
-
interval = 600 if interval > 600
|
120
|
-
BACKOFF_LOCK.lock
|
121
|
-
begin
|
122
|
-
BACKOFF_REQUESTS[url].map! do |req|
|
123
|
-
response = request(url, req[:body], @latest_configuration, req[:options])
|
124
|
-
success = req[:options][:success] || '200'
|
125
|
-
if response.code == success
|
126
|
-
@latest_configuration.debug("Request to #{url} completed, status: #{response.code}")
|
127
|
-
false
|
128
|
-
else
|
129
|
-
req
|
130
|
-
end
|
131
|
-
end
|
132
|
-
BACKOFF_REQUESTS[url].reject! { |i| !i }
|
133
|
-
ensure
|
134
|
-
BACKOFF_LOCK.unlock
|
135
|
-
end
|
136
|
-
end
|
137
|
-
end
|
138
|
-
BACKOFF_THREADS[url] = new_thread
|
139
|
-
end
|
140
|
-
|
141
47
|
def path(uri)
|
142
48
|
uri.path == "" ? "/" : uri.path
|
143
49
|
end
|
144
|
-
|
145
|
-
def default_headers
|
146
|
-
{
|
147
|
-
"Content-Type" => "application/json",
|
148
|
-
"Bugsnag-Sent-At" => Time.now().utc().strftime('%Y-%m-%dT%H:%M:%S')
|
149
|
-
}
|
150
|
-
end
|
151
50
|
end
|
152
51
|
end
|
153
52
|
end
|
@@ -8,7 +8,7 @@ module Bugsnag
|
|
8
8
|
MUTEX = Mutex.new
|
9
9
|
|
10
10
|
class << self
|
11
|
-
def deliver(url, body, configuration
|
11
|
+
def deliver(url, body, configuration)
|
12
12
|
@configuration = configuration
|
13
13
|
|
14
14
|
start_once!
|
@@ -19,7 +19,7 @@ module Bugsnag
|
|
19
19
|
end
|
20
20
|
|
21
21
|
# Add delivery to the worker thread
|
22
|
-
@queue.push proc { super(url, body, configuration
|
22
|
+
@queue.push proc { super(url, body, configuration) }
|
23
23
|
end
|
24
24
|
|
25
25
|
private
|
data/lib/bugsnag/helpers.rb
CHANGED
@@ -23,30 +23,6 @@ module Bugsnag
|
|
23
23
|
remove_metadata_from_events(reduced_value)
|
24
24
|
end
|
25
25
|
|
26
|
-
def self.deep_merge(l_hash, r_hash)
|
27
|
-
l_hash.merge(r_hash) do |key, l_val, r_val|
|
28
|
-
if l_val.is_a?(Hash) && r_val.is_a?(Hash)
|
29
|
-
deep_merge(l_val, r_val)
|
30
|
-
elsif l_val.is_a?(Array) && r_val.is_a?(Array)
|
31
|
-
l_val.concat(r_val)
|
32
|
-
else
|
33
|
-
r_val
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
def self.deep_merge!(l_hash, r_hash)
|
39
|
-
l_hash.merge!(r_hash) do |key, l_val, r_val|
|
40
|
-
if l_val.is_a?(Hash) && r_val.is_a?(Hash)
|
41
|
-
deep_merge(l_val, r_val)
|
42
|
-
elsif l_val.is_a?(Array) && r_val.is_a?(Array)
|
43
|
-
l_val.concat(r_val)
|
44
|
-
else
|
45
|
-
r_val
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
26
|
private
|
51
27
|
|
52
28
|
TRUNCATION_INFO = '[TRUNCATED]'
|
data/lib/bugsnag/report.rb
CHANGED
@@ -17,9 +17,8 @@ module Bugsnag
|
|
17
17
|
|
18
18
|
MAX_EXCEPTIONS_TO_UNWRAP = 5
|
19
19
|
|
20
|
-
CURRENT_PAYLOAD_VERSION = "
|
20
|
+
CURRENT_PAYLOAD_VERSION = "2"
|
21
21
|
|
22
|
-
attr_reader :unhandled
|
23
22
|
attr_accessor :api_key
|
24
23
|
attr_accessor :app_type
|
25
24
|
attr_accessor :app_version
|
@@ -32,7 +31,6 @@ module Bugsnag
|
|
32
31
|
attr_accessor :meta_data
|
33
32
|
attr_accessor :raw_exceptions
|
34
33
|
attr_accessor :release_stage
|
35
|
-
attr_accessor :session
|
36
34
|
attr_accessor :severity
|
37
35
|
attr_accessor :severity_reason
|
38
36
|
attr_accessor :user
|
@@ -94,7 +92,7 @@ module Bugsnag
|
|
94
92
|
},
|
95
93
|
exceptions: exceptions,
|
96
94
|
groupingHash: grouping_hash,
|
97
|
-
|
95
|
+
payloadVersion: CURRENT_PAYLOAD_VERSION,
|
98
96
|
severity: severity,
|
99
97
|
severityReason: severity_reason,
|
100
98
|
unhandled: @unhandled,
|
@@ -110,6 +108,7 @@ module Bugsnag
|
|
110
108
|
|
111
109
|
# return the payload hash
|
112
110
|
{
|
111
|
+
:apiKey => api_key,
|
113
112
|
:notifier => {
|
114
113
|
:name => NOTIFIER_NAME,
|
115
114
|
:version => NOTIFIER_VERSION,
|
@@ -119,14 +118,6 @@ module Bugsnag
|
|
119
118
|
}
|
120
119
|
end
|
121
120
|
|
122
|
-
def headers
|
123
|
-
{
|
124
|
-
"Bugsnag-Api-Key" => api_key,
|
125
|
-
"Bugsnag-Payload-Version" => CURRENT_PAYLOAD_VERSION,
|
126
|
-
"Bugsnag-Sent-At" => Time.now().utc().strftime('%Y-%m-%dT%H:%M:%S')
|
127
|
-
}
|
128
|
-
end
|
129
|
-
|
130
121
|
def ignore?
|
131
122
|
@should_ignore
|
132
123
|
end
|
data/spec/configuration_spec.rb
CHANGED
@@ -22,11 +22,6 @@ describe Bugsnag::Configuration do
|
|
22
22
|
subject.delivery_method = :wow
|
23
23
|
expect(subject.delivery_method).to eq(:wow)
|
24
24
|
end
|
25
|
-
|
26
|
-
it "should have sensible defaults for session tracking" do
|
27
|
-
expect(subject.session_endpoint).to eq("https://sessions.bugsnag.com")
|
28
|
-
expect(subject.track_sessions).to be false
|
29
|
-
end
|
30
25
|
end
|
31
26
|
|
32
27
|
it "should have exit exception classes ignored by default" do
|
@@ -23,7 +23,7 @@ describe Bugsnag::Sidekiq do
|
|
23
23
|
rescue
|
24
24
|
end
|
25
25
|
|
26
|
-
expect(Bugsnag).to have_sent_notification {|payload
|
26
|
+
expect(Bugsnag).to have_sent_notification {|payload|
|
27
27
|
event = get_event_from_payload(payload)
|
28
28
|
expect(event["metaData"]["sidekiq"]["msg"]["class"]).to eq("FailingWorker")
|
29
29
|
expect(event["metaData"]["sidekiq"]["msg"]["args"]).to eq([-0])
|
data/spec/middleware_spec.rb
CHANGED
@@ -16,7 +16,7 @@ describe Bugsnag::MiddlewareStack do
|
|
16
16
|
Bugsnag.notify(BugsnagTestException.new("It crashed"))
|
17
17
|
expect(callback_run_count).to eq(1)
|
18
18
|
|
19
|
-
expect(Bugsnag).to have_sent_notification{ |payload
|
19
|
+
expect(Bugsnag).to have_sent_notification{ |payload|
|
20
20
|
event = get_event_from_payload(payload)
|
21
21
|
expect(event["metaData"]["some_tab"]).not_to be_nil
|
22
22
|
expect(event["metaData"]["some_tab"]["info"]).to eq("here")
|
@@ -37,7 +37,7 @@ describe Bugsnag::MiddlewareStack do
|
|
37
37
|
Bugsnag.notify(BugsnagTestException.new("It crashed"))
|
38
38
|
expect(callback_run_count).to eq(1)
|
39
39
|
|
40
|
-
expect(Bugsnag).to have_sent_notification{ |payload
|
40
|
+
expect(Bugsnag).to have_sent_notification{ |payload|
|
41
41
|
event = get_event_from_payload(payload)
|
42
42
|
expect(event["metaData"]["custom"]).not_to be_nil
|
43
43
|
expect(event["metaData"]["custom"]["info"]).to eq("here")
|
@@ -56,7 +56,7 @@ describe Bugsnag::MiddlewareStack do
|
|
56
56
|
Bugsnag.notify(BugsnagTestException.new("It crashed"))
|
57
57
|
expect(callback_run_count).to eq(1)
|
58
58
|
|
59
|
-
expect(Bugsnag).to have_sent_notification{ |payload
|
59
|
+
expect(Bugsnag).to have_sent_notification{ |payload|
|
60
60
|
event = get_event_from_payload(payload)
|
61
61
|
expect(event["user"]).not_to be_nil
|
62
62
|
expect(event["user"]["id"]).to eq("here")
|
@@ -73,7 +73,7 @@ describe Bugsnag::MiddlewareStack do
|
|
73
73
|
report.meta_data.merge!({custom: {info: 'overridden'}})
|
74
74
|
end
|
75
75
|
|
76
|
-
expect(Bugsnag).to have_sent_notification{ |payload
|
76
|
+
expect(Bugsnag).to have_sent_notification{ |payload|
|
77
77
|
event = get_event_from_payload(payload)
|
78
78
|
expect(event["metaData"]["custom"]).not_to be_nil
|
79
79
|
expect(event["metaData"]["custom"]["info"]).to eq("overridden")
|
@@ -87,7 +87,7 @@ describe Bugsnag::MiddlewareStack do
|
|
87
87
|
report.meta_data.merge!({custom: {info: 'overridden'}})
|
88
88
|
end
|
89
89
|
|
90
|
-
expect(Bugsnag).to have_sent_notification{ |payload
|
90
|
+
expect(Bugsnag).to have_sent_notification{ |payload|
|
91
91
|
event = get_event_from_payload(payload)
|
92
92
|
expect(event["metaData"]["custom"]).not_to be_nil
|
93
93
|
expect(event["metaData"]["custom"]["info"]).to eq("overridden")
|
@@ -97,7 +97,7 @@ describe Bugsnag::MiddlewareStack do
|
|
97
97
|
it "does not have have before callbacks by default" do
|
98
98
|
expect(Bugsnag.before_notify_callbacks.size).to eq(0)
|
99
99
|
Bugsnag.notify(BugsnagTestException.new("It crashed"))
|
100
|
-
expect(Bugsnag).to have_sent_notification{ |payload
|
100
|
+
expect(Bugsnag).to have_sent_notification{ |payload|
|
101
101
|
event = get_event_from_payload(payload)
|
102
102
|
expect(event["metaData"].size).to eq(0)
|
103
103
|
}
|
@@ -172,7 +172,7 @@ describe Bugsnag::MiddlewareStack do
|
|
172
172
|
|
173
173
|
Bugsnag.notify(BugsnagTestException.new("It crashed"))
|
174
174
|
|
175
|
-
expect(Bugsnag).to have_sent_notification{ |payload
|
175
|
+
expect(Bugsnag).to have_sent_notification{ |payload|
|
176
176
|
event = get_event_from_payload(payload)
|
177
177
|
expect(event["metaData"]['test']['value']).to eq("abcdef*****3456")
|
178
178
|
}
|
@@ -187,7 +187,7 @@ describe Bugsnag::MiddlewareStack do
|
|
187
187
|
Bugsnag.notify(e)
|
188
188
|
end
|
189
189
|
|
190
|
-
expect(Bugsnag).to have_sent_notification{ |payload
|
190
|
+
expect(Bugsnag).to have_sent_notification{ |payload|
|
191
191
|
event = get_event_from_payload(payload)
|
192
192
|
expect(event["metaData"]["error"]).to_not be_nil
|
193
193
|
expect(event["metaData"]["error"]).to eq({"suggestion" => "prepend"})
|
@@ -205,7 +205,7 @@ describe Bugsnag::MiddlewareStack do
|
|
205
205
|
Bugsnag.notify(e)
|
206
206
|
end
|
207
207
|
|
208
|
-
expect(Bugsnag).to have_sent_notification{ |payload
|
208
|
+
expect(Bugsnag).to have_sent_notification{ |payload|
|
209
209
|
event = get_event_from_payload(payload)
|
210
210
|
expect(event["metaData"]["error"]).to be_nil
|
211
211
|
}
|
@@ -240,7 +240,7 @@ describe Bugsnag::MiddlewareStack do
|
|
240
240
|
}
|
241
241
|
end
|
242
242
|
|
243
|
-
expect(Bugsnag).to have_sent_notification{ |payload
|
243
|
+
expect(Bugsnag).to have_sent_notification{ |payload|
|
244
244
|
event = get_event_from_payload(payload)
|
245
245
|
expect(event["unhandled"]).to be true
|
246
246
|
expect(event["severityReason"]).to eq({
|