Sha256: 834bd343c6eca03b56ae5c9161af4a9f43f3abef58d3124fcc6889f3ebd020d1

Contents?: true

Size: 1.9 KB

Versions: 18

Compression:

Stored size: 1.9 KB

Contents

# encoding: utf-8
# This file is distributed under New Relic's license terms.
# See https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details.

module NewRelic
  module Agent
    module AttributeProcessing
      module_function

      EMPTY_HASH_STRING_LITERAL = "{}".freeze
      EMPTY_ARRAY_STRING_LITERAL = "[]".freeze

      def flatten_and_coerce(object, prefix = nil, result = {}, &blk)
        if object.is_a? Hash
          flatten_and_coerce_hash(object, prefix, result, &blk)
        elsif object.is_a? Array
          flatten_and_coerce_array(object, prefix, result, &blk)
        elsif prefix
          val = Coerce.scalar(object)
          if blk
            blk.call(prefix, val)
          elsif !val.nil?
            result[prefix] = val
          end
        else
          NewRelic::Agent.logger.warn "Unexpected object: #{object.inspect} with nil prefix passed to NewRelic::Agent::AttributeProcessing.flatten_and_coerce"
        end
        result
      end

      def flatten_and_coerce_hash(hash, prefix, result, &blk)
        if hash.empty?
          if blk
            blk.call(prefix, EMPTY_HASH_STRING_LITERAL)
          else
            result[prefix] = EMPTY_HASH_STRING_LITERAL
          end
        else
          hash.each do |key, val|
            next_prefix = prefix ? "#{prefix}.#{key}" : key.to_s
            flatten_and_coerce(val, next_prefix, result, &blk)
          end
        end
      end

      def flatten_and_coerce_array(array, prefix, result, &blk)
        if array.empty?
          if blk
            blk.call(prefix, EMPTY_ARRAY_STRING_LITERAL)
          else
            result[prefix] = EMPTY_ARRAY_STRING_LITERAL
          end
        else
          array.each_with_index do |val, idx|
            next_prefix = prefix ? "#{prefix}.#{idx}" : idx.to_s
            flatten_and_coerce(val, next_prefix, result, &blk)
          end
        end
      end
    end
  end
end

Version data entries

18 entries across 18 versions & 1 rubygems

Version Path
newrelic_rpm-8.9.0 lib/new_relic/agent/attribute_processing.rb
newrelic_rpm-8.8.0 lib/new_relic/agent/attribute_processing.rb
newrelic_rpm-8.7.0 lib/new_relic/agent/attribute_processing.rb
newrelic_rpm-8.6.0 lib/new_relic/agent/attribute_processing.rb
newrelic_rpm-8.5.0 lib/new_relic/agent/attribute_processing.rb
newrelic_rpm-8.4.0 lib/new_relic/agent/attribute_processing.rb
newrelic_rpm-8.3.0 lib/new_relic/agent/attribute_processing.rb
newrelic_rpm-8.2.0 lib/new_relic/agent/attribute_processing.rb
newrelic_rpm-8.1.0 lib/new_relic/agent/attribute_processing.rb
newrelic_rpm-8.0.0 lib/new_relic/agent/attribute_processing.rb
newrelic_rpm-7.2.0 lib/new_relic/agent/attribute_processing.rb
newrelic_rpm-7.1.0 lib/new_relic/agent/attribute_processing.rb
newrelic_rpm-7.0.0 lib/new_relic/agent/attribute_processing.rb
newrelic_rpm-6.15.0 lib/new_relic/agent/attribute_processing.rb
newrelic_rpm-6.14.0 lib/new_relic/agent/attribute_processing.rb
newrelic_rpm-6.13.1 lib/new_relic/agent/attribute_processing.rb
newrelic_rpm-6.13.0 lib/new_relic/agent/attribute_processing.rb
newrelic_rpm-6.12.0.367 lib/new_relic/agent/attribute_processing.rb