Module: MultiJson

Extended by:
MultiJson
Includes:
Options
Included in:
MultiJson
Defined in:
lib/multi_json.rb,
lib/multi_json/adapter.rb,
lib/multi_json/options.rb,
lib/multi_json/version.rb,
lib/multi_json/adapters/oj.rb,
lib/multi_json/parse_error.rb,
lib/multi_json/adapter_error.rb,
lib/multi_json/adapters/gson.rb,
lib/multi_json/adapters/yajl.rb,
lib/multi_json/options_cache.rb,
lib/multi_json/vendor/okjson.rb,
lib/multi_json/adapters/ok_json.rb,
lib/multi_json/adapters/json_gem.rb,
lib/multi_json/adapters/json_pure.rb,
lib/multi_json/adapters/jr_jackson.rb,
lib/multi_json/convertible_hash_keys.rb

Defined Under Namespace

Modules: Adapters, ConvertibleHashKeys, OkJson, Options, OptionsCache Classes: Adapter, AdapterError, ParseError, Version

Constant Summary collapse

ALIASES =
{"jrjackson" => "jr_jackson"}.freeze
REQUIREMENT_MAP =
{
  oj: "oj",
  yajl: "yajl",
  jr_jackson: "jrjackson",
  json_gem: "json",
  gson: "gson",
  json_pure: "json"
}.freeze
VERSION =
Version.to_s.freeze
DecodeError =

Legacy support

LoadError = ParseError

Instance Method Summary collapse

Methods included from Options

#default_dump_options, #default_load_options, #dump_options, #dump_options=, #load_options, #load_options=

Instance Method Details

#adapterObject Also known as: engine

Get the current adapter class.



60
61
62
63
64
65
66
# File 'lib/multi_json.rb', line 60

def adapter
  return @adapter if defined?(@adapter) && @adapter

  use nil # load default adapter

  @adapter
end

#current_adapter(options = {}) ⇒ Object



118
119
120
121
122
123
124
# File 'lib/multi_json.rb', line 118

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

#default_adapterObject Also known as: default_engine

The default adapter based on what you currently have loaded and installed.



42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/multi_json.rb', line 42

def default_adapter
  adapter = loaded_adapter || installable_adapter
  return adapter if adapter

  @default_adapter_warning_shown ||= begin
    Kernel.warn(
      "[WARNING] MultiJson is using the default adapter (ok_json). " \
      "We recommend loading a different JSON library to improve performance."
    )
    true
  end

  :ok_json
end

#default_optionsObject



17
18
19
20
21
# File 'lib/multi_json.rb', line 17

def default_options
  Kernel.warn "MultiJson.default_options is deprecated\nUse MultiJson.load_options or MultiJson.dump_options instead"

  load_options
end

#default_options=(value) ⇒ Object



11
12
13
14
15
# File 'lib/multi_json.rb', line 11

def default_options=(value)
  Kernel.warn "MultiJson.default_options setter is deprecated\nUse MultiJson.load_options and MultiJson.dump_options instead"

  self.load_options = self.dump_options = value
end

#dump(object, options = {}) ⇒ Object Also known as: encode

Encodes a Ruby object as JSON.



127
128
129
# File 'lib/multi_json.rb', line 127

def dump(object, options = {})
  current_adapter(options).dump(object, options)
end

#load(string, options = {}) ⇒ Object Also known as: decode

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.



108
109
110
111
112
113
114
115
# File 'lib/multi_json.rb', line 108

def load(string, options = {})
  adapter = current_adapter(options)
  begin
    adapter.load(string, options)
  rescue adapter::ParseError => e
    raise(ParseError.build(e, string), cause: e)
  end
end

#load_adapter(new_adapter) ⇒ Object



87
88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/multi_json.rb', line 87

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
    raise ::LoadError, new_adapter
  end
rescue ::LoadError => e
  raise(AdapterError.build(e), cause: e)
end

#use(new_adapter) ⇒ Object Also known as: adapter=, engine=

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

  • :oj

  • :json_gem

  • :json_pure

  • :ok_json

  • :yajl

  • :gson (JRuby only)

  • :jr_jackson (JRuby only)



79
80
81
82
83
# File 'lib/multi_json.rb', line 79

def use(new_adapter)
  @adapter = load_adapter(new_adapter)
ensure
  OptionsCache.reset
end

#with_adapter(new_adapter) ⇒ Object Also known as: with_engine

Executes passed block using specified adapter.



133
134
135
136
137
138
139
# File 'lib/multi_json.rb', line 133

def with_adapter(new_adapter)
  old_adapter = adapter
  self.adapter = new_adapter
  yield
ensure
  self.adapter = old_adapter
end