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



86
87
88
89
90
91
# File 'lib/fast_jsonapi/multi_to_json.rb', line 86

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



46
47
48
49
# File 'lib/fast_jsonapi/multi_to_json.rb', line 46

def self.logger(device=nil)
  return @logger = Logger.new(device) if device
  @logger ||= Logger.new(IO::NULL)
end

.reset_to_json!Object



93
94
95
96
# File 'lib/fast_jsonapi/multi_to_json.rb', line 93

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



79
80
81
82
83
84
# File 'lib/fast_jsonapi/multi_to_json.rb', line 79

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



52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/fast_jsonapi/multi_to_json.rb', line 52

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