class ConfigKit::SlashedHash

Public Class Methods

new(hash, keep_nesting=false) click to toggle source
# File lib/config_kit/ext/slashed_hash.rb, line 4
def initialize(hash, keep_nesting=false)
  self.merge!(hash) if keep_nesting

  self.merge!(dot_flattened(hash))
  SlashedHash.symbolize(self)
end
symbolize(hash) click to toggle source
# File lib/config_kit/ext/slashed_hash.rb, line 19
def self.symbolize(hash)
  hash.keys.each do |key|
    hash[key.to_sym] = hash.delete(key)
  end
end

Public Instance Methods

inspect() click to toggle source
# File lib/config_kit/ext/slashed_hash.rb, line 11
def inspect
  "#<#{self.class.name}:#{object_id} #{super}>"
end
to_hash() click to toggle source
# File lib/config_kit/ext/slashed_hash.rb, line 15
def to_hash
  {}.replace(self)
end

Protected Instance Methods

dot_flattened(nested_hash, names=[], result={}) click to toggle source

turns {'a' => {'b' => 'c'}} into {'a.b' => 'c'}

# File lib/config_kit/ext/slashed_hash.rb, line 27
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)
    elsif val.is_a?(Array)
      result[(names + [key]).join('/')] = (val.map do |e|
        raise SlashedHashTypeError.new "Not Support #{e.class.name} in array" unless e.respond_to?(:to_s)
        e.to_s
      end).join(',')
    else
      result[(names + [key]).join('/')] = val
    end
  end
  result
end