Module: Julewire::Core::Propagation::Carrier

Defined in:
lib/julewire/core/propagation/carrier.rb

Constant Summary collapse

DEFAULT_KEY =
"julewire"

Class Method Summary collapse

Class Method Details

.encode(envelope: DEFAULT_ENVELOPE, max_bytes: nil) ⇒ Object



15
16
17
18
19
20
21
22
# File 'lib/julewire/core/propagation/carrier.rb', line 15

def encode(envelope: DEFAULT_ENVELOPE, max_bytes: nil)
  Validation.validate_byte_limit!(max_bytes, name: :max_bytes)

  encoded = JSON.generate(serialized_envelope(envelope), allow_nan: false)
  return if max_bytes && encoded.bytesize > max_bytes

  encoded
end

.extract(carrier, key: DEFAULT_KEY) ⇒ Object



34
35
36
37
38
39
40
41
42
# File 'lib/julewire/core/propagation/carrier.rb', line 34

def extract(carrier, key: DEFAULT_KEY)
  value = carrier_value(carrier, key)
  return {} unless value

  parsed = JSON.parse(value.to_s)
  parsed.is_a?(Hash) ? Fields::FieldSet.deep_symbolize_keys(parsed) : {}
rescue StandardError
  {}
end

.inject(carrier = {}, envelope: DEFAULT_ENVELOPE, key: DEFAULT_KEY, max_bytes: nil) ⇒ Object



24
25
26
27
28
29
30
31
32
# File 'lib/julewire/core/propagation/carrier.rb', line 24

def inject(carrier = {}, envelope: DEFAULT_ENVELOPE, key: DEFAULT_KEY, max_bytes: nil)
  validate_carrier!(carrier)
  encoded = encode(envelope: envelope, max_bytes: max_bytes)
  clear_carrier_key!(carrier, key) unless encoded
  return unless encoded

  carrier[key.to_s] = encoded
  carrier
end

.restore(carrier, key: DEFAULT_KEY, link_executions: false) ⇒ Object



44
45
46
# File 'lib/julewire/core/propagation/carrier.rb', line 44

def restore(carrier, key: DEFAULT_KEY, link_executions: false, &)
  Propagation.restore(extract(carrier, key: key), link_executions: link_executions, &)
end

.serialized_envelope(envelope) ⇒ Object



48
49
50
51
52
# File 'lib/julewire/core/propagation/carrier.rb', line 48

def serialized_envelope(envelope)
  return Propagation.capture if envelope.equal?(DEFAULT_ENVELOPE)

  Serialization::Serializer.call(envelope)
end