berkeley_library-logging 0.2.3 → 0.2.6

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.
Files changed (33) hide show
  1. checksums.yaml +4 -4
  2. data/.idea/inspectionProfiles/Project_Default.xml +6 -1
  3. data/.idea/logging.iml +98 -126
  4. data/.rubocop.yml +100 -136
  5. data/.simplecov +0 -12
  6. data/CHANGES.md +19 -0
  7. data/Rakefile +3 -1
  8. data/artifacts/.keep +0 -0
  9. data/berkeley_library-logging.gemspec +7 -4
  10. data/lib/berkeley_library/logging/configurator.rb +6 -2
  11. data/lib/berkeley_library/logging/env.rb +1 -1
  12. data/lib/berkeley_library/logging/events.rb +80 -24
  13. data/lib/berkeley_library/logging/exception_serializer.rb +15 -0
  14. data/lib/berkeley_library/logging/formatters.rb +8 -18
  15. data/lib/berkeley_library/logging/logger.rb +1 -0
  16. data/lib/berkeley_library/logging/module_info.rb +1 -1
  17. data/lib/berkeley_library/logging/safe_serializer.rb +77 -0
  18. data/spec/.rubocop.yml +88 -7
  19. data/spec/rails/ucblit/logging/configurator_spec.rb +100 -30
  20. data/spec/rails/ucblit/logging/env_spec.rb +2 -2
  21. data/spec/rails/ucblit/logging/formatters_spec.rb +3 -1
  22. data/spec/rails/ucblit/logging/loggers_spec.rb +6 -5
  23. data/spec/rails/ucblit/logging/railtie_spec.rb +2 -2
  24. data/spec/rails/ucblit/logging/safe_serializer_spec.rb +23 -0
  25. data/spec/rails/ucblit/logging_spec.rb +3 -3
  26. data/spec/spec_helper.rb +1 -1
  27. data/spec/standalone/ucblit/logging/configurator_spec.rb +2 -2
  28. data/spec/standalone/ucblit/logging/formatters_spec.rb +3 -1
  29. data/spec/standalone/ucblit/logging/loggers_spec.rb +12 -8
  30. data/spec/standalone/ucblit/logging/safe_serializer_spec.rb +137 -0
  31. data/spec/standalone/ucblit/logging_spec.rb +3 -3
  32. data/spec/standalone_helper.rb +1 -1
  33. metadata +33 -10
@@ -9,7 +9,7 @@ module BerkeleyLibrary
9
9
  describe :new_json_formatter do
10
10
  attr_reader :out, :logger
11
11
 
12
- before(:each) do
12
+ before do
13
13
  @out = StringIO.new
14
14
  @logger = Logger.new(out)
15
15
  logger.formatter = Formatters.new_json_formatter
@@ -68,6 +68,7 @@ module BerkeleyLibrary
68
68
  expect(additional_data['more_strings']).to eq([expected_string, expected_string])
69
69
  end
70
70
 
71
+ # rubocop:disable Layout/LineLength
71
72
  it 'removes ANSI formatting from ActiveRecord logs' do
72
73
  original = " \e[1m\e[36mLendingItem Load (2.0ms)\e[0m \e[1m\e[34mSELECT \"lending_items\".* FROM \"lending_items\" WHERE \"lending_items\".\"directory\" = $1 LIMIT $2\e[0m [[\"directory\", \"b135297126_C068087930\"], [\"LIMIT\", 1]]"
73
74
  expected = ' LendingItem Load (2.0ms) SELECT "lending_items".* FROM "lending_items" WHERE "lending_items"."directory" = $1 LIMIT $2 [["directory", "b135297126_C068087930"], ["LIMIT", 1]]'
@@ -76,6 +77,7 @@ module BerkeleyLibrary
76
77
  msg = logged_json['msg']
77
78
  expect(msg).to eq(expected)
78
79
  end
80
+ # rubocop:enable Layout/LineLength
79
81
  end
80
82
 
81
83
  describe :ensure_hash do
@@ -6,11 +6,11 @@ module BerkeleyLibrary
6
6
  describe Loggers do
7
7
  attr_reader :orig_rails_env
8
8
 
9
- before(:each) do
9
+ before do
10
10
  @orig_rails_env = Rails.env
11
11
  end
12
12
 
13
- after(:each) do
13
+ after do
14
14
  Rails.env = orig_rails_env
15
15
  end
16
16
 
@@ -46,8 +46,9 @@ module BerkeleyLibrary
46
46
  end
47
47
 
48
48
  describe :default_logger do
49
- before(:each) { @rails_logger = Rails.logger }
50
- after(:each) { Rails.logger = @rails_logger }
49
+ before { @rails_logger = Rails.logger }
50
+
51
+ after { Rails.logger = @rails_logger }
51
52
 
52
53
  it 'returns the Rails logger' do
53
54
  expected_logger = double(::Logger)
@@ -86,7 +87,7 @@ module BerkeleyLibrary
86
87
  describe :new_default_logger do
87
88
  attr_reader :config
88
89
 
89
- before(:each) do
90
+ before do
90
91
  app = Class.new(Rails::Application).new
91
92
  @config = app.config
92
93
  end
@@ -6,7 +6,7 @@ module BerkeleyLibrary
6
6
  attr_reader :app
7
7
  attr_reader :config
8
8
 
9
- before(:each) do
9
+ before do
10
10
  @app = Class.new(Rails::Application).new
11
11
  allow(Rails).to receive(:application).and_return(app)
12
12
  @config = app.config
@@ -16,7 +16,7 @@ module BerkeleyLibrary
16
16
  attr_reader :logging_initializer
17
17
  attr_reader :bootstrap_logger_initializer
18
18
 
19
- before(:each) do
19
+ before do
20
20
  expected_file, _line = Module.const_source_location(BerkeleyLibrary::Logging::Railtie.name)
21
21
  @logging_initializer = app.initializers.find do |init|
22
22
  block = init.block
@@ -0,0 +1,23 @@
1
+ require 'rails_helper'
2
+
3
+ require 'active_support/time'
4
+
5
+ module BerkeleyLibrary
6
+ module Logging
7
+ describe SafeSerializer do
8
+ describe :serialize do
9
+ it 'handles ActiveSupport::TimeWithZone' do
10
+ Time.zone = 'America/Los_Angeles'
11
+
12
+ t = Time.current
13
+ expect(t).to be_a(ActiveSupport::TimeWithZone) # just to be sure
14
+
15
+ expect(SafeSerializer.serialize(t)).to be(t)
16
+
17
+ h = { time: t }
18
+ expect(SafeSerializer.serialize(h)).to eq(h)
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -25,7 +25,7 @@ module BerkeleyLibrary
25
25
  mock_logger_class.new
26
26
  end
27
27
 
28
- before(:each) do
28
+ before do
29
29
  @rails_logger_orig = Rails.logger
30
30
  Rails.logger = new_mock_logger
31
31
 
@@ -35,7 +35,7 @@ module BerkeleyLibrary
35
35
  end
36
36
  end
37
37
 
38
- after(:each) do
38
+ after do
39
39
  @logger_was_defined ? reset_logger! : undefine_logger!
40
40
  Rails.logger = @rails_logger_orig
41
41
  end
@@ -74,7 +74,7 @@ module BerkeleyLibrary
74
74
  describe 'included' do
75
75
  attr_reader :logificator
76
76
 
77
- before(:each) do
77
+ before do
78
78
  @logificator = Object.new
79
79
  @logificator.singleton_class.include(Logging)
80
80
  end
data/spec/spec_helper.rb CHANGED
@@ -8,7 +8,7 @@ if ENV['COVERAGE']
8
8
  spec_group_re = %r{(?<=^#{spec_root}/)[^/]+(?=/)}
9
9
 
10
10
  RSpec.configure do |config|
11
- config.before(:each) do |example|
11
+ config.before do |example|
12
12
  abs_path = File.realpath(example.metadata[:absolute_file_path])
13
13
  match_data = spec_group_re.match(abs_path)
14
14
  raise ArgumentError, "Unable to determine group for example at #{abs_path}" unless match_data
@@ -8,7 +8,7 @@ module BerkeleyLibrary
8
8
  describe :configure! do
9
9
  attr_reader :config
10
10
 
11
- before(:each) do
11
+ before do
12
12
  @stdout_orig = $stdout
13
13
  $stdout = StringIO.new
14
14
 
@@ -16,7 +16,7 @@ module BerkeleyLibrary
16
16
  config.lograge = Lograge::OrderedOptions.new
17
17
  end
18
18
 
19
- after(:each) do
19
+ after do
20
20
  $stdout = @stdout_orig
21
21
  end
22
22
 
@@ -9,7 +9,7 @@ module BerkeleyLibrary
9
9
  describe :new_json_formatter do
10
10
  attr_reader :out, :logger
11
11
 
12
- before(:each) do
12
+ before do
13
13
  @out = StringIO.new
14
14
  @logger = Logger.new(out)
15
15
  logger.formatter = Formatters.new_json_formatter
@@ -66,6 +66,7 @@ module BerkeleyLibrary
66
66
  expect(additional_data['more_strings']).to eq([expected_string, expected_string])
67
67
  end
68
68
 
69
+ # rubocop:disable Layout/LineLength
69
70
  it 'removes ANSI formatting from ActiveRecord logs' do
70
71
  original = " \e[1m\e[36mLendingItem Load (2.0ms)\e[0m \e[1m\e[34mSELECT \"lending_items\".* FROM \"lending_items\" WHERE \"lending_items\".\"directory\" = $1 LIMIT $2\e[0m [[\"directory\", \"b135297126_C068087930\"], [\"LIMIT\", 1]]"
71
72
  expected = ' LendingItem Load (2.0ms) SELECT "lending_items".* FROM "lending_items" WHERE "lending_items"."directory" = $1 LIMIT $2 [["directory", "b135297126_C068087930"], ["LIMIT", 1]]'
@@ -74,6 +75,7 @@ module BerkeleyLibrary
74
75
  msg = logged_json['msg']
75
76
  expect(msg).to eq(expected)
76
77
  end
78
+ # rubocop:enable Layout/LineLength
77
79
  end
78
80
 
79
81
  describe :ensure_hash do
@@ -8,7 +8,7 @@ module BerkeleyLibrary
8
8
  attr_reader :out
9
9
 
10
10
  # rubocop:disable Lint/ConstantDefinitionInBlock
11
- before(:each) do
11
+ before do
12
12
  @out = StringIO.new
13
13
  class ::TestError < StandardError
14
14
  attr_writer :cause
@@ -20,7 +20,7 @@ module BerkeleyLibrary
20
20
  end
21
21
  # rubocop:enable Lint/ConstantDefinitionInBlock
22
22
 
23
- after(:each) do
23
+ after do
24
24
  Object.send(:remove_const, :TestError)
25
25
  end
26
26
 
@@ -39,7 +39,6 @@ module BerkeleyLibrary
39
39
  describe :new_json_logger do
40
40
 
41
41
  # TODO: rewrite this as a matcher
42
- # rubocop:disable Metrics/AbcSize
43
42
  def assert_serialized_error(err_json, err)
44
43
  expect(err_json).to be_a(Hash)
45
44
  expect(err_json['name']).to eq(TestError.name)
@@ -52,8 +51,6 @@ module BerkeleyLibrary
52
51
  expect(err_stack).to include(line)
53
52
  end
54
53
  end
55
- # rubocop:enable Metrics/AbcSize
56
-
57
54
  it 'supports tagged logging' do
58
55
  logger = Loggers.new_json_logger(out)
59
56
  logger = ActiveSupport::TaggedLogging.new(logger)
@@ -127,7 +124,14 @@ module BerkeleyLibrary
127
124
  end
128
125
  end
129
126
 
130
- expect { Loggers.new_json_logger(out).error(ex_outer) }.not_to raise_error(SystemStackError)
127
+ begin
128
+ Loggers.new_json_logger(out).error(ex_outer)
129
+ rescue SystemStackError => e
130
+ RSpec::Expectations.fail_with("Expected no SystemStackError, but got #{e}: #{e.backtrace[0]}")
131
+ end
132
+
133
+ expect(out.string).to include(msg_outer)
134
+ expect(out.string).to include(msg_inner)
131
135
  end
132
136
  # rubocop:enable Naming/RescuedExceptionsVariableName
133
137
 
@@ -322,11 +326,11 @@ module BerkeleyLibrary
322
326
  describe :new_default_logger do
323
327
  attr_reader :config
324
328
 
325
- before(:each) do
329
+ before do
326
330
  @config = OpenStruct.new
327
331
  end
328
332
 
329
- after(:each) do
333
+ after do
330
334
  BerkeleyLibrary::Logging.instance_variable_set(:@env, nil)
331
335
  end
332
336
 
@@ -0,0 +1,137 @@
1
+ require 'standalone_helper'
2
+
3
+ module BerkeleyLibrary
4
+ module Logging
5
+ describe SafeSerializer do
6
+ describe :serialize do
7
+ it 'returns primitives unchanged' do
8
+ values = [
9
+ nil,
10
+ false,
11
+ true,
12
+ 1,
13
+ 1.0,
14
+ '1/3'.to_r,
15
+ 'a string',
16
+ :a_symbol,
17
+ Date.today,
18
+ Time.now
19
+ ]
20
+
21
+ aggregate_failures do
22
+ values.each do |original|
23
+ actual = SafeSerializer.serialize(original)
24
+ expect(actual).to be(original)
25
+ end
26
+ end
27
+ end
28
+
29
+ it 'returns an object as a string' do
30
+ value = Object.new
31
+ expect(SafeSerializer.serialize(value)).to eq(value.to_s)
32
+ end
33
+
34
+ it 'returns a hash as a hash' do
35
+ hash = { a: 1, b: 2 }
36
+ expect(SafeSerializer.serialize(hash)).to eq(hash)
37
+ end
38
+
39
+ it 'returns an array as an array' do
40
+ arr = [0, 1, 2, 'elvis', false]
41
+ expect(SafeSerializer.serialize(arr)).to eq(arr)
42
+ end
43
+
44
+ it 'cleans nested values' do
45
+ b_value = Object.new
46
+ c_key = Object.new
47
+ d_value = Object.new
48
+
49
+ d_array = ['d', :d, { d: "\ud7ff", 'd' => d_value }]
50
+
51
+ h = {
52
+ a: 1,
53
+ b: b_value,
54
+ c_key => 'c value',
55
+ 0xd => d_array,
56
+ "\uEEEE" => 0xe
57
+ }
58
+
59
+ expected = {
60
+ a: 1,
61
+ b: b_value.to_s,
62
+ c_key.to_s => 'c value',
63
+ 0xd => ['d', :d, { d: "\ud7ff", 'd' => d_value.to_s }],
64
+ "\uEEEE" => 0xe
65
+ }
66
+
67
+ actual = SafeSerializer.serialize(h)
68
+ expect(actual).to eq(expected)
69
+ end
70
+
71
+ it 'handles recursive structures' do
72
+ a = []
73
+ h = { a: a }
74
+ a << h
75
+
76
+ h_expected = { a: [SafeSerializer.placeholder_for(h)] }
77
+ a_expected = [{ a: SafeSerializer.placeholder_for(a) }]
78
+
79
+ expect(SafeSerializer.serialize(h)).to eq(h_expected)
80
+ expect(SafeSerializer.serialize(a)).to eq(a_expected)
81
+ end
82
+
83
+ context 'exceptions' do
84
+ # rubocop:disable Lint/ConstantDefinitionInBlock
85
+ before do
86
+ class ::TestError < StandardError
87
+ attr_writer :cause
88
+
89
+ def cause
90
+ @cause || super
91
+ end
92
+ end
93
+ end
94
+ # rubocop:enable Lint/ConstantDefinitionInBlock
95
+
96
+ after do
97
+ Object.send(:remove_const, :TestError)
98
+ end
99
+
100
+ # rubocop:disable Naming/RescuedExceptionsVariableName
101
+ it 'handles exceptions' do
102
+ msg_outer = 'Help I am trapped in the outer part of a unit test'
103
+ msg_inner = 'Help I am trapped in the inner part of a unit test'
104
+
105
+ begin
106
+ raise TestError, msg_inner
107
+ rescue TestError => ex_inner
108
+ begin
109
+ raise TestError, msg_outer
110
+ rescue TestError => ex_outer
111
+ ex_inner.cause = ex_outer
112
+ end
113
+ end
114
+
115
+ expect(ex_outer.cause).to eq(ex_inner) # just to be sure
116
+ expect(ex_inner.cause).to eq(ex_outer) # just to be sure
117
+
118
+ expected = {
119
+ name: 'TestError',
120
+ message: msg_outer,
121
+ stack: ex_outer.backtrace,
122
+ cause: {
123
+ name: 'TestError',
124
+ message: msg_inner,
125
+ stack: ex_inner.backtrace
126
+ }
127
+ }
128
+
129
+ expect(SafeSerializer.serialize(ex_outer)).to eq(expected)
130
+ end
131
+ # rubocop:enable Naming/RescuedExceptionsVariableName
132
+
133
+ end
134
+ end
135
+ end
136
+ end
137
+ end
@@ -25,7 +25,7 @@ module BerkeleyLibrary
25
25
  mock_logger_class.new
26
26
  end
27
27
 
28
- before(:each) do
28
+ before do
29
29
  if (@logger_was_defined = logger_defined?)
30
30
  @logging_logger_orig = Logging.instance_variable_get(:@logger)
31
31
  undefine_logger!
@@ -37,7 +37,7 @@ module BerkeleyLibrary
37
37
  allow(Logging::Loggers).to receive(:default_logger).and_return(persistent_default_logger)
38
38
  end
39
39
 
40
- after(:each) do
40
+ after do
41
41
  @logger_was_defined ? reset_logger! : undefine_logger!
42
42
  end
43
43
 
@@ -75,7 +75,7 @@ module BerkeleyLibrary
75
75
  describe 'included' do
76
76
  attr_reader :logificator
77
77
 
78
- before(:each) do
78
+ before do
79
79
  @logificator = Object.new
80
80
  @logificator.singleton_class.include(Logging)
81
81
  end
@@ -7,7 +7,7 @@ require 'spec_helper'
7
7
  # RSpec
8
8
 
9
9
  RSpec.configure do |config|
10
- config.around(:example) do |example|
10
+ config.around do |example|
11
11
  next example.run unless defined?(Rails)
12
12
 
13
13
  rails_orig = Object.send(:remove_const, :Rails)
metadata CHANGED
@@ -1,27 +1,27 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: berkeley_library-logging
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.2.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Moles
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-09-02 00:00:00.000000000 Z
11
+ date: 2022-03-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '6.0'
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
26
  version: '6.0'
27
27
  - !ruby/object:Gem::Dependency
@@ -174,14 +174,14 @@ dependencies:
174
174
  name: rails
175
175
  requirement: !ruby/object:Gem::Requirement
176
176
  requirements:
177
- - - "~>"
177
+ - - ">="
178
178
  - !ruby/object:Gem::Version
179
179
  version: '6.0'
180
180
  type: :development
181
181
  prerelease: false
182
182
  version_requirements: !ruby/object:Gem::Requirement
183
183
  requirements:
184
- - - "~>"
184
+ - - ">="
185
185
  - !ruby/object:Gem::Version
186
186
  version: '6.0'
187
187
  - !ruby/object:Gem::Dependency
@@ -218,14 +218,28 @@ dependencies:
218
218
  requirements:
219
219
  - - "~>"
220
220
  - !ruby/object:Gem::Version
221
- version: 0.91.0
221
+ version: 1.26.0
222
+ type: :development
223
+ prerelease: false
224
+ version_requirements: !ruby/object:Gem::Requirement
225
+ requirements:
226
+ - - "~>"
227
+ - !ruby/object:Gem::Version
228
+ version: 1.26.0
229
+ - !ruby/object:Gem::Dependency
230
+ name: rubocop-rspec
231
+ requirement: !ruby/object:Gem::Requirement
232
+ requirements:
233
+ - - "~>"
234
+ - !ruby/object:Gem::Version
235
+ version: 2.4.0
222
236
  type: :development
223
237
  prerelease: false
224
238
  version_requirements: !ruby/object:Gem::Requirement
225
239
  requirements:
226
240
  - - "~>"
227
241
  - !ruby/object:Gem::Version
228
- version: 0.91.0
242
+ version: 2.4.0
229
243
  - !ruby/object:Gem::Dependency
230
244
  name: simplecov
231
245
  requirement: !ruby/object:Gem::Requirement
@@ -290,17 +304,20 @@ files:
290
304
  - LICENSE.md
291
305
  - README.md
292
306
  - Rakefile
307
+ - artifacts/.keep
293
308
  - berkeley_library-logging.gemspec
294
309
  - docker-compose.yml
295
310
  - lib/berkeley_library/logging.rb
296
311
  - lib/berkeley_library/logging/configurator.rb
297
312
  - lib/berkeley_library/logging/env.rb
298
313
  - lib/berkeley_library/logging/events.rb
314
+ - lib/berkeley_library/logging/exception_serializer.rb
299
315
  - lib/berkeley_library/logging/formatters.rb
300
316
  - lib/berkeley_library/logging/logger.rb
301
317
  - lib/berkeley_library/logging/loggers.rb
302
318
  - lib/berkeley_library/logging/module_info.rb
303
319
  - lib/berkeley_library/logging/railtie.rb
320
+ - lib/berkeley_library/logging/safe_serializer.rb
304
321
  - lib/berkeley_library/logging/tagged_logging_extensions.rb
305
322
  - rakelib/.rubocop.yml
306
323
  - rakelib/bundle.rake
@@ -314,18 +331,21 @@ files:
314
331
  - spec/rails/ucblit/logging/formatters_spec.rb
315
332
  - spec/rails/ucblit/logging/loggers_spec.rb
316
333
  - spec/rails/ucblit/logging/railtie_spec.rb
334
+ - spec/rails/ucblit/logging/safe_serializer_spec.rb
317
335
  - spec/rails/ucblit/logging_spec.rb
318
336
  - spec/rails_helper.rb
319
337
  - spec/spec_helper.rb
320
338
  - spec/standalone/ucblit/logging/configurator_spec.rb
321
339
  - spec/standalone/ucblit/logging/formatters_spec.rb
322
340
  - spec/standalone/ucblit/logging/loggers_spec.rb
341
+ - spec/standalone/ucblit/logging/safe_serializer_spec.rb
323
342
  - spec/standalone/ucblit/logging_spec.rb
324
343
  - spec/standalone_helper.rb
325
344
  homepage: https://github.com/BerkeleyLibrary/logging
326
345
  licenses:
327
346
  - MIT
328
- metadata: {}
347
+ metadata:
348
+ rubygems_mfa_required: 'true'
329
349
  post_install_message:
330
350
  rdoc_options: []
331
351
  require_paths:
@@ -341,22 +361,25 @@ required_rubygems_version: !ruby/object:Gem::Requirement
341
361
  - !ruby/object:Gem::Version
342
362
  version: '0'
343
363
  requirements: []
344
- rubygems_version: 3.1.4
364
+ rubygems_version: 3.1.6
345
365
  signing_key:
346
366
  specification_version: 4
347
367
  summary: Opinionated Ruby/Rails logging for UC Berkeley Library
348
368
  test_files:
369
+ - artifacts/.keep
349
370
  - spec/.rubocop.yml
350
371
  - spec/rails/ucblit/logging/configurator_spec.rb
351
372
  - spec/rails/ucblit/logging/env_spec.rb
352
373
  - spec/rails/ucblit/logging/formatters_spec.rb
353
374
  - spec/rails/ucblit/logging/loggers_spec.rb
354
375
  - spec/rails/ucblit/logging/railtie_spec.rb
376
+ - spec/rails/ucblit/logging/safe_serializer_spec.rb
355
377
  - spec/rails/ucblit/logging_spec.rb
356
378
  - spec/rails_helper.rb
357
379
  - spec/spec_helper.rb
358
380
  - spec/standalone/ucblit/logging/configurator_spec.rb
359
381
  - spec/standalone/ucblit/logging/formatters_spec.rb
360
382
  - spec/standalone/ucblit/logging/loggers_spec.rb
383
+ - spec/standalone/ucblit/logging/safe_serializer_spec.rb
361
384
  - spec/standalone/ucblit/logging_spec.rb
362
385
  - spec/standalone_helper.rb