bugsnag 2.8.12 → 2.8.13

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.
@@ -0,0 +1,14 @@
1
+ # `bugsnag-ruby` Usage and Configuration
2
+
3
+ ## [Configuration](Configuration.md)
4
+
5
+ Bugsnag includes several configuration for better compatibility with your
6
+ project and network settings.
7
+
8
+ ## [Notification Options](Notification Options.md)
9
+
10
+ It is often useful to send additional metadata about your app, such as
11
+ information about the currently logged in user, along with any exceptions, to
12
+ help debug problems. This document lists possible per-notification options as
13
+ well as additional configuration available for different project types,
14
+ including Rails, Rails API, and other frameworks.
@@ -14,6 +14,7 @@ module Bugsnag
14
14
  attr_accessor :send_environment
15
15
  attr_accessor :send_code
16
16
  attr_accessor :project_root
17
+ attr_accessor :vendor_paths
17
18
  attr_accessor :app_version
18
19
  attr_accessor :app_type
19
20
  attr_accessor :params_filters
@@ -79,6 +80,7 @@ module Bugsnag
79
80
  self.hostname = default_hostname
80
81
  self.delivery_method = DEFAULT_DELIVERY_METHOD
81
82
  self.timeout = 15
83
+ self.vendor_paths = [%r{vendor/}]
82
84
 
83
85
  # Read the API key from the environment
84
86
  self.api_key = ENV["BUGSNAG_API_KEY"]
@@ -11,19 +11,17 @@ module Bugsnag
11
11
  def deliver(url, body, configuration)
12
12
  start_once!
13
13
 
14
- if queue.length > MAX_OUTSTANDING_REQUESTS
15
- Bugsnag.warn("Dropping notification, #{queue.length} outstanding requests")
14
+ if @queue.length > MAX_OUTSTANDING_REQUESTS
15
+ Bugsnag.warn("Dropping notification, #{@queue.length} outstanding requests")
16
16
  return
17
17
  end
18
18
 
19
19
  # Add delivery to the worker thread
20
- queue.push proc { super(url, body, configuration) }
20
+ @queue.push proc { super(url, body, configuration) }
21
21
  end
22
22
 
23
23
  private
24
24
 
25
- attr_reader :queue
26
-
27
25
  def start_once!
28
26
  MUTEX.synchronize do
29
27
  return if @started
@@ -32,15 +30,15 @@ module Bugsnag
32
30
  @queue = Queue.new
33
31
 
34
32
  worker_thread = Thread.new do
35
- while x = queue.pop
33
+ while x = @queue.pop
36
34
  break if x == STOP
37
35
  x.call
38
36
  end
39
37
  end
40
38
 
41
39
  at_exit do
42
- Bugsnag.warn("Waiting for #{queue.length} outstanding request(s)") unless queue.empty?
43
- queue.push STOP
40
+ Bugsnag.warn("Waiting for #{@queue.length} outstanding request(s)") unless @queue.empty?
41
+ @queue.push STOP
44
42
  worker_thread.join
45
43
  end
46
44
  end
@@ -1,4 +1,3 @@
1
- require "bugsnag"
2
1
  require "json"
3
2
 
4
3
  module Bugsnag
@@ -30,7 +30,7 @@ module Bugsnag
30
30
  CURRENT_PAYLOAD_VERSION = "2"
31
31
 
32
32
  attr_accessor :context
33
- attr_accessor :user
33
+ attr_reader :user
34
34
  attr_accessor :configuration
35
35
  attr_accessor :meta_data
36
36
 
@@ -380,7 +380,7 @@ module Bugsnag
380
380
 
381
381
  # Generate the stacktrace line hash
382
382
  trace_hash = {}
383
- trace_hash[:inProject] = true if @configuration.project_root && file.match(/^#{@configuration.project_root}/) && !file.match(/vendor\//)
383
+ trace_hash[:inProject] = true if in_project?(file)
384
384
  trace_hash[:lineNumber] = line_str.to_i
385
385
 
386
386
  if @configuration.send_code
@@ -410,6 +410,17 @@ module Bugsnag
410
410
  end.compact
411
411
  end
412
412
 
413
+ def in_project?(line)
414
+ return false if @configuration.vendor_paths && @configuration.vendor_paths.any? do |vendor_path|
415
+ if vendor_path.is_a?(String)
416
+ line.include?(vendor_path)
417
+ else
418
+ line =~ vendor_path
419
+ end
420
+ end
421
+ @configuration.project_root && line.start_with?(@configuration.project_root.to_s)
422
+ end
423
+
413
424
  def code(file, line_number, num_lines = 7)
414
425
  code_hash = {}
415
426
 
@@ -69,9 +69,9 @@ module Bugsnag
69
69
 
70
70
  initializer "bugsnag.use_rack_middleware" do |app|
71
71
  begin
72
- app.config.middleware.insert_after ActionDispatch::DebugExceptions, "Bugsnag::Rack"
72
+ app.config.middleware.insert_after ActionDispatch::DebugExceptions, Bugsnag::Rack
73
73
  rescue
74
- app.config.middleware.use "Bugsnag::Rack"
74
+ app.config.middleware.use Bugsnag::Rack
75
75
  end
76
76
  end
77
77
  end
@@ -49,7 +49,7 @@ namespace :bugsnag do
49
49
  config_command += " --app #{ENV["HEROKU_APP"]}" if ENV["HEROKU_APP"]
50
50
  heroku_env = run_command.call(config_command).split(/[\n\r]/).each_with_object({}) do |c, obj|
51
51
  k,v = c.split("=")
52
- obj[k] = v.strip.empty? ? nil : v
52
+ obj[k] = (v.nil? || v.strip.empty?) ? nil : v
53
53
  end
54
54
 
55
55
  # Check for Bugsnag API key (required)
@@ -417,6 +417,19 @@ describe Bugsnag::Notification do
417
417
  }
418
418
  end
419
419
 
420
+ it "does not mark the top-most stacktrace line as inProject if it matches a vendor path" do
421
+ Bugsnag.configuration.project_root = File.expand_path('../../', __FILE__)
422
+ Bugsnag.configuration.vendor_paths = [File.expand_path('../', __FILE__)]
423
+
424
+ Bugsnag.notify(BugsnagTestException.new("It crashed"))
425
+
426
+ expect(Bugsnag).to have_sent_notification{ |payload|
427
+ exception = get_exception_from_payload(payload)
428
+ expect(exception["stacktrace"].size).to be >= 1
429
+ expect(exception["stacktrace"].first["inProject"]).to be_nil
430
+ }
431
+ end
432
+
420
433
  it "marks the top-most stacktrace line as inProject if necessary" do
421
434
  Bugsnag.configuration.project_root = File.expand_path File.dirname(__FILE__)
422
435
  Bugsnag.notify(BugsnagTestException.new("It crashed"))
@@ -27,12 +27,12 @@ RSpec.configure do |config|
27
27
  WebMock.stub_request(:post, "https://notify.bugsnag.com/")
28
28
 
29
29
  Bugsnag.instance_variable_set(:@configuration, Bugsnag::Configuration.new)
30
- Bugsnag.configure do |config|
31
- config.api_key = "c9d60ae4c7e70c4b6c4ebd3e8056d2b8"
32
- config.release_stage = "production"
33
- config.delivery_method = :synchronous
30
+ Bugsnag.configure do |bugsnag|
31
+ bugsnag.api_key = "c9d60ae4c7e70c4b6c4ebd3e8056d2b8"
32
+ bugsnag.release_stage = "production"
33
+ bugsnag.delivery_method = :synchronous
34
34
  # silence logger in tests
35
- config.logger = Logger.new(StringIO.new)
35
+ bugsnag.logger = Logger.new(StringIO.new)
36
36
  end
37
37
  end
38
38
 
metadata CHANGED
@@ -1,103 +1,103 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bugsnag
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.8.12
4
+ version: 2.8.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Smith
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-08-06 00:00:00.000000000 Z
11
+ date: 2015-12-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ~>
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.7'
20
- - - ">="
20
+ - - '>='
21
21
  - !ruby/object:Gem::Version
22
22
  version: 1.7.7
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
- - - "~>"
27
+ - - ~>
28
28
  - !ruby/object:Gem::Version
29
29
  version: '1.7'
30
- - - ">="
30
+ - - '>='
31
31
  - !ruby/object:Gem::Version
32
32
  version: 1.7.7
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: rake
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
- - - ">="
37
+ - - '>='
38
38
  - !ruby/object:Gem::Version
39
39
  version: '0'
40
40
  type: :development
41
41
  prerelease: false
42
42
  version_requirements: !ruby/object:Gem::Requirement
43
43
  requirements:
44
- - - ">="
44
+ - - '>='
45
45
  - !ruby/object:Gem::Version
46
46
  version: '0'
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rspec
49
49
  requirement: !ruby/object:Gem::Requirement
50
50
  requirements:
51
- - - ">="
51
+ - - '>='
52
52
  - !ruby/object:Gem::Version
53
53
  version: '0'
54
54
  type: :development
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  requirements:
58
- - - ">="
58
+ - - '>='
59
59
  - !ruby/object:Gem::Version
60
60
  version: '0'
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: rdoc
63
63
  requirement: !ruby/object:Gem::Requirement
64
64
  requirements:
65
- - - ">="
65
+ - - '>='
66
66
  - !ruby/object:Gem::Version
67
67
  version: '0'
68
68
  type: :development
69
69
  prerelease: false
70
70
  version_requirements: !ruby/object:Gem::Requirement
71
71
  requirements:
72
- - - ">="
72
+ - - '>='
73
73
  - !ruby/object:Gem::Version
74
74
  version: '0'
75
75
  - !ruby/object:Gem::Dependency
76
76
  name: pry
77
77
  requirement: !ruby/object:Gem::Requirement
78
78
  requirements:
79
- - - ">="
79
+ - - '>='
80
80
  - !ruby/object:Gem::Version
81
81
  version: '0'
82
82
  type: :development
83
83
  prerelease: false
84
84
  version_requirements: !ruby/object:Gem::Requirement
85
85
  requirements:
86
- - - ">="
86
+ - - '>='
87
87
  - !ruby/object:Gem::Version
88
88
  version: '0'
89
89
  - !ruby/object:Gem::Dependency
90
90
  name: webmock
91
91
  requirement: !ruby/object:Gem::Requirement
92
92
  requirements:
93
- - - ">="
93
+ - - '>='
94
94
  - !ruby/object:Gem::Version
95
95
  version: '0'
96
96
  type: :development
97
97
  prerelease: false
98
98
  version_requirements: !ruby/object:Gem::Requirement
99
99
  requirements:
100
- - - ">="
100
+ - - '>='
101
101
  - !ruby/object:Gem::Version
102
102
  version: '0'
103
103
  description: Ruby notifier for bugsnag.com
@@ -108,10 +108,10 @@ extra_rdoc_files:
108
108
  - LICENSE.txt
109
109
  - README.md
110
110
  files:
111
- - ".document"
112
- - ".gitignore"
113
- - ".rspec"
114
- - ".travis.yml"
111
+ - .document
112
+ - .gitignore
113
+ - .rspec
114
+ - .travis.yml
115
115
  - CHANGELOG.md
116
116
  - CONTRIBUTING.md
117
117
  - Gemfile
@@ -120,6 +120,9 @@ files:
120
120
  - Rakefile
121
121
  - VERSION
122
122
  - bugsnag.gemspec
123
+ - docs/Configuration.md
124
+ - docs/Notification Options.md
125
+ - docs/README.md
123
126
  - lib/bugsnag.rb
124
127
  - lib/bugsnag/capistrano.rb
125
128
  - lib/bugsnag/capistrano2.rb
@@ -181,17 +184,17 @@ require_paths:
181
184
  - lib
182
185
  required_ruby_version: !ruby/object:Gem::Requirement
183
186
  requirements:
184
- - - ">="
187
+ - - '>='
185
188
  - !ruby/object:Gem::Version
186
189
  version: '0'
187
190
  required_rubygems_version: !ruby/object:Gem::Requirement
188
191
  requirements:
189
- - - ">="
192
+ - - '>='
190
193
  - !ruby/object:Gem::Version
191
194
  version: '0'
192
195
  requirements: []
193
196
  rubyforge_project:
194
- rubygems_version: 2.2.2
197
+ rubygems_version: 2.0.14
195
198
  signing_key:
196
199
  specification_version: 4
197
200
  summary: Ruby notifier for bugsnag.com