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)
-
(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)
-
(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 = {})
-
(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)
-
(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 = {})
-
(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)
-
(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)
-
(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)
-
(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