Give default_user a typed struct instead of a raw string
Assisted-by: Claude Opus 4.6 via Claude Code
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