module PhusionPassenger::Utils::JSON::Generator

def generate(obj)

def generate(obj)
  raise ArgumentError unless obj.is_a? Array or obj.is_a? Hash
  generate_type(obj)
end

def generate_Array(ary) '[%s]' % ary.map {|o| generate_type(o) }.join(', ') end

def generate_Array(ary) '[%s]' % ary.map {|o| generate_type(o) }.join(', ') end

def generate_Date(date) quote date.to_s end

def generate_Date(date) quote date.to_s end

def generate_Hash(hash)

def generate_Hash(hash)
  '{%s}' % hash.map { |key, value|
    "#{generate_String(key.to_s)}: #{generate_type(value)}"
  }.join(', ')
end

def generate_NilClass(*) 'null' end

def generate_NilClass(*) 'null' end

def generate_String(str)

def generate_String(str)
  quote str.gsub(/[\r\n\f\t\b"\\]/) { "\\#{ESC_MAP[$&]}"}
end

def generate_Symbol(sym) generate_String(sym.to_s) end

def generate_Symbol(sym) generate_String(sym.to_s) end

def generate_Time(time)

def generate_Time(time)
  quote time.strftime(time.utc? ? "%F %T UTC" : "%F %T %z")
end

def generate_simple(obj) obj.inspect end

def generate_simple(obj) obj.inspect end

def generate_type(obj)

def generate_type(obj)
  type = obj.is_a?(Numeric) ? :Numeric : obj.class.name
  begin send(:"generate_#{type}", obj)
  rescue NoMethodError; raise ArgumentError, "can't serialize #{type}"
  end
end

def quote(str) %("#{str}") end

def quote(str) %("#{str}") end