class Volt::EJSON
Constants
- OTHER_VALID_CLASSES
Public Class Methods
parse(str)
click to toggle source
# File lib/volt/utils/ejson.rb, line 13 def self.parse(str) decode(JSON.parse(str)) end
stringify(obj)
click to toggle source
# File lib/volt/utils/ejson.rb, line 9 def self.stringify(obj) encode(obj).to_json end
Private Class Methods
decode(obj)
click to toggle source
# File lib/volt/utils/ejson.rb, line 19 def self.decode(obj) if Array === obj obj.map {|v| decode(v) } elsif Hash === obj if obj.size == 1 && (escape = obj['$escape']) return escape.map do |key, value| [key, decode(value)] end.to_h elsif obj.size == 1 && (time = obj['$date']) if time.is_a?(Fixnum) return Time.at(time / 1000.0) end end obj.map do |key, value| [key, decode(value)] end.to_h else obj end end
encode(obj)
click to toggle source
# File lib/volt/utils/ejson.rb, line 41 def self.encode(obj) if Array === obj obj.map {|v| encode(v) } elsif Hash === obj obj.map do |key, value| if key == '$date' key = '$escape' value = {'$date' => encode(value)} else value = encode(value) end [key, value] end.to_h elsif Time === obj {'$date' => obj.to_i * 1_000} elsif OTHER_VALID_CLASSES.any? {|klass| obj.is_a?(klass) } obj else # Not a valid class for serializing, raise an exception raise NonEjsonType, "Unable to serialize #{obj.inspect} to EJSON" end end