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 =
'?'.freeze
- 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
101 102 103 |
# File 'lib/datadog/tracing/contrib/utils/quantization/hash.rb', line 101 def convert_value(value) value.is_a?(Symbol) ? value.to_s : value end |
.format(hash_obj, options = {}) ⇒ Object
19 20 21 22 23 24 |
# File 'lib/datadog/tracing/contrib/utils/quantization/hash.rb', line 19 def format(hash_obj, = {}) ||= {} format!(hash_obj, ) rescue StandardError [:placeholder] || PLACEHOLDER end |
.format!(hash_obj, options = {}) ⇒ Object
26 27 28 29 30 |
# File 'lib/datadog/tracing/contrib/utils/quantization/hash.rb', line 26 def format!(hash_obj, = {}) ||= {} = (DEFAULT_OPTIONS, ) format_hash(hash_obj, ) end |
.format_array(value, options) ⇒ Object
64 65 66 67 68 69 70 71 72 |
# File 'lib/datadog/tracing/contrib/utils/quantization/hash.rb', line 64 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
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/datadog/tracing/contrib/utils/quantization/hash.rb', line 32 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
50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/datadog/tracing/contrib/utils/quantization/hash.rb', line 50 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
96 97 98 99 |
# File 'lib/datadog/tracing/contrib/utils/quantization/hash.rb', line 96 def indifferent_equals(value) value = convert_value(value) ->(compared_value) { value == convert_value(compared_value) } end |
.merge_options(original, additional) ⇒ Object
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/datadog/tracing/contrib/utils/quantization/hash.rb', line 74 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 |