module FastJsonapi::MultiToJson

Public Class Methods

define_to_json(receiver) click to toggle source
# File lib/fast_jsonapi/multi_to_json.rb, line 88
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(device=nil) click to toggle source
# File lib/fast_jsonapi/multi_to_json.rb, line 48
def self.logger(device=nil)
  return @logger = Logger.new(device) if device
  @logger ||= Logger.new(IO::NULL)
end
reset_to_json!() click to toggle source
# File lib/fast_jsonapi/multi_to_json.rb, line 95
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_jsonapi/multi_to_json.rb, line 81
def self.to_json(object)
  _fast_to_json(object)
rescue NameError
  define_to_json(FastJsonapi::MultiToJson)
  _fast_to_json(object)
end
to_json_method() click to toggle source

Encoder-compatible with default MultiJSON adapters and defaults

# File lib/fast_jsonapi/multi_to_json.rb, line 54
def self.to_json_method
  encode_method = String.new(%(def _fast_to_json(object)\n ))
  encode_method << Result.new(LoadError) {
    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