class Honeybadger::Config::Mash

def get(key)

def get(key)
  k = key.to_sym
  return hash[k] if hash.has_key?(k)
  config.get(k)
end

def getter?(method_name)

def getter?(method_name)
  key = key(method_name)
  KEYS.any? {|k| k == key }
end

def initialize(config, prefix: nil, hash: {})

def initialize(config, prefix: nil, hash: {})
  @config = config
  @prefix = prefix
  @hash = hash
end

def key(method_name)

def key(method_name)
  parts = [prefix, method_name.to_s.chomp('=')]
  parts.compact!
  parts.join('.')
end

def mash?(method)

def mash?(method)
  key = [prefix, method.to_s + '.'].compact.join('.')
  KEYS.any? {|k| k.start_with?(key) }
end

def method_missing(method_name, *args, &block)

def method_missing(method_name, *args, &block)
  m = method_name.to_s
  if mash?(m)
    return Mash.new(config, prefix: key(m), hash: hash)
  elsif setter?(m)
    return hash.send(:[]=, key(m).to_sym, args[0])
  elsif getter?(m)
    return get(key(m))
  end
  super
end

def respond_to_missing?(method_name, include_private = false)

def respond_to_missing?(method_name, include_private = false)
  true
end

def setter?(method_name)

def setter?(method_name)
  return false unless method_name.to_s =~ /=\z/
  key = key(method_name)
  KEYS.any? {|k| k == key }
end

def to_hash

def to_hash
  hash.to_hash
end