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

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

Defined Under Namespace

Classes: ExtractionError

Constant Summary collapse

DEFAULT_KEY =
"julewire"
DEFAULT_MAX_BYTES =
65_536

Class Method Summary collapse

Class Method Details

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



40
41
42
43
44
45
46
47
# File 'lib/julewire/core/propagation/carrier.rb', line 40

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, max_bytes: DEFAULT_MAX_BYTES) ⇒ Object



59
60
61
# File 'lib/julewire/core/propagation/carrier.rb', line 59

def extract(carrier, key: DEFAULT_KEY, max_bytes: DEFAULT_MAX_BYTES)
  extract_result(carrier, key: key, max_bytes: max_bytes).envelope
end

.extract_result(carrier, key: DEFAULT_KEY, max_bytes: DEFAULT_MAX_BYTES) ⇒ Object



64
65
66
67
68
# File 'lib/julewire/core/propagation/carrier.rb', line 64

def extract_result(carrier, key: DEFAULT_KEY, max_bytes: DEFAULT_MAX_BYTES)
  Validation.validate_byte_limit!(max_bytes, name: :max_bytes)

  extract_payload(carrier, key: key, max_bytes: max_bytes)
end

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



49
50
51
52
53
54
55
56
57
# File 'lib/julewire/core/propagation/carrier.rb', line 49

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, max_bytes: DEFAULT_MAX_BYTES) ⇒ Object



70
71
72
73
# File 'lib/julewire/core/propagation/carrier.rb', line 70

def restore(carrier, key: DEFAULT_KEY, link_executions: false, max_bytes: DEFAULT_MAX_BYTES, &)
  envelope = extract_result(carrier, key: key, max_bytes: max_bytes).envelope
  Propagation.restore(envelope, link_executions: link_executions, owned: true, &)
end

.serialized_envelope(envelope) ⇒ Object



75
76
77
78
79
# File 'lib/julewire/core/propagation/carrier.rb', line 75

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

  Serialization::Serializer.call(envelope)
end