honeybadger 1.13.2 → 1.14.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 (61) hide show
  1. checksums.yaml +7 -0
  2. data/Appraisals +60 -45
  3. data/CHANGELOG.md +30 -1
  4. data/Gemfile.lock +1 -1
  5. data/MIT-LICENSE +2 -1
  6. data/Rakefile +8 -4
  7. data/features/standalone.feature +73 -0
  8. data/features/step_definitions/rack_steps.rb +1 -2
  9. data/features/step_definitions/standalone_steps.rb +12 -0
  10. data/features/step_definitions/thor_steps.rb +4 -0
  11. data/features/support/env.rb +2 -0
  12. data/features/support/test.thor +22 -0
  13. data/features/thor.feature +5 -0
  14. data/gemfiles/binding_of_caller.gemfile +8 -0
  15. data/gemfiles/rails.gemfile +11 -0
  16. data/gemfiles/rake.gemfile +1 -1
  17. data/gemfiles/standalone.gemfile +7 -0
  18. data/gemfiles/thor.gemfile +8 -0
  19. data/honeybadger.gemspec +27 -11
  20. data/lib/honeybadger.rb +15 -10
  21. data/lib/honeybadger/configuration.rb +9 -4
  22. data/lib/honeybadger/dependency.rb +65 -0
  23. data/lib/honeybadger/exception_extensions.rb +35 -0
  24. data/lib/honeybadger/integrations.rb +5 -0
  25. data/lib/honeybadger/integrations/delayed_job.rb +20 -0
  26. data/lib/honeybadger/integrations/delayed_job/plugin.rb +31 -0
  27. data/lib/honeybadger/integrations/sidekiq.rb +17 -9
  28. data/lib/honeybadger/integrations/thor.rb +29 -0
  29. data/lib/honeybadger/notice.rb +47 -99
  30. data/lib/honeybadger/payload.rb +101 -0
  31. data/lib/honeybadger/rack.rb +8 -54
  32. data/lib/honeybadger/rack/error_notifier.rb +60 -0
  33. data/lib/honeybadger/rack/user_feedback.rb +74 -0
  34. data/lib/honeybadger/rack/user_informer.rb +28 -0
  35. data/lib/honeybadger/rails.rb +5 -4
  36. data/lib/honeybadger/railtie.rb +4 -3
  37. data/lib/honeybadger/user_feedback.rb +3 -67
  38. data/lib/honeybadger/user_informer.rb +3 -21
  39. data/spec/honeybadger/configuration_spec.rb +5 -1
  40. data/spec/honeybadger/dependency_spec.rb +134 -0
  41. data/spec/honeybadger/exception_extensions_spec.rb +40 -0
  42. data/spec/honeybadger/integrations/delayed_job_spec.rb +48 -0
  43. data/spec/honeybadger/integrations/sidekiq_spec.rb +60 -0
  44. data/spec/honeybadger/integrations/thor_spec.rb +29 -0
  45. data/spec/honeybadger/notice_spec.rb +137 -127
  46. data/spec/honeybadger/payload_spec.rb +162 -0
  47. data/spec/honeybadger/rack_spec.rb +6 -6
  48. data/spec/honeybadger/rails/action_controller_spec.rb +2 -0
  49. data/spec/honeybadger/rails_spec.rb +4 -2
  50. data/spec/honeybadger/user_feedback_spec.rb +2 -2
  51. data/spec/honeybadger/user_informer_spec.rb +3 -3
  52. metadata +49 -66
  53. data/gemfiles/rack.gemfile.lock +0 -125
  54. data/gemfiles/rails2.3.gemfile.lock +0 -141
  55. data/gemfiles/rails3.0.gemfile.lock +0 -193
  56. data/gemfiles/rails3.1.gemfile.lock +0 -203
  57. data/gemfiles/rails3.2.gemfile.lock +0 -201
  58. data/gemfiles/rails4.0.gemfile.lock +0 -197
  59. data/gemfiles/rails4.1.gemfile.lock +0 -202
  60. data/gemfiles/rake.gemfile.lock +0 -124
  61. data/gemfiles/sinatra.gemfile.lock +0 -124
@@ -0,0 +1,162 @@
1
+ require 'spec_helper'
2
+
3
+ describe Honeybadger::Payload do
4
+ its(:max_depth) { should eq 20 }
5
+
6
+ context "when max_depth option is passed to #initialize" do
7
+ subject { described_class.new({}, :max_depth => 5) }
8
+ its(:max_depth) { should eq 5 }
9
+
10
+ context "when initialized with a bad object" do
11
+ it "raises ArgumentError" do
12
+ expect { described_class.new([], :max_depth => 5) }.to raise_error(ArgumentError)
13
+ end
14
+ end
15
+ end
16
+
17
+ describe "#sanitize" do
18
+ let(:deep_hash) { {}.tap {|h| 30.times.each {|i| h = h[i.to_s] = {:string => 'string'} }} }
19
+ let(:expected_hash) { {}.tap {|h| max_depth.times.each {|i| h = h[i.to_s] = (i < max_depth-1 ? {:string => 'string'} : '[max depth reached]') }} }
20
+ let(:sanitized_hash) { described_class.new(deep_hash, :max_depth => max_depth) }
21
+ let(:max_depth) { 10 }
22
+
23
+ it "truncates nested hashes to max_depth" do
24
+ expect(sanitized_hash['0']).to eq(expected_hash['0'])
25
+ end
26
+
27
+ it "does not allow infinite recursion" do
28
+ hash = {:a => :a}
29
+ hash[:hash] = hash
30
+ payload = described_class.new(:request => {:params => hash})
31
+ expect(payload.request[:params][:hash]).to eq "[possible infinite recursion halted]"
32
+ end
33
+
34
+ it "converts unserializable objects to strings" do
35
+ assert_serializes(:request, :parameters)
36
+ assert_serializes(:request, :cgi_data)
37
+ assert_serializes(:request, :session_data)
38
+ assert_serializes(:request, :local_variables)
39
+ end
40
+
41
+ it "ensures #to_hash is called on objects that support it" do
42
+ expect { described_class.new(:session => { :object => double(:to_hash => {}) }) }.not_to raise_error
43
+ end
44
+
45
+ it "ensures #to_ary is called on objects that support it" do
46
+ expect { described_class.new(:session => { :object => double(:to_ary => {}) }) }.not_to raise_error
47
+ end
48
+ end
49
+
50
+ it "filters parameters" do
51
+ assert_filters_request(:params)
52
+ end
53
+
54
+ it "filters cgi data" do
55
+ assert_filters_request(:cgi_data)
56
+ end
57
+
58
+ it "filters session" do
59
+ assert_filters_request(:session)
60
+ end
61
+
62
+ it "filters local_variables" do
63
+ assert_filters_request(:local_variables)
64
+ end
65
+
66
+ context 'filtered parameters in query string' do
67
+ let(:params_filters) { [:foo, :bar] }
68
+
69
+ describe '#url' do
70
+ subject { described_class.new({:request => {:url => 'https://www.honeybadger.io/?foo=1&bar=2&baz=3'}}, :filters => params_filters).request[:url] }
71
+
72
+ it 'filters query' do
73
+ expect(subject).to eq 'https://www.honeybadger.io/?foo=[FILTERED]&bar=[FILTERED]&baz=3'
74
+ end
75
+ end
76
+
77
+ describe '#cgi_data' do
78
+ let(:cgi_data) { { 'QUERY_STRING' => 'foo=1&bar=2&baz=3', 'ORIGINAL_FULLPATH' => '/?foo=1&bar=2&baz=3' } }
79
+
80
+ subject { described_class.new({:request => {:cgi_data => cgi_data}}, :filters => params_filters).request[:cgi_data] }
81
+
82
+ it 'filters QUERY_STRING key' do
83
+ expect(subject['QUERY_STRING']).to eq 'foo=[FILTERED]&bar=[FILTERED]&baz=3'
84
+ end
85
+
86
+ it 'filters ORIGINAL_FULLPATH key' do
87
+ expect(subject['ORIGINAL_FULLPATH']).to eq '/?foo=[FILTERED]&bar=[FILTERED]&baz=3'
88
+ end
89
+ end
90
+ end
91
+
92
+ describe '#filter_url!' do
93
+ subject { described_class.new.send(:filter_url!, url) }
94
+
95
+ context 'malformed query' do
96
+ let(:url) { 'https://www.honeybadger.io/?foobar12' }
97
+ it { should eq url }
98
+ end
99
+
100
+ context 'no query' do
101
+ let(:url) { 'https://www.honeybadger.io' }
102
+ it { should eq url }
103
+ end
104
+
105
+ context 'malformed url' do
106
+ let(:url) { 'http s ! honeybadger' }
107
+ before { expect { URI.parse(url) }.to raise_error }
108
+ it { should eq url }
109
+ end
110
+
111
+ context 'complex url' do
112
+ let(:url) { 'https://foo:bar@www.honeybadger.io:123/asdf/?foo=1&bar=2&baz=3' }
113
+ it { should eq url }
114
+ end
115
+ end
116
+
117
+ def assert_serializes(*keys)
118
+ [File.open(__FILE__), Proc.new { puts "boo!" }, Module.new].each do |object|
119
+ hash = {
120
+ :strange_object => object,
121
+ :sub_hash => {
122
+ :sub_object => object
123
+ },
124
+ :array => [object]
125
+ }
126
+
127
+ payload_keys = keys.dup
128
+ last_key = payload_keys.pop
129
+ payload = described_class.new(payload_keys.reverse.reduce({last_key => hash}) { |a,k| {k => a} })
130
+
131
+ first_key = keys.shift
132
+ hash = keys.reduce(payload[first_key]) {|a,k| a[k] }
133
+
134
+ expect(hash[:strange_object]).to eq object.to_s # objects should be serialized
135
+ expect(hash[:sub_hash]).to be_a Hash # subhashes should be kept
136
+ expect(hash[:sub_hash][:sub_object]).to eq object.to_s # subhash members should be serialized
137
+ expect(hash[:array]).to be_a Array # arrays should be kept
138
+ expect(hash[:array].first).to eq object.to_s # array members should be serialized
139
+ end
140
+ end
141
+
142
+ def assert_filters_request(attribute)
143
+ filters = ["abc", :def, /private/, /^foo_.*$/]
144
+ original = { 'abc' => "123", 'def' => "456", 'ghi' => "789", 'nested' => { 'abc' => '100' },
145
+ 'something_with_abc' => 'match the entire string', 'private_param' => 'prra',
146
+ 'foo_param' => 'bar', 'not_foo_param' => 'baz', 'nested_foo' => { 'foo_nested' => 'bla'} }
147
+ filtered = { 'abc' => "[FILTERED]",
148
+ 'def' => "[FILTERED]",
149
+ 'something_with_abc' => "match the entire string",
150
+ 'ghi' => "789",
151
+ 'nested' => { 'abc' => '[FILTERED]' },
152
+ 'private_param' => '[FILTERED]',
153
+ 'foo_param' => '[FILTERED]',
154
+ 'not_foo_param' => 'baz',
155
+ 'nested_foo' => { 'foo_nested' => '[FILTERED]'}
156
+ }
157
+
158
+ payload = described_class.new({:request => {attribute => original}}, {:filters => filters})
159
+
160
+ expect(payload.request[attribute]).to eq filtered
161
+ end
162
+ end
@@ -1,11 +1,11 @@
1
1
  require 'spec_helper'
2
2
  require 'rack'
3
3
 
4
- describe Honeybadger::Rack do
4
+ describe Honeybadger::Rack::ErrorNotifier do
5
5
  it "calls the upstream app with the environment" do
6
6
  environment = { 'key' => 'value' }
7
7
  app = lambda { |env| ['response', {}, env] }
8
- stack = Honeybadger::Rack.new(app)
8
+ stack = Honeybadger::Rack::ErrorNotifier.new(app)
9
9
 
10
10
  response = stack.call(environment)
11
11
 
@@ -24,7 +24,7 @@ describe Honeybadger::Rack do
24
24
  Honeybadger.should_receive(:notify_or_ignore).with(exception, :rack_env => environment)
25
25
 
26
26
  begin
27
- stack = Honeybadger::Rack.new(app)
27
+ stack = Honeybadger::Rack::ErrorNotifier.new(app)
28
28
  stack.call(environment)
29
29
  rescue Exception => raised
30
30
  expect(raised).to eq exception
@@ -43,7 +43,7 @@ describe Honeybadger::Rack do
43
43
  env['rack.exception'] = exception
44
44
  response
45
45
  end
46
- stack = Honeybadger::Rack.new(app)
46
+ stack = Honeybadger::Rack::ErrorNotifier.new(app)
47
47
 
48
48
  Honeybadger.should_receive(:notify_or_ignore).with(exception, :rack_env => environment)
49
49
 
@@ -62,7 +62,7 @@ describe Honeybadger::Rack do
62
62
  env['sinatra.error'] = exception
63
63
  response
64
64
  end
65
- stack = Honeybadger::Rack.new(app)
65
+ stack = Honeybadger::Rack::ErrorNotifier.new(app)
66
66
 
67
67
  Honeybadger.should_receive(:notify_or_ignore).with(exception, :rack_env => environment)
68
68
 
@@ -76,7 +76,7 @@ describe Honeybadger::Rack do
76
76
  expect(Thread.current[:honeybadger_context]).to eq({ :foo => :bar })
77
77
 
78
78
  app = lambda { |env| ['response', {}, env] }
79
- stack = Honeybadger::Rack.new(app)
79
+ stack = Honeybadger::Rack::ErrorNotifier.new(app)
80
80
 
81
81
  stack.call({})
82
82
 
@@ -52,6 +52,8 @@ begin
52
52
  data.collect do |value|
53
53
  stringify_array_elements(value)
54
54
  end
55
+ elsif Honeybadger::Payload::OBJECT_WHITELIST.any? {|c| data.kind_of?(c) }
56
+ data
55
57
  else
56
58
  data.to_s
57
59
  end
@@ -1,7 +1,9 @@
1
1
  require 'spec_helper'
2
- require 'honeybadger/rails'
3
2
 
4
- describe Honeybadger::Rails do
3
+ # This test should be run only when Rails is not bundled
4
+ require 'honeybadger/rails' unless defined?(ActionController::Base)
5
+
6
+ describe 'Honeybadger::Rails', :unless => defined?(ActionController::Base) do
5
7
  include DefinesConstants
6
8
 
7
9
  it "triggers use of Rails' logger if logger isn't set and Rails' logger exists" do
@@ -1,14 +1,14 @@
1
1
  require 'spec_helper'
2
2
  require 'sham_rack'
3
3
 
4
- describe Honeybadger::UserFeedback do
4
+ describe Honeybadger::Rack::UserFeedback do
5
5
  let(:main_app) do
6
6
  lambda do |env|
7
7
  env['honeybadger.error_id'] = honeybadger_id if defined?(honeybadger_id)
8
8
  [200, {}, ["<!-- HONEYBADGER FEEDBACK -->"]]
9
9
  end
10
10
  end
11
- let(:informer_app) { Honeybadger::UserFeedback.new(main_app) }
11
+ let(:informer_app) { Honeybadger::Rack::UserFeedback.new(main_app) }
12
12
  let(:response) { Net::HTTP.get_response(URI.parse("http://example.com/")) }
13
13
 
14
14
  before do
@@ -1,13 +1,13 @@
1
1
  require 'spec_helper'
2
2
  require 'sham_rack'
3
3
 
4
- describe Honeybadger::UserInformer do
4
+ describe Honeybadger::Rack::UserInformer do
5
5
  it 'modifies output if there is a honeybadger id' do
6
6
  main_app = lambda do |env|
7
7
  env['honeybadger.error_id'] = 1
8
8
  [200, {}, ["<!-- HONEYBADGER ERROR -->"]]
9
9
  end
10
- informer_app = Honeybadger::UserInformer.new(main_app)
10
+ informer_app = Honeybadger::Rack::UserInformer.new(main_app)
11
11
 
12
12
  ShamRack.mount(informer_app, "example.com")
13
13
 
@@ -20,7 +20,7 @@ describe Honeybadger::UserInformer do
20
20
  main_app = lambda do |env|
21
21
  [200, {}, ["<!-- HONEYBADGER ERROR -->"]]
22
22
  end
23
- informer_app = Honeybadger::UserInformer.new(main_app)
23
+ informer_app = Honeybadger::Rack::UserInformer.new(main_app)
24
24
 
25
25
  ShamRack.mount(informer_app, "example.com")
26
26
 
metadata CHANGED
@@ -1,36 +1,32 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: honeybadger
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.13.2
5
- prerelease:
4
+ version: 1.14.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Joshua Wood
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2014-05-22 00:00:00.000000000 Z
11
+ date: 2014-05-28 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: json
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - '>='
28
25
  - !ruby/object:Gem::Version
29
26
  version: '0'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: cucumber
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
31
  - - ~>
36
32
  - !ruby/object:Gem::Version
@@ -38,7 +34,6 @@ dependencies:
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
38
  - - ~>
44
39
  - !ruby/object:Gem::Version
@@ -46,7 +41,6 @@ dependencies:
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: rspec
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
45
  - - ~>
52
46
  - !ruby/object:Gem::Version
@@ -54,7 +48,6 @@ dependencies:
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
52
  - - ~>
60
53
  - !ruby/object:Gem::Version
@@ -62,7 +55,6 @@ dependencies:
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: sham_rack
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
59
  - - ~>
68
60
  - !ruby/object:Gem::Version
@@ -70,7 +62,6 @@ dependencies:
70
62
  type: :development
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
66
  - - ~>
76
67
  - !ruby/object:Gem::Version
@@ -78,7 +69,6 @@ dependencies:
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: capistrano
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
73
  - - ~>
84
74
  - !ruby/object:Gem::Version
@@ -86,7 +76,6 @@ dependencies:
86
76
  type: :development
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
80
  - - ~>
92
81
  - !ruby/object:Gem::Version
@@ -94,7 +83,6 @@ dependencies:
94
83
  - !ruby/object:Gem::Dependency
95
84
  name: guard
96
85
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
86
  requirements:
99
87
  - - ~>
100
88
  - !ruby/object:Gem::Version
@@ -102,7 +90,6 @@ dependencies:
102
90
  type: :development
103
91
  prerelease: false
104
92
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
93
  requirements:
107
94
  - - ~>
108
95
  - !ruby/object:Gem::Version
@@ -110,129 +97,113 @@ dependencies:
110
97
  - !ruby/object:Gem::Dependency
111
98
  name: guard-rspec
112
99
  requirement: !ruby/object:Gem::Requirement
113
- none: false
114
100
  requirements:
115
- - - ! '>='
101
+ - - '>='
116
102
  - !ruby/object:Gem::Version
117
103
  version: '0'
118
104
  type: :development
119
105
  prerelease: false
120
106
  version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
107
  requirements:
123
- - - ! '>='
108
+ - - '>='
124
109
  - !ruby/object:Gem::Version
125
110
  version: '0'
126
111
  - !ruby/object:Gem::Dependency
127
112
  name: rake
128
113
  requirement: !ruby/object:Gem::Requirement
129
- none: false
130
114
  requirements:
131
- - - ! '>='
115
+ - - '>='
132
116
  - !ruby/object:Gem::Version
133
117
  version: '0'
134
118
  type: :development
135
119
  prerelease: false
136
120
  version_requirements: !ruby/object:Gem::Requirement
137
- none: false
138
121
  requirements:
139
- - - ! '>='
122
+ - - '>='
140
123
  - !ruby/object:Gem::Version
141
124
  version: '0'
142
125
  - !ruby/object:Gem::Dependency
143
126
  name: sinatra
144
127
  requirement: !ruby/object:Gem::Requirement
145
- none: false
146
128
  requirements:
147
- - - ! '>='
129
+ - - '>='
148
130
  - !ruby/object:Gem::Version
149
131
  version: '0'
150
132
  type: :development
151
133
  prerelease: false
152
134
  version_requirements: !ruby/object:Gem::Requirement
153
- none: false
154
135
  requirements:
155
- - - ! '>='
136
+ - - '>='
156
137
  - !ruby/object:Gem::Version
157
138
  version: '0'
158
139
  - !ruby/object:Gem::Dependency
159
140
  name: aruba
160
141
  requirement: !ruby/object:Gem::Requirement
161
- none: false
162
142
  requirements:
163
- - - ! '>='
143
+ - - '>='
164
144
  - !ruby/object:Gem::Version
165
145
  version: '0'
166
146
  type: :development
167
147
  prerelease: false
168
148
  version_requirements: !ruby/object:Gem::Requirement
169
- none: false
170
149
  requirements:
171
- - - ! '>='
150
+ - - '>='
172
151
  - !ruby/object:Gem::Version
173
152
  version: '0'
174
153
  - !ruby/object:Gem::Dependency
175
154
  name: appraisal
176
155
  requirement: !ruby/object:Gem::Requirement
177
- none: false
178
156
  requirements:
179
- - - ! '>='
157
+ - - '>='
180
158
  - !ruby/object:Gem::Version
181
159
  version: '0'
182
160
  type: :development
183
161
  prerelease: false
184
162
  version_requirements: !ruby/object:Gem::Requirement
185
- none: false
186
163
  requirements:
187
- - - ! '>='
164
+ - - '>='
188
165
  - !ruby/object:Gem::Version
189
166
  version: '0'
190
167
  - !ruby/object:Gem::Dependency
191
168
  name: fuubar
192
169
  requirement: !ruby/object:Gem::Requirement
193
- none: false
194
170
  requirements:
195
- - - ! '>='
171
+ - - '>='
196
172
  - !ruby/object:Gem::Version
197
173
  version: '0'
198
174
  type: :development
199
175
  prerelease: false
200
176
  version_requirements: !ruby/object:Gem::Requirement
201
- none: false
202
177
  requirements:
203
- - - ! '>='
178
+ - - '>='
204
179
  - !ruby/object:Gem::Version
205
180
  version: '0'
206
181
  - !ruby/object:Gem::Dependency
207
182
  name: growl
208
183
  requirement: !ruby/object:Gem::Requirement
209
- none: false
210
184
  requirements:
211
- - - ! '>='
185
+ - - '>='
212
186
  - !ruby/object:Gem::Version
213
187
  version: '0'
214
188
  type: :development
215
189
  prerelease: false
216
190
  version_requirements: !ruby/object:Gem::Requirement
217
- none: false
218
191
  requirements:
219
- - - ! '>='
192
+ - - '>='
220
193
  - !ruby/object:Gem::Version
221
194
  version: '0'
222
195
  - !ruby/object:Gem::Dependency
223
196
  name: webmock
224
197
  requirement: !ruby/object:Gem::Requirement
225
- none: false
226
198
  requirements:
227
- - - ! '>='
199
+ - - '>='
228
200
  - !ruby/object:Gem::Version
229
201
  version: '0'
230
202
  type: :development
231
203
  prerelease: false
232
204
  version_requirements: !ruby/object:Gem::Requirement
233
- none: false
234
205
  requirements:
235
- - - ! '>='
206
+ - - '>='
236
207
  - !ruby/object:Gem::Version
237
208
  version: '0'
238
209
  description: Make managing application errors a more pleasant experience.
@@ -257,33 +228,33 @@ files:
257
228
  - features/rails3.x.feature
258
229
  - features/rake.feature
259
230
  - features/sinatra.feature
231
+ - features/standalone.feature
260
232
  - features/step_definitions/metal_steps.rb
261
233
  - features/step_definitions/rack_steps.rb
262
234
  - features/step_definitions/rails_steps.rb
263
235
  - features/step_definitions/rake_steps.rb
236
+ - features/step_definitions/standalone_steps.rb
237
+ - features/step_definitions/thor_steps.rb
264
238
  - features/support/env.rb
265
239
  - features/support/honeybadger_failure_shim.rb.template
266
240
  - features/support/honeybadger_shim.rb.template
267
241
  - features/support/rails.rb
268
242
  - features/support/rake/Rakefile
243
+ - features/support/test.thor
244
+ - features/thor.feature
245
+ - gemfiles/binding_of_caller.gemfile
269
246
  - gemfiles/rack.gemfile
270
- - gemfiles/rack.gemfile.lock
247
+ - gemfiles/rails.gemfile
271
248
  - gemfiles/rails2.3.gemfile
272
- - gemfiles/rails2.3.gemfile.lock
273
249
  - gemfiles/rails3.0.gemfile
274
- - gemfiles/rails3.0.gemfile.lock
275
250
  - gemfiles/rails3.1.gemfile
276
- - gemfiles/rails3.1.gemfile.lock
277
251
  - gemfiles/rails3.2.gemfile
278
- - gemfiles/rails3.2.gemfile.lock
279
252
  - gemfiles/rails4.0.gemfile
280
- - gemfiles/rails4.0.gemfile.lock
281
253
  - gemfiles/rails4.1.gemfile
282
- - gemfiles/rails4.1.gemfile.lock
283
254
  - gemfiles/rake.gemfile
284
- - gemfiles/rake.gemfile.lock
285
255
  - gemfiles/sinatra.gemfile
286
- - gemfiles/sinatra.gemfile.lock
256
+ - gemfiles/standalone.gemfile
257
+ - gemfiles/thor.gemfile
287
258
  - generators/honeybadger/honeybadger_generator.rb
288
259
  - generators/honeybadger/lib/insert_commands.rb
289
260
  - generators/honeybadger/lib/rake_commands.rb
@@ -298,13 +269,23 @@ files:
298
269
  - lib/honeybadger/capistrano/legacy.rb
299
270
  - lib/honeybadger/capistrano/tasks.rake
300
271
  - lib/honeybadger/configuration.rb
272
+ - lib/honeybadger/dependency.rb
273
+ - lib/honeybadger/exception_extensions.rb
274
+ - lib/honeybadger/integrations.rb
275
+ - lib/honeybadger/integrations/delayed_job.rb
276
+ - lib/honeybadger/integrations/delayed_job/plugin.rb
301
277
  - lib/honeybadger/integrations/sidekiq.rb
278
+ - lib/honeybadger/integrations/thor.rb
302
279
  - lib/honeybadger/monitor.rb
303
280
  - lib/honeybadger/monitor/railtie.rb
304
281
  - lib/honeybadger/monitor/sender.rb
305
282
  - lib/honeybadger/monitor/worker.rb
306
283
  - lib/honeybadger/notice.rb
284
+ - lib/honeybadger/payload.rb
307
285
  - lib/honeybadger/rack.rb
286
+ - lib/honeybadger/rack/error_notifier.rb
287
+ - lib/honeybadger/rack/user_feedback.rb
288
+ - lib/honeybadger/rack/user_informer.rb
308
289
  - lib/honeybadger/rails.rb
309
290
  - lib/honeybadger/rails/action_controller_catcher.rb
310
291
  - lib/honeybadger/rails/controller_methods.rb
@@ -328,10 +309,16 @@ files:
328
309
  - spec/honeybadger/backtrace_spec.rb
329
310
  - spec/honeybadger/capistrano_spec.rb
330
311
  - spec/honeybadger/configuration_spec.rb
312
+ - spec/honeybadger/dependency_spec.rb
313
+ - spec/honeybadger/exception_extensions_spec.rb
314
+ - spec/honeybadger/integrations/delayed_job_spec.rb
315
+ - spec/honeybadger/integrations/sidekiq_spec.rb
316
+ - spec/honeybadger/integrations/thor_spec.rb
331
317
  - spec/honeybadger/logger_spec.rb
332
318
  - spec/honeybadger/monitor/worker_spec.rb
333
319
  - spec/honeybadger/notice_spec.rb
334
320
  - spec/honeybadger/notifier_spec.rb
321
+ - spec/honeybadger/payload_spec.rb
335
322
  - spec/honeybadger/rack_spec.rb
336
323
  - spec/honeybadger/rails/action_controller_spec.rb
337
324
  - spec/honeybadger/rails_spec.rb
@@ -348,6 +335,7 @@ files:
348
335
  - spec/support/helpers.rb
349
336
  homepage: http://www.honeybadger.io
350
337
  licenses: []
338
+ metadata: {}
351
339
  post_install_message:
352
340
  rdoc_options:
353
341
  - --charset=UTF-8
@@ -355,23 +343,18 @@ rdoc_options:
355
343
  require_paths:
356
344
  - lib
357
345
  required_ruby_version: !ruby/object:Gem::Requirement
358
- none: false
359
346
  requirements:
360
- - - ! '>='
347
+ - - '>='
361
348
  - !ruby/object:Gem::Version
362
349
  version: '0'
363
- segments:
364
- - 0
365
- hash: 2811727937091942835
366
350
  required_rubygems_version: !ruby/object:Gem::Requirement
367
- none: false
368
351
  requirements:
369
- - - ! '>='
352
+ - - '>='
370
353
  - !ruby/object:Gem::Version
371
354
  version: '0'
372
355
  requirements: []
373
356
  rubyforge_project:
374
- rubygems_version: 1.8.23
357
+ rubygems_version: 2.1.5
375
358
  signing_key:
376
359
  specification_version: 2
377
360
  summary: Error reports you can be happy about.