bugsnag 1.3.2 → 1.3.3
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.md +5 -0
- data/VERSION +1 -1
- data/bugsnag.gemspec +12 -13
- data/lib/bugsnag/notification.rb +8 -7
- data/lib/bugsnag/rails/controller_methods.rb +1 -1
- data/spec/notification_spec.rb +53 -5
- data/spec/spec_helper.rb +0 -1
- metadata +49 -35
data/CHANGELOG.md
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.3.
|
1
|
+
1.3.3
|
data/bugsnag.gemspec
CHANGED
@@ -4,14 +4,14 @@
|
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
|
-
s.name =
|
8
|
-
s.version = "1.3.
|
7
|
+
s.name = "bugsnag"
|
8
|
+
s.version = "1.3.3"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["James Smith"]
|
12
|
-
s.date =
|
13
|
-
s.description =
|
14
|
-
s.email =
|
12
|
+
s.date = "2013-04-23"
|
13
|
+
s.description = "Ruby notifier for bugsnag.com"
|
14
|
+
s.email = "james@bugsnag.com"
|
15
15
|
s.extra_rdoc_files = [
|
16
16
|
"LICENSE.txt",
|
17
17
|
"README.md"
|
@@ -59,32 +59,31 @@ Gem::Specification.new do |s|
|
|
59
59
|
"spec/rack_spec.rb",
|
60
60
|
"spec/spec_helper.rb"
|
61
61
|
]
|
62
|
-
s.homepage =
|
62
|
+
s.homepage = "http://github.com/bugsnag/bugsnag-ruby"
|
63
63
|
s.licenses = ["MIT"]
|
64
64
|
s.require_paths = ["lib"]
|
65
|
-
s.rubygems_version =
|
66
|
-
s.summary =
|
65
|
+
s.rubygems_version = "1.8.24"
|
66
|
+
s.summary = "Ruby notifier for bugsnag.com"
|
67
67
|
|
68
68
|
if s.respond_to? :specification_version then
|
69
|
-
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
70
69
|
s.specification_version = 3
|
71
70
|
|
72
|
-
if Gem::Version.new(Gem::
|
71
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
73
72
|
s.add_runtime_dependency(%q<multi_json>, ["~> 1.0"])
|
74
|
-
s.add_runtime_dependency(%q<httparty>, ["
|
73
|
+
s.add_runtime_dependency(%q<httparty>, ["< 1.0", ">= 0.6"])
|
75
74
|
s.add_development_dependency(%q<rspec>, ["~> 2.11.0"])
|
76
75
|
s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
|
77
76
|
s.add_development_dependency(%q<jeweler>, ["~> 1.8.4"])
|
78
77
|
else
|
79
78
|
s.add_dependency(%q<multi_json>, ["~> 1.0"])
|
80
|
-
s.add_dependency(%q<httparty>, ["
|
79
|
+
s.add_dependency(%q<httparty>, ["< 1.0", ">= 0.6"])
|
81
80
|
s.add_dependency(%q<rspec>, ["~> 2.11.0"])
|
82
81
|
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
83
82
|
s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
|
84
83
|
end
|
85
84
|
else
|
86
85
|
s.add_dependency(%q<multi_json>, ["~> 1.0"])
|
87
|
-
s.add_dependency(%q<httparty>, ["
|
86
|
+
s.add_dependency(%q<httparty>, ["< 1.0", ">= 0.6"])
|
88
87
|
s.add_dependency(%q<rspec>, ["~> 2.11.0"])
|
89
88
|
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
90
89
|
s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
|
data/lib/bugsnag/notification.rb
CHANGED
@@ -11,6 +11,7 @@ module Bugsnag
|
|
11
11
|
NOTIFIER_URL = "http://www.bugsnag.com"
|
12
12
|
|
13
13
|
API_KEY_REGEX = /[0-9a-f]{32}/i
|
14
|
+
BACKTRACE_LINE_REGEX = /^((?:[a-zA-Z]:)?[^:]+):(\d+)(?::in `([^']+)')?$/
|
14
15
|
|
15
16
|
MAX_EXCEPTIONS_TO_UNWRAP = 5
|
16
17
|
|
@@ -246,13 +247,17 @@ module Bugsnag
|
|
246
247
|
|
247
248
|
def stacktrace(exception)
|
248
249
|
(exception.backtrace || caller).map do |trace|
|
249
|
-
|
250
|
-
file, line_str,
|
250
|
+
# Parse the stacktrace line
|
251
|
+
_, file, line_str, method = trace.match(BACKTRACE_LINE_REGEX).to_a
|
251
252
|
|
253
|
+
# Skip stacktrace lines inside lib/bugsnag
|
252
254
|
next(nil) if file =~ %r{lib/bugsnag}
|
253
255
|
|
254
256
|
# Expand relative paths
|
255
|
-
|
257
|
+
p = Pathname.new(file)
|
258
|
+
if p.relative?
|
259
|
+
file = p.realpath.to_s rescue file
|
260
|
+
end
|
256
261
|
|
257
262
|
# Generate the stacktrace line hash
|
258
263
|
trace_hash = {}
|
@@ -272,10 +277,6 @@ module Bugsnag
|
|
272
277
|
trace_hash[:file] = file
|
273
278
|
|
274
279
|
# Add a method if we have it
|
275
|
-
if method_str
|
276
|
-
method_match = /in `([^']+)'/.match(method_str)
|
277
|
-
method = method_match.captures.first if method_match
|
278
|
-
end
|
279
280
|
trace_hash[:method] = method if method && (method =~ /^__bind/).nil?
|
280
281
|
|
281
282
|
if trace_hash[:file] && !trace_hash[:file].empty?
|
data/spec/notification_spec.rb
CHANGED
@@ -418,13 +418,11 @@ describe Bugsnag::Notification do
|
|
418
418
|
it "should call to_exception on i18n error objects" do
|
419
419
|
Bugsnag::Notification.should_receive(:deliver_exception_payload) do |endpoint, payload|
|
420
420
|
exception = get_exception_from_payload(payload)
|
421
|
-
exception[:errorClass].should be == "
|
421
|
+
exception[:errorClass].should be == "BugsnagTestException"
|
422
|
+
exception[:message].should be == "message"
|
422
423
|
end
|
423
424
|
|
424
|
-
|
425
|
-
Bugsnag.notify exception
|
426
|
-
end
|
427
|
-
I18n.t(:test)
|
425
|
+
Bugsnag.notify(OpenStruct.new(:to_exception => BugsnagTestException.new("message")))
|
428
426
|
end
|
429
427
|
|
430
428
|
it "should generate runtimeerror for non exceptions" do
|
@@ -436,4 +434,54 @@ describe Bugsnag::Notification do
|
|
436
434
|
|
437
435
|
Bugsnag.notify("test message")
|
438
436
|
end
|
437
|
+
|
438
|
+
it "should support unix-style paths in backtraces" do
|
439
|
+
ex = BugsnagTestException.new("It crashed")
|
440
|
+
ex.set_backtrace([
|
441
|
+
"/Users/james/app/spec/notification_spec.rb:419",
|
442
|
+
"/Some/path/rspec/example.rb:113:in `instance_eval'"
|
443
|
+
])
|
444
|
+
|
445
|
+
Bugsnag::Notification.should_receive(:deliver_exception_payload) do |endpoint, payload|
|
446
|
+
exception = get_exception_from_payload(payload)
|
447
|
+
exception[:stacktrace].length.should be == 2
|
448
|
+
|
449
|
+
line = exception[:stacktrace][0]
|
450
|
+
line[:file].should be == "/Users/james/app/spec/notification_spec.rb"
|
451
|
+
line[:lineNumber].should be == 419
|
452
|
+
line[:method].should be nil
|
453
|
+
|
454
|
+
line = exception[:stacktrace][1]
|
455
|
+
line[:file].should be == "/Some/path/rspec/example.rb"
|
456
|
+
line[:lineNumber].should be == 113
|
457
|
+
line[:method].should be == "instance_eval"
|
458
|
+
end
|
459
|
+
|
460
|
+
Bugsnag.notify(ex)
|
461
|
+
end
|
462
|
+
|
463
|
+
it "should support windows-style paths in backtraces" do
|
464
|
+
ex = BugsnagTestException.new("It crashed")
|
465
|
+
ex.set_backtrace([
|
466
|
+
"C:/projects/test/app/controllers/users_controller.rb:13:in `index'",
|
467
|
+
"C:/ruby/1.9.1/gems/actionpack-2.3.10/filters.rb:638:in `block in run_before_filters'"
|
468
|
+
])
|
469
|
+
|
470
|
+
Bugsnag::Notification.should_receive(:deliver_exception_payload) do |endpoint, payload|
|
471
|
+
exception = get_exception_from_payload(payload)
|
472
|
+
exception[:stacktrace].length.should be == 2
|
473
|
+
|
474
|
+
line = exception[:stacktrace][0]
|
475
|
+
line[:file].should be == "C:/projects/test/app/controllers/users_controller.rb"
|
476
|
+
line[:lineNumber].should be == 13
|
477
|
+
line[:method].should be == "index"
|
478
|
+
|
479
|
+
line = exception[:stacktrace][1]
|
480
|
+
line[:file].should be == "C:/ruby/1.9.1/gems/actionpack-2.3.10/filters.rb"
|
481
|
+
line[:lineNumber].should be == 638
|
482
|
+
line[:method].should be == "block in run_before_filters"
|
483
|
+
end
|
484
|
+
|
485
|
+
Bugsnag.notify(ex)
|
486
|
+
end
|
439
487
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bugsnag
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 29
|
5
|
+
prerelease:
|
5
6
|
segments:
|
6
7
|
- 1
|
7
8
|
- 3
|
8
|
-
-
|
9
|
-
version: 1.3.
|
9
|
+
- 3
|
10
|
+
version: 1.3.3
|
10
11
|
platform: ruby
|
11
12
|
authors:
|
12
13
|
- James Smith
|
@@ -14,82 +15,92 @@ autorequire:
|
|
14
15
|
bindir: bin
|
15
16
|
cert_chain: []
|
16
17
|
|
17
|
-
date: 2013-04-
|
18
|
-
default_executable:
|
18
|
+
date: 2013-04-23 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
|
-
|
22
|
-
|
23
|
-
name: multi_json
|
24
|
-
version_requirements: &id001 !ruby/object:Gem::Requirement
|
21
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
22
|
+
none: false
|
25
23
|
requirements:
|
26
24
|
- - ~>
|
27
25
|
- !ruby/object:Gem::Version
|
26
|
+
hash: 15
|
28
27
|
segments:
|
29
28
|
- 1
|
30
29
|
- 0
|
31
30
|
version: "1.0"
|
32
|
-
|
33
|
-
- !ruby/object:Gem::Dependency
|
31
|
+
version_requirements: *id001
|
34
32
|
prerelease: false
|
35
33
|
type: :runtime
|
36
|
-
name:
|
37
|
-
|
34
|
+
name: multi_json
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
37
|
+
none: false
|
38
38
|
requirements:
|
39
|
-
- - ">="
|
40
|
-
- !ruby/object:Gem::Version
|
41
|
-
segments:
|
42
|
-
- 0
|
43
|
-
- 6
|
44
|
-
version: "0.6"
|
45
39
|
- - <
|
46
40
|
- !ruby/object:Gem::Version
|
41
|
+
hash: 15
|
47
42
|
segments:
|
48
43
|
- 1
|
49
44
|
- 0
|
50
45
|
version: "1.0"
|
51
|
-
|
52
|
-
- !ruby/object:Gem::
|
46
|
+
- - ">="
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
hash: 7
|
49
|
+
segments:
|
50
|
+
- 0
|
51
|
+
- 6
|
52
|
+
version: "0.6"
|
53
|
+
version_requirements: *id002
|
53
54
|
prerelease: false
|
54
|
-
type: :
|
55
|
-
name:
|
56
|
-
|
55
|
+
type: :runtime
|
56
|
+
name: httparty
|
57
|
+
- !ruby/object:Gem::Dependency
|
58
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
59
|
+
none: false
|
57
60
|
requirements:
|
58
61
|
- - ~>
|
59
62
|
- !ruby/object:Gem::Version
|
63
|
+
hash: 35
|
60
64
|
segments:
|
61
65
|
- 2
|
62
66
|
- 11
|
63
67
|
- 0
|
64
68
|
version: 2.11.0
|
65
|
-
|
66
|
-
- !ruby/object:Gem::Dependency
|
69
|
+
version_requirements: *id003
|
67
70
|
prerelease: false
|
68
71
|
type: :development
|
69
|
-
name:
|
70
|
-
|
72
|
+
name: rspec
|
73
|
+
- !ruby/object:Gem::Dependency
|
74
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
75
|
+
none: false
|
71
76
|
requirements:
|
72
77
|
- - ~>
|
73
78
|
- !ruby/object:Gem::Version
|
79
|
+
hash: 31
|
74
80
|
segments:
|
75
81
|
- 3
|
76
82
|
- 12
|
77
83
|
version: "3.12"
|
78
|
-
|
79
|
-
- !ruby/object:Gem::Dependency
|
84
|
+
version_requirements: *id004
|
80
85
|
prerelease: false
|
81
86
|
type: :development
|
82
|
-
name:
|
83
|
-
|
87
|
+
name: rdoc
|
88
|
+
- !ruby/object:Gem::Dependency
|
89
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
90
|
+
none: false
|
84
91
|
requirements:
|
85
92
|
- - ~>
|
86
93
|
- !ruby/object:Gem::Version
|
94
|
+
hash: 63
|
87
95
|
segments:
|
88
96
|
- 1
|
89
97
|
- 8
|
90
98
|
- 4
|
91
99
|
version: 1.8.4
|
92
|
-
|
100
|
+
version_requirements: *id005
|
101
|
+
prerelease: false
|
102
|
+
type: :development
|
103
|
+
name: jeweler
|
93
104
|
description: Ruby notifier for bugsnag.com
|
94
105
|
email: james@bugsnag.com
|
95
106
|
executables: []
|
@@ -141,7 +152,6 @@ files:
|
|
141
152
|
- spec/notification_spec.rb
|
142
153
|
- spec/rack_spec.rb
|
143
154
|
- spec/spec_helper.rb
|
144
|
-
has_rdoc: true
|
145
155
|
homepage: http://github.com/bugsnag/bugsnag-ruby
|
146
156
|
licenses:
|
147
157
|
- MIT
|
@@ -151,23 +161,27 @@ rdoc_options: []
|
|
151
161
|
require_paths:
|
152
162
|
- lib
|
153
163
|
required_ruby_version: !ruby/object:Gem::Requirement
|
164
|
+
none: false
|
154
165
|
requirements:
|
155
166
|
- - ">="
|
156
167
|
- !ruby/object:Gem::Version
|
168
|
+
hash: 3
|
157
169
|
segments:
|
158
170
|
- 0
|
159
171
|
version: "0"
|
160
172
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
173
|
+
none: false
|
161
174
|
requirements:
|
162
175
|
- - ">="
|
163
176
|
- !ruby/object:Gem::Version
|
177
|
+
hash: 3
|
164
178
|
segments:
|
165
179
|
- 0
|
166
180
|
version: "0"
|
167
181
|
requirements: []
|
168
182
|
|
169
183
|
rubyforge_project:
|
170
|
-
rubygems_version: 1.
|
184
|
+
rubygems_version: 1.8.24
|
171
185
|
signing_key:
|
172
186
|
specification_version: 3
|
173
187
|
summary: Ruby notifier for bugsnag.com
|