traceable 1.1.1 → 1.2.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
  SHA1:
3
- metadata.gz: bc242330593a2f4843ca98a6565faa9ab90af60f
4
- data.tar.gz: a1a83721a83fdeedfee1ca0fc79894e6f10ecca6
3
+ metadata.gz: 2d9013920b6dba8371010fa2adc9907f2534f899
4
+ data.tar.gz: 0d7c6191c0a9a3e65487730386638d05ce6fcaee
5
5
  SHA512:
6
- metadata.gz: 7033d3e946a773d26a3925bc42b85742916d6cf9d5513dab28891e6e789c212eae87b06bc3225db4f4d7889c8e69f4a126b4e9ac4b11ce30ed710daed0699484
7
- data.tar.gz: caf12dda736fad2e7b5a112a4c70d49bf1d0615812ad617925fca158e0af8b100f2ea12e1537a5b9f6c80d7b38d47418374dba0929411364a29c952e5556ee4f
6
+ metadata.gz: 7d65e2b1746c66f4ecf41781b6fd1b0ccc4cd65345193691e83ca94c88daf3070e31b1a5a3d8e05858e849fd750118e2c5a1e510c21903b0f652a1c02ff2dbb6
7
+ data.tar.gz: 7514b665636b9cfedc34d3091168a154218289b17ac86cd63e15cbc025c5bb015e7e3e18fbeb5d24dc99e559ba230b81699f1df6b3cae8fc68fd5734b0c29533
@@ -5,30 +5,24 @@ module Traceable
5
5
  # generate log entries. Each log entry consists of a key/value
6
6
  # map ("tags"). Tags will be inherited from a parent instance,
7
7
  # if provided.
8
+
9
+ # rubocop:disable Metrics/ClassLength
8
10
  class Tracer
9
- attr_reader :logger
10
- attr_reader :id
11
+ attr_accessor :logger
11
12
  attr_reader :parent
12
13
  attr_reader :tags
13
14
 
14
- def initialize(parent_tracer, tags: nil)
15
- @logger = Traceable.config.logger
16
-
17
- @parent = case parent_tracer
18
- when nil
19
- nil
20
- when Tracer
21
- parent_tracer
22
- when Traceable
23
- parent_tracer.local_tracer
24
- else
25
- raise(ArgumentError, "#{parent_tracer} (#{parent_tracer.class})")
26
- end
27
-
15
+ def initialize(parent_tracer, tags: nil, logger: nil)
16
+ @parent = which_parent(parent_tracer)
17
+ @logger = logger || (@parent ? @parent.logger : Tracer.default_logger)
28
18
  @tags = @parent ? @parent.tags.dup : Tracer.default_tags
29
19
  @tags.merge!(tags) if tags
30
20
  end
31
21
 
22
+ def self.default_logger
23
+ Traceable.config.logger
24
+ end
25
+
32
26
  def self.default_tags
33
27
  tags = Traceable.config.default_tags.merge(
34
28
  trace: SecureRandom.uuid
@@ -126,6 +120,21 @@ module Traceable
126
120
  Thread.current[:tracer_stack] ||= []
127
121
  end
128
122
 
123
+ private
124
+
125
+ def which_parent(parent_tracer)
126
+ case parent_tracer
127
+ when nil
128
+ nil
129
+ when Tracer
130
+ parent_tracer
131
+ when Traceable
132
+ parent_tracer.local_tracer
133
+ else
134
+ raise(ArgumentError, "#{parent_tracer} (#{parent_tracer.class})")
135
+ end
136
+ end
137
+
129
138
  def push
130
139
  Tracer.tracer_stack.push self
131
140
  end
@@ -134,4 +143,5 @@ module Traceable
134
143
  Tracer.tracer_stack.pop
135
144
  end
136
145
  end
146
+ # rubocop:enable Metrics/ClassLength
137
147
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Traceable
4
- VERSION = '1.1.1'
4
+ VERSION = '1.2.0'
5
5
  end
@@ -18,7 +18,7 @@ RSpec.describe Traceable do
18
18
  let(:logs) { fake_logger.logs }
19
19
 
20
20
  before do
21
- allow_any_instance_of(Traceable::Tracer).to receive(:logger) { fake_logger }
21
+ allow_any_instance_of(Traceable::Config).to receive(:logger) { fake_logger }
22
22
  end
23
23
 
24
24
  let(:subject_class) do
@@ -322,6 +322,19 @@ RSpec.describe Traceable do
322
322
  t.info(message: 'just a test')
323
323
  end
324
324
  end
325
+
326
+ context 'with a custom logger' do
327
+ let(:logger2) { FakeLogger.new }
328
+ let(:logger3) { FakeLogger.new }
329
+
330
+ it 'sends logs to it' do
331
+ t = Traceable::Tracer.new(nil, logger: logger2)
332
+ expect { t.info(message: 'hello') }.to change { logger2.logs.size }.by 1
333
+
334
+ t.logger = logger3
335
+ expect { t.info(message: 'hi again') }.to change { logger3.logs.size }.by 1
336
+ end
337
+ end
325
338
  end
326
339
  end
327
340
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: traceable
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeremy Slade
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-02-24 00:00:00.000000000 Z
11
+ date: 2018-03-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler