paul_bunyan 2.0.0 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/Appraisals +7 -0
  3. data/Dockerfile +11 -12
  4. data/Jenkinsfile +34 -6
  5. data/Rakefile +4 -2
  6. data/docker-compose.override.yml.example +2 -2
  7. data/gemfiles/rails_6.1.gemfile +7 -0
  8. data/gemfiles/rails_6.1.gemfile.lock +185 -0
  9. data/gemfiles/rails_7.0.gemfile +7 -0
  10. data/gemfiles/rails_7.0.gemfile.lock +184 -0
  11. data/lib/paul_bunyan/json_formatter.rb +7 -7
  12. data/lib/paul_bunyan/log_relayer.rb +25 -9
  13. data/lib/paul_bunyan/metadata_logging.rb +6 -6
  14. data/lib/paul_bunyan/railtie/log_subscriber.rb +3 -1
  15. data/lib/paul_bunyan/railtie.rb +0 -1
  16. data/lib/paul_bunyan/version.rb +1 -1
  17. data/paul_bunyan.gemspec +2 -2
  18. data/spec/dummy/app/models/application_record.rb +3 -0
  19. data/spec/dummy/app/models/widget.rb +2 -0
  20. data/spec/dummy/config/environments/development.rb +0 -14
  21. data/spec/dummy/db/migrate/20230301183442_create_widgets.rb +10 -0
  22. data/spec/dummy/db/schema.rb +21 -0
  23. data/spec/lib/paul_bunyan/log_relayer_spec.rb +14 -10
  24. data/spec/lib/paul_bunyan/metadata_logging_spec.rb +6 -6
  25. data/spec/lib/paul_bunyan/railtie/log_subscriber_spec.rb +6 -2
  26. metadata +29 -31
  27. data/.travis.yml +0 -19
  28. data/lib/paul_bunyan/rails_ext/active_support_logger.rb +0 -11
  29. data/lib/paul_bunyan/rails_ext/instrumentation.rb +0 -41
  30. data/lib/paul_bunyan/rails_ext/rack_logger.rb +0 -24
  31. data/lib/paul_bunyan/rails_ext.rb +0 -8
  32. data/spec/dummy/config/initializers/assets.rb +0 -11
  33. data/spec/gemfiles/52.gemfile +0 -5
  34. data/spec/gemfiles/60.gemfile +0 -5
  35. data/spec/gemfiles/61.gemfile +0 -5
  36. data/spec/lib/paul_bunyan/rails_ext/instrumentation_spec.rb +0 -103
@@ -0,0 +1,2 @@
1
+ class Widget < ApplicationRecord
2
+ end
@@ -22,20 +22,6 @@ Rails.application.configure do
22
22
  # Raise an error on page load if there are pending migrations.
23
23
  config.active_record.migration_error = :page_load
24
24
 
25
- # Debug mode disables concatenation and preprocessing of assets.
26
- # This option may cause significant delays in view rendering with a large
27
- # number of complex assets.
28
- config.assets.debug = true
29
-
30
- # Asset digests allow you to set far-future HTTP expiration dates on all assets,
31
- # yet still be able to expire them through the digest params.
32
- config.assets.digest = true
33
-
34
- # Adds additional error checking when serving assets at runtime.
35
- # Checks for improperly declared sprockets dependencies.
36
- # Raises helpful error messages.
37
- config.assets.raise_runtime_errors = true
38
-
39
25
  # Raises error for missing translations
40
26
  # config.action_view.raise_on_missing_translations = true
41
27
  end
@@ -0,0 +1,10 @@
1
+ class CreateWidgets < ActiveRecord::Migration[7.0]
2
+ def change
3
+ create_table :widgets do |t|
4
+ t.string :name
5
+ t.integer :quantity
6
+
7
+ t.timestamps
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,21 @@
1
+ # This file is auto-generated from the current state of the database. Instead
2
+ # of editing this file, please use the migrations feature of Active Record to
3
+ # incrementally modify your database, and then regenerate this schema definition.
4
+ #
5
+ # This file is the source Rails uses to define your schema when running `bin/rails
6
+ # db:schema:load`. When creating a new database, `bin/rails db:schema:load` tends to
7
+ # be faster and is potentially less error prone than running all of your
8
+ # migrations from scratch. Old migrations may fail to apply correctly if those
9
+ # migrations use external dependencies or application code.
10
+ #
11
+ # It's strongly recommended that you check this file into your version control system.
12
+
13
+ ActiveRecord::Schema[7.0].define(version: 2023_03_01_183442) do
14
+ create_table "widgets", force: :cascade do |t|
15
+ t.string "name"
16
+ t.integer "quantity"
17
+ t.datetime "created_at", null: false
18
+ t.datetime "updated_at", null: false
19
+ end
20
+
21
+ end
@@ -337,6 +337,10 @@ describe PaulBunyan::LogRelayer do
337
337
  end
338
338
  end
339
339
 
340
+ # The funny `, **({})` bit can be removed once we don't test on ruby 2.7
341
+ # It ensures that the spec considers the arg to be a hash arg and not a kwarg
342
+ # on ruby < 3.0. The methods treat actual hashes and kwargs identically so
343
+ # it doesn't really matter which one it passes through as
340
344
  context 'logging metadata' do
341
345
  let(:my_metadata) { {foo: 'bar'} }
342
346
 
@@ -350,7 +354,7 @@ describe PaulBunyan::LogRelayer do
350
354
  it 'delegates to all child loggers that support it' do
351
355
  expect(primary).to receive(:add_metadata).with(my_metadata)
352
356
  expect(secondary).to_not receive(:add_metadata)
353
- double_relayer.add_metadata(my_metadata)
357
+ double_relayer.add_metadata(my_metadata, **({}))
354
358
  end
355
359
  end
356
360
 
@@ -376,29 +380,29 @@ describe PaulBunyan::LogRelayer do
376
380
  it 'delegates to all child loggers' do
377
381
  expect(primary).to receive(:remove_metadata).with(my_metadata)
378
382
  expect(secondary).to_not receive(:remove_metadata)
379
- double_relayer.remove_metadata(my_metadata)
383
+ double_relayer.remove_metadata(my_metadata, **({}))
380
384
  end
381
385
  end
382
386
 
383
387
  describe '#with_metadata' do
384
388
  before do
385
- allow(single_relayer).to receive(:add_metadata).with(my_metadata)
386
- allow(single_relayer).to receive(:remove_metadata).with(my_metadata)
389
+ allow(single_relayer).to receive(:add_metadata).with(my_metadata, **({}))
390
+ allow(single_relayer).to receive(:remove_metadata).with(my_metadata, **({}))
387
391
  end
388
392
 
389
393
  it 'must call #add_metadata with the supplied hash' do
390
- expect(single_relayer).to receive(:add_metadata).with(my_metadata)
391
- expect { |b| single_relayer.with_metadata(my_metadata, &b) }.to yield_control
394
+ expect(single_relayer).to receive(:add_metadata).with(my_metadata, **({}))
395
+ expect { |b| single_relayer.with_metadata(my_metadata, **({}), &b) }.to yield_control
392
396
  end
393
397
 
394
398
  it 'must call #remove_metadata with the supplied hash' do
395
- expect(single_relayer).to receive(:remove_metadata).with(my_metadata)
396
- expect { |b| single_relayer.with_metadata(my_metadata, &b) }.to yield_control
399
+ expect(single_relayer).to receive(:remove_metadata).with(my_metadata, **({}))
400
+ expect { |b| single_relayer.with_metadata(my_metadata, **({}), &b) }.to yield_control
397
401
  end
398
402
 
399
403
  it 'must call #remove_metadata when the block raises an exception' do
400
- expect(single_relayer).to receive(:remove_metadata).with(my_metadata)
401
- expect { single_relayer.with_metadata(my_metadata) do
404
+ expect(single_relayer).to receive(:remove_metadata).with(my_metadata, **({}))
405
+ expect { single_relayer.with_metadata(my_metadata, **({})) do
402
406
  fail StandardError, ':('
403
407
  end
404
408
  }.to raise_error(StandardError)
@@ -16,15 +16,15 @@ describe PaulBunyan::MetadataLogging do
16
16
  end
17
17
 
18
18
  it 'must delegate with_metadata to the formatter' do
19
- expect(formatter).to receive(:with_metadata).with(foo: 'bar').and_yield
20
- subject.with_metadata(foo: 'bar') do |logger|
19
+ expect(formatter).to receive(:with_metadata).with({hash: 123}, foo: 'bar').and_yield
20
+ subject.with_metadata({hash: 123}, foo: 'bar') do |logger|
21
21
  expect(subject).to eq logger
22
22
  end
23
23
  end
24
24
 
25
25
  it 'must delegate add_metadata to the formatter' do
26
- expect(formatter).to receive(:add_metadata).with(foo: 'bar')
27
- subject.add_metadata(foo: 'bar')
26
+ expect(formatter).to receive(:add_metadata).with({hash: 123}, foo: 'bar')
27
+ subject.add_metadata({hash: 123}, foo: 'bar')
28
28
  end
29
29
 
30
30
  it 'must delegate current_metadata to the formatter' do
@@ -33,8 +33,8 @@ describe PaulBunyan::MetadataLogging do
33
33
  end
34
34
 
35
35
  it 'must delegate remove_metadata to the formatter' do
36
- expect(formatter).to receive(:remove_metadata).with(foo: 'bar')
37
- subject.remove_metadata(foo: 'bar')
36
+ expect(formatter).to receive(:remove_metadata).with({hash: 123}, foo: 'bar')
37
+ subject.remove_metadata({hash: 123}, foo: 'bar')
38
38
  end
39
39
 
40
40
  context '#flush' do
@@ -61,6 +61,11 @@ module PaulBunyan
61
61
  end
62
62
 
63
63
  describe '#process_action(event)' do
64
+ let(:request) {
65
+ req = instance_double("ActionDispatch::Request", ip: "127.0.0.1", env: {
66
+ "action_dispatch.request_id" => "dfa6f7b5-8400-4572-a2f7-80504ed9d09a"
67
+ })
68
+ }
64
69
  let(:event) {
65
70
  ActiveSupport::Notifications::Event.new(
66
71
  'process_action.action_controller',
@@ -74,8 +79,7 @@ module PaulBunyan
74
79
  :format => :html,
75
80
  :method => "GET",
76
81
  :path => "/foos/42",
77
- :request_id => "dfa6f7b5-8400-4572-a2f7-80504ed9d09a",
78
- :ip => '127.0.0.1',
82
+ :request => request,
79
83
  :status => 200,
80
84
  :view_runtime => 220.038,
81
85
  :db_runtime => 10.177,
metadata CHANGED
@@ -1,17 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: paul_bunyan
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Duane Johnson
8
8
  - Kenneth Romney
9
9
  - Mark Severson
10
10
  - Tyler Pickett
11
- autorequire:
11
+ autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2021-03-16 00:00:00.000000000 Z
14
+ date: 2023-03-06 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: request_store
@@ -28,21 +28,21 @@ dependencies:
28
28
  - !ruby/object:Gem::Version
29
29
  version: '0'
30
30
  - !ruby/object:Gem::Dependency
31
- name: bundler
31
+ name: appraisal
32
32
  requirement: !ruby/object:Gem::Requirement
33
33
  requirements:
34
- - - ">="
34
+ - - "~>"
35
35
  - !ruby/object:Gem::Version
36
- version: '0'
36
+ version: 2.4.0
37
37
  type: :development
38
38
  prerelease: false
39
39
  version_requirements: !ruby/object:Gem::Requirement
40
40
  requirements:
41
- - - ">="
41
+ - - "~>"
42
42
  - !ruby/object:Gem::Version
43
- version: '0'
43
+ version: 2.4.0
44
44
  - !ruby/object:Gem::Dependency
45
- name: rake
45
+ name: bundler
46
46
  requirement: !ruby/object:Gem::Requirement
47
47
  requirements:
48
48
  - - ">="
@@ -56,7 +56,7 @@ dependencies:
56
56
  - !ruby/object:Gem::Version
57
57
  version: '0'
58
58
  - !ruby/object:Gem::Dependency
59
- name: rspec
59
+ name: rake
60
60
  requirement: !ruby/object:Gem::Requirement
61
61
  requirements:
62
62
  - - ">="
@@ -70,7 +70,7 @@ dependencies:
70
70
  - !ruby/object:Gem::Version
71
71
  version: '0'
72
72
  - !ruby/object:Gem::Dependency
73
- name: wwtd
73
+ name: rspec
74
74
  requirement: !ruby/object:Gem::Requirement
75
75
  requirements:
76
76
  - - ">="
@@ -89,14 +89,14 @@ dependencies:
89
89
  requirements:
90
90
  - - ">="
91
91
  - !ruby/object:Gem::Version
92
- version: '5.2'
92
+ version: '6.1'
93
93
  type: :development
94
94
  prerelease: false
95
95
  version_requirements: !ruby/object:Gem::Requirement
96
96
  requirements:
97
97
  - - ">="
98
98
  - !ruby/object:Gem::Version
99
- version: '5.2'
99
+ version: '6.1'
100
100
  - !ruby/object:Gem::Dependency
101
101
  name: sqlite3
102
102
  requirement: !ruby/object:Gem::Requirement
@@ -140,7 +140,7 @@ extra_rdoc_files: []
140
140
  files:
141
141
  - ".dockerignore"
142
142
  - ".gitignore"
143
- - ".travis.yml"
143
+ - Appraisals
144
144
  - Dockerfile
145
145
  - Gemfile
146
146
  - Guardfile
@@ -153,15 +153,15 @@ files:
153
153
  - docker-compose.override.yml.example
154
154
  - docker-compose.yml
155
155
  - examples/host_middleware.rb
156
+ - gemfiles/rails_6.1.gemfile
157
+ - gemfiles/rails_6.1.gemfile.lock
158
+ - gemfiles/rails_7.0.gemfile
159
+ - gemfiles/rails_7.0.gemfile.lock
156
160
  - lib/paul_bunyan.rb
157
161
  - lib/paul_bunyan/json_formatter.rb
158
162
  - lib/paul_bunyan/level.rb
159
163
  - lib/paul_bunyan/log_relayer.rb
160
164
  - lib/paul_bunyan/metadata_logging.rb
161
- - lib/paul_bunyan/rails_ext.rb
162
- - lib/paul_bunyan/rails_ext/active_support_logger.rb
163
- - lib/paul_bunyan/rails_ext/instrumentation.rb
164
- - lib/paul_bunyan/rails_ext/rack_logger.rb
165
165
  - lib/paul_bunyan/railtie.rb
166
166
  - lib/paul_bunyan/railtie/log_subscriber.rb
167
167
  - lib/paul_bunyan/tagged_logging.rb
@@ -179,7 +179,9 @@ files:
179
179
  - spec/dummy/app/helpers/application_helper.rb
180
180
  - spec/dummy/app/mailers/.keep
181
181
  - spec/dummy/app/models/.keep
182
+ - spec/dummy/app/models/application_record.rb
182
183
  - spec/dummy/app/models/concerns/.keep
184
+ - spec/dummy/app/models/widget.rb
183
185
  - spec/dummy/app/views/layouts/application.html.erb
184
186
  - spec/dummy/bin/bundle
185
187
  - spec/dummy/bin/rails
@@ -193,7 +195,6 @@ files:
193
195
  - spec/dummy/config/environments/development.rb
194
196
  - spec/dummy/config/environments/production.rb
195
197
  - spec/dummy/config/environments/test.rb
196
- - spec/dummy/config/initializers/assets.rb
197
198
  - spec/dummy/config/initializers/backtrace_silencers.rb
198
199
  - spec/dummy/config/initializers/cookies_serializer.rb
199
200
  - spec/dummy/config/initializers/filter_parameter_logging.rb
@@ -205,20 +206,18 @@ files:
205
206
  - spec/dummy/config/locales/en.yml
206
207
  - spec/dummy/config/routes.rb
207
208
  - spec/dummy/config/secrets.yml
209
+ - spec/dummy/db/migrate/20230301183442_create_widgets.rb
210
+ - spec/dummy/db/schema.rb
208
211
  - spec/dummy/lib/assets/.keep
209
212
  - spec/dummy/log/.keep
210
213
  - spec/dummy/public/404.html
211
214
  - spec/dummy/public/422.html
212
215
  - spec/dummy/public/500.html
213
216
  - spec/dummy/public/favicon.ico
214
- - spec/gemfiles/52.gemfile
215
- - spec/gemfiles/60.gemfile
216
- - spec/gemfiles/61.gemfile
217
217
  - spec/lib/paul_bunyan/json_formatter_spec.rb
218
218
  - spec/lib/paul_bunyan/level_spec.rb
219
219
  - spec/lib/paul_bunyan/log_relayer_spec.rb
220
220
  - spec/lib/paul_bunyan/metadata_logging_spec.rb
221
- - spec/lib/paul_bunyan/rails_ext/instrumentation_spec.rb
222
221
  - spec/lib/paul_bunyan/railtie/log_subscriber_spec.rb
223
222
  - spec/lib/paul_bunyan/railtie_spec.rb
224
223
  - spec/lib/paul_bunyan/tagged_logging_spec.rb
@@ -229,7 +228,7 @@ homepage: https://github.com/instructure/paul_bunyan
229
228
  licenses:
230
229
  - MIT
231
230
  metadata: {}
232
- post_install_message:
231
+ post_install_message:
233
232
  rdoc_options: []
234
233
  require_paths:
235
234
  - lib
@@ -244,8 +243,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
244
243
  - !ruby/object:Gem::Version
245
244
  version: '0'
246
245
  requirements: []
247
- rubygems_version: 3.0.3
248
- signing_key:
246
+ rubygems_version: 3.1.6
247
+ signing_key:
249
248
  specification_version: 4
250
249
  summary: Logging for all the things
251
250
  test_files:
@@ -259,7 +258,9 @@ test_files:
259
258
  - spec/dummy/app/helpers/application_helper.rb
260
259
  - spec/dummy/app/mailers/.keep
261
260
  - spec/dummy/app/models/.keep
261
+ - spec/dummy/app/models/application_record.rb
262
262
  - spec/dummy/app/models/concerns/.keep
263
+ - spec/dummy/app/models/widget.rb
263
264
  - spec/dummy/app/views/layouts/application.html.erb
264
265
  - spec/dummy/bin/bundle
265
266
  - spec/dummy/bin/rails
@@ -273,7 +274,6 @@ test_files:
273
274
  - spec/dummy/config/environments/development.rb
274
275
  - spec/dummy/config/environments/production.rb
275
276
  - spec/dummy/config/environments/test.rb
276
- - spec/dummy/config/initializers/assets.rb
277
277
  - spec/dummy/config/initializers/backtrace_silencers.rb
278
278
  - spec/dummy/config/initializers/cookies_serializer.rb
279
279
  - spec/dummy/config/initializers/filter_parameter_logging.rb
@@ -285,20 +285,18 @@ test_files:
285
285
  - spec/dummy/config/locales/en.yml
286
286
  - spec/dummy/config/routes.rb
287
287
  - spec/dummy/config/secrets.yml
288
+ - spec/dummy/db/migrate/20230301183442_create_widgets.rb
289
+ - spec/dummy/db/schema.rb
288
290
  - spec/dummy/lib/assets/.keep
289
291
  - spec/dummy/log/.keep
290
292
  - spec/dummy/public/404.html
291
293
  - spec/dummy/public/422.html
292
294
  - spec/dummy/public/500.html
293
295
  - spec/dummy/public/favicon.ico
294
- - spec/gemfiles/52.gemfile
295
- - spec/gemfiles/60.gemfile
296
- - spec/gemfiles/61.gemfile
297
296
  - spec/lib/paul_bunyan/json_formatter_spec.rb
298
297
  - spec/lib/paul_bunyan/level_spec.rb
299
298
  - spec/lib/paul_bunyan/log_relayer_spec.rb
300
299
  - spec/lib/paul_bunyan/metadata_logging_spec.rb
301
- - spec/lib/paul_bunyan/rails_ext/instrumentation_spec.rb
302
300
  - spec/lib/paul_bunyan/railtie/log_subscriber_spec.rb
303
301
  - spec/lib/paul_bunyan/railtie_spec.rb
304
302
  - spec/lib/paul_bunyan/tagged_logging_spec.rb
data/.travis.yml DELETED
@@ -1,19 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.5
4
- - 2.6
5
- - 2.7
6
- matrix:
7
- fast_finish: true
8
- # WWTD doesn't support allow_failures... yet
9
- # allow_failures:
10
- # - rvm: ruby-head
11
- gemfile:
12
- - spec/gemfiles/52.gemfile
13
- - spec/gemfiles/60.gemfile
14
- - spec/gemfiles/61.gemfile
15
- script: bundle exec rspec
16
- notifications:
17
- email:
18
- on_success: never
19
- on_failure: never
@@ -1,11 +0,0 @@
1
- require 'active_support/logger'
2
-
3
- # Sad hax but ActiveRecord insists on using this method for console sessions
4
- # and everything uses it in development causing us to get double log lines :-(
5
- module ActiveSupport
6
- class Logger
7
- def self.broadcast(_)
8
- Module.new
9
- end
10
- end
11
- end
@@ -1,41 +0,0 @@
1
- require 'action_controller/metal/instrumentation'
2
-
3
- module ActionController
4
- module Instrumentation
5
- def process_action(*args)
6
- raw_payload = base_payload.merge(custom_payload)
7
-
8
- ActiveSupport::Notifications.instrument('start_processing.action_controller', raw_payload.dup)
9
-
10
- ActiveSupport::Notifications.instrument('process_action.action_controller', raw_payload) do |payload|
11
- begin
12
- result = super
13
- payload[:status] = response.status
14
- result
15
- ensure
16
- append_info_to_payload(payload)
17
- end
18
- end
19
- end
20
-
21
- private
22
-
23
- def base_payload
24
- {
25
- controller: self.class.name,
26
- action: self.action_name,
27
- params: request.filtered_parameters,
28
- format: request.format.try(:ref),
29
- method: request.request_method,
30
- path: (request.filtered_path rescue 'unknown'),
31
- }
32
- end
33
-
34
- def custom_payload
35
- {
36
- request_id: request.env['action_dispatch.request_id'],
37
- ip: request.ip,
38
- }
39
- end
40
- end
41
- end
@@ -1,24 +0,0 @@
1
- require 'rails/rack/logger'
2
-
3
- module Rails
4
- module Rack
5
- class Logger
6
-
7
- # This was copied directly from the rails source and had
8
- # the logging lines removed. N.B. this may break in future
9
- # versions of rails.
10
- def call_app(request, env)
11
- instrumenter = ActiveSupport::Notifications.instrumenter
12
- instrumenter.start 'request.action_dispatch', request: request
13
- resp = @app.call(env)
14
- resp[2] = ::Rack::BodyProxy.new(resp[2]) { finish(request) }
15
- resp
16
- rescue
17
- finish(request)
18
- raise
19
- ensure
20
- ActiveSupport::LogSubscriber.flush_all!
21
- end
22
- end
23
- end
24
- end
@@ -1,8 +0,0 @@
1
- module PaulBunyan
2
- module RailsExt
3
- end
4
- end
5
-
6
- require 'paul_bunyan/rails_ext/rack_logger'
7
- require 'paul_bunyan/rails_ext/instrumentation'
8
- require 'paul_bunyan/rails_ext/active_support_logger'
@@ -1,11 +0,0 @@
1
- # Be sure to restart your server when you modify this file.
2
-
3
- # Version of your assets, change this if you want to expire all your assets.
4
- Rails.application.config.assets.version = '1.0'
5
-
6
- # Add additional assets to the asset load path
7
- # Rails.application.config.assets.paths << Emoji.images_path
8
-
9
- # Precompile additional assets.
10
- # application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
11
- # Rails.application.config.assets.precompile += %w( search.js )
@@ -1,5 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gemspec path: '../../'
4
-
5
- gem 'rails', '~> 5.2.0'
@@ -1,5 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gemspec path: '../../'
4
-
5
- gem 'rails', '~> 6.0.0'
@@ -1,5 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gemspec path: '../../'
4
-
5
- gem 'rails', '~> 6.1.0'
@@ -1,103 +0,0 @@
1
- require 'spec_helper'
2
-
3
- RSpec.describe ActionController::Base do
4
- let(:request_id) { '5ab8b021-71bf-40f9-97cc-136f7b626a66' }
5
-
6
- around :each do |example|
7
- begin
8
- original_logger = PaulBunyan.logger.primary_logger
9
- null_logger = Logger.new('/dev/null')
10
- PaulBunyan.add_logger(null_logger)
11
- PaulBunyan.remove_logger(original_logger)
12
-
13
- example.run
14
- ensure
15
- PaulBunyan.add_logger(original_logger)
16
- PaulBunyan.remove_logger(null_logger)
17
- end
18
- end
19
-
20
- before :each do
21
- subject.request = build_request({
22
- 'action_dispatch.request_id' => request_id,
23
- 'REMOTE_ADDR' => '127.0.0.1',
24
- })
25
- subject.response = ActionDispatch::TestResponse.new
26
-
27
- def subject.index(*args)
28
- head :ok
29
- end
30
- end
31
-
32
-
33
- describe '.process_action(*args)' do
34
- context 'active support notification events' do
35
- before do
36
- allow(ActiveSupport::Notifications).to receive(:instrument)
37
- end
38
-
39
- it 'must emit a start_processing event in the action_controller namespace' do
40
- subject.send(:process_action, :index)
41
- expect(ActiveSupport::Notifications).to have_received(:instrument).
42
- with('start_processing.action_controller', anything).once
43
- end
44
-
45
- it 'must emit a process_action event in the action_controller namespace' do
46
- subject.send(:process_action, :index)
47
- expect(ActiveSupport::Notifications).to have_received(:instrument).
48
- with('process_action.action_controller', anything).once
49
- end
50
- end
51
-
52
- it 'must include the original rails payload keys in the event payload' do
53
- calling_index do |*args|
54
- payload = args.last
55
- expect(payload.keys).to include(
56
- *[:controller, :action, :params, :format, :method, :path]
57
- )
58
- end
59
- end
60
-
61
- it 'must add the request id to the notification payload hash' do
62
- calling_index do |*args|
63
- payload = args.last
64
- expect(payload).to include request_id: request_id
65
- end
66
- end
67
-
68
- it 'must add the request ip address to the notification payload' do
69
- calling_index do |*args|
70
- payload = args.last
71
- expect(payload).to include ip: '127.0.0.1'
72
- end
73
- end
74
-
75
- context 'with sensitive info in the query params' do
76
- before do
77
- subject.request = build_request({
78
- 'action_dispatch.parameter_filter' => [:password, :baz],
79
- 'PATH_INFO' => '/somewhere',
80
- 'QUERY_STRING' => 'password=foo&bar=baz&baz=qux',
81
- })
82
- end
83
-
84
- it 'filters the sensitive params' do
85
- calling_index do |*args|
86
- payload = args.last
87
- expect(payload).to include path: '/somewhere?password=[FILTERED]&bar=baz&baz=[FILTERED]'
88
- end
89
- end
90
- end
91
- end
92
-
93
- def build_request(attrs)
94
- factory_method = (Rails.version >= '5.0' ? :create : :new)
95
- ActionDispatch::TestRequest.send(factory_method, attrs)
96
- end
97
-
98
- def calling_index(&block)
99
- with_subscription_to('process_action.action_controller', block) do
100
- subject.send(:process_action, :index)
101
- end
102
- end
103
- end