Class: Whoosh::Serialization::Json

Inherits:
Object
  • Object
show all
Defined in:
lib/whoosh/serialization/json.rb

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.engineObject (readonly)

Returns the value of attribute engine.



14
15
16
# File 'lib/whoosh/serialization/json.rb', line 14

def engine
  @engine
end

Class Method Details

.content_typeObject



52
53
54
# File 'lib/whoosh/serialization/json.rb', line 52

def content_type
  "application/json"
end

.decode(raw) ⇒ Object



41
42
43
44
45
46
47
48
49
50
# File 'lib/whoosh/serialization/json.rb', line 41

def decode(raw)
  return nil if raw.nil? || raw.empty?
  detect_engine! unless @engine

  if @engine == :oj
    Oj.load(raw, mode: :compat)
  else
    JSON.parse(raw)
  end
end

.detect_engine!Object



16
17
18
19
20
21
22
23
24
# File 'lib/whoosh/serialization/json.rb', line 16

def detect_engine!
  @oj_available = begin
    require "oj"
    true
  rescue LoadError
    false
  end
  @engine = @oj_available ? :oj : :json
end

.encode(data) ⇒ Object



30
31
32
33
34
35
36
37
38
39
# File 'lib/whoosh/serialization/json.rb', line 30

def encode(data)
  detect_engine! unless @engine
  prepared = prepare(data)

  if @engine == :oj
    Oj.dump(prepared, mode: :compat)
  else
    JSON.generate(prepared)
  end
end

.prepare(obj) ⇒ Object



56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/whoosh/serialization/json.rb', line 56

def prepare(obj)
  case obj
  when Hash
    obj.transform_values { |v| prepare(v) }
  when Array
    obj.map { |v| prepare(v) }
  when Time, DateTime
    obj.iso8601
  when BigDecimal
    obj.to_s("F")
  else
    obj
  end
end

.use_engine(name) ⇒ Object



26
27
28
# File 'lib/whoosh/serialization/json.rb', line 26

def use_engine(name)
  @engine = name.to_sym
end