Module: Hecks::Ports::Persistence::RepositoryFactory

Defined in:
lib/hecks/ports/persistence/repository_factory.rb

Overview

Turns a declared adapter binding plus its world configuration into a concrete repository. Selection policy stays out of adapter creation.

Class Method Summary collapse

Class Method Details

.build(registry, domain, aggregate, bind, recover: true, settings_verb: VERB) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/hecks/ports/persistence/repository_factory.rb', line 11

def build(registry, domain, aggregate, bind, recover: true, settings_verb: VERB)
  registry.check_verb(bind)
  settings = (registry.world(domain)&.for_binding(settings_verb, bind.adapter) || {})
             .reject { |key, _| key.to_sym == :role }
  registry.check_settings(bind, settings)
  # The domain and the resolved era ride along after the
  # declared-settings check: a lineage adapter journals per
  # DOMAIN and writes into its own ERA's partition — neither of
  # which a world's settings carry.
  adapter = registry.adapter_class(bind.adapter)
                    .new(aggregate: aggregate,
                         settings:  settings.merge(domain: domain.to_s, era: registry.resolved_eras[domain.to_s]),
                         root:      registry.root)
  repository = AppendOnly.new(adapter)
  recover ? repository.recover! : repository
end