module FastMultiJson

Usage:

class Movie
  def to_json(payload)
    FastMultiJson.to_json(payload)
  end
end

Constants

VERSION

Public Class Methods

define_to_json(receiver) click to toggle source
# File lib/fast_multi_json.rb, line 80
def self.define_to_json(receiver)
  cl = caller_locations[0]
  method_body = to_json_method
  logger.debug { "Defining #{receiver}._fast_to_json as #{method_body.inspect}" }
  receiver.instance_eval method_body, cl.absolute_path, cl.lineno
end
logger(logger=nil) click to toggle source
# File lib/fast_multi_json.rb, line 40
def self.logger(logger=nil)
  return @logger = logger if logger
  @logger ||= Logger.new(IO::NULL)
end
reset_to_json!() click to toggle source
# File lib/fast_multi_json.rb, line 87
def self.reset_to_json!
  undef :_fast_to_json if method_defined?(:_fast_to_json)
  logger.debug { "Undefining #{receiver}._fast_to_json" }
end
to_json(object) click to toggle source
# File lib/fast_multi_json.rb, line 73
def self.to_json(object)
  _fast_to_json(object)
rescue NameError
  define_to_json(FastMultiJson)
  _fast_to_json(object)
end
to_json_method() click to toggle source

Encoder-compatible with default MultiJSON adapters and defaults

# File lib/fast_multi_json.rb, line 46
def self.to_json_method
  encode_method = String.new(%(def _fast_to_json(object)\n ))
  encode_method << Result.new {
    require 'oj'
    %(::Oj.dump(object, mode: :compat, time_format: :ruby, use_to_json: true))
  }.rescue {
    require 'yajl'
    %(::Yajl::Encoder.encode(object))
  }.rescue {
    require 'jrjackson' unless defined?(::JrJackson)
    %(::JrJackson::Json.dump(object))
  }.rescue {
    require 'json'
    %(::JSON.fast_generate(object, create_additions: false, quirks_mode: true))
  }.rescue {
    require 'gson'
    %(::Gson::Encoder.new({}).encode(object))
  }.rescue {
    require 'active_support/json/encoding'
    %(::ActiveSupport::JSON.encode(object))
  }.rescue {
    warn "No JSON encoder found. Falling back to `object.to_json`"
    %(object.to_json)
  }.value!
  encode_method << "\nend"
end