traceable 1.4.0 → 1.5.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
  SHA1:
3
- metadata.gz: 3b33985a7f1cd981ee07372be082ea2686776086
4
- data.tar.gz: 956815bb6c9baa2fb5d141497169aed860186b94
3
+ metadata.gz: 13c55b0d6931dd2f0f4184feeef4cd406888e010
4
+ data.tar.gz: 04e77dd75e7e855fd2cd7a1c9960fac5dfed38cd
5
5
  SHA512:
6
- metadata.gz: a69ca83d50eafe13fea34bc927c5d41e5f5a46ead4b2b4ed438150f9f66a0edf80a86600e31934d7319e862ad4043a38a407237584be1c326351dd15c2fb3249
7
- data.tar.gz: c8209b9f31551240e07ecc14dff517da72acaca75a6b6a76a83ede43252ee47c5d265bb910b2448761622d136e0223e279aa0e84d9fbd80a298031a444e9e5be
6
+ metadata.gz: 505830cf85e00c1a10191174f19fee91c60a0ee87bb2f08aec2b955b09076559854f785c07bd33ec3963e4cb2566838d2f98ad8c7aeae26623d99acd346dfd64
7
+ data.tar.gz: 9b257ae1d93c01b3f284f5bbcb4b5655f2beeba3340b0608497e953861ee15005c3d6f3839d46cfcd6bda153fa89c0f6d86e57c3894164dcf0b70203a0dd0756
@@ -24,37 +24,46 @@ module Traceable
24
24
  end
25
25
 
26
26
  MAX_STRING_LENGTH = 5000
27
- TRUNC_STRING_LENGTH = MAX_STRING_LENGTH - 3
27
+ MAX_ARRAY_VALUES = 30
28
+ MAX_HASH_KEYS = 30
29
+
30
+ @max_string_length = MAX_STRING_LENGTH
31
+ @trunc_string_length = @max_string_length - 3
32
+ @max_array_values = MAX_ARRAY_VALUES
33
+ @max_hash_keys = MAX_HASH_KEYS
34
+
35
+ def self.set_config_limits(max_string_length:, max_array_values:, max_hash_keys:)
36
+ @max_string_length = max_string_length.nil? ? MAX_STRING_LENGTH : max_string_length
37
+ @trunc_string_length = [@max_string_length, 4].max - 3
38
+ @max_array_values = max_array_values.nil? ? MAX_ARRAY_VALUES : max_array_values
39
+ @max_hash_keys = max_hash_keys.nil? ? MAX_HASH_KEYS : max_array_values
40
+ end
28
41
 
29
42
  def self.format_string(val)
30
- return val[0..TRUNC_STRING_LENGTH] + '...' if val.size > MAX_STRING_LENGTH
43
+ return val[0..@trunc_string_length] + '...' if val.size > @max_string_length
31
44
  val
32
45
  end
33
46
 
34
- MAX_ARRAY_VALUES = 10
35
-
36
47
  def self.format_array_of_values(val_array)
37
48
  return format_array_of_values(truncated_array(val_array)) \
38
- if val_array.size > MAX_ARRAY_VALUES
49
+ if val_array.size > @max_array_values
39
50
  val_array.map { |v| format_value(v) }
40
51
  end
41
52
 
42
53
  def self.truncated_array(val_array)
43
- subset = val_array[0..MAX_ARRAY_VALUES - 2]
54
+ subset = val_array[0..@max_array_values - 2]
44
55
  subset << "...(#{val_array.size - subset.size})"
45
56
  subset
46
57
  end
47
58
 
48
- MAX_HASH_KEYS = 10
49
-
50
59
  def self.format_hash_of_values(val_hash)
51
60
  return format_hash_of_values(truncated_hash(val_hash)) \
52
- if val_hash.size > MAX_HASH_KEYS
61
+ if val_hash.size > @max_hash_keys
53
62
  Hash[val_hash.map { |k, v| [k, format_value(v)] }]
54
63
  end
55
64
 
56
65
  def self.truncated_hash(val_hash)
57
- first_keys = val_hash.keys[0..MAX_HASH_KEYS - 2]
66
+ first_keys = val_hash.keys[0..@max_hash_keys - 2]
58
67
  first_vals = first_keys.map { |k| val_hash[k] }
59
68
  first_keys << :___
60
69
  first_vals << "...(#{val_hash.size - first_vals.size})"
@@ -6,20 +6,37 @@ module Traceable
6
6
  class Config
7
7
  attr_accessor :default_tags
8
8
  attr_accessor :logger
9
+ attr_accessor :max_string_length
10
+ attr_accessor :max_array_values
11
+ attr_accessor :max_hash_keys
9
12
 
10
13
  def initialize
11
14
  @logger = Logger.new(STDOUT)
12
15
  @logger.level = Logger::INFO
13
16
 
14
17
  @default_tags = {}
18
+
19
+ @max_string_length = Args::MAX_STRING_LENGTH
20
+ @max_array_values = Args::MAX_ARRAY_VALUES
21
+ @max_hash_keys = Args::MAX_HASH_KEYS
15
22
  end
16
23
  end
17
24
 
18
25
  def self.configure(&_)
19
26
  yield config
27
+ update_args_config
28
+ config
20
29
  end
21
30
 
22
31
  def self.config
23
32
  @config ||= Config.new
24
33
  end
34
+
35
+ def self.update_args_config
36
+ Args.set_config_limits(
37
+ max_string_length: config.max_string_length,
38
+ max_array_values: config.max_array_values,
39
+ max_hash_keys: config.max_hash_keys
40
+ )
41
+ end
25
42
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Traceable
4
- VERSION = '1.4.0'
4
+ VERSION = '1.5.0'
5
5
  end
@@ -1,6 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  RSpec.describe Traceable::Args do
4
+ before do
5
+ Traceable.configure do |config|
6
+ config.max_string_length = 2000
7
+ config.max_array_values = 10
8
+ config.max_hash_keys = 10
9
+ end
10
+ end
11
+
4
12
  describe '#args_to_tags' do
5
13
  class Foo
6
14
  class << self
@@ -27,14 +35,15 @@ RSpec.describe Traceable::Args do
27
35
  end
28
36
 
29
37
  let(:letters) { %w[a b c d e f g h i j k l m n o p q r s t u v w x y z] }
38
+ let(:long_string) { 'abcdefghijklmnopqrstuvwxyz'. * 100 }
39
+ let(:long_string_truncated) { long_string[0..1997] + '...' }
30
40
 
31
41
  describe '#format_value' do
32
- let(:long_string) { 'abcdefghijklmnopqrstuvwxyz'. * 1000 }
33
42
  let(:number) { 1 }
34
43
 
35
44
  it 'truncates long strings' do
36
45
  expect(Traceable::Args.format_value(long_string))
37
- .to eq(long_string[0..4997] + '...')
46
+ .to eq(long_string_truncated)
38
47
  end
39
48
 
40
49
  it 'returns simple values un-modified' do
@@ -59,5 +68,10 @@ RSpec.describe Traceable::Args do
59
68
  .to eq(a: 'a', b: 'b', c: 'c', d: 'd', e: 'e',
60
69
  f: 'f', g: 'g', h: 'h', i: 'i', ___: '...(17)')
61
70
  end
71
+
72
+ it 'truncates long strings in hashes' do
73
+ expect(Traceable::Args.format_hash_of_values(foo: long_string))
74
+ .to eq(foo: long_string_truncated)
75
+ end
62
76
  end
63
77
  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.4.0
4
+ version: 1.5.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-07-18 00:00:00.000000000 Z
11
+ date: 2018-07-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler