honeybadger 1.13.2 → 1.14.0
Sign up to get free protection for your applications and to get access to all the features.
- 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.
|