honeybadger 1.16.2 → 1.16.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 CHANGED
@@ -1,3 +1,20 @@
1
+ ## Honeybadger 1.16.3 ##
2
+
3
+ * Handle `nil` session in Rails controllers (i.e., when the `session_off` gem is
4
+ enabled).
5
+
6
+ *Joshua Wood*
7
+
8
+ * Add `unwrap_exceptions` configuration option; when `false`, exceptions will
9
+ not be unwrapped (default: `true`).
10
+
11
+ *Joshua Wood*
12
+
13
+ * Prevent `binding_of_caller` from being loaded automatically (requires
14
+ `send_local_variables == true`).
15
+
16
+ *Joshua Wood*
17
+
1
18
  ## Honeybadger 1.16.2 ##
2
19
 
3
20
  * Fix a bug where #match was called on nil when instrumenting Net::HTTP
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- honeybadger (1.16.2)
4
+ honeybadger (1.16.3)
5
5
  json
6
6
 
7
7
  GEM
@@ -86,7 +86,7 @@ Then /^I should receive (.+) Honeybadger notifications?$/ do |number|
86
86
  when 'two' then 2
87
87
  else number end
88
88
 
89
- all_output.scan(/\[Honeybadger\] Response from Honeybadger:/).size.should == number
89
+ all_output.scan(/\[Honeybadger\] Success: Net::HTTPOK/).size.should == number
90
90
  step %(the output should contain "123456789")
91
91
  end
92
92
 
data/honeybadger.gemspec CHANGED
@@ -4,8 +4,8 @@ Gem::Specification.new do |s|
4
4
  s.rubygems_version = '1.3.5'
5
5
 
6
6
  s.name = 'honeybadger'
7
- s.version = '1.16.2'
8
- s.date = '2014-07-16'
7
+ s.version = '1.16.3'
8
+ s.date = '2014-07-21'
9
9
 
10
10
  s.summary = 'Error reports you can be happy about.'
11
11
  s.description = 'Make managing application errors a more pleasant experience.'
@@ -96,10 +96,10 @@ Gem::Specification.new do |s|
96
96
  lib/honeybadger/capistrano/tasks.rake
97
97
  lib/honeybadger/configuration.rb
98
98
  lib/honeybadger/dependency.rb
99
- lib/honeybadger/exception_extensions.rb
100
99
  lib/honeybadger/integrations.rb
101
100
  lib/honeybadger/integrations/delayed_job.rb
102
101
  lib/honeybadger/integrations/delayed_job/plugin.rb
102
+ lib/honeybadger/integrations/local_variables.rb
103
103
  lib/honeybadger/integrations/net_http.rb
104
104
  lib/honeybadger/integrations/passenger.rb
105
105
  lib/honeybadger/integrations/sidekiq.rb
@@ -140,8 +140,8 @@ Gem::Specification.new do |s|
140
140
  spec/honeybadger/capistrano_spec.rb
141
141
  spec/honeybadger/configuration_spec.rb
142
142
  spec/honeybadger/dependency_spec.rb
143
- spec/honeybadger/exception_extensions_spec.rb
144
143
  spec/honeybadger/integrations/delayed_job_spec.rb
144
+ spec/honeybadger/integrations/local_variables_spec.rb
145
145
  spec/honeybadger/integrations/net_http_spec.rb
146
146
  spec/honeybadger/integrations/passenger_spec.rb
147
147
  spec/honeybadger/integrations/sidekiq_spec.rb
data/lib/honeybadger.rb CHANGED
@@ -14,13 +14,12 @@ require 'honeybadger/stats'
14
14
  require 'honeybadger/user_informer'
15
15
  require 'honeybadger/user_feedback'
16
16
  require 'honeybadger/integrations'
17
- require 'honeybadger/exception_extensions'
18
17
 
19
18
  require 'honeybadger/railtie' if defined?(Rails::Railtie)
20
19
  require 'honeybadger/monitor'
21
20
 
22
21
  module Honeybadger
23
- VERSION = '1.16.2'.freeze
22
+ VERSION = '1.16.3'.freeze
24
23
  LOG_PREFIX = "** [Honeybadger] ".freeze
25
24
 
26
25
  HEADERS = {
@@ -191,6 +190,7 @@ module Honeybadger
191
190
  end
192
191
 
193
192
  def unwrap_exception(exception)
193
+ return exception unless configuration.unwrap_exceptions
194
194
  exception.respond_to?(:original_exception) && exception.original_exception ||
195
195
  exception.respond_to?(:continued_exception) && exception.continued_exception ||
196
196
  exception.respond_to?(:cause) && exception.cause ||
@@ -9,7 +9,8 @@ module Honeybadger
9
9
  :proxy_port, :proxy_user, :secure, :use_system_ssl_cert_chain, :framework,
10
10
  :user_information, :feedback, :rescue_rake_exceptions, :source_extract_radius,
11
11
  :send_request_session, :debug, :fingerprint, :hostname, :features, :metrics,
12
- :log_exception_on_send_failure, :send_local_variables, :traces, :trace_threshold].freeze
12
+ :log_exception_on_send_failure, :send_local_variables, :traces,
13
+ :trace_threshold, :unwrap_exceptions].freeze
13
14
 
14
15
  # The API key for your project, found on the project edit form.
15
16
  attr_accessor :api_key
@@ -107,6 +108,9 @@ module Honeybadger
107
108
  # +true+ to send local variables, +false+ to exclude
108
109
  attr_accessor :send_local_variables
109
110
 
111
+ # +true+ to unwrap exceptions
112
+ attr_accessor :unwrap_exceptions
113
+
110
114
  # +true+ to log extra debug info, +false+ to suppress
111
115
  attr_accessor :debug
112
116
 
@@ -195,6 +199,7 @@ module Honeybadger
195
199
  @limit = nil
196
200
  @feedback = true
197
201
  @trace_threshold = 2000
202
+ @unwrap_exceptions = true
198
203
  end
199
204
 
200
205
  # Public: Takes a block and adds it to the list of backtrace filters. When
@@ -6,3 +6,4 @@ require 'honeybadger/integrations/thor'
6
6
  require 'honeybadger/integrations/net_http'
7
7
  require 'honeybadger/integrations/passenger'
8
8
  require 'honeybadger/integrations/unicorn'
9
+ require 'honeybadger/integrations/local_variables'
@@ -0,0 +1,36 @@
1
+ module Honeybadger
2
+ module Integrations
3
+ module LocalVariables
4
+ module ExceptionExtension
5
+ def self.included(base)
6
+ base.send(:alias_method, :set_backtrace_without_honeybadger, :set_backtrace)
7
+ base.send(:alias_method, :set_backtrace, :set_backtrace_with_honeybadger)
8
+ end
9
+
10
+ def set_backtrace_with_honeybadger(*args, &block)
11
+ if caller.none? { |loc| loc.match(::Honeybadger::Backtrace::Line::INPUT_FORMAT) && Regexp.last_match(1) == __FILE__ }
12
+ @__honeybadger_bindings_stack = binding.callers.drop(1)
13
+ end
14
+
15
+ set_backtrace_without_honeybadger(*args, &block)
16
+ end
17
+
18
+ def __honeybadger_bindings_stack
19
+ @__honeybadger_bindings_stack || []
20
+ end
21
+ end
22
+
23
+ Dependency.register do
24
+ requirement { ::Honeybadger.configuration.send_local_variables }
25
+ requirement { defined?(::BindingOfCaller) }
26
+ requirement { !::Exception.included_modules.include?(ExceptionExtension) }
27
+
28
+ injection { Honeybadger.write_verbose_log('Installing local variables integration') }
29
+
30
+ injection do
31
+ ::Exception.send(:include, ExceptionExtension)
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -8,7 +8,7 @@ module Honeybadger
8
8
  response = send_request('/v1/metrics', data.to_json)
9
9
 
10
10
  if Net::HTTPSuccess === response
11
- log(:info, "Metrics Success: #{response.class}", response, data) if Honeybadger.configuration.debug
11
+ log(:info, "Metrics Success: #{response.class}", response) if Honeybadger.configuration.debug
12
12
  true
13
13
  else
14
14
  Honeybadger.configuration.features['metrics'] = false if Net::HTTPForbidden === response
@@ -27,7 +27,7 @@ module Honeybadger
27
27
  response = send_request('/v1/traces', data.to_json)
28
28
 
29
29
  if Net::HTTPSuccess === response
30
- log(:info, "Traces Success: #{response.class}", response, data) if Honeybadger.configuration.debug
30
+ log(:info, "Traces Success: #{response.class}", response) if Honeybadger.configuration.debug
31
31
  true
32
32
  else
33
33
  Honeybadger.configuration.features['traces'] = false if Net::HTTPForbidden === response
@@ -402,6 +402,7 @@ module Honeybadger
402
402
  # Returns a Hash of local variables
403
403
  def local_variables_from_exception(exception)
404
404
  return {} unless Exception === exception
405
+ return {} unless exception.respond_to?(:__honeybadger_bindings_stack)
405
406
  return {} if exception.__honeybadger_bindings_stack.empty?
406
407
 
407
408
  if project_root
@@ -55,6 +55,7 @@ module Honeybadger
55
55
  end
56
56
 
57
57
  def honeybadger_session_data
58
+ return {} unless session
58
59
  if session.respond_to?(:to_hash)
59
60
  session.to_hash
60
61
  else
@@ -68,10 +68,11 @@ module Honeybadger
68
68
  def ping(data = {})
69
69
  return nil unless api_key_ok?
70
70
 
71
- response = send_request('/v1/ping/', data.to_json)
71
+ data = data.to_json
72
+ response = send_request('/v1/ping/', data)
72
73
 
73
74
  if Net::HTTPSuccess === response
74
- log(Honeybadger.configuration.debug ? :info : :debug, "Ping Success: #{response.class}", response, data)
75
+ log(Honeybadger.configuration.debug ? :info : :debug, "Ping Success: #{response.class}", response)
75
76
  JSON.parse(response.body)
76
77
  else
77
78
  log(:error, "Ping Failure: #{response.class}", response, data)
@@ -31,6 +31,7 @@ describe Honeybadger::Configuration do
31
31
  assert_config_default :async, nil
32
32
  assert_config_default :send_request_session, true
33
33
  assert_config_default :send_local_variables, false
34
+ assert_config_default :unwrap_exceptions, true
34
35
  assert_config_default :debug, false
35
36
  assert_config_default :log_exception_on_send_failure, false
36
37
  assert_config_default :fingerprint, nil
@@ -138,7 +139,7 @@ describe Honeybadger::Configuration do
138
139
  :proxy_host, :proxy_pass, :proxy_port, :proxy_user, :secure,
139
140
  :source_extract_radius, :async, :send_request_session, :debug,
140
141
  :fingerprint, :hostname, :features, :metrics, :feedback,
141
- :log_exception_on_send_failure].each do |option|
142
+ :log_exception_on_send_failure, :unwrap_exceptions].each do |option|
142
143
  expect(hash[option]).to eq config[option]
143
144
  end
144
145
  end
@@ -0,0 +1,60 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Local variables integration" do
4
+ before do
5
+ Honeybadger.configuration.send_local_variables = config_enabled
6
+ Honeybadger::Dependency.inject!
7
+ end
8
+
9
+ subject { Exception.new }
10
+
11
+ context "when binding_of_caller isn't installed", :unless => defined?(::BindingOfCaller) do
12
+ let(:config_enabled) { true }
13
+ it { should_not respond_to :__honeybadger_bindings_stack }
14
+ end
15
+
16
+ context "when binding_of_caller is installed", :if => defined?(::BindingOfCaller) do
17
+ context "and disabled by configuration" do
18
+ let(:config_enabled) { false }
19
+ it { should_not respond_to :__honeybadger_bindings_stack }
20
+ end
21
+
22
+ context "and enabled by configuration" do
23
+ let(:config_enabled) { true }
24
+
25
+ it { should respond_to :__honeybadger_bindings_stack }
26
+
27
+ describe "#set_backtrace" do
28
+ context "call stack does not match current file" do
29
+ it "changes the bindings stack" do
30
+ expect { subject.set_backtrace(['foo.rb:1']) }.to change(subject, :__honeybadger_bindings_stack).from([])
31
+ end
32
+ end
33
+
34
+ context "call stack includes current file" do
35
+ before do
36
+ subject.stub(:caller).and_return(["#{File.expand_path('../../../../lib/honeybadger/integrations/local_variables.rb', __FILE__)}:1"])
37
+ end
38
+
39
+ it "does not change the bindings stack" do
40
+ expect { subject.set_backtrace(['foo.rb:1']) }.not_to change(subject, :__honeybadger_bindings_stack).from([])
41
+ end
42
+ end
43
+
44
+ context "call stack includes a non-matching line" do
45
+ before do
46
+ subject.stub(:caller).and_return(['(foo)'])
47
+ end
48
+
49
+ it "skips the non-matching line" do
50
+ expect { subject.set_backtrace(['foo.rb:1']) }.not_to raise_error
51
+ end
52
+
53
+ it "changes the bindings stack" do
54
+ expect { subject.set_backtrace(['foo.rb:1']) }.to change(subject, :__honeybadger_bindings_stack).from([])
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -233,7 +233,7 @@ describe 'Honeybadger' do
233
233
  config_opts = { 'one' => 'two', 'three' => 'four' }
234
234
  stub_notice!
235
235
  stub_sender!
236
- Honeybadger.configuration = double('config', :merge => config_opts, :public? => true, :async? => false)
236
+ Honeybadger.configuration = double('config', :merge => config_opts, :public? => true, :async? => false, :unwrap_exceptions => false)
237
237
 
238
238
  Honeybadger::Notice.should_receive(:new).with(hash_including(config_opts))
239
239
  Honeybadger.notify(exception)
@@ -299,6 +299,15 @@ describe 'Honeybadger' do
299
299
  @hash = Honeybadger.build_lookup_hash_for(@exception)
300
300
  expect(@hash[:error_class]).to eq "OriginalException"
301
301
  end
302
+
303
+ context "but unwrapping exceptions is disabled" do
304
+ before { Honeybadger.configuration.unwrap_exceptions = false }
305
+
306
+ it "doesn't unwrap the exception" do
307
+ @hash = Honeybadger.build_lookup_hash_for(@exception)
308
+ expect(@hash[:error_class]).not_to eq "OriginalException"
309
+ end
310
+ end
302
311
  end
303
312
 
304
313
  context "when an exception that provides #continued_exception is raised" do
@@ -131,7 +131,11 @@ begin
131
131
  end
132
132
 
133
133
  opts[:request].query_parameters = opts[:request].query_parameters.merge(opts[:params] || {})
134
- opts[:request].session = ActionController::TestSession.new(opts[:session] || {})
134
+ opts[:request].session = if opts.include?(:session) && opts[:session].nil?
135
+ nil
136
+ else
137
+ ActionController::TestSession.new(opts[:session] || {})
138
+ end
135
139
  # Prevents request.fullpath from crashing Rails in tests
136
140
  opts[:request].env['REQUEST_URI'] = opts[:request].request_uri
137
141
 
@@ -240,6 +244,11 @@ begin
240
244
  assert_sent_hash(data) { |h| h['request']['session'] }
241
245
  end
242
246
 
247
+ it "fails gracefully when session isn nil" do
248
+ process_action_with_automatic_notification(:session => nil)
249
+ assert_sent_hash({}) { |h| h['request']['session'] }
250
+ end
251
+
243
252
  it "send request data for manual notification" do
244
253
  params = { 'controller' => "honeybadger_test", 'action' => "index" }
245
254
  controller = process_action_with_manual_notification(:params => params)
data/spec/spec_helper.rb CHANGED
@@ -1,6 +1,12 @@
1
1
  require 'rspec'
2
2
  require 'honeybadger'
3
3
 
4
+ begin
5
+ require 'binding_of_caller'
6
+ rescue LoadError
7
+ nil
8
+ end
9
+
4
10
  # Require files in spec/support/ and its subdirectories.
5
11
  Dir[File.expand_path('../../spec/support/**/*.rb', __FILE__)].each {|f| require f}
6
12
 
metadata CHANGED
@@ -1,195 +1,222 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: honeybadger
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.16.2
4
+ version: 1.16.3
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - Joshua Wood
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2014-07-16 00:00:00.000000000 Z
12
+ date: 2014-07-21 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: json
15
16
  requirement: !ruby/object:Gem::Requirement
17
+ none: false
16
18
  requirements:
17
- - - ">="
19
+ - - ! '>='
18
20
  - !ruby/object:Gem::Version
19
21
  version: '0'
20
22
  type: :runtime
21
23
  prerelease: false
22
24
  version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
23
26
  requirements:
24
- - - ">="
27
+ - - ! '>='
25
28
  - !ruby/object:Gem::Version
26
29
  version: '0'
27
30
  - !ruby/object:Gem::Dependency
28
31
  name: cucumber
29
32
  requirement: !ruby/object:Gem::Requirement
33
+ none: false
30
34
  requirements:
31
- - - "~>"
35
+ - - ~>
32
36
  - !ruby/object:Gem::Version
33
37
  version: 1.3.10
34
38
  type: :development
35
39
  prerelease: false
36
40
  version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
37
42
  requirements:
38
- - - "~>"
43
+ - - ~>
39
44
  - !ruby/object:Gem::Version
40
45
  version: 1.3.10
41
46
  - !ruby/object:Gem::Dependency
42
47
  name: rspec
43
48
  requirement: !ruby/object:Gem::Requirement
49
+ none: false
44
50
  requirements:
45
- - - "~>"
51
+ - - ~>
46
52
  - !ruby/object:Gem::Version
47
53
  version: 2.14.0
48
54
  type: :development
49
55
  prerelease: false
50
56
  version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
51
58
  requirements:
52
- - - "~>"
59
+ - - ~>
53
60
  - !ruby/object:Gem::Version
54
61
  version: 2.14.0
55
62
  - !ruby/object:Gem::Dependency
56
63
  name: sham_rack
57
64
  requirement: !ruby/object:Gem::Requirement
65
+ none: false
58
66
  requirements:
59
- - - "~>"
67
+ - - ~>
60
68
  - !ruby/object:Gem::Version
61
69
  version: 1.3.0
62
70
  type: :development
63
71
  prerelease: false
64
72
  version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
65
74
  requirements:
66
- - - "~>"
75
+ - - ~>
67
76
  - !ruby/object:Gem::Version
68
77
  version: 1.3.0
69
78
  - !ruby/object:Gem::Dependency
70
79
  name: capistrano
71
80
  requirement: !ruby/object:Gem::Requirement
81
+ none: false
72
82
  requirements:
73
- - - "~>"
83
+ - - ~>
74
84
  - !ruby/object:Gem::Version
75
85
  version: '2.0'
76
86
  type: :development
77
87
  prerelease: false
78
88
  version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
79
90
  requirements:
80
- - - "~>"
91
+ - - ~>
81
92
  - !ruby/object:Gem::Version
82
93
  version: '2.0'
83
94
  - !ruby/object:Gem::Dependency
84
95
  name: guard
85
96
  requirement: !ruby/object:Gem::Requirement
97
+ none: false
86
98
  requirements:
87
- - - "~>"
99
+ - - ~>
88
100
  - !ruby/object:Gem::Version
89
101
  version: 1.8.3
90
102
  type: :development
91
103
  prerelease: false
92
104
  version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
93
106
  requirements:
94
- - - "~>"
107
+ - - ~>
95
108
  - !ruby/object:Gem::Version
96
109
  version: 1.8.3
97
110
  - !ruby/object:Gem::Dependency
98
111
  name: guard-rspec
99
112
  requirement: !ruby/object:Gem::Requirement
113
+ none: false
100
114
  requirements:
101
- - - ">="
115
+ - - ! '>='
102
116
  - !ruby/object:Gem::Version
103
117
  version: '0'
104
118
  type: :development
105
119
  prerelease: false
106
120
  version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
107
122
  requirements:
108
- - - ">="
123
+ - - ! '>='
109
124
  - !ruby/object:Gem::Version
110
125
  version: '0'
111
126
  - !ruby/object:Gem::Dependency
112
127
  name: rake
113
128
  requirement: !ruby/object:Gem::Requirement
129
+ none: false
114
130
  requirements:
115
- - - ">="
131
+ - - ! '>='
116
132
  - !ruby/object:Gem::Version
117
133
  version: '0'
118
134
  type: :development
119
135
  prerelease: false
120
136
  version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
121
138
  requirements:
122
- - - ">="
139
+ - - ! '>='
123
140
  - !ruby/object:Gem::Version
124
141
  version: '0'
125
142
  - !ruby/object:Gem::Dependency
126
143
  name: sinatra
127
144
  requirement: !ruby/object:Gem::Requirement
145
+ none: false
128
146
  requirements:
129
- - - ">="
147
+ - - ! '>='
130
148
  - !ruby/object:Gem::Version
131
149
  version: '0'
132
150
  type: :development
133
151
  prerelease: false
134
152
  version_requirements: !ruby/object:Gem::Requirement
153
+ none: false
135
154
  requirements:
136
- - - ">="
155
+ - - ! '>='
137
156
  - !ruby/object:Gem::Version
138
157
  version: '0'
139
158
  - !ruby/object:Gem::Dependency
140
159
  name: aruba
141
160
  requirement: !ruby/object:Gem::Requirement
161
+ none: false
142
162
  requirements:
143
- - - ">="
163
+ - - ! '>='
144
164
  - !ruby/object:Gem::Version
145
165
  version: '0'
146
166
  type: :development
147
167
  prerelease: false
148
168
  version_requirements: !ruby/object:Gem::Requirement
169
+ none: false
149
170
  requirements:
150
- - - ">="
171
+ - - ! '>='
151
172
  - !ruby/object:Gem::Version
152
173
  version: '0'
153
174
  - !ruby/object:Gem::Dependency
154
175
  name: appraisal
155
176
  requirement: !ruby/object:Gem::Requirement
177
+ none: false
156
178
  requirements:
157
- - - ">="
179
+ - - ! '>='
158
180
  - !ruby/object:Gem::Version
159
181
  version: '0'
160
182
  type: :development
161
183
  prerelease: false
162
184
  version_requirements: !ruby/object:Gem::Requirement
185
+ none: false
163
186
  requirements:
164
- - - ">="
187
+ - - ! '>='
165
188
  - !ruby/object:Gem::Version
166
189
  version: '0'
167
190
  - !ruby/object:Gem::Dependency
168
191
  name: fuubar
169
192
  requirement: !ruby/object:Gem::Requirement
193
+ none: false
170
194
  requirements:
171
- - - ">="
195
+ - - ! '>='
172
196
  - !ruby/object:Gem::Version
173
197
  version: '0'
174
198
  type: :development
175
199
  prerelease: false
176
200
  version_requirements: !ruby/object:Gem::Requirement
201
+ none: false
177
202
  requirements:
178
- - - ">="
203
+ - - ! '>='
179
204
  - !ruby/object:Gem::Version
180
205
  version: '0'
181
206
  - !ruby/object:Gem::Dependency
182
207
  name: growl
183
208
  requirement: !ruby/object:Gem::Requirement
209
+ none: false
184
210
  requirements:
185
- - - ">="
211
+ - - ! '>='
186
212
  - !ruby/object:Gem::Version
187
213
  version: '0'
188
214
  type: :development
189
215
  prerelease: false
190
216
  version_requirements: !ruby/object:Gem::Requirement
217
+ none: false
191
218
  requirements:
192
- - - ">="
219
+ - - ! '>='
193
220
  - !ruby/object:Gem::Version
194
221
  version: '0'
195
222
  description: Make managing application errors a more pleasant experience.
@@ -257,10 +284,10 @@ files:
257
284
  - lib/honeybadger/capistrano/tasks.rake
258
285
  - lib/honeybadger/configuration.rb
259
286
  - lib/honeybadger/dependency.rb
260
- - lib/honeybadger/exception_extensions.rb
261
287
  - lib/honeybadger/integrations.rb
262
288
  - lib/honeybadger/integrations/delayed_job.rb
263
289
  - lib/honeybadger/integrations/delayed_job/plugin.rb
290
+ - lib/honeybadger/integrations/local_variables.rb
264
291
  - lib/honeybadger/integrations/net_http.rb
265
292
  - lib/honeybadger/integrations/passenger.rb
266
293
  - lib/honeybadger/integrations/sidekiq.rb
@@ -301,8 +328,8 @@ files:
301
328
  - spec/honeybadger/capistrano_spec.rb
302
329
  - spec/honeybadger/configuration_spec.rb
303
330
  - spec/honeybadger/dependency_spec.rb
304
- - spec/honeybadger/exception_extensions_spec.rb
305
331
  - spec/honeybadger/integrations/delayed_job_spec.rb
332
+ - spec/honeybadger/integrations/local_variables_spec.rb
306
333
  - spec/honeybadger/integrations/net_http_spec.rb
307
334
  - spec/honeybadger/integrations/passenger_spec.rb
308
335
  - spec/honeybadger/integrations/sidekiq_spec.rb
@@ -330,26 +357,30 @@ files:
330
357
  - spec/support/helpers.rb
331
358
  homepage: http://www.honeybadger.io
332
359
  licenses: []
333
- metadata: {}
334
360
  post_install_message:
335
361
  rdoc_options:
336
- - "--charset=UTF-8"
337
- - "--markup tomdoc"
362
+ - --charset=UTF-8
363
+ - --markup tomdoc
338
364
  require_paths:
339
365
  - lib
340
366
  required_ruby_version: !ruby/object:Gem::Requirement
367
+ none: false
341
368
  requirements:
342
- - - ">="
369
+ - - ! '>='
343
370
  - !ruby/object:Gem::Version
344
371
  version: '0'
372
+ segments:
373
+ - 0
374
+ hash: 3175357828774041606
345
375
  required_rubygems_version: !ruby/object:Gem::Requirement
376
+ none: false
346
377
  requirements:
347
- - - ">="
378
+ - - ! '>='
348
379
  - !ruby/object:Gem::Version
349
380
  version: '0'
350
381
  requirements: []
351
382
  rubyforge_project:
352
- rubygems_version: 2.2.2
383
+ rubygems_version: 1.8.23
353
384
  signing_key:
354
385
  specification_version: 2
355
386
  summary: Error reports you can be happy about.
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: 86f0d9ed43c1f392c2eed8701f7dcc311df00c2e
4
- data.tar.gz: 2154070bb26a86dd27e17d7893748ebbd7838d37
5
- SHA512:
6
- metadata.gz: eb0c4089da555f08d4f753abb25809fa1c6def54a276768d1b6e4a14c326da46a2069108caa8a115efb328250670137929e9229b8d190f24db69845f740d151b
7
- data.tar.gz: 9d298e5339abc7a3ebd7a7c53e8d35b606b007d30c092817b6d3a4c38145a8d26df74701344c21a0821ab3e40617dd5d2244e7b25fbd3dce75423ee687384f92
@@ -1,35 +0,0 @@
1
- module Honeybadger
2
- module ExceptionExtensions
3
- module Bindings
4
- def self.included(base)
5
- base.send(:alias_method, :set_backtrace_without_honeybadger, :set_backtrace)
6
- base.send(:alias_method, :set_backtrace, :set_backtrace_with_honeybadger)
7
- end
8
-
9
- def set_backtrace_with_honeybadger(*args, &block)
10
- if caller.none? { |loc| loc.match(Honeybadger::Backtrace::Line::INPUT_FORMAT) && Regexp.last_match(1) == __FILE__ }
11
- @__honeybadger_bindings_stack = binding.callers.drop(1)
12
- end
13
-
14
- set_backtrace_without_honeybadger(*args, &block)
15
- end
16
-
17
- def __honeybadger_bindings_stack
18
- @__honeybadger_bindings_stack || []
19
- end
20
- end
21
-
22
- module NullBindings
23
- def __honeybadger_bindings_stack
24
- []
25
- end
26
- end
27
- end
28
- end
29
-
30
- begin
31
- require 'binding_of_caller'
32
- Exception.send(:include, Honeybadger::ExceptionExtensions::Bindings)
33
- rescue LoadError
34
- Exception.send(:include, Honeybadger::ExceptionExtensions::NullBindings)
35
- end
@@ -1,40 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Exception, :unless => defined?(BindingOfCaller) do
4
- should { respond_to :__honeybadger_bindings_stack }
5
- its(:__honeybadger_bindings_stack) { should eq([]) }
6
- end
7
-
8
- describe Exception, :if => defined?(BindingOfCaller) do
9
- describe "#set_backtrace" do
10
- context "call stack does not match current file" do
11
- it "changes the bindings stack" do
12
- expect { subject.set_backtrace(['foo.rb:1']) }.to change(subject, :__honeybadger_bindings_stack).from([])
13
- end
14
- end
15
-
16
- context "call stack includes current file" do
17
- before do
18
- subject.stub(:caller).and_return(["#{File.expand_path('../../../lib/honeybadger/exception_extensions.rb', __FILE__)}:1"])
19
- end
20
-
21
- it "does not change the bindings stack" do
22
- expect { subject.set_backtrace(['foo.rb:1']) }.not_to change(subject, :__honeybadger_bindings_stack).from([])
23
- end
24
- end
25
-
26
- context "call stack includes a non-matching line" do
27
- before do
28
- subject.stub(:caller).and_return(['(foo)'])
29
- end
30
-
31
- it "skips the non-matching line" do
32
- expect { subject.set_backtrace(['foo.rb:1']) }.not_to raise_error
33
- end
34
-
35
- it "changes the bindings stack" do
36
- expect { subject.set_backtrace(['foo.rb:1']) }.to change(subject, :__honeybadger_bindings_stack).from([])
37
- end
38
- end
39
- end
40
- end