Sha256: 3302270998cf8572fccd87745184b4c19f1ad3b543e3be87ee1533406ce6bf19

Contents?: true

Size: 842 Bytes

Versions: 1

Compression:

Stored size: 842 Bytes

Contents

# frozen_string_literal: true

module Runger
  module Ext
    # Convert Hash with mixed array and hash values to an
    # array of paths.
    module FlattenNames
      refine ::Array do
        def flatten_names(prefix, buf)
          if empty?
            buf << :"#{prefix}"
            return buf
          end

          each_with_object(buf) do |name, acc|
            if name.is_a?(::Symbol)
              acc << :"#{prefix}.#{name}"
            else
              name.flatten_names(prefix, acc)
            end
          end
        end
      end

      refine ::Hash do
        def flatten_names(prefix = nil, buf = [])
          each_with_object(buf) do |(k, v), acc|
            parent = prefix ? "#{prefix}.#{k}" : k
            v.flatten_names(parent, acc)
          end
        end
      end

      using self
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
runger_config-4.0.0 lib/runger/ext/flatten_names.rb