class Hashie::Mash

def method_missing(method_name, *args, &blk)

def method_missing(method_name, *args, &blk)
  return self[method_name] if key?(method_name)
  match = method_name.to_s.match(/(.*?)([?=!]?)$/)
  case match[2]
  when "="
    self[match[1]] = args.first
  when "?"
    key?(match[1])
  when "!"
    initializing_reader(match[1])
  else
    default(method_name, *args, &blk)
  end
end