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