twiglet 3.7.2 → 3.9.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fdfe6db753dcf115b7965ff0cfd9682e23694b43765fd69cdd64986e7fc51d41
4
- data.tar.gz: fb110c32f6b4556efd1eb3f4ff673ca7b2e975008973ad296445389d2372a8c8
3
+ metadata.gz: 24bb01ca290d4e49c2a38e69a0566bcb0e06d38e5c1daa120abb90c2a88c1826
4
+ data.tar.gz: 00e825a9ae2164604a36b54811bf659321bc5bb1bf96afc198399c890058004a
5
5
  SHA512:
6
- metadata.gz: 7d0add22464cd885a861d2d7c5e85d7b7e2a444cb4516c26c261ea9992b1e2988a2a7e47d17d4d123d8131b34198af2d084350c2aa7262b44db513fccc33ea11
7
- data.tar.gz: d9772fd14f86d73b17c25a0b4f469b1ff9248ecba733d0d09d31be1d6c6c69c01a2e4d8e1152d68b2b8fce57f1acb13745ae45d5069846df38119663ea8262ae
6
+ metadata.gz: 8992a36124f946eb46fc63fd432d5ae1c5359101572a759eea3a70bb7d1b5d3ccadc9d76a075b42222906f6eb2a4c03de273b967a4e7bb8d977ec9f2a2095954
7
+ data.tar.gz: bfd2479a25d3d2f5212721941bd2400ad6179080f65a913efa4256c7ca7304e8042efc9ca50f294e19d5157e4d640e2c03e97c45891320ea445ef32792eaaa88
data/.rubocop.yml CHANGED
@@ -2,11 +2,8 @@ inherit_gem:
2
2
  simplycop: .simplycop.yml
3
3
 
4
4
  AllCops:
5
- TargetRubyVersion: 2.6
6
- Rails:
7
- Enabled: false
8
- Documentation:
9
- Enabled: false
5
+ TargetRubyVersion: 3.0
6
+
10
7
  Metrics/BlockLength:
11
8
  Max: 250
12
9
  Metrics/AbcSize:
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 3.1.2
1
+ 3.2.2
@@ -10,7 +10,7 @@ module HashExtensions
10
10
  end
11
11
 
12
12
  def deep_merge(hash_to_merge)
13
- merger = proc { |_, val1, val2| val1.is_a?(Hash) && val2.is_a?(Hash) ? val1.merge(val2, &merger) : val2 }
13
+ merger = proc { |_, val_1, val_2| val_1.is_a?(Hash) && val_2.is_a?(Hash) ? val_1.merge(val_2, &merger) : val_2 }
14
14
  merge(hash_to_merge, &merger)
15
15
  end
16
16
 
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Twiglet
4
+ class ErrorSerialiser
5
+ def serialise_error(error)
6
+ error_fields = {
7
+ error: {
8
+ type: error.class.to_s,
9
+ message: error.message
10
+ }
11
+ }
12
+ add_stack_trace(error_fields, error)
13
+ end
14
+
15
+ private
16
+
17
+ def add_stack_trace(hash_to_add_to, error)
18
+ hash_to_add_to[:error][:stack_trace] = error.backtrace if error.backtrace
19
+ hash_to_add_to
20
+ end
21
+ end
22
+ end
@@ -6,11 +6,13 @@ module Twiglet
6
6
  class Formatter < ::Logger::Formatter
7
7
  Hash.include HashExtensions
8
8
 
9
- def initialize(service_name,
10
- validator:,
11
- default_properties: {},
12
- context_provider: nil,
13
- now: -> { Time.now.utc })
9
+ def initialize(
10
+ service_name,
11
+ validator:,
12
+ default_properties: {},
13
+ context_provider: nil,
14
+ now: -> { Time.now.utc }
15
+ )
14
16
  @service_name = service_name
15
17
  @now = now
16
18
  @default_properties = default_properties
@@ -34,7 +36,7 @@ module Twiglet
34
36
  ecs: {
35
37
  version: '1.5.0'
36
38
  },
37
- "@timestamp": @now.call.iso8601(3),
39
+ '@timestamp': @now.call.iso8601(3),
38
40
  service: {
39
41
  name: @service_name
40
42
  },
@@ -6,6 +6,7 @@ require_relative 'formatter'
6
6
  require_relative '../hash_extensions'
7
7
  require_relative 'message'
8
8
  require_relative 'validator'
9
+ require_relative 'error_serialiser'
9
10
 
10
11
  module Twiglet
11
12
  class Logger < ::Logger
@@ -87,19 +88,9 @@ module Twiglet
87
88
  private
88
89
 
89
90
  def error_message(error, message = nil)
90
- error_fields = {
91
- error: {
92
- type: error.class.to_s,
93
- message: error.message
94
- }
95
- }
96
- add_stack_trace(error_fields, error)
91
+ error_hash = Twiglet::ErrorSerialiser.new.serialise_error(error)
97
92
  message = error.message if message.nil? || message.empty?
98
- Message.new(message).merge(error_fields)
99
- end
100
-
101
- def add_stack_trace(hash_to_add_to, error)
102
- hash_to_add_to[:error][:stack_trace] = error.backtrace if error.backtrace
93
+ Message.new(message).merge(error_hash)
103
94
  end
104
95
  end
105
96
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Twiglet
4
- VERSION = '3.7.2'
4
+ VERSION = '3.9.0'
5
5
  end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'minitest/autorun'
4
+ require 'minitest/mock'
5
+ require_relative '../lib/twiglet/error_serialiser'
6
+
7
+ describe Twiglet::ErrorSerialiser do
8
+ describe 'logging an exception' do
9
+ it 'should log an error with backtrace' do
10
+ 1 / 0
11
+ rescue StandardError => e
12
+ error_hash = Twiglet::ErrorSerialiser.new.serialise_error(e)
13
+ assert_equal 'divided by 0', error_hash[:error][:message]
14
+ assert_equal 'ZeroDivisionError', error_hash[:error][:type]
15
+ assert_match 'test/error_serialiser_test.rb', error_hash[:error][:stack_trace].first
16
+ end
17
+ end
18
+ end
@@ -17,7 +17,7 @@ describe HashExtensions do
17
17
  log: {
18
18
  level: 'error'
19
19
  },
20
- "@timestamp": '2020-05-09T15:13:20.736Z'
20
+ '@timestamp': '2020-05-09T15:13:20.736Z'
21
21
  }
22
22
 
23
23
  expected = actual.to_nested
@@ -26,8 +26,8 @@ describe HashExtensions do
26
26
 
27
27
  it 'should convert keys with . into nested objects' do
28
28
  actual = {
29
- "service.name": 'petshop',
30
- "log.level": 'error'
29
+ 'service.name': 'petshop',
30
+ 'log.level': 'error'
31
31
  }
32
32
 
33
33
  nested = actual.to_nested
@@ -38,10 +38,10 @@ describe HashExtensions do
38
38
 
39
39
  it 'should group nested objects' do
40
40
  actual = {
41
- "service.name": 'petshop',
42
- "service.id": 'ps001',
43
- "service.version": '0.9.1',
44
- "log.level": 'error'
41
+ 'service.name': 'petshop',
42
+ 'service.id': 'ps001',
43
+ 'service.version': '0.9.1',
44
+ 'log.level': 'error'
45
45
  }
46
46
 
47
47
  nested = actual.to_nested
@@ -54,10 +54,10 @@ describe HashExtensions do
54
54
 
55
55
  it 'should cope with more than two levels' do
56
56
  actual = {
57
- "http.request.method": 'get',
58
- "http.request.body.bytes": 112,
59
- "http.response.bytes": 1564,
60
- "http.response.status_code": 200
57
+ 'http.request.method': 'get',
58
+ 'http.request.body.bytes': 112,
59
+ 'http.response.bytes': 1564,
60
+ 'http.response.status_code': 200
61
61
  }
62
62
 
63
63
  nested = actual.to_nested
data/test/logger_test.rb CHANGED
@@ -34,8 +34,19 @@ describe Twiglet::Logger do
34
34
 
35
35
  it 'conforms to the standard Ruby Logger API' do
36
36
  [
37
- :debug, :debug?, :info, :info?, :warn, :warn?, :fatal, :fatal?, :error, :error?,
38
- :level, :level=, :sev_threshold=
37
+ :debug,
38
+ :debug?,
39
+ :info,
40
+ :info?,
41
+ :warn,
42
+ :warn?,
43
+ :fatal,
44
+ :fatal?,
45
+ :error,
46
+ :error?,
47
+ :level,
48
+ :level=,
49
+ :sev_threshold=
39
50
  ].each do |call|
40
51
  assert @logger.respond_to?(call), "Logger does not respond to #{call}"
41
52
  end
@@ -63,7 +74,7 @@ describe Twiglet::Logger do
63
74
  ecs: {
64
75
  version: '1.5.0'
65
76
  },
66
- "@timestamp": '2020-05-11T15:01:01.000Z',
77
+ '@timestamp': '2020-05-11T15:01:01.000Z',
67
78
  service: {
68
79
  name: 'petshop'
69
80
  },
@@ -269,19 +280,19 @@ describe Twiglet::Logger do
269
280
  @logger.info({ message: 'there' })
270
281
 
271
282
  expected_output =
272
- '{"ecs":{"version":"1.5.0"},"@timestamp":"2020-05-11T15:01:01.000Z",'\
273
- '"service":{"name":"petshop"},"log":{"level":"debug"},"message":"hi"}'\
274
- "\n"\
275
- '{"ecs":{"version":"1.5.0"},"@timestamp":"2020-05-11T15:01:01.000Z",'\
276
- '"service":{"name":"petshop"},"log":{"level":"info"},"message":"there"}'\
277
- "\n"\
283
+ '{"ecs":{"version":"1.5.0"},"@timestamp":"2020-05-11T15:01:01.000Z",' \
284
+ '"service":{"name":"petshop"},"log":{"level":"debug"},"message":"hi"}' \
285
+ "\n" \
286
+ '{"ecs":{"version":"1.5.0"},"@timestamp":"2020-05-11T15:01:01.000Z",' \
287
+ '"service":{"name":"petshop"},"log":{"level":"info"},"message":"there"}' \
288
+ "\n" \
278
289
 
279
290
  assert_equal expected_output, @buffer.string
280
291
  end
281
292
 
282
293
  it 'should work with mixed string and symbol properties' do
283
294
  log = {
284
- "trace.id": '1c8a5fb2-fecd-44d8-92a4-449eb2ce4dcb'
295
+ 'trace.id': '1c8a5fb2-fecd-44d8-92a4-449eb2ce4dcb'
285
296
  }
286
297
  event = {}
287
298
  log['event'] = event
@@ -404,7 +415,7 @@ describe Twiglet::Logger do
404
415
  ecs: {
405
416
  version: '1.5.0'
406
417
  },
407
- "@timestamp": '2020-05-11T15:01:01.000Z',
418
+ '@timestamp': '2020-05-11T15:01:01.000Z',
408
419
  service: {
409
420
  name: 'petshop'
410
421
  },
@@ -460,11 +471,11 @@ describe Twiglet::Logger do
460
471
  it 'should be able to convert dotted keys to nested objects' do
461
472
  @logger.debug(
462
473
  {
463
- "trace.id": '1c8a5fb2-fecd-44d8-92a4-449eb2ce4dcb',
474
+ 'trace.id': '1c8a5fb2-fecd-44d8-92a4-449eb2ce4dcb',
464
475
  message: 'customer bought a dog',
465
- "pet.name": 'Barker',
466
- "pet.species": 'dog',
467
- "pet.breed": 'Bitsa'
476
+ 'pet.name': 'Barker',
477
+ 'pet.species': 'dog',
478
+ 'pet.breed': 'Bitsa'
468
479
  }
469
480
  )
470
481
  log = read_json(@buffer)
@@ -479,10 +490,10 @@ describe Twiglet::Logger do
479
490
  it 'should be able to mix dotted keys and nested objects' do
480
491
  @logger.debug(
481
492
  {
482
- "trace.id": '1c8a5fb2-fecd-44d8-92a4-449eb2ce4dcb',
493
+ 'trace.id': '1c8a5fb2-fecd-44d8-92a4-449eb2ce4dcb',
483
494
  message: 'customer bought a dog',
484
495
  pet: { name: 'Barker', breed: 'Bitsa' },
485
- "pet.species": 'dog'
496
+ 'pet.species': 'dog'
486
497
  }
487
498
  )
488
499
  log = read_json(@buffer)
data/twiglet.gemspec CHANGED
@@ -17,7 +17,7 @@ Gem::Specification.new do |gem|
17
17
  gem.files = `git ls-files`.split("\n")
18
18
 
19
19
  gem.require_paths = ['lib']
20
- gem.required_ruby_version = '>= 2.6'
20
+ gem.required_ruby_version = '>= 3.0'
21
21
 
22
22
  gem.license = 'Copyright SimplyBusiness'
23
23
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: twiglet
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.7.2
4
+ version: 3.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Simply Business
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-04-11 00:00:00.000000000 Z
11
+ date: 2023-09-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json-schema
@@ -113,6 +113,7 @@ files:
113
113
  - examples/rack/request_logger.rb
114
114
  - examples/rack/request_logger_test.rb
115
115
  - lib/hash_extensions.rb
116
+ - lib/twiglet/error_serialiser.rb
116
117
  - lib/twiglet/formatter.rb
117
118
  - lib/twiglet/logger.rb
118
119
  - lib/twiglet/message.rb
@@ -120,6 +121,7 @@ files:
120
121
  - lib/twiglet/validator.rb
121
122
  - lib/twiglet/version.rb
122
123
  - mkdocs.yml
124
+ - test/error_serialiser_test.rb
123
125
  - test/formatter_test.rb
124
126
  - test/hash_extensions_test.rb
125
127
  - test/logger_test.rb
@@ -139,14 +141,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
139
141
  requirements:
140
142
  - - ">="
141
143
  - !ruby/object:Gem::Version
142
- version: '2.6'
144
+ version: '3.0'
143
145
  required_rubygems_version: !ruby/object:Gem::Requirement
144
146
  requirements:
145
147
  - - ">="
146
148
  - !ruby/object:Gem::Version
147
149
  version: '0'
148
150
  requirements: []
149
- rubygems_version: 3.3.7
151
+ rubygems_version: 3.4.10
150
152
  signing_key:
151
153
  specification_version: 4
152
154
  summary: Twiglet