airbrake 5.6.1 → 5.7.0.rc.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (34) hide show
  1. checksums.yaml +4 -4
  2. data/lib/airbrake.rb +26 -2
  3. data/lib/airbrake/delayed_job/plugin.rb +6 -5
  4. data/lib/airbrake/rack/context_filter.rb +52 -0
  5. data/lib/airbrake/rack/http_headers_filter.rb +38 -0
  6. data/lib/airbrake/rack/http_params_filter.rb +20 -0
  7. data/lib/airbrake/rack/middleware.rb +30 -1
  8. data/lib/airbrake/rack/request_body_filter.rb +30 -0
  9. data/lib/airbrake/rack/session_filter.rb +18 -0
  10. data/lib/airbrake/rack/user.rb +5 -3
  11. data/lib/airbrake/rails/action_controller.rb +10 -8
  12. data/lib/airbrake/resque/failure.rb +4 -5
  13. data/lib/airbrake/sidekiq/error_handler.rb +5 -2
  14. data/lib/airbrake/version.rb +1 -1
  15. data/lib/generators/airbrake_initializer.rb.erb +2 -4
  16. data/spec/apps/rails/dummy_app.rb +1 -2
  17. data/spec/apps/rails/logs/32.log +639 -0
  18. data/spec/apps/rails/logs/40.log +1 -0
  19. data/spec/apps/rails/logs/41.log +1 -0
  20. data/spec/apps/rails/logs/42.log +1000 -0
  21. data/spec/apps/rails/logs/50.log +10 -465
  22. data/spec/integration/rails/rails_spec.rb +15 -14
  23. data/spec/spec_helper.rb +17 -18
  24. data/spec/unit/airbrake_spec.rb +65 -0
  25. data/spec/unit/rack/context_filter_spec.rb +70 -0
  26. data/spec/unit/rack/http_headers_filter_spec.rb +48 -0
  27. data/spec/unit/rack/http_params_filter_spec.rb +56 -0
  28. data/spec/unit/rack/request_body_filter_spec.rb +48 -0
  29. data/spec/unit/rack/session_filter_spec.rb +48 -0
  30. metadata +63 -17
  31. data/lib/airbrake/rack/notice_builder.rb +0 -127
  32. data/spec/airbrake_spec.rb +0 -17
  33. data/spec/apps/rails/logs/51.log +0 -1405
  34. data/spec/unit/rack/notice_builder_spec.rb +0 -157
@@ -179,29 +179,30 @@ RSpec.describe "Rails integration specs" do
179
179
  end
180
180
  end
181
181
 
182
- # Delayed Job doesn't support Ruby 1.9.2
183
- if Gem::Version.new(RUBY_VERSION) > Gem::Version.new('1.9.2')
184
- describe "DelayedJob jobs" do
185
- it "reports exceptions occurring in DelayedJob jobs" do
186
- get '/delayed_job'
187
- sleep 2
182
+ describe "DelayedJob jobs" do
183
+ it "reports exceptions occurring in DelayedJob jobs" do
184
+ get '/delayed_job'
185
+ sleep 2
188
186
 
189
- wait_for_a_request_with_body(
190
- %r("message":"delayed_job\serror".*"params":{.*
187
+ wait_for_a_request_with_body(
188
+ %r("message":"delayed_job\serror".*"params":{.*
191
189
  "handler":"---\s!ruby/struct:BangoJob\\nbingo:\s
192
190
  bingo\\nbongo:\sbongo\\n".*})x
193
- )
191
+ )
194
192
 
195
- # Two requests are performed during this example. We care only about one.
196
- # Sleep guarantees that we let the unimportant request occur here and not
197
- # elsewhere.
198
- sleep 2
199
- end
193
+ # Two requests are performed during this example. We care only about one.
194
+ # Sleep guarantees that we let the unimportant request occur here and not
195
+ # elsewhere.
196
+ sleep 2
200
197
  end
201
198
  end
202
199
 
203
200
  describe "notice payload when a user is authenticated without Warden" do
204
201
  context "when the current_user method is defined" do
202
+ before do
203
+ allow(Warden::Proxy).to receive(:new) { nil }
204
+ end
205
+
205
206
  it "contains the user information" do
206
207
  user = OpenStruct.new(id: 1, email: 'qa@example.com', username: 'qa-dept')
207
208
  allow_any_instance_of(DummyController).to receive(:current_user) { user }
@@ -2,7 +2,6 @@
2
2
  require 'webmock'
3
3
  require 'webmock/rspec'
4
4
  require 'rspec/wait'
5
- require 'pry'
6
5
  require 'rack'
7
6
  require 'rack/test'
8
7
  require 'rake'
@@ -10,6 +9,23 @@ require 'rake'
10
9
  require 'airbrake'
11
10
  require 'airbrake/rake/tasks'
12
11
 
12
+ Airbrake.configure do |c|
13
+ c.project_id = 113743
14
+ c.project_key = 'fd04e13d806a90f96614ad8e529b2822'
15
+ c.logger = Logger.new('/dev/null')
16
+ c.app_version = '1.2.3'
17
+ c.workers = 5
18
+ end
19
+
20
+ RSpec.configure do |c|
21
+ c.order = 'random'
22
+ c.color = true
23
+ c.disable_monkey_patching!
24
+ c.wait_timeout = 3
25
+
26
+ c.include Rack::Test::Methods
27
+ end
28
+
13
29
  # Load integration tests only when they're run through appraisals.
14
30
  if ENV['APPRAISAL_INITIALIZED']
15
31
  # Gems from appraisals that every application uses.
@@ -75,23 +91,6 @@ if ENV['APPRAISAL_INITIALIZED']
75
91
  end
76
92
  end
77
93
 
78
- RSpec.configure do |c|
79
- c.order = 'random'
80
- c.color = true
81
- c.disable_monkey_patching!
82
- c.wait_timeout = 3
83
-
84
- c.include Rack::Test::Methods
85
- end
86
-
87
- Airbrake.configure do |c|
88
- c.project_id = 113743
89
- c.project_key = 'fd04e13d806a90f96614ad8e529b2822'
90
- c.logger = Logger.new('/dev/null')
91
- c.app_version = '1.2.3'
92
- c.workers = 5
93
- end
94
-
95
94
  # Make sure tests that use async requests fail.
96
95
  Thread.abort_on_exception = true
97
96
 
@@ -0,0 +1,65 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Airbrake do
4
+ let(:endpoint) do
5
+ 'https://airbrake.io/api/v3/projects/113743/notices?key=fd04e13d806a90f96614ad8e529b2822'
6
+ end
7
+
8
+ def env_for(url, opts = {})
9
+ Rack::MockRequest.env_for(url, opts)
10
+ end
11
+
12
+ before do
13
+ stub_request(:post, endpoint).to_return(status: 201, body: '{}')
14
+ end
15
+
16
+ describe ".add_rack_builder" do
17
+ let(:filters) do
18
+ notifier = Airbrake.instance_variable_get(:@notifiers)[:default]
19
+ filter_chain = notifier.instance_variable_get(:@filter_chain)
20
+ filter_chain.instance_variable_get(:@filters)
21
+ end
22
+
23
+ after { filters.pop }
24
+
25
+ it "adds new builder to the filter chain" do
26
+ expect do
27
+ Airbrake.add_rack_builder(&proc { |_, _| nil })
28
+ end.to change { filters.count }.by(1)
29
+ end
30
+
31
+ context "when notice has :rack_request in stash" do
32
+ it "executes the filter yielding 2 params (last one is request)" do
33
+ executed = false
34
+ builder = proc do |notice, request|
35
+ executed = true
36
+ expect(notice).to be_an(Airbrake::Notice)
37
+ expect(request).to be_a(Rack::Request)
38
+ end
39
+ Airbrake.add_rack_builder(&builder)
40
+
41
+ notice = Airbrake.build_notice('oops')
42
+ notice.stash[:rack_request] = Rack::Request.new(env_for('/'))
43
+ Airbrake.notify_sync(notice)
44
+
45
+ expect(executed).to be_truthy
46
+ end
47
+ end
48
+
49
+ context "when notice doesn't have :rack_request in stash" do
50
+ it "executes the filter yielding only one param" do
51
+ executed = false
52
+ builder = proc do |notice, request|
53
+ executed = true
54
+ expect(notice).to be_an(Airbrake::Notice)
55
+ expect(request).to be_nil
56
+ end
57
+ Airbrake.add_rack_builder(&builder)
58
+
59
+ Airbrake.notify_sync('oops')
60
+
61
+ expect(executed).to be_truthy
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,70 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Airbrake::Rack::ContextFilter do
4
+ def env_for(url, opts = {})
5
+ Rack::MockRequest.env_for(url, opts)
6
+ end
7
+
8
+ subject { described_class.new }
9
+
10
+ let(:notice) do
11
+ Airbrake.build_notice('oops').tap do |notice|
12
+ notice.stash[:rack_request] = Rack::Request.new(env_for(uri, opts))
13
+ end
14
+ end
15
+
16
+ let(:uri) { '/' }
17
+ let(:opts) { Hash.new }
18
+
19
+ it "adds framework version to the context" do
20
+ subject.call(notice)
21
+ expect(notice[:context][:version]).
22
+ to match(/\d.\d.\d Rack\.version.+Rack\.release/)
23
+ end
24
+
25
+ context "when URL is present" do
26
+ let(:uri) { '/bingo' }
27
+ let(:opts) { Hash.new }
28
+
29
+ it "adds URL to the context" do
30
+ subject.call(notice)
31
+ expect(notice[:context][:url]).to eq('http://example.org/bingo')
32
+ end
33
+ end
34
+
35
+ context "when User-Agent is present" do
36
+ let(:uri) { '/' }
37
+ let(:opts) do
38
+ { 'HTTP_USER_AGENT' => 'Bingo Agent' }
39
+ end
40
+
41
+ it "adds User-Agent to the context" do
42
+ subject.call(notice)
43
+ expect(notice[:context][:userAgent]).to eq('Bingo Agent')
44
+ end
45
+ end
46
+
47
+ context "when controller is present" do
48
+ let(:controller) do
49
+ double.tap do |ctrl|
50
+ allow(ctrl).to receive(:controller_name).and_return('BingoController')
51
+ allow(ctrl).to receive(:action_name).and_return('bango_name')
52
+ end
53
+ end
54
+
55
+ let(:uri) { '/' }
56
+ let(:opts) do
57
+ { 'action_controller.instance' => controller }
58
+ end
59
+
60
+ it "adds controller name as component" do
61
+ subject.call(notice)
62
+ expect(notice[:context][:component]).to eq('BingoController')
63
+ end
64
+
65
+ it "adds action name as action" do
66
+ subject.call(notice)
67
+ expect(notice[:context][:action]).to eq('bango_name')
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,48 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Airbrake::Rack::HttpHeadersFilter do
4
+ def env_for(url, opts = {})
5
+ Rack::MockRequest.env_for(url, opts)
6
+ end
7
+
8
+ subject { described_class.new }
9
+
10
+ let(:notice) do
11
+ Airbrake.build_notice('oops').tap do |notice|
12
+ notice.stash[:rack_request] = Rack::Request.new(env_for(uri, opts))
13
+ end
14
+ end
15
+
16
+ let(:headers) do
17
+ {
18
+ 'HTTP_HOST' => 'example.com',
19
+ 'CONTENT_TYPE' => 'text/html',
20
+ 'CONTENT_LENGTH' => 100500
21
+ }
22
+ end
23
+
24
+ let(:uri) { '/' }
25
+ let(:opts) { headers.dup }
26
+
27
+ it "preserves data that already has been added to the environment" do
28
+ notice[:environment]['SOME_KEY'] = 'SOME_VALUE'
29
+ subject.call(notice)
30
+ expect(notice[:environment]['SOME_KEY']).to eq('SOME_VALUE')
31
+ end
32
+
33
+ context "when CONTENT_TYPE, CONTENT_LENGTH and HTTP_* headers are present" do
34
+ it "adds them to the environment hash" do
35
+ subject.call(notice)
36
+ expect(notice[:environment][:headers]).to eq(headers)
37
+ end
38
+ end
39
+
40
+ context "when unexpected headers are present" do
41
+ let(:opts) { headers.dup.merge('X-SOME-HEADER' => 'value') }
42
+
43
+ it "adds them to the environment hash" do
44
+ subject.call(notice)
45
+ expect(notice[:environment][:headers]).to eq(headers)
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,56 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Airbrake::Rack::HttpParamsFilter do
4
+ def env_for(url, opts = {})
5
+ Rack::MockRequest.env_for(url, opts)
6
+ end
7
+
8
+ subject { described_class.new }
9
+
10
+ let(:notice) do
11
+ Airbrake.build_notice('oops').tap do |notice|
12
+ notice.stash[:rack_request] = Rack::Request.new(env_for(uri, opts))
13
+ end
14
+ end
15
+
16
+ context "when rack params is nil" do
17
+ let(:uri) { '/' }
18
+ let(:opts) { Hash.new }
19
+
20
+ it "doesn't overwrite the params key with nil" do
21
+ subject.call(notice)
22
+ expect(notice[:params]).to eq({})
23
+ end
24
+ end
25
+
26
+ context "when form params are present" do
27
+ let(:params) do
28
+ { a: 1, b: 2 }
29
+ end
30
+
31
+ let(:input) { StringIO.new }
32
+ let(:uri) { '/' }
33
+ let(:opts) do
34
+ {
35
+ 'rack.request.form_hash' => params,
36
+ 'rack.request.form_input' => input,
37
+ 'rack.input' => input
38
+ }
39
+ end
40
+
41
+ it "sets the params hash" do
42
+ subject.call(notice)
43
+ expect(notice[:params]).to eq(params)
44
+ end
45
+ end
46
+
47
+ context "when query string params are present" do
48
+ let(:uri) { '/?bingo=bango&bongo=bish' }
49
+ let(:opts) { Hash.new }
50
+
51
+ it "sets the params hash" do
52
+ subject.call(notice)
53
+ expect(notice[:params]).to eq('bingo' => 'bango', 'bongo' => 'bish')
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,48 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Airbrake::Rack::RequestBodyFilter do
4
+ def env_for(url, opts = {})
5
+ Rack::MockRequest.env_for(url, opts)
6
+ end
7
+
8
+ subject { described_class.new }
9
+
10
+ let(:notice) do
11
+ Airbrake.build_notice('oops').tap do |notice|
12
+ notice.stash[:rack_request] = Rack::Request.new(env_for(uri, opts))
13
+ end
14
+ end
15
+
16
+ let(:uri) { '/' }
17
+ let(:opts) do
18
+ { 'rack.input' => body }
19
+ end
20
+
21
+ context "when a request has a body" do
22
+ let(:body) { StringIO.new('<bingo>bongo</bango>') }
23
+
24
+ it "reads the body" do
25
+ subject.call(notice)
26
+ expect(notice[:environment][:body]).to eq(body.string)
27
+ end
28
+ end
29
+
30
+ context "when body was read" do
31
+ let(:body) { StringIO.new('<bingo>bongo</bango>' * 512) }
32
+
33
+ it "rewinds rack.input" do
34
+ subject.call(notice)
35
+ expect(body.pos).to be_zero
36
+ end
37
+ end
38
+
39
+ context "when body is bigger than the limit" do
40
+ let(:len) { 4097 }
41
+ let(:body) { StringIO.new('a' * len) }
42
+
43
+ it "reads only first 4096 bytes" do
44
+ subject.call(notice)
45
+ expect(notice[:environment][:body]).to eq(body.string[0...len - 1])
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,48 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Airbrake::Rack::SessionFilter do
4
+ def env_for(url, opts = {})
5
+ Rack::MockRequest.env_for(url, opts)
6
+ end
7
+
8
+ subject { described_class.new }
9
+
10
+ let(:notice) do
11
+ Airbrake.build_notice('oops').tap do |notice|
12
+ notice.stash[:rack_request] = Rack::Request.new(env_for(uri, opts))
13
+ end
14
+ end
15
+
16
+ context "when rack session is nil" do
17
+ let(:uri) { '/' }
18
+
19
+ let(:opts) do
20
+ { 'rack.session' => nil }
21
+ end
22
+
23
+ it "doesn't overwrite the session key with nil" do
24
+ expect(notice[:session]).to eq({})
25
+
26
+ subject.call(notice)
27
+
28
+ expect(notice[:session]).to eq({})
29
+ end
30
+ end
31
+
32
+ context "when session is present" do
33
+ let(:session) do
34
+ { a: 1, b: 2 }
35
+ end
36
+
37
+ let(:uri) { '/' }
38
+
39
+ let(:opts) do
40
+ { 'rack.session' => session }
41
+ end
42
+
43
+ it "sets session if it is present" do
44
+ subject.call(notice)
45
+ expect(notice[:session]).to eq(session)
46
+ end
47
+ end
48
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: airbrake
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.6.1
4
+ version: 5.7.0.rc.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Airbrake Technologies, Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-10-24 00:00:00.000000000 Z
11
+ date: 2017-01-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: airbrake-ruby
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.6'
19
+ version: '1.7'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.6'
26
+ version: '1.7'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rspec
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -58,14 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '10'
61
+ version: '12'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '10'
68
+ version: '12'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: pry
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -122,6 +122,20 @@ dependencies:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
124
  version: '2'
125
+ - !ruby/object:Gem::Dependency
126
+ name: nokogiri
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - '='
130
+ - !ruby/object:Gem::Version
131
+ version: 1.6.8.1
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - '='
137
+ - !ruby/object:Gem::Version
138
+ version: 1.6.8.1
125
139
  - !ruby/object:Gem::Dependency
126
140
  name: rack-test
127
141
  requirement: !ruby/object:Gem::Requirement
@@ -150,6 +164,20 @@ dependencies:
150
164
  - - "~>"
151
165
  - !ruby/object:Gem::Version
152
166
  version: '4'
167
+ - !ruby/object:Gem::Dependency
168
+ name: rubocop
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - "~>"
172
+ - !ruby/object:Gem::Version
173
+ version: '0.47'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - "~>"
179
+ - !ruby/object:Gem::Version
180
+ version: '0.47'
153
181
  description: |
154
182
  Airbrake is an online tool that provides robust exception tracking in any of
155
183
  your Ruby applications. In doing so, it allows you to easily review errors, tie
@@ -169,8 +197,12 @@ files:
169
197
  - lib/airbrake.rb
170
198
  - lib/airbrake/capistrano/tasks.rb
171
199
  - lib/airbrake/delayed_job/plugin.rb
200
+ - lib/airbrake/rack/context_filter.rb
201
+ - lib/airbrake/rack/http_headers_filter.rb
202
+ - lib/airbrake/rack/http_params_filter.rb
172
203
  - lib/airbrake/rack/middleware.rb
173
- - lib/airbrake/rack/notice_builder.rb
204
+ - lib/airbrake/rack/request_body_filter.rb
205
+ - lib/airbrake/rack/session_filter.rb
174
206
  - lib/airbrake/rack/user.rb
175
207
  - lib/airbrake/rails/action_controller.rb
176
208
  - lib/airbrake/rails/active_job.rb
@@ -183,12 +215,14 @@ files:
183
215
  - lib/airbrake/version.rb
184
216
  - lib/generators/airbrake_generator.rb
185
217
  - lib/generators/airbrake_initializer.rb.erb
186
- - spec/airbrake_spec.rb
187
218
  - spec/apps/rack/dummy_app.rb
188
219
  - spec/apps/rails/dummy_app.rb
189
220
  - spec/apps/rails/dummy_task.rake
221
+ - spec/apps/rails/logs/32.log
222
+ - spec/apps/rails/logs/40.log
223
+ - spec/apps/rails/logs/41.log
224
+ - spec/apps/rails/logs/42.log
190
225
  - spec/apps/rails/logs/50.log
191
- - spec/apps/rails/logs/51.log
192
226
  - spec/apps/sinatra/composite_app/sinatra_app1.rb
193
227
  - spec/apps/sinatra/composite_app/sinatra_app2.rb
194
228
  - spec/apps/sinatra/dummy_app.rb
@@ -198,8 +232,13 @@ files:
198
232
  - spec/integration/shared_examples/rack_examples.rb
199
233
  - spec/integration/sinatra/sinatra_spec.rb
200
234
  - spec/spec_helper.rb
235
+ - spec/unit/airbrake_spec.rb
236
+ - spec/unit/rack/context_filter_spec.rb
237
+ - spec/unit/rack/http_headers_filter_spec.rb
238
+ - spec/unit/rack/http_params_filter_spec.rb
201
239
  - spec/unit/rack/middleware_spec.rb
202
- - spec/unit/rack/notice_builder_spec.rb
240
+ - spec/unit/rack/request_body_filter_spec.rb
241
+ - spec/unit/rack/session_filter_spec.rb
203
242
  - spec/unit/rack/user_spec.rb
204
243
  - spec/unit/rake/tasks_spec.rb
205
244
  - spec/unit/sidekiq/error_handler_spec.rb
@@ -215,26 +254,28 @@ required_ruby_version: !ruby/object:Gem::Requirement
215
254
  requirements:
216
255
  - - ">="
217
256
  - !ruby/object:Gem::Version
218
- version: '0'
257
+ version: '2.0'
219
258
  required_rubygems_version: !ruby/object:Gem::Requirement
220
259
  requirements:
221
- - - ">="
260
+ - - ">"
222
261
  - !ruby/object:Gem::Version
223
- version: '0'
262
+ version: 1.3.1
224
263
  requirements: []
225
264
  rubyforge_project:
226
- rubygems_version: 2.5.1
265
+ rubygems_version: 2.6.8
227
266
  signing_key:
228
267
  specification_version: 4
229
268
  summary: Airbrake is an online tool that provides robust exception tracking in any
230
269
  of your Ruby applications.
231
270
  test_files:
232
- - spec/airbrake_spec.rb
233
271
  - spec/apps/rack/dummy_app.rb
234
272
  - spec/apps/rails/dummy_app.rb
235
273
  - spec/apps/rails/dummy_task.rake
274
+ - spec/apps/rails/logs/32.log
275
+ - spec/apps/rails/logs/40.log
276
+ - spec/apps/rails/logs/41.log
277
+ - spec/apps/rails/logs/42.log
236
278
  - spec/apps/rails/logs/50.log
237
- - spec/apps/rails/logs/51.log
238
279
  - spec/apps/sinatra/composite_app/sinatra_app1.rb
239
280
  - spec/apps/sinatra/composite_app/sinatra_app2.rb
240
281
  - spec/apps/sinatra/dummy_app.rb
@@ -244,8 +285,13 @@ test_files:
244
285
  - spec/integration/shared_examples/rack_examples.rb
245
286
  - spec/integration/sinatra/sinatra_spec.rb
246
287
  - spec/spec_helper.rb
288
+ - spec/unit/airbrake_spec.rb
289
+ - spec/unit/rack/context_filter_spec.rb
290
+ - spec/unit/rack/http_headers_filter_spec.rb
291
+ - spec/unit/rack/http_params_filter_spec.rb
247
292
  - spec/unit/rack/middleware_spec.rb
248
- - spec/unit/rack/notice_builder_spec.rb
293
+ - spec/unit/rack/request_body_filter_spec.rb
294
+ - spec/unit/rack/session_filter_spec.rb
249
295
  - spec/unit/rack/user_spec.rb
250
296
  - spec/unit/rake/tasks_spec.rb
251
297
  - spec/unit/sidekiq/error_handler_spec.rb