module MultiJson

Some parts adapted from golang.org/src/pkg/json/decode.go and golang.org/src/pkg/utf8/utf8.go

Constants

ALIASES
DecodeError
REQUIREMENT_MAP
VERSION

Public Class Methods

cached_options() click to toggle source
# File lib/multi_json.rb, line 9
def cached_options
  @cached_options || reset_cached_options!
end
reset_cached_options!() click to toggle source
# File lib/multi_json.rb, line 13
def reset_cached_options!
  @cached_options = {}
end

Public Instance Methods

adapter() click to toggle source

Get the current adapter class.

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

  self.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 137
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 55
def default_adapter
  return :oj if defined?(::Oj)
  return :yajl if defined?(::Yajl)
  return :json_gem if defined?(::JSON)
  return :gson if defined?(::Gson)
  return :jr_jackson if defined?(::JrJackson)

  REQUIREMENT_MAP.each do |library, adapter|
    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=(value) click to toggle source
# File lib/multi_json.rb, line 33
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 146
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 127
def load(string, options={})
  adapter = current_adapter(options)
  begin
    adapter.load(string, options)
  rescue adapter::ParseError => exception
    raise LoadError.new(exception.message, exception.backtrace, string)
  end
end
Also aliased as: decode
load_adapter(new_adapter) click to toggle source
# File lib/multi_json.rb, line 103
def load_adapter(new_adapter)
  case new_adapter
  when String, Symbol
    new_adapter = ALIASES.fetch(new_adapter.to_s, new_adapter)
    require "multi_json/adapters/#{new_adapter}"
    klass_name = new_adapter.to_s.split('_').map(&:capitalize) * ''
    MultiJson::Adapters.const_get(klass_name)
  when NilClass, FalseClass
    load_adapter default_adapter
  when Class, Module
    new_adapter
  else
    raise NameError
  end
rescue NameError, ::LoadError
  raise ArgumentError, 'Did not recognize your adapter specification.'
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 97
def use(new_adapter)
  @adapter = load_adapter(new_adapter)
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 152
def with_adapter(new_adapter)
  old_adapter, self.adapter = adapter, new_adapter
  yield
ensure
  self.adapter = old_adapter
end
Also aliased as: with_engine
with_engine(new_adapter)
Alias for: with_adapter