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.
- checksums.yaml +7 -0
- data/Appraisals +60 -45
- data/CHANGELOG.md +30 -1
- data/Gemfile.lock +1 -1
- data/MIT-LICENSE +2 -1
- data/Rakefile +8 -4
- data/features/standalone.feature +73 -0
- data/features/step_definitions/rack_steps.rb +1 -2
- data/features/step_definitions/standalone_steps.rb +12 -0
- data/features/step_definitions/thor_steps.rb +4 -0
- data/features/support/env.rb +2 -0
- data/features/support/test.thor +22 -0
- data/features/thor.feature +5 -0
- data/gemfiles/binding_of_caller.gemfile +8 -0
- data/gemfiles/rails.gemfile +11 -0
- data/gemfiles/rake.gemfile +1 -1
- data/gemfiles/standalone.gemfile +7 -0
- data/gemfiles/thor.gemfile +8 -0
- data/honeybadger.gemspec +27 -11
- data/lib/honeybadger.rb +15 -10
- data/lib/honeybadger/configuration.rb +9 -4
- data/lib/honeybadger/dependency.rb +65 -0
- data/lib/honeybadger/exception_extensions.rb +35 -0
- data/lib/honeybadger/integrations.rb +5 -0
- data/lib/honeybadger/integrations/delayed_job.rb +20 -0
- data/lib/honeybadger/integrations/delayed_job/plugin.rb +31 -0
- data/lib/honeybadger/integrations/sidekiq.rb +17 -9
- data/lib/honeybadger/integrations/thor.rb +29 -0
- data/lib/honeybadger/notice.rb +47 -99
- data/lib/honeybadger/payload.rb +101 -0
- data/lib/honeybadger/rack.rb +8 -54
- data/lib/honeybadger/rack/error_notifier.rb +60 -0
- data/lib/honeybadger/rack/user_feedback.rb +74 -0
- data/lib/honeybadger/rack/user_informer.rb +28 -0
- data/lib/honeybadger/rails.rb +5 -4
- data/lib/honeybadger/railtie.rb +4 -3
- data/lib/honeybadger/user_feedback.rb +3 -67
- data/lib/honeybadger/user_informer.rb +3 -21
- data/spec/honeybadger/configuration_spec.rb +5 -1
- data/spec/honeybadger/dependency_spec.rb +134 -0
- data/spec/honeybadger/exception_extensions_spec.rb +40 -0
- data/spec/honeybadger/integrations/delayed_job_spec.rb +48 -0
- data/spec/honeybadger/integrations/sidekiq_spec.rb +60 -0
- data/spec/honeybadger/integrations/thor_spec.rb +29 -0
- data/spec/honeybadger/notice_spec.rb +137 -127
- data/spec/honeybadger/payload_spec.rb +162 -0
- data/spec/honeybadger/rack_spec.rb +6 -6
- data/spec/honeybadger/rails/action_controller_spec.rb +2 -0
- data/spec/honeybadger/rails_spec.rb +4 -2
- data/spec/honeybadger/user_feedback_spec.rb +2 -2
- data/spec/honeybadger/user_informer_spec.rb +3 -3
- metadata +49 -66
- data/gemfiles/rack.gemfile.lock +0 -125
- data/gemfiles/rails2.3.gemfile.lock +0 -141
- data/gemfiles/rails3.0.gemfile.lock +0 -193
- data/gemfiles/rails3.1.gemfile.lock +0 -203
- data/gemfiles/rails3.2.gemfile.lock +0 -201
- data/gemfiles/rails4.0.gemfile.lock +0 -197
- data/gemfiles/rails4.1.gemfile.lock +0 -202
- data/gemfiles/rake.gemfile.lock +0 -124
- 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
|
|
@@ -1,7 +1,9 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
-
require 'honeybadger/rails'
|
3
2
|
|
4
|
-
|
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.
|
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-
|
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/
|
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/
|
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.
|
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.
|