Module: FastJsonapi::MultiToJson

Defined in:
lib/fast_jsonapi/multi_to_json.rb

Defined Under Namespace

Classes: Result

Class Method Summary collapse

Class Method Details

.define_to_json(receiver) ⇒ Object



88
89
90
91
92
93
# 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) ⇒ Object



48
49
50
51
# 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!Object



95
96
97
98
# 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) ⇒ Object



81
82
83
84
85
86
# 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_methodObject

Encoder-compatible with default MultiJSON adapters and defaults



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# 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