module Turbo::Streams::StreamName

def signed_stream_name(streamables)

Used by Turbo::StreamsHelper#turbo_stream_from(*streamables) to generate a signed stream name.
def signed_stream_name(streamables)
  Turbo.signed_stream_verifier.generate stream_name_from(streamables)
end

def stream_name_from(streamables)

def stream_name_from(streamables)
  if streamables.is_a?(Array)
    streamables.map  { |streamable| stream_name_from(streamable) }.join(":")
  else
    streamables.then { |streamable| streamable.try(:to_gid_param) || streamable.to_param }
  end
end

def verified_stream_name(signed_stream_name)

Used by Turbo::StreamsChannel to verify a signed stream name.
def verified_stream_name(signed_stream_name)
  Turbo.signed_stream_verifier.verified signed_stream_name
end