Class: ZeevexCluster::Serializer::JsonHash
- Inherits:
-
Object
- Object
- ZeevexCluster::Serializer::JsonHash
- Defined in:
- lib/zeevex_cluster/serializer/json_hash.rb
Defined Under Namespace
Classes: IndifferentHash
Instance Method Summary collapse
- #deserialize(str) ⇒ Object
- #is_time_field(key, val = nil) ⇒ Object
- #new(options = {}) ⇒ Object
- #serialize(obj) ⇒ Object
- #translate_hash(hash) ⇒ Object
- #untranslate_hash(parsed) ⇒ Object
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 = 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
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
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 |