crashlog 0.0.1 → 0.0.2
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/.gitignore +2 -1
- data/.rspec +1 -0
- data/.travis.yml +11 -0
- data/Gemfile +10 -0
- data/Gemfile.lock +161 -0
- data/INSTALL +22 -0
- data/README.md +14 -4
- data/Rakefile +13 -0
- data/crashlog.gemspec +12 -3
- data/generators/crashlog/templates/initializer.rb +6 -0
- data/install.rb +2 -0
- data/lib/crash_log/backtrace/line.rb +105 -0
- data/lib/crash_log/backtrace/line_cache.rb +23 -0
- data/lib/crash_log/backtrace.rb +66 -0
- data/lib/crash_log/configuration.bak.rb +199 -0
- data/lib/crash_log/configuration.rb +188 -0
- data/lib/crash_log/logging.rb +51 -0
- data/lib/crash_log/payload.rb +157 -0
- data/lib/crash_log/rack.rb +47 -0
- data/lib/crash_log/rails/action_controller_rescue.rb +32 -0
- data/lib/crash_log/rails/controller_methods.rb +45 -0
- data/lib/crash_log/rails/middleware/debug_exception_catcher.rb +43 -0
- data/lib/crash_log/rails.rb +32 -0
- data/lib/crash_log/railtie.rb +41 -0
- data/lib/crash_log/reporter.rb +105 -0
- data/lib/crash_log/system_information.rb +64 -0
- data/lib/crash_log/templates/payload.rabl +7 -0
- data/lib/crash_log/version.rb +1 -1
- data/lib/crash_log.rb +118 -0
- data/lib/faraday/request/hmac_authentication.rb +73 -0
- data/lib/rails/generators/crashlog/crashlog_generator.rb +42 -0
- data/rails/init.rb +1 -0
- data/spec/crash_log/backtrace_spec.rb +79 -0
- data/spec/crash_log/initializer_spec.rb +53 -0
- data/spec/crash_log/payload_spec.rb +124 -0
- data/spec/crash_log/reporter_spec.rb +179 -0
- data/spec/crash_log_spec.rb +153 -0
- data/spec/dummy/README.rdoc +261 -0
- data/spec/dummy/Rakefile +7 -0
- data/spec/dummy/app/assets/javascripts/application.js +13 -0
- data/spec/dummy/app/assets/stylesheets/application.css +13 -0
- data/spec/dummy/app/controllers/application_controller.rb +3 -0
- data/spec/dummy/app/controllers/break_controller.rb +10 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/mailers/.gitkeep +0 -0
- data/spec/dummy/app/models/.gitkeep +0 -0
- data/spec/dummy/app/views/layouts/application.html.erb +14 -0
- data/spec/dummy/config/application.rb +59 -0
- data/spec/dummy/config/boot.rb +10 -0
- data/spec/dummy/config/database.yml +44 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +37 -0
- data/spec/dummy/config/environments/production.rb +67 -0
- data/spec/dummy/config/environments/test.rb +37 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/crashlog.rb +6 -0
- data/spec/dummy/config/initializers/inflections.rb +15 -0
- data/spec/dummy/config/initializers/mime_types.rb +5 -0
- data/spec/dummy/config/initializers/secret_token.rb +7 -0
- data/spec/dummy/config/initializers/session_store.rb +8 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/routes.rb +6 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/lib/assets/.gitkeep +0 -0
- data/spec/dummy/log/.gitkeep +0 -0
- data/spec/dummy/public/404.html +26 -0
- data/spec/dummy/public/422.html +26 -0
- data/spec/dummy/public/500.html +25 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/script/rails +6 -0
- data/spec/requests/rack_spec.rb +29 -0
- data/spec/requests/rails_controller_rescue_spec.rb +46 -0
- data/spec/spec_helper.rb +23 -0
- data/spec/support/doing.rb +1 -0
- data/spec/support/dummy_app.rb +13 -0
- data/spec/support/hash_ext.rb +7 -0
- metadata +197 -7
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
# require 'crash_log/rails'
|
3
|
+
|
4
|
+
describe "Initializer" do
|
5
|
+
|
6
|
+
let(:logger) { stub("Logger") }
|
7
|
+
let(:other_logger) { stub("OtherLogger") }
|
8
|
+
|
9
|
+
# before(:all) do
|
10
|
+
# load_dummy_app
|
11
|
+
# end
|
12
|
+
|
13
|
+
describe 'auto configure logger' do
|
14
|
+
before do
|
15
|
+
load_dummy_app
|
16
|
+
# unless defined?(Rails)
|
17
|
+
# module Rails
|
18
|
+
# end
|
19
|
+
# end
|
20
|
+
Rails.stub(:logger).and_return(logger)
|
21
|
+
logger.stub(:error)
|
22
|
+
other_logger.stub(:error)
|
23
|
+
end
|
24
|
+
|
25
|
+
|
26
|
+
it 'detects presence of Rails logger' do
|
27
|
+
pending
|
28
|
+
# CrashLog::Rails.__send__(:initialize)
|
29
|
+
CrashLog.logger.should be(logger)
|
30
|
+
end
|
31
|
+
|
32
|
+
it "allows overriding of the logger if already assigned" do
|
33
|
+
pending
|
34
|
+
# unless defined?(::Rails)
|
35
|
+
# module Rails
|
36
|
+
# end
|
37
|
+
# end
|
38
|
+
|
39
|
+
Rails.stub(:logger).and_return(logger)
|
40
|
+
|
41
|
+
CrashLog.logger.should_not == logger
|
42
|
+
# CrashLog::Rails.initialize
|
43
|
+
CrashLog.logger.should == logger
|
44
|
+
|
45
|
+
CrashLog.configure do |config|
|
46
|
+
config.logger = other_logger
|
47
|
+
end
|
48
|
+
|
49
|
+
CrashLog.logger.should == other_logger
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
@@ -0,0 +1,124 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'json_spec'
|
3
|
+
|
4
|
+
describe CrashLog::Payload do
|
5
|
+
include JsonSpec
|
6
|
+
|
7
|
+
let(:configuration) do
|
8
|
+
stub('configuration').tap do |config|
|
9
|
+
config.stub(:[])
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
subject { CrashLog::Payload.build(raised_error, configuration) }
|
14
|
+
|
15
|
+
let(:raised_error) do
|
16
|
+
begin
|
17
|
+
raise RuntimeError, "This broke"
|
18
|
+
rescue RuntimeError => e
|
19
|
+
e
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe '#add_context' do
|
24
|
+
it 'user_data should be empty' do
|
25
|
+
subject.context.should be_empty
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'merges in new user data' do
|
29
|
+
data = {:email => "user@example.com"}
|
30
|
+
subject.add_context(data)
|
31
|
+
subject.context.should == data
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe '#add_session_data' do
|
36
|
+
it 'is empty by default' do
|
37
|
+
subject.environment[:session].should be_nil
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'allows merging in data' do
|
41
|
+
data = {:path => '/problematic/path'}
|
42
|
+
subject.add_session_data(data)
|
43
|
+
subject.environment[:session].should == data
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'allows adding more data' do
|
47
|
+
data_1 = {:path => '/problematic/path'}
|
48
|
+
data_2 = {:count => 42}
|
49
|
+
subject.add_session_data(data_1)
|
50
|
+
subject.add_session_data(data_2)
|
51
|
+
|
52
|
+
subject.environment[:session][:path].should == data_1[:path]
|
53
|
+
subject.environment[:session][:count].should == data_2[:count]
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
describe 'private.unwrap_exception' do
|
58
|
+
it 'unwraps exception objects' do
|
59
|
+
subject.__send__(:unwrap_exception, raised_error).should == raised_error
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
describe '#body' do
|
64
|
+
|
65
|
+
describe 'notifier' do
|
66
|
+
it 'has name' do
|
67
|
+
subject.body.to_json.should have_json_path('notifier/name')
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'has version' do
|
71
|
+
subject.body.to_json.should have_json_path('notifier/version')
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
describe 'exception' do
|
76
|
+
|
77
|
+
it 'has class_name' do
|
78
|
+
subject.body.to_json.should have_json_path('event/type')
|
79
|
+
end
|
80
|
+
|
81
|
+
it 'has message' do
|
82
|
+
subject.body.to_json.should have_json_path('event/message')
|
83
|
+
end
|
84
|
+
|
85
|
+
describe 'backtrace' do
|
86
|
+
it 'has line number' do
|
87
|
+
subject.body.to_json.should have_json_path('backtrace/0/number')
|
88
|
+
end
|
89
|
+
|
90
|
+
it 'has integer as line number' do
|
91
|
+
subject.body.to_json.should have_json_type(Integer).at_path('backtrace/0/number')
|
92
|
+
end
|
93
|
+
|
94
|
+
it 'has filename' do
|
95
|
+
subject.body.to_json.should have_json_path('backtrace/0/file')
|
96
|
+
end
|
97
|
+
|
98
|
+
it 'has method' do
|
99
|
+
subject.body.to_json.should have_json_path('backtrace/0/method')
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
it 'has backtrace' do
|
104
|
+
subject.body.to_json.should have_json_path('backtrace/0')
|
105
|
+
end
|
106
|
+
|
107
|
+
it 'has timestamp' do
|
108
|
+
subject.body.to_json.should have_json_path('event/timestamp')
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
describe 'session' do
|
113
|
+
|
114
|
+
end
|
115
|
+
|
116
|
+
describe 'user_data' do
|
117
|
+
it 'has first key provided by user' do
|
118
|
+
pending
|
119
|
+
# subject.add_user_data({:email => "user@example.com"})
|
120
|
+
# subject.body.to_json.should have_json_path('user_data/email')
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
@@ -0,0 +1,179 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe CrashLog::Reporter do
|
4
|
+
let(:uuid) { UUID.generate }
|
5
|
+
|
6
|
+
let(:config) {
|
7
|
+
CrashLog::Configuration.new.tap do |config|
|
8
|
+
config.project_id = 'PROJECT_ID'
|
9
|
+
config.api_key = 'API_KEY'
|
10
|
+
# config.adapter = test_adapter
|
11
|
+
config.scheme = 'http'
|
12
|
+
end
|
13
|
+
}
|
14
|
+
|
15
|
+
# let(:config) { stub("Configuration", {
|
16
|
+
# :host => "io.crashlog.io",
|
17
|
+
# :scheme => "https",
|
18
|
+
# :port => 443,
|
19
|
+
# :endpoint => '/notify',
|
20
|
+
# :announce => true,
|
21
|
+
# :announce_endpoint => '/announce',
|
22
|
+
# :dry_run => false,
|
23
|
+
# :api_key => 'API_TOKEN',
|
24
|
+
# :project_id => "PROJECT_ID",
|
25
|
+
# :http_read_timeout => 1,
|
26
|
+
# :http_open_timeout => 1
|
27
|
+
# }).tap do |config|
|
28
|
+
# config.stub(:adapter).and_return(:test, &test_adapter)
|
29
|
+
# end
|
30
|
+
# }
|
31
|
+
|
32
|
+
let(:test_adapter) {
|
33
|
+
lambda { |stub|
|
34
|
+
stub.post('/events') do |env|
|
35
|
+
[201, {}, env[:request_headers]]
|
36
|
+
end
|
37
|
+
}
|
38
|
+
}
|
39
|
+
|
40
|
+
subject { CrashLog::Reporter.new(config) }
|
41
|
+
|
42
|
+
let(:positive_response) do
|
43
|
+
{:result_url => "https://crashlog.io/collect/#{uuid}"}
|
44
|
+
end
|
45
|
+
|
46
|
+
let(:announce_response) do
|
47
|
+
{:application => "CrashLog Test"}
|
48
|
+
end
|
49
|
+
|
50
|
+
let(:positive_response_json) { positive_response.to_json }
|
51
|
+
let(:announce_json) { announce_response.to_json }
|
52
|
+
|
53
|
+
let(:payload) {
|
54
|
+
{}
|
55
|
+
}
|
56
|
+
|
57
|
+
before do
|
58
|
+
CrashLog.stub(:report_for_duty!)
|
59
|
+
end
|
60
|
+
|
61
|
+
it 'should not be doing a dry run' do
|
62
|
+
subject.should_not be_dry_run
|
63
|
+
end
|
64
|
+
|
65
|
+
describe '#notify' do
|
66
|
+
before do
|
67
|
+
test_connection = Faraday.new(:url => subject.url) do |builder|
|
68
|
+
builder.adapter :test, stubs
|
69
|
+
builder.request :hmac_authentication, 'PROJECT_ID', 'SECRET', {:service_id => 'CrashLog'}
|
70
|
+
builder.request :url_encoded
|
71
|
+
end
|
72
|
+
|
73
|
+
subject.stub(:connection).and_return(test_connection)
|
74
|
+
end
|
75
|
+
|
76
|
+
let!(:stubs) do
|
77
|
+
Faraday::Adapter::Test::Stubs.new do |stub|
|
78
|
+
stub.post('/events') { [200, {}, positive_response_json] }
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
after do
|
83
|
+
#stubs.verify_stubbed_calls
|
84
|
+
end
|
85
|
+
|
86
|
+
it 'makes a post request' do
|
87
|
+
subject.send(:connection).should_receive(:post).once
|
88
|
+
subject.notify(payload)
|
89
|
+
end
|
90
|
+
|
91
|
+
it 'authenticates request with HMAC' do
|
92
|
+
subject.notify(payload).should be_true
|
93
|
+
subject.response.env[:request_headers]['Authorization'].should ==
|
94
|
+
CrashLog::AuthHMAC.new({}, {:service_id => 'CrashLog'}).authorization(subject.response.env, 'PROJECT_ID', 'SECRET')
|
95
|
+
stubs.verify_stubbed_calls
|
96
|
+
end
|
97
|
+
|
98
|
+
it 'sends a serialized payload to crashlog.io' do
|
99
|
+
subject.notify(payload).should be_true
|
100
|
+
|
101
|
+
stubs.verify_stubbed_calls
|
102
|
+
end
|
103
|
+
|
104
|
+
it 'captures result body' do
|
105
|
+
subject.notify(payload).should be_true
|
106
|
+
subject.result.should == positive_response
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
describe '#announce' do
|
111
|
+
let!(:stubs) do
|
112
|
+
Faraday::Adapter::Test::Stubs.new do |stub|
|
113
|
+
stub.post('/announce') { [201, {}, announce_json] }
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
before do
|
118
|
+
test_connection = Faraday.new(:url => subject.url) do |builder|
|
119
|
+
builder.adapter :test, stubs
|
120
|
+
end
|
121
|
+
|
122
|
+
subject.stub(:connection).and_return(test_connection)
|
123
|
+
end
|
124
|
+
|
125
|
+
it 'sends an identification payload to CrashLog'
|
126
|
+
|
127
|
+
it 'responds with an application name' do
|
128
|
+
subject.announce.should === 'CrashLog Test'
|
129
|
+
stubs.verify_stubbed_calls
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
describe 'url' do
|
134
|
+
it 'constructs url from configuration' do
|
135
|
+
subject.url.to_s.should == 'http://stdin.crashlog.io'
|
136
|
+
end
|
137
|
+
|
138
|
+
it 'sends HMACAuth header'
|
139
|
+
|
140
|
+
# # config.stub(:adapter).and_return(:test, &test_adapter)
|
141
|
+
|
142
|
+
# # .and_return(:test).and_yield do |stub|
|
143
|
+
# # stub.post('/notify') do |env|
|
144
|
+
# # [200, {}, env[:request_headers]]
|
145
|
+
# # end
|
146
|
+
# # end
|
147
|
+
|
148
|
+
# # test_connection = Faraday.new(:url => subject.url) do |faraday|
|
149
|
+
# # faraday.adapter :test do |stub|
|
150
|
+
# # stub.post('/notify') do |env|
|
151
|
+
# # [200, {}, env[:request_headers]]
|
152
|
+
# # end
|
153
|
+
# # end
|
154
|
+
# # end
|
155
|
+
|
156
|
+
# # #faraday.request :url_encoded
|
157
|
+
# # faraday.request :token_auth, "config.api_key"
|
158
|
+
# # #faraday.response :logger
|
159
|
+
# # # faraday.token_auth config.api_key
|
160
|
+
# # faraday.options[:timeout] = 1
|
161
|
+
# # faraday.options[:open_timeout] = 1
|
162
|
+
# # faraday.ssl[:verify] = false
|
163
|
+
# # end
|
164
|
+
|
165
|
+
# # subject.stub(:connection).and_return(test_connection)
|
166
|
+
# # subject.connection.adapter(:test) do |stub|
|
167
|
+
# # stub.post('/notify') do |env|
|
168
|
+
# # [200, {}, env[:request_headers]]
|
169
|
+
# # end
|
170
|
+
# # end
|
171
|
+
|
172
|
+
# subject.notify(payload).should be_true
|
173
|
+
|
174
|
+
# subject.response.should == 'Token token=""'
|
175
|
+
|
176
|
+
# stubs.verify_stubbed_calls
|
177
|
+
# end
|
178
|
+
end
|
179
|
+
end
|
@@ -0,0 +1,153 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe CrashLog do
|
4
|
+
def set_public_env
|
5
|
+
CrashLog.configure { |config| config.stage = 'production' }
|
6
|
+
end
|
7
|
+
|
8
|
+
def set_development_env
|
9
|
+
CrashLog.configure { |config| config.stage = 'development' }
|
10
|
+
end
|
11
|
+
|
12
|
+
let(:raised_error) do
|
13
|
+
begin
|
14
|
+
raise RuntimeError, "This broke"
|
15
|
+
rescue RuntimeError => e
|
16
|
+
e
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
after do
|
21
|
+
CrashLog.instance_variable_set("@configuration", nil)
|
22
|
+
end
|
23
|
+
|
24
|
+
let(:user) do
|
25
|
+
stub('User', :email => 'user@example.com')
|
26
|
+
end
|
27
|
+
|
28
|
+
describe '.notify' do
|
29
|
+
it 'does not send if not live' do
|
30
|
+
CrashLog::Reporter.any_instance.should_receive(:notify).never
|
31
|
+
|
32
|
+
CrashLog.stub(:live?).and_return(false)
|
33
|
+
CrashLog.notify(raised_error)
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'handles being passed an exception object' do
|
37
|
+
CrashLog::Reporter.any_instance.should_receive(:notify).once
|
38
|
+
|
39
|
+
CrashLog.stub(:live?).and_return(true)
|
40
|
+
CrashLog.notify(raised_error)
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'handles being passed an exception object and context' do
|
44
|
+
payload = {}
|
45
|
+
|
46
|
+
CrashLog::Reporter.any_instance.stub(:notify)
|
47
|
+
#should_receive(:notify).with(payload).once
|
48
|
+
CrashLog.stub(:live?).and_return(true)
|
49
|
+
|
50
|
+
context = {:current_user => user}
|
51
|
+
CrashLog.notify(raised_error, context)
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'handles being passed a hash'
|
55
|
+
it 'handles being passed a string'
|
56
|
+
end
|
57
|
+
|
58
|
+
describe '.logger' do
|
59
|
+
it 'detects Rails.logger'
|
60
|
+
it 'defaults to STDOUT'
|
61
|
+
end
|
62
|
+
|
63
|
+
describe '.configuration' do
|
64
|
+
after do
|
65
|
+
CrashLog.instance_variable_set("@configuration", nil)
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'handles being configured with a block' do
|
69
|
+
logger = stub("Logger")
|
70
|
+
logger.stub(:error)
|
71
|
+
|
72
|
+
CrashLog.configuration.logger.should be_nil
|
73
|
+
CrashLog.configure do |config|
|
74
|
+
config.logger = logger
|
75
|
+
end
|
76
|
+
CrashLog.configuration.logger.should == logger
|
77
|
+
end
|
78
|
+
|
79
|
+
it 'handles directly configuring attributes' do
|
80
|
+
logger = stub("Logger")
|
81
|
+
CrashLog.configuration.logger.should be_nil
|
82
|
+
CrashLog.configuration.logger = logger
|
83
|
+
CrashLog.configuration.logger.should == logger
|
84
|
+
end
|
85
|
+
|
86
|
+
it 'accepts api_key' do
|
87
|
+
key = stub("THIS IS AN API KEY")
|
88
|
+
CrashLog.configuration.api_key.should be_nil
|
89
|
+
CrashLog.configuration.api_key = key
|
90
|
+
CrashLog.configuration.api_key.should == key
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
describe '.ready' do
|
95
|
+
it 'logs an ready message' do
|
96
|
+
CrashLog::Reporter.any_instance.stub(:announce).and_return("Test Application")
|
97
|
+
logger = stub('Logger')
|
98
|
+
logger.should_receive(:info).
|
99
|
+
with("** [CrashLog] Initialized and ready to handle exceptions for Test Application")
|
100
|
+
|
101
|
+
CrashLog.stub(:logger).and_return(logger)
|
102
|
+
CrashLog.report_for_duty!
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
describe '.live?' do
|
107
|
+
it 'is live if current stage is included in release stages' do
|
108
|
+
CrashLog.configure do |c|
|
109
|
+
c.release_stages = ['test']
|
110
|
+
c.stage = 'test'
|
111
|
+
end
|
112
|
+
|
113
|
+
CrashLog.should be_live
|
114
|
+
end
|
115
|
+
|
116
|
+
it 'is not live if current stage is not included in release stages' do
|
117
|
+
CrashLog.configure do |c|
|
118
|
+
c.release_stages = ['production']
|
119
|
+
c.stage = 'test'
|
120
|
+
end
|
121
|
+
|
122
|
+
CrashLog.should_not be_live
|
123
|
+
end
|
124
|
+
|
125
|
+
it 'handles irregular stage names' do
|
126
|
+
CrashLog.configure do |c|
|
127
|
+
c.release_stages = ['test']
|
128
|
+
c.stage = 'Test'
|
129
|
+
end
|
130
|
+
|
131
|
+
CrashLog.configuration.stage.should === 'test'
|
132
|
+
CrashLog.should be_live
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
describe '#ignored?' do
|
137
|
+
it 'returns true if current exception is on ignored list' do
|
138
|
+
CrashLog.ignored?(RuntimeError.new).should be_false
|
139
|
+
end
|
140
|
+
|
141
|
+
it 'ignores ActiveRecord::RecordNotFound' do
|
142
|
+
# load_dummy_app
|
143
|
+
unless defined?(ActiveRecord)
|
144
|
+
module ActiveRecord
|
145
|
+
class RecordNotFound < RuntimeError
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
CrashLog.ignored?(ActiveRecord::RecordNotFound).should be_true
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|