module MultiJson

Constants

ALIASES
DecodeError
REQUIREMENT_MAP
VERSION

Public Instance Methods

adapter() click to toggle source

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
adapter=(new_adapter)
Alias for: use
current_adapter(options = {}) click to toggle source
# File lib/multi_json.rb, line 129
def current_adapter(options = {})
  if (new_adapter = options[:adapter])
    load_adapter(new_adapter)
  else
    adapter
  end
end
decode(string, options = {})
Alias for: load
default_adapter() click to toggle source

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::JSON_LOADED)
  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
default_engine()
Alias for: default_adapter
default_options() click to toggle source
# 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
default_options=(value) click to toggle source
# 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
dump(object, options = {}) click to toggle source

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
encode(object, options = {})
Alias for: dump
engine()
Alias for: adapter
engine=(new_adapter)
Alias for: use
load(string, options = {}) click to toggle source

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
load_adapter(new_adapter) click to toggle source
# 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
use(new_adapter) click to toggle source

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=
with_adapter(new_adapter) { || ... } click to toggle source

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
with_engine(new_adapter)
Alias for: with_adapter

Private Instance Methods

load_adapter_from_string_name(name) click to toggle source
# File lib/multi_json.rb, line 155
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