Class: Codebeacon::Tracer::SafeSerializer

Inherits:
Object
  • Object
show all
Defined in:
lib/codebeacon/tracer/src/data/safe_serializer.rb

Class Method Summary collapse

Class Method Details

.serialize(value, max_length) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/codebeacon/tracer/src/data/safe_serializer.rb', line 9

def self.serialize(value, max_length)
  return nil unless TypeDetector.serializable_type?(value)
  return "..." if max_length <= 0
  
  timeout_ms = Codebeacon::Tracer.config.serialization_timeout_ms
  
  begin
    Timeout.timeout(timeout_ms / 1000.0) do
      serialized = case value
      when String
        value
      when Integer, Float
        value.to_s
      when Symbol, TrueClass, FalseClass
        value.to_s
      when NilClass
        "nil"
      else
        nil
      end

      return nil if serialized.nil?

      serialized.length <= max_length ? serialized : serialized[0...max_length] + "..."
    end
  rescue Timeout::Error
    return "(serialization timeout)"
  end
end