Module: CommandTower::Messaging::Channels

Defined in:
app/services/command_tower/messaging/channels.rb,
app/services/command_tower/messaging/channels/error.rb,
app/services/command_tower/messaging/channels/definition.rb,
app/services/command_tower/messaging/channels/unknown_channel_error.rb

Defined Under Namespace

Classes: Definition, Error, UnknownChannelError

Constant Summary collapse

DEFINITIONS =

identity_backed: readiness uses User Identity facts. supports_endpoint_records: Endpoint Platform may persist ledger rows. SMS is Identity-owned only (like email) — not an Endpoint Platform channel.

[
  Definition.new(
    key: "inbox",
    label: "Inbox",
    kind: :inbox,
    supports_endpoint_records: false,
    identity_backed: false,
    canonical_provider: nil,
  ),
  Definition.new(
    key: "email",
    label: "Email",
    kind: :external,
    supports_endpoint_records: false,
    identity_backed: true,
    canonical_provider: "smtp",
  ),
  Definition.new(
    key: "sms",
    label: "SMS",
    kind: :external,
    supports_endpoint_records: false,
    identity_backed: true,
    canonical_provider: "twilio",
  ),
  Definition.new(
    key: "push",
    label: "Push",
    kind: :external,
    supports_endpoint_records: true,
    identity_backed: false,
    canonical_provider: "expo",
  ),
  Definition.new(
    key: "pushover",
    label: "Pushover",
    kind: :external,
    supports_endpoint_records: true,
    identity_backed: false,
    canonical_provider: "pushover",
  ),
].map(&:freeze).freeze
INDEX =
DEFINITIONS.index_by(&:key).freeze

Class Method Summary collapse

Class Method Details

.definitionsObject



80
81
82
# File 'app/services/command_tower/messaging/channels.rb', line 80

def definitions
  DEFINITIONS
end

.external_keysObject



76
77
78
# File 'app/services/command_tower/messaging/channels.rb', line 76

def external_keys
  @external_keys ||= DEFINITIONS.select(&:external?).map(&:key).freeze
end

.fetch(key) ⇒ Object



60
61
62
# File 'app/services/command_tower/messaging/channels.rb', line 60

def fetch(key)
  INDEX[key.to_s]
end

.fetch!(key) ⇒ Object



64
65
66
67
68
69
70
# File 'app/services/command_tower/messaging/channels.rb', line 64

def fetch!(key)
  normalized = key.to_s
  definition = INDEX[normalized]
  raise UnknownChannelError, "unknown channel: #{normalized.inspect}" if definition.nil?

  definition
end

.keysObject



72
73
74
# File 'app/services/command_tower/messaging/channels.rb', line 72

def keys
  @keys ||= DEFINITIONS.map(&:key).freeze
end

.known?(key) ⇒ Boolean

Returns:

  • (Boolean)


56
57
58
# File 'app/services/command_tower/messaging/channels.rb', line 56

def known?(key)
  INDEX.key?(key.to_s)
end