module MultiJson

def adapter

Get the current adapter class.
def adapter
  return @adapter if defined?(@adapter) && @adapter
  use nil # load default adapter
  @adapter
end

def current_adapter(options = {})

def current_adapter(options = {})
  if (new_adapter = options[:adapter])
    load_adapter(new_adapter)
  else
    adapter
  end
end

def default_adapter

to see which are installed if none are loaded.
if any adapters are already loaded, then checks
have loaded and installed. First checks to see
The default adapter based on what you currently
def default_adapter
  return :oj if defined?(::Oj)
  return :yajl if defined?(::Yajl)
  return :jr_jackson if defined?(::JrJackson)
  return :json_gem if defined?(::JSON::Ext::Parser)
  return :gson if defined?(::Gson)
  REQUIREMENT_MAP.each do |adapter, library|
    begin
      require library
      return adapter
    rescue ::LoadError
      next
    end
  end
  Kernel.warn '[WARNING] MultiJson is using the default adapter (ok_json). ' \
    'We recommend loading a different JSON library to improve performance.'
  :ok_json
end

def default_options

def default_options
  Kernel.warn "MultiJson.default_options is deprecated\n" \
    'Use MultiJson.load_options or MultiJson.dump_options instead'
  load_options
end

def default_options=(value)

def default_options=(value)
  Kernel.warn "MultiJson.default_options setter is deprecated\n" \
    'Use MultiJson.load_options and MultiJson.dump_options instead'
  self.load_options = self.dump_options = value
end

def dump(object, options = {})

Encodes a Ruby object as JSON.
def dump(object, options = {})
  current_adapter(options).dump(object, options)
end

def load(string, options = {})

:adapter :: If set, the selected adapter will be used for this call.
:symbolize_keys :: If true, will use symbols instead of strings for the keys.

Options

Decode a JSON string into Ruby.
def load(string, options = {})
  adapter = current_adapter(options)
  begin
    adapter.load(string, options)
  rescue adapter::ParseError => exception
    raise ParseError.build(exception, string)
  end
end

def load_adapter(new_adapter)

def load_adapter(new_adapter)
  case new_adapter
  when String, Symbol
    load_adapter_from_string_name new_adapter.to_s
  when NilClass, FalseClass
    load_adapter default_adapter
  when Class, Module
    new_adapter
  else
    fail ::LoadError, new_adapter
  end
rescue ::LoadError => exception
  raise AdapterError.build(exception)
end

def load_adapter_from_string_name(name)

def load_adapter_from_string_name(name)
  name = ALIASES.fetch(name, name)
  require "multi_json/adapters/#{name.downcase}"
  klass_name = name.to_s.split('_').map(&:capitalize) * ''
  MultiJson::Adapters.const_get(klass_name)
end

def use(new_adapter)

* :jr_jackson (JRuby only)
* :gson (JRuby only)
* :nsjsonserialization (MacRuby only)
* :yajl
* :ok_json
* :json_pure
* :json_gem
* :oj

Supported by default are:
Set the JSON parser utilizing a symbol, string, or class.
def use(new_adapter)
  @adapter = load_adapter(new_adapter)
ensure
  OptionsCache.reset
end

def with_adapter(new_adapter)

Executes passed block using specified adapter.
def with_adapter(new_adapter)
  old_adapter = adapter
  self.adapter = new_adapter
  yield
ensure
  self.adapter = old_adapter
end