class MultiJson::Adapter

@api private
- #dump(object, options) -> JSON string
- #load(string, options) -> parsed object
Subclasses must implement:
class has exactly one instance.
provides a consistent interface. Uses Singleton pattern so each adapter
Each adapter wraps a specific JSON library (Oj, JSON gem, etc.) and
Base class for JSON adapter implementations

def blank?(input)

Returns:
  • (Boolean) - true if input is blank

Parameters:
  • input (String, nil) -- input to check

Other tags:
    Api: - private
def blank?(input)
  input.nil? || BLANK_PATTERN.match?(input)
rescue ArgumentError
  # Invalid byte sequence in UTF-8 - treat as non-blank
  false
end

def defaults(action, value)

Returns:
  • (Hash) - the frozen options hash

Parameters:
  • value (Hash) -- default options for the action
  • action (Symbol) -- :load or :dump

Other tags:
    Api: - private
def defaults(action, value)
  instance_variable_set(:"@default_#{action}_options", value.freeze)
end

def dump(object, options = {})

Returns:
  • (String) - JSON string

Parameters:
  • options (Hash) -- serialization options
  • object (Object) -- object to serialize

Other tags:
    Api: - private
def dump(object, options = {})
  instance.dump(object, merged_dump_options(options))
end

def inherited(subclass)

Returns:
  • (void) -

Parameters:
  • subclass (Class) -- the new subclass

Other tags:
    Api: - private
def inherited(subclass)
  super
  # Propagate default options to subclasses
  subclass.instance_variable_set(:@default_load_options, @default_load_options) if defined?(@default_load_options)
  subclass.instance_variable_set(:@default_dump_options, @default_dump_options) if defined?(@default_dump_options)
end

def load(string, options = {})

Returns:
  • (Object, nil) - parsed object or nil for blank input

Parameters:
  • options (Hash) -- parsing options
  • string (String, #read) -- JSON string or IO-like object

Other tags:
    Api: - private
def load(string, options = {})
  string = string.read if string.respond_to?(:read)
  return nil if blank?(string)
  instance.load(string, merged_load_options(options))
end

def merged_dump_options(options)

Returns:
  • (Hash) - merged options hash

Parameters:
  • options (Hash) -- call-site options

Other tags:
    Api: - private
def merged_dump_options(options)
  cache_key = strip_adapter_key(options)
  OptionsCache.dump.fetch(cache_key) do
    dump_options(cache_key).merge(MultiJson.dump_options(cache_key)).merge!(cache_key)
  end
end

def merged_load_options(options)

Returns:
  • (Hash) - merged options hash

Parameters:
  • options (Hash) -- call-site options

Other tags:
    Api: - private
def merged_load_options(options)
  cache_key = strip_adapter_key(options)
  OptionsCache.load.fetch(cache_key) do
    load_options(cache_key).merge(MultiJson.load_options(cache_key)).merge!(cache_key)
  end
end

def strip_adapter_key(options)

Returns:
  • (Hash) - frozen options without :adapter key

Parameters:
  • options (Hash) -- original options

Other tags:
    Api: - private
def strip_adapter_key(options)
  options.except(:adapter).freeze
end