Sha256: b53126d8044d3f87b5e26f99cc8c6669b3c71898c08531f25972832a1fcf8f63

Contents?: true

Size: 1.39 KB

Versions: 51

Compression:

Stored size: 1.39 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 Configuration
      class DottedHash < ::Hash
        def initialize(hash, keep_nesting=false)
          # Add the hash keys to our collection explicitly so they survive the
          # dot flattening.  This is typical for full config source instances,
          # but not for uses of DottedHash serializing for transmission.
          self.merge!(hash) if keep_nesting

          self.merge!(dot_flattened(hash))
          DottedHash.symbolize(self)
        end

        def inspect
          "#<#{self.class.name}:#{object_id} #{super}>"
        end

        def to_hash
          {}.replace(self)
        end

        def self.symbolize(hash)
          hash.keys.each do |key|
            hash[key.to_sym] = hash.delete(key)
          end
        end

        protected
        # turns {'a' => {'b' => 'c'}} into {'a.b' => 'c'}
        def dot_flattened(nested_hash, names=[], result={})
          nested_hash.each do |key, val|
            next if val == nil
            if val.respond_to?(:has_key?)
              dot_flattened(val, names + [key], result)
            else
              result[(names + [key]).join('.')] = val
            end
          end
          result
        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/configuration/dotted_hash.rb
newrelic_rpm-6.10.0.364 lib/new_relic/agent/configuration/dotted_hash.rb
newrelic_rpm-6.9.0.363 lib/new_relic/agent/configuration/dotted_hash.rb
newrelic_rpm-6.8.0.360 lib/new_relic/agent/configuration/dotted_hash.rb
newrelic_rpm-6.7.0.359 lib/new_relic/agent/configuration/dotted_hash.rb
newrelic_rpm-6.6.0.358 lib/new_relic/agent/configuration/dotted_hash.rb
newrelic_rpm-6.5.0.357 lib/new_relic/agent/configuration/dotted_hash.rb
newrelic_rpm-6.4.0.356 lib/new_relic/agent/configuration/dotted_hash.rb
newrelic_rpm-6.3.0.355 lib/new_relic/agent/configuration/dotted_hash.rb
newrelic_rpm-6.2.0.354 lib/new_relic/agent/configuration/dotted_hash.rb
newrelic_rpm-6.1.0.352 lib/new_relic/agent/configuration/dotted_hash.rb
newrelic_rpm-6.0.0.351 lib/new_relic/agent/configuration/dotted_hash.rb
newrelic_rpm-5.7.0.350 lib/new_relic/agent/configuration/dotted_hash.rb
newrelic_rpm-5.6.0.349 lib/new_relic/agent/configuration/dotted_hash.rb
newrelic_rpm-5.5.0.348 lib/new_relic/agent/configuration/dotted_hash.rb
newrelic_rpm-5.4.0.347 lib/new_relic/agent/configuration/dotted_hash.rb
newrelic_rpm-5.3.0.346 lib/new_relic/agent/configuration/dotted_hash.rb
newrelic_rpm-5.2.0.345 lib/new_relic/agent/configuration/dotted_hash.rb
newrelic_rpm-5.1.0.344 lib/new_relic/agent/configuration/dotted_hash.rb
newrelic_rpm-5.0.0.342 lib/new_relic/agent/configuration/dotted_hash.rb