Class: Chronos::Core::PayloadSerializer

Inherits:
Object
  • Object
show all
Defined in:
lib/chronos/core/payload_serializer.rb

Overview

Converts a Notice into the versioned Chronos JSON envelope.

Examples:

event = serializer.call(notice)
event.body #=> "{...}"

Instance Method Summary collapse

Constructor Details

#initialize(config, clock = nil, options = {}) ⇒ PayloadSerializer

Returns a new instance of PayloadSerializer.



41
42
43
44
45
46
# File 'lib/chronos/core/payload_serializer.rb', line 41

def initialize(config, clock = nil, options = {})
  @config = config
  @clock = clock || proc { Time.now }
  @sanitizer = options[:sanitizer] || Sanitizer.new(config)
  @safe_serializer = options[:safe_serializer] || SafeSerializer.new
end

Instance Method Details

#call(notice) ⇒ Object

Raises:



48
49
50
51
52
53
54
55
# File 'lib/chronos/core/payload_serializer.rb', line 48

def call(notice)
  envelope = @safe_serializer.call(@sanitizer.call(build_envelope(notice)))
  body = JSON.generate(envelope)
  body = JSON.generate(compact_envelope(envelope)) if body.bytesize > @config.max_payload_size
  raise Error, "event exceeds max_payload_size" if body.bytesize > @config.max_payload_size

  SerializedEvent.new(notice.event_id, body)
end