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

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

Defined Under Namespace

Classes: Extracted, 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



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

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

  encoded = JSON.generate(serialized_envelope(envelope))
  return if max_bytes && encoded.bytesize > max_bytes

  encoded
end

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



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

def extract_envelope(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



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

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



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

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)
  return unless encoded

  carrier[key.to_s] = encoded
  carrier
end

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



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

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



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

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

  Serialization::Serializer.call(envelope)
end