Module: Fauna::FaunaJson

Defined in:
lib/fauna/json.rb

Overview

:nodoc:

Class Method Summary collapse

Class Method Details

.deserialize(obj) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/fauna/json.rb', line 11

def self.deserialize(obj)
  if obj.is_a?(Hash)
    if obj.key? :@ref
      Ref.new obj[:@ref]
    elsif obj.key? :@set
      SetRef.new deserialize(obj[:@set])
    elsif obj.key? :@obj
      deserialize(obj[:@obj])
    elsif obj.key? :@ts
      Time.iso8601 obj[:@ts]
    elsif obj.key? :@date
      Date.iso8601 obj[:@date]
    elsif obj.key? :@bytes
      Bytes.from_base64 obj[:@bytes]
    else
      Hash[obj.collect { |k, v| [k, deserialize(v)] }]
    end
  elsif obj.is_a?(Array)
    obj.collect { |val| deserialize(val) }
  else
    obj
  end
end

.json_load(body) ⇒ Object



35
36
37
# File 'lib/fauna/json.rb', line 35

def self.json_load(body)
  JSON.load body, nil, max_nesting: false, symbolize_names: true
end

.json_load_or_nil(body) ⇒ Object



39
40
41
42
43
# File 'lib/fauna/json.rb', line 39

def self.json_load_or_nil(body)
  json_load body
rescue JSON::ParserError
  nil
end

.serialize(value) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/fauna/json.rb', line 45

def self.serialize(value)
  if value.is_a? Time
    # 9 means: include nanoseconds in encoding
    { :@ts => value.iso8601(9) }
  elsif value.is_a? Date
    { :@date => value.iso8601 }
  elsif value.is_a? Hash
    Hash[value.collect { |k, v| [k, serialize(v)] }]
  elsif value.is_a? Array
    value.collect { |val| serialize(val) }
  elsif value.respond_to? :to_hash
    serialize(value.to_hash)
  else
    value
  end
end

.to_json(value) ⇒ Object



3
4
5
# File 'lib/fauna/json.rb', line 3

def self.to_json(value)
  serialize(value).to_json
end

.to_json_pretty(value) ⇒ Object



7
8
9
# File 'lib/fauna/json.rb', line 7

def self.to_json_pretty(value)
  JSON.pretty_generate serialize(value)
end