Module: Hecks::Ports::IdentityAssignment
- Defined in:
- lib/hecks/ports/identity_assignment.rb
Overview
WHICH VALUE A CREATING COMMAND'S OWN IDENTITY FIELD GETS, when neither a slug-from-another-field nor a sequence-with-prefix mechanically answers it — a driving app's own console, say, falls back to this when a collection's identity strategy names "port" rather than "slug"/"sequence" (both of those stay pure config-driven mechanics, computed by whoever is dispatching, never by this port).
Pure delegation, same as every sibling port (AccessControl, IdentityGeneration): an app's own domain declares what "port" actually MEANS for it — mint a real UUID via Ports::IdentityGeneration, derive something else entirely — this port just resolves the one adapter that domain wired and calls it, the same "one adapter registry-wide, refuse if zero or many" resolution every other port here already uses.
Constant Summary collapse
- NAME =
"identity_assignment"
Class Method Summary collapse
Class Method Details
.adapter(registry) ⇒ Object
29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/hecks/ports/identity_assignment.rb', line 29 def adapter(registry) implementations = registry.adapters.values.select { |a| a.port == NAME } case implementations.size when 1 then Adapters.const_get(implementations.first.name) when 0 raise Runtime::WiringError, "no adapter implements the #{NAME} port — nothing can assign an identity" else raise Runtime::WiringError, "#{implementations.size} adapters implement the #{NAME} port " \ "(#{implementations.map(&:name).sort.join(', ')}) — the runtime will not choose for you" end end |
.assign(registry, agg_name:, field_name:, args:) ⇒ Object
25 26 27 |
# File 'lib/hecks/ports/identity_assignment.rb', line 25 def assign(registry, agg_name:, field_name:, args:) adapter(registry).assign(registry, agg_name: agg_name, field_name: field_name, args: args) end |