traceable 1.4.0 → 1.5.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: 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