Give default_user a typed struct instead of a raw string
Assisted-by: Claude Opus 4.6 via Claude Code
change rsvqnvuxzvplqwqmosxuxvrpvrvrmytn
commit 041b5e0481e0071b60ea56143e7f3cce00185199
author Alpha Chen <alpha@kejadlen.dev>
date
parent uqoorlzl
diff --git a/fly.toml b/fly.toml
index 80f7446..5ca379d 100644
--- a/fly.toml
+++ b/fly.toml
@@ -25,3 +25,4 @@ primary_region = 'sjc'
 [env]
   DATABASE_URL = ':memory:'
   SENTRY_ENV = 'fly.io'
+  DEFAULT_USER = 'demo@example.com:Demo User'
diff --git a/lib/ketchup/config.rb b/lib/ketchup/config.rb
index 7431c69..3f5db7f 100644
--- a/lib/ketchup/config.rb
+++ b/lib/ketchup/config.rb
@@ -2,13 +2,20 @@
 
 Config = Data.define(:database_url, :sentry, :default_user) do
   SentryConfig = Data.define(:dsn, :env)
+  DefaultUser = Data.define(:login, :name) do
+    def self.parse(value)
+      login, name = value.split(":", 2)
+      new(login: login, name: name || login)
+    end
+  end
 
   def self.from_env(env = ENV)
     sentry_dsn = env["SENTRY_DSN"]
+    default_user = env["DEFAULT_USER"]
     new(
       database_url: env.fetch("DATABASE_URL") { "db/ketchup.db" },
       sentry: sentry_dsn ? SentryConfig.new(dsn: sentry_dsn, env: env["SENTRY_ENV"]) : nil,
-      default_user: env["DEFAULT_USER"]
+      default_user: default_user ? DefaultUser.parse(default_user) : nil
     )
   end
 end
diff --git a/lib/ketchup/dev_auth.rb b/lib/ketchup/dev_auth.rb
index 684c52a..540c289 100644
--- a/lib/ketchup/dev_auth.rb
+++ b/lib/ketchup/dev_auth.rb
@@ -3,10 +3,9 @@
 module Ketchup
   class DevAuth
     def initialize(app, default_user)
-      login, name = default_user.split(":", 2)
       @app = app
-      @login = login
-      @name = name || login
+      @login = default_user.login
+      @name = default_user.name
     end
 
     def call(env)
diff --git a/lib/ketchup/snapshots.rb b/lib/ketchup/snapshots.rb
index 76d6e66..cfec6cd 100644
--- a/lib/ketchup/snapshots.rb
+++ b/lib/ketchup/snapshots.rb
@@ -214,7 +214,7 @@ module Ketchup
         require_relative "dev_auth"
 
         app = Rack::Builder.app do
-          use Ketchup::DevAuth, "snapshot@example.com:Snapshot User"
+          use Ketchup::DevAuth, Config::DefaultUser.new(login: "snapshot@example.com", name: "Snapshot User")
           run Web.freeze.app
         end