Sha256: 421efca5372714bedcfaf188c7081f2d0dcb42d1bf2e9de1f8d4824990c8c184

Contents?: true

Size: 1.89 KB

Versions: 51

Compression:

Stored size: 1.89 KB

Contents

# encoding: utf-8
# This file is distributed under New Relic's license terms.
# See https://github.com/newrelic/rpm/blob/master/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

51 entries across 51 versions & 2 rubygems

Version Path
newrelic_rpm-6.11.0.365 lib/new_relic/agent/attribute_processing.rb
newrelic_rpm-6.10.0.364 lib/new_relic/agent/attribute_processing.rb
newrelic_rpm-6.9.0.363 lib/new_relic/agent/attribute_processing.rb
newrelic_rpm-6.8.0.360 lib/new_relic/agent/attribute_processing.rb
newrelic_rpm-6.7.0.359 lib/new_relic/agent/attribute_processing.rb
newrelic_rpm-6.6.0.358 lib/new_relic/agent/attribute_processing.rb
newrelic_rpm-6.5.0.357 lib/new_relic/agent/attribute_processing.rb
newrelic_rpm-6.4.0.356 lib/new_relic/agent/attribute_processing.rb
newrelic_rpm-6.3.0.355 lib/new_relic/agent/attribute_processing.rb
newrelic_rpm-6.2.0.354 lib/new_relic/agent/attribute_processing.rb
newrelic_rpm-6.1.0.352 lib/new_relic/agent/attribute_processing.rb
newrelic_rpm-6.0.0.351 lib/new_relic/agent/attribute_processing.rb
newrelic_rpm-5.7.0.350 lib/new_relic/agent/attribute_processing.rb
newrelic_rpm-5.6.0.349 lib/new_relic/agent/attribute_processing.rb
newrelic_rpm-5.5.0.348 lib/new_relic/agent/attribute_processing.rb
newrelic_rpm-5.4.0.347 lib/new_relic/agent/attribute_processing.rb
newrelic_rpm-5.3.0.346 lib/new_relic/agent/attribute_processing.rb
newrelic_rpm-5.2.0.345 lib/new_relic/agent/attribute_processing.rb
newrelic_rpm-5.1.0.344 lib/new_relic/agent/attribute_processing.rb
newrelic_rpm-5.0.0.342 lib/new_relic/agent/attribute_processing.rb