module MultiJson::AdapterSelector

def default_adapter

Returns:
  • (Symbol) - adapter name

Other tags:
    Api: - private
def default_adapter
  @default_adapter ||= detect_best_adapter
end

def detect_best_adapter

Returns:
  • (Symbol) - adapter name

Other tags:
    Api: - private
def detect_best_adapter
  loaded_adapter || installable_adapter || fallback_adapter
end

def fallback_adapter

Returns:
  • (Symbol) - the ok_json adapter name

Other tags:
    Api: - private
def fallback_adapter
  warn_about_fallback unless @default_adapter_warning_shown
  @default_adapter_warning_shown = true
  :ok_json
end

def find_loader_for(adapter_spec)

Returns:
  • (Proc, nil) - loader proc if found

Parameters:
  • adapter_spec (Object) -- adapter specification

Other tags:
    Api: - private
def find_loader_for(adapter_spec)
  klass = adapter_spec.class
  return LOADERS.fetch(klass) if LOADERS.key?(klass)
  LOADERS.fetch(Module) if adapter_spec.is_a?(Module)
end

def installable_adapter

Returns:
  • (Symbol, nil) - adapter name if successfully required

Other tags:
    Api: - private
def installable_adapter
  ::MultiJson::REQUIREMENT_MAP.each_key do |adapter_name|
    return adapter_name if try_require(adapter_name)
  end
  nil
end

def load_adapter(adapter_spec)

Returns:
  • (Class) - the adapter class

Parameters:
  • adapter_spec (Symbol, String, Module, nil) -- adapter specification

Other tags:
    Api: - private
def load_adapter(adapter_spec)
  loader = find_loader_for(adapter_spec)
  return loader.call(adapter_spec, self) if loader
  raise ::LoadError, adapter_spec
rescue ::LoadError => e
  raise AdapterError.build(e)
end

def load_adapter_by_name(name)

Returns:
  • (Class) - the adapter class

Parameters:
  • name (String) -- adapter name

Other tags:
    Api: - private
def load_adapter_by_name(name)
  normalized = ALIASES.fetch(name, name).downcase
  require_relative "adapters/#{normalized}"
  class_name = normalized.split("_").map(&:capitalize).join
  ::MultiJson::Adapters.const_get(class_name)
end

def loaded_adapter

Returns:
  • (Symbol, nil) - adapter name if found

Other tags:
    Api: - private
def loaded_adapter
  return :fast_jsonparser if defined?(::FastJsonparser)
  return :oj if defined?(::Oj)
  return :yajl if defined?(::Yajl)
  return :jr_jackson if defined?(::JrJackson)
  return :json_gem if defined?(::JSON::Ext::Parser)
  :gson if defined?(::Gson)
end

def try_require(adapter_name)

Returns:
  • (Boolean) - true if require succeeded

Parameters:
  • adapter_name (Symbol) -- adapter to require

Other tags:
    Api: - private
def try_require(adapter_name)
  require ::MultiJson::REQUIREMENT_MAP.fetch(adapter_name)
  true
rescue ::LoadError
  false
end

def warn_about_fallback

Returns:
  • (void) -

Other tags:
    Api: - private
def warn_about_fallback
  Kernel.warn(
    "[WARNING] MultiJson is using the default adapter (ok_json). " \
    "We recommend loading a different JSON library to improve performance."
  )
end