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 +4 -4
- data/lib/traceable/args.rb +19 -10
- data/lib/traceable/config.rb +17 -0
- data/lib/traceable/version.rb +1 -1
- data/spec/traceable_args_spec.rb +16 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 13c55b0d6931dd2f0f4184feeef4cd406888e010
|
4
|
+
data.tar.gz: 04e77dd75e7e855fd2cd7a1c9960fac5dfed38cd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 505830cf85e00c1a10191174f19fee91c60a0ee87bb2f08aec2b955b09076559854f785c07bd33ec3963e4cb2566838d2f98ad8c7aeae26623d99acd346dfd64
|
7
|
+
data.tar.gz: 9b257ae1d93c01b3f284f5bbcb4b5655f2beeba3340b0608497e953861ee15005c3d6f3839d46cfcd6bda153fa89c0f6d86e57c3894164dcf0b70203a0dd0756
|
data/lib/traceable/args.rb
CHANGED
@@ -24,37 +24,46 @@ module Traceable
|
|
24
24
|
end
|
25
25
|
|
26
26
|
MAX_STRING_LENGTH = 5000
|
27
|
-
|
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
|
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 >
|
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
|
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 >
|
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
|
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})"
|
data/lib/traceable/config.rb
CHANGED
@@ -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
|
data/lib/traceable/version.rb
CHANGED
data/spec/traceable_args_spec.rb
CHANGED
@@ -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(
|
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
|
+
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-
|
11
|
+
date: 2018-07-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|