module ActiveSupport::JSON

def self.encode(value, options = nil)

Dumps object in JSON (JavaScript Object Notation). See www.json.org for more info.
def self.encode(value, options = nil)
  Encoding::Encoder.new(options).encode(value)
end

def convert_dates_from(data)

def convert_dates_from(data)
  case data
  when nil
    nil
  when DATE_REGEX
    begin
      DateTime.parse(data)
    rescue ArgumentError
      data
    end
  when Array
    data.map! { |d| convert_dates_from(d) }
  when Hash
    data.each do |key, value|
      data[key] = convert_dates_from(value)
    end
  else
    data
  end
end

def decode(json, options ={})

def decode(json, options ={})
  # Can't reliably detect whether MultiJson responds to load, since it's
  # a reserved word. Use adapter as a proxy for new features.
  data = if MultiJson.respond_to?(:adapter)
    MultiJson.load(json, options)
  else
    MultiJson.decode(json, options)
  end
  if ActiveSupport.parse_json_times
    convert_dates_from(data)
  else
    data
  end
end

def engine

def engine
  if MultiJson.respond_to?(:adapter)
    MultiJson.adapter
  else
    MultiJson.engine
  end
end

def engine=(name)

def engine=(name)
  if MultiJson.respond_to?(:use)
    MultiJson.use name
  else
    MultiJson.engine = name
  end
end

def parse_error

def parse_error
  MultiJson::DecodeError
end

def with_backend(name)

def with_backend(name)
  old_backend, self.backend = backend, name
  yield
ensure
  self.backend = old_backend
end