module MultiJson

Constants

ALIASES
DecodeError
REQUIREMENT_MAP
VERSION

Public Instance Methods

Get the current adapter class.

# File lib/multi_json.rb, line 70
def adapter
  return @adapter if defined?(@adapter) && @adapter

  use nil # load default adapter

  @adapter
end
Also aliased as: engine
# File lib/multi_json.rb, line 129
def current_adapter(options = {})
  if (new_adapter = options[:adapter])
    load_adapter(new_adapter)
  else
    adapter
  end
end

The default adapter based on what you currently have loaded and installed. First checks to see if any adapters are already loaded, then checks to see which are installed if none are loaded.

# File lib/multi_json.rb, line 46
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
Also aliased as: default_engine
# File lib/multi_json.rb, line 18
def default_options
  Kernel.warn "MultiJson.default_options is deprecated\n" \
    'Use MultiJson.load_options or MultiJson.dump_options instead'

  load_options
end
# File lib/multi_json.rb, line 11
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

Encodes a Ruby object as JSON.

# File lib/multi_json.rb, line 138
def dump(object, options = {})
  current_adapter(options).dump(object, options)
end
Also aliased as: encode
Alias for: adapter

Decode a JSON string into Ruby.

Options

:symbolize_keys

If true, will use symbols instead of strings for the keys.

:adapter

If set, the selected adapter will be used for this call.

# File lib/multi_json.rb, line 119
def load(string, options = {})
  adapter = current_adapter(options)
  begin
    adapter.load(string, options)
  rescue adapter::ParseError => exception
    raise ParseError.build(exception, string)
  end
end
Also aliased as: decode
# File lib/multi_json.rb, line 98
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

Set the JSON parser utilizing a symbol, string, or class. Supported by default are:

  • :oj

  • :json_gem

  • :json_pure

  • :ok_json

  • :yajl

  • :nsjsonserialization (MacRuby only)

  • :gson (JRuby only)

  • :jr_jackson (JRuby only)

# File lib/multi_json.rb, line 90
def use(new_adapter)
  @adapter = load_adapter(new_adapter)
ensure
  OptionsCache.reset
end
Also aliased as: adapter=, engine=

Executes passed block using specified adapter.

# File lib/multi_json.rb, line 144
def with_adapter(new_adapter)
  old_adapter = adapter
  self.adapter = new_adapter
  yield
ensure
  self.adapter = old_adapter
end
Also aliased as: with_engine