twiglet 3.9.1 → 3.10.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e7e40c55a5e7824f229b8736b8c09168b7edd95d2c17fc7d88117892ed5839b4
4
- data.tar.gz: 84524cfcbead9663eb2fc66668a5b5c54784e04e4a4f7c842f29dcaf12b8e033
3
+ metadata.gz: 6362109470f346c6703ed9e13e82904195f201cac31e1edf1dad8714c4312d79
4
+ data.tar.gz: a06b359e837cf995f78efdab94c53e5017ccc4ca6d06373a05148f0e4b93621c
5
5
  SHA512:
6
- metadata.gz: 4fa6bb1c729728b551c8af2d1f1ca36b8a4d2eb75b517d6feff0c24f7135edbb45cccce3b3472f01e22c053100417ddbff0257f7d2818d47c556254994ca18e9
7
- data.tar.gz: 47190de2fd3cc21aa36db244783fe8e7b335c7c1f0cc10f288eb71d4dc10372b68304c63817e1e83922290dd513f4b609564d29b46e5bdb850e8c2a85334ea9f
6
+ metadata.gz: cd56a05ee8a42910901a85de11940ea16b1e6a4578fd2501aeb4e794674561dd9594bb10fedc0b07c207df5823c44361cf1a72d753b241fe4e564e786464f459
7
+ data.tar.gz: 7fa75694d0ff55caa28df71703fd4e8c14e00185149c456b26c8030315519e0caafcc77e0e10efe1d04aae1093dd53c9f1b4462b97f04d8352c996241a271662
data/catalog-info.yaml CHANGED
@@ -1,8 +1,11 @@
1
1
  apiVersion: backstage.io/v1alpha1
2
2
  kind: Component
3
3
  metadata:
4
- name: twiglet
4
+ name: twiglet-ruby
5
+ title: Twiglet
5
6
  description: simple logging
7
+ annotations:
8
+ rubygems.org/name: "twiglet"
6
9
  spec:
7
10
  type: library
8
11
  lifecycle: production
@@ -2,7 +2,7 @@
2
2
 
3
3
  module HashExtensions
4
4
  def to_nested
5
- self unless contains_dotted_key?
5
+ return self unless contains_dotted_key?
6
6
 
7
7
  keys.reduce({}) do |nested, key|
8
8
  nested.deep_merge(build_nested_object(key, self[key]))
@@ -62,8 +62,14 @@ module Twiglet
62
62
  super(message, &block)
63
63
  end
64
64
 
65
- def error(message = nil, error = nil, &block)
66
- message = error_message(error, message) if error
65
+ def error(message_or_error = nil, error = nil, &block)
66
+ message = if error
67
+ error_message(error, message_or_error)
68
+ elsif message_or_error.is_a?(Exception)
69
+ error_message(message_or_error)
70
+ else
71
+ message_or_error
72
+ end
67
73
 
68
74
  super(message, &block)
69
75
  end
@@ -76,9 +82,15 @@ module Twiglet
76
82
  end
77
83
 
78
84
  def context_provider(&blk)
85
+ new_context_provider = blk
86
+ if @args[:context_provider]
87
+ new_context_provider = lambda do
88
+ @args[:context_provider].call.merge(blk.call)
89
+ end
90
+ end
79
91
  self.class.new(
80
92
  @service_name,
81
- **@args.merge(context_provider: blk)
93
+ **@args.merge(context_provider: new_context_provider)
82
94
  )
83
95
  end
84
96
 
@@ -8,7 +8,7 @@ module Twiglet
8
8
  when Hash
9
9
  replace(msg.transform_keys!(&:to_sym))
10
10
  else
11
- super(msg)
11
+ super
12
12
  end
13
13
  end
14
14
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Twiglet
4
- VERSION = '3.9.1'
4
+ VERSION = '3.10.0'
5
5
  end
data/test/logger_test.rb CHANGED
@@ -3,6 +3,7 @@
3
3
  require 'minitest/autorun'
4
4
  require 'minitest/mock'
5
5
  require_relative '../lib/twiglet/logger'
6
+ require 'active_support'
6
7
 
7
8
  LEVELS = [
8
9
  { method: :debug, level: 'debug' },
@@ -266,6 +267,27 @@ describe Twiglet::Logger do
266
267
  assert_equal 'my-context-id', log[:context][:id]
267
268
  end
268
269
 
270
+ it "previously supplied context providers should be preserved" do
271
+ # Let's add some context to this customer journey
272
+ purchase_logger = @logger
273
+ .context_provider { { 'first-context' => { 'first-id' => 'my-first-context-id' } } }
274
+ .context_provider { { 'second-context' => { 'second-id' => 'my-second-context-id' } } }
275
+ # do stuff
276
+ purchase_logger.info(
277
+ {
278
+ message: 'customer bought a dog',
279
+ pet: { name: 'Barker', species: 'dog', breed: 'Bitsa' }
280
+ }
281
+ )
282
+
283
+ log = read_json @buffer
284
+
285
+ assert_equal 'customer bought a dog', log[:message]
286
+ assert_equal 'Barker', log[:pet][:name]
287
+ assert_equal 'my-first-context-id', log[:'first-context'][:'first-id']
288
+ assert_equal 'my-second-context-id', log[:'second-context'][:'second-id']
289
+ end
290
+
269
291
  it "should log 'message' string property" do
270
292
  message = {}
271
293
  message['message'] = 'Guinea pigs arrived'
@@ -335,8 +357,8 @@ describe Twiglet::Logger do
335
357
  actual_log = read_json(@buffer)
336
358
 
337
359
  assert_equal 'Artificially raised exception', actual_log[:message]
338
- assert_equal 'divided by 0', actual_log[:error][:message]
339
360
  assert_equal 'ZeroDivisionError', actual_log[:error][:type]
361
+ assert_equal 'divided by 0', actual_log[:error][:message]
340
362
  assert_match 'test/logger_test.rb', actual_log[:error][:stack_trace].first
341
363
  end
342
364
 
@@ -353,35 +375,53 @@ describe Twiglet::Logger do
353
375
  end
354
376
 
355
377
  it 'should log an error with string message' do
356
- e = StandardError.new('Unknown error')
378
+ e = StandardError.new('Some error')
357
379
  @logger.error('Artificially raised exception with string message', e)
358
380
 
359
381
  actual_log = read_json(@buffer)
360
382
 
361
383
  assert_equal 'Artificially raised exception with string message', actual_log[:message]
362
384
  assert_equal 'StandardError', actual_log[:error][:type]
363
- assert_equal 'Unknown error', actual_log[:error][:message]
385
+ assert_equal 'Some error', actual_log[:error][:message]
364
386
  end
365
387
 
366
- it 'should log error type properly even when active_support/json is required' do
367
- require 'active_support/json'
368
- e = StandardError.new('Unknown error')
369
- @logger.error('Artificially raised exception with string message', e)
388
+ it 'should log an error if no message is given' do
389
+ e = StandardError.new('Some error')
390
+ @logger.error(e)
370
391
 
371
392
  actual_log = read_json(@buffer)
372
393
 
394
+ assert_equal 'Some error', actual_log[:message]
373
395
  assert_equal 'StandardError', actual_log[:error][:type]
396
+ assert_equal 'Some error', actual_log[:error][:message]
374
397
  end
375
398
 
376
- it 'can log just an error as "error", if no message is given' do
377
- e = StandardError.new('some error')
399
+ it 'should log an error if nil message is given' do
400
+ e = StandardError.new('Some error')
378
401
  @logger.error(nil, e)
379
402
 
380
403
  actual_log = read_json(@buffer)
381
404
 
382
- assert_equal 'some error', actual_log[:message]
405
+ assert_equal 'Some error', actual_log[:message]
406
+ assert_equal 'StandardError', actual_log[:error][:type]
407
+ assert_equal 'Some error', actual_log[:error][:message]
408
+ end
409
+
410
+ it 'should log a string if no error is given' do
411
+ @logger.error('Some error')
412
+
413
+ actual_log = read_json(@buffer)
414
+
415
+ assert_equal 'Some error', actual_log[:message]
416
+ end
417
+
418
+ it 'should log error type properly even when active_support is required' do
419
+ e = StandardError.new('Unknown error')
420
+ @logger.error('Artificially raised exception with string message', e)
421
+
422
+ actual_log = read_json(@buffer)
423
+
383
424
  assert_equal 'StandardError', actual_log[:error][:type]
384
- assert_equal 'some error', actual_log[:error][:message]
385
425
  end
386
426
 
387
427
  [:debug, :info, :warn].each do |level|
data/twiglet.gemspec CHANGED
@@ -21,7 +21,7 @@ Gem::Specification.new do |gem|
21
21
 
22
22
  gem.license = 'Copyright SimplyBusiness'
23
23
 
24
- gem.add_runtime_dependency 'json-schema'
24
+ gem.add_dependency 'json-schema'
25
25
  gem.add_development_dependency 'minitest'
26
26
  gem.add_development_dependency 'rake'
27
27
  gem.add_development_dependency 'simplecov', '0.17.1'
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.9.1
4
+ version: 3.10.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-09-26 00:00:00.000000000 Z
11
+ date: 2024-08-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json-schema