Class: ZeevexCluster::Serializer::JsonHash

Inherits:
Object
  • Object
show all
Defined in:
lib/zeevex_cluster/serializer/json_hash.rb

Defined Under Namespace

Classes: IndifferentHash

Instance Method Summary collapse

Instance Method Details

#deserialize(str) ⇒ Object



38
39
40
41
42
43
44
45
46
# File 'lib/zeevex_cluster/serializer/json_hash.rb', line 38

def deserialize(str)
  parsed = JSON.parse(str, :symbolize_names => true, 
                           :object_class => IndifferentHash,
                           :create_additions => true)
  case parsed
    when Hash then untranslate_hash(parsed)
    else parsed
  end
end

#is_time_field(key, val = nil) ⇒ Object



12
13
14
# File 'lib/zeevex_cluster/serializer/json_hash.rb', line 12

def is_time_field(key, val = nil)
  key.to_s.match(/(_at|timestamp)$/)
end

#new(options = {}) ⇒ Object



8
9
10
# File 'lib/zeevex_cluster/serializer/json_hash.rb', line 8

def new(options = {})
  @options = options
end

#serialize(obj) ⇒ Object



48
49
50
51
52
53
54
55
56
# File 'lib/zeevex_cluster/serializer/json_hash.rb', line 48

def serialize(obj)
  obj = case obj
          when Hash then translate_hash(obj)
          when Numeric, String, TrueClass, FalseClass, NilClass then
                {'$primitive' => obj}
          else obj
        end
  JSON.dump(obj)
end

#translate_hash(hash) ⇒ Object

Raises:

  • (ArgumentError)


29
30
31
32
33
34
35
36
# File 'lib/zeevex_cluster/serializer/json_hash.rb', line 29

def translate_hash(hash)
  raise ArgumentError, 'Must be a hash' unless hash.is_a?(Hash)
  hash = hash.clone
  #hash.keys.each do |key|
  #  hash[key] = hash[key].utc.to_f if is_time_field(key, hash[key])
  #end
  hash
end

#untranslate_hash(parsed) ⇒ Object

Raises:

  • (ArgumentError)


16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/zeevex_cluster/serializer/json_hash.rb', line 16

def untranslate_hash(parsed)
  raise ArgumentError, 'Must be a hash' unless parsed.is_a?(Hash)
  if parsed.count == 1 && (parsed.has_key?('$primitive') || parsed.has_key?(:$primitive))
    return parsed.values.first
  end
  hash = {}
  parsed.each do |(key, val)|
    # val = Time.at(val).utc if is_time_field(key, val)
    hash[key.to_sym] = val
  end
  hash
end