Module: Datadog::Tracing::Contrib::Utils::Quantization::Hash
- Defined in:
- lib/datadog/tracing/contrib/utils/quantization/hash.rb
Overview
Quantization for Hash
Constant Summary collapse
- PLACEHOLDER =
'?'
- EXCLUDE_KEYS =
[].freeze
- SHOW_KEYS =
[].freeze
- DEFAULT_OPTIONS =
{ exclude: EXCLUDE_KEYS, show: SHOW_KEYS, placeholder: PLACEHOLDER }.freeze
Class Method Summary collapse
- .convert_value(value) ⇒ Object
- .format(hash_obj, options = {}) ⇒ Object
- .format!(hash_obj, options = {}) ⇒ Object
- .format_array(value, options) ⇒ Object
- .format_hash(hash_obj, options = {}) ⇒ Object
- .format_value(value, options = {}) ⇒ Object
- .indifferent_equals(value) ⇒ Object
- .merge_options(original, additional) ⇒ Object
Class Method Details
.convert_value(value) ⇒ Object
103 104 105 |
# File 'lib/datadog/tracing/contrib/utils/quantization/hash.rb', line 103 def convert_value(value) value.is_a?(Symbol) ? value.to_s : value end |
.format(hash_obj, options = {}) ⇒ Object
21 22 23 24 25 26 |
# File 'lib/datadog/tracing/contrib/utils/quantization/hash.rb', line 21 def format(hash_obj, = {}) ||= {} format!(hash_obj, ) rescue StandardError [:placeholder] || PLACEHOLDER end |
.format!(hash_obj, options = {}) ⇒ Object
28 29 30 31 32 |
# File 'lib/datadog/tracing/contrib/utils/quantization/hash.rb', line 28 def format!(hash_obj, = {}) ||= {} = (DEFAULT_OPTIONS, ) format_hash(hash_obj, ) end |
.format_array(value, options) ⇒ Object
66 67 68 69 70 71 72 73 74 |
# File 'lib/datadog/tracing/contrib/utils/quantization/hash.rb', line 66 def format_array(value, ) if value.any? { |v| v.class <= ::Hash || v.class <= Array } first_entry = format_value(value.first, ) value.size > 1 ? [first_entry, [:placeholder]] : [first_entry] # Otherwise short-circuit and return single placeholder else [[:placeholder]] end end |
.format_hash(hash_obj, options = {}) ⇒ Object
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/datadog/tracing/contrib/utils/quantization/hash.rb', line 34 def format_hash(hash_obj, = {}) case hash_obj when ::Hash return {} if [:exclude] == :all return hash_obj if [:show] == :all hash_obj.each_with_object({}) do |(key, value), quantized| if [:show].any?(&indifferent_equals(key)) quantized[key] = value elsif [:exclude].none?(&indifferent_equals(key)) quantized[key] = format_value(value, ) end end else format_value(hash_obj, ) end end |
.format_value(value, options = {}) ⇒ Object
52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/datadog/tracing/contrib/utils/quantization/hash.rb', line 52 def format_value(value, = {}) return value if [:show] == :all case value when ::Hash format_hash(value, ) when Array # If any are objects, format them. format_array(value, ) else [:placeholder] end end |
.indifferent_equals(value) ⇒ Object
98 99 100 101 |
# File 'lib/datadog/tracing/contrib/utils/quantization/hash.rb', line 98 def indifferent_equals(value) value = convert_value(value) ->(compared_value) { value == convert_value(compared_value) } end |
.merge_options(original, additional) ⇒ Object
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/datadog/tracing/contrib/utils/quantization/hash.rb', line 76 def (original, additional) {}.tap do || # Show # If either is :all, value becomes :all [:show] = if original[:show] == :all || additional[:show] == :all :all else (original[:show] || []).dup.concat(additional[:show] || []).uniq end # Exclude # If either is :all, value becomes :all [:exclude] = if original[:exclude] == :all || additional[:exclude] == :all :all else (original[:exclude] || []).dup.concat(additional[:exclude] || []).uniq end [:placeholder] = additional[:placeholder] || original[:placeholder] end end |