Class: Whodunit::Chronicles::Chronicler
- Inherits:
-
CDC::Core::Processor
- Object
- CDC::Core::Processor
- Whodunit::Chronicles::Chronicler
- Defined in:
- lib/whodunit/chronicles/chronicler.rb,
sig/whodunit/chronicles/chronicler.rbs
Overview
Minimal CDC::Core processor that records change events into a ledger.
Chronicler is intentionally small. It consumes a CDC::Core::ChangeEvent, converts it into an immutable LedgerEntry, and appends that entry into the provided ledger. Scheduling, retries, backpressure, worker pools, and orchestration belong to CDC runtimes outside this gem.
Instance Attribute Summary collapse
-
#ledger ⇒ Object
readonly
Ledger receiving immutable entries.
Instance Method Summary collapse
-
#initialize(ledger:, prepare: true, ensure_indexes: true, clock: Time) ⇒ Chronicler
constructor
Create a chronicler.
-
#partition_for(entry) ⇒ Object
Resolve the ledger partition for an entry.
-
#process(event) ⇒ CDC::Core::ProcessorResult
Process one CDC change event and append one ledger entry.
Constructor Details
#initialize(ledger:, prepare: true, ensure_indexes: true, clock: Time) ⇒ Chronicler
Create a chronicler.
25 26 27 28 29 30 |
# File 'lib/whodunit/chronicles/chronicler.rb', line 25 def initialize(ledger:, prepare: true, ensure_indexes: true, clock: Time) @ledger = ledger @clock = clock @ledger.prepare! if prepare && @ledger.respond_to?(:prepare!) @ledger.ensure_indexes! if ensure_indexes && @ledger.respond_to?(:ensure_indexes!) end |
Instance Attribute Details
#ledger ⇒ Object (readonly)
Returns ledger receiving immutable entries.
17 18 19 |
# File 'lib/whodunit/chronicles/chronicler.rb', line 17 def ledger @ledger end |
Instance Method Details
#partition_for(entry) ⇒ Object
Resolve the ledger partition for an entry.
55 56 57 58 59 |
# File 'lib/whodunit/chronicles/chronicler.rb', line 55 def partition_for(entry) return @ledger.partition_for(entry) if @ledger.respond_to?(:partition_for) @ledger end |
#process(event) ⇒ CDC::Core::ProcessorResult
Process one CDC change event and append one ledger entry.
36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/whodunit/chronicles/chronicler.rb', line 36 def process(event) entry = LedgerEntry.from_change_event(event, clock: @clock) partition_for(entry).append(entry) CDC::Core::ProcessorResult.success(event) rescue StandardError => e CDC::Core::ProcessorResult.failure( e, event: event, processor: self.class.name, retryable: true ) end |