Class: Mammoth::PreparedDelivery

Inherits:
Data
  • Object
show all
Defined in:
lib/mammoth/prepared_delivery.rb

Overview

Immutable delivery boundary containing canonical identity and outbound data.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Attribute Details

#canonical_payloadObject (readonly)

Returns the value of attribute canonical_payload

Returns:

  • (Object)

    the current value of canonical_payload



5
6
7
# File 'lib/mammoth/prepared_delivery.rb', line 5

def canonical_payload
  @canonical_payload
end

#payloadObject (readonly)

Returns the value of attribute payload

Returns:

  • (Object)

    the current value of payload



5
6
7
# File 'lib/mammoth/prepared_delivery.rb', line 5

def payload
  @payload
end

#policy_fingerprintObject (readonly)

Returns the value of attribute policy_fingerprint

Returns:

  • (Object)

    the current value of policy_fingerprint



5
6
7
# File 'lib/mammoth/prepared_delivery.rb', line 5

def policy_fingerprint
  @policy_fingerprint
end

Class Method Details

.build(work, serializer:, payload_policy:) ⇒ Mammoth::PreparedDelivery

Serialize and apply one destination payload policy.

Parameters:

  • work (CDC::Core::ChangeEvent, CDC::Core::TransactionEnvelope)
  • serializer (#call)

    canonical Mammoth serializer

  • payload_policy (Mammoth::PayloadPolicy)

Returns:



12
13
14
15
16
17
18
19
# File 'lib/mammoth/prepared_delivery.rb', line 12

def self.build(work, serializer:, payload_policy:)
  canonical_payload = serializer.call(work)
  new(
    canonical_payload: canonical_payload,
    payload: payload_policy.apply(canonical_payload),
    policy_fingerprint: payload_policy.fingerprint
  )
end

.from_payload(payload) ⇒ Mammoth::PreparedDelivery

Reconstruct a prepared delivery from a persisted destination payload.

Parameters:

  • payload (Hash)

    previously prepared destination payload

Returns:



25
26
27
28
# File 'lib/mammoth/prepared_delivery.rb', line 25

def self.from_payload(payload)
  fingerprint = payload.dig("metadata", PayloadPolicy::POLICY_METADATA_KEY, "fingerprint")
  new(canonical_payload: payload, payload: payload, policy_fingerprint: fingerprint)
end