Module: NatsWork::Serializer

Defined in:
lib/natswork/serializer.rb

Class Method Summary collapse

Class Method Details

.dump(object) ⇒ Object



13
14
15
16
17
# File 'lib/natswork/serializer.rb', line 13

def dump(object)
  JSON.generate(prepare_for_json(object))
rescue StandardError => e
  raise SerializationError, "Cannot serialize object: #{e.message}"
end

.load(json_string, symbolize_keys: true) ⇒ Object



19
20
21
22
23
# File 'lib/natswork/serializer.rb', line 19

def load(json_string, symbolize_keys: true)
  JSON.parse(json_string.to_s, symbolize_names: symbolize_keys)
rescue JSON::ParserError => e
  raise SerializationError, "Failed to parse JSON: #{e.message}"
end

.prepare_for_json(object) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/natswork/serializer.rb', line 39

def prepare_for_json(object)
  case object
  when Hash
    object.transform_keys(&:to_s).transform_values { |v| prepare_for_json(v) }
  when Array
    object.map { |item| prepare_for_json(item) }
  when Symbol
    object.to_s
  when Time
    object.utc.iso8601
  when Date
    object.iso8601
  when DateTime
    object.to_time.utc.iso8601
  when String, Numeric, TrueClass, FalseClass, NilClass
    object
  else
    if object.respond_to?(:to_h)
      prepare_for_json(object.to_h)
    elsif object.respond_to?(:as_json)
      prepare_for_json(object.as_json)
    else
      raise SerializationError, "Cannot serialize object of type #{object.class}"
    end
  end
end

.safe_dump(object) ⇒ Object



25
26
27
28
29
# File 'lib/natswork/serializer.rb', line 25

def safe_dump(object)
  dump(object)
rescue SerializationError
  nil
end

.safe_load(json_string, symbolize_keys: true) ⇒ Object



31
32
33
34
35
# File 'lib/natswork/serializer.rb', line 31

def safe_load(json_string, symbolize_keys: true)
  load(json_string, symbolize_keys: symbolize_keys)
rescue SerializationError
  nil
end