Fix snapshot capture runtime errors
Data.define blocks use class_eval, which preserves the caller's
lexical scope for constant assignment. Reopening with `class Config`
nests SentryConfig and DefaultUser under Config properly.

Assisted-by: Claude Opus 4.6 via Claude Code
change otnuxtpqlzqxtpqkrlukoynqwsuvrszx
commit 3a877d64e36a16b8bb7003a87911e1d6873ea268
author Alpha Chen <alpha@kejadlen.dev>
date
parent ywmqtryw
diff --git a/lib/ketchup/config.rb b/lib/ketchup/config.rb
index 88e505e..b7df85b 100644
--- a/lib/ketchup/config.rb
+++ b/lib/ketchup/config.rb
@@ -1,6 +1,8 @@
 # frozen_string_literal: true
 
-Config = Data.define(:database_url, :sentry, :default_user) do
+Config = Data.define(:database_url, :sentry, :default_user)
+
+class Config
   SentryConfig = Data.define(:dsn, :env)
   DefaultUser = Data.define(:login, :name) do
     def self.parse(value)
diff --git a/lib/ketchup/snapshots.rb b/lib/ketchup/snapshots.rb
index cfec6cd..8ed25d7 100644
--- a/lib/ketchup/snapshots.rb
+++ b/lib/ketchup/snapshots.rb
@@ -9,6 +9,7 @@ require "pathname"
 require "ferrum"
 require "puma"
 require "puma/configuration"
+require "rack/builder"
 
 require_relative "seed"
 require_relative "web"
@@ -47,6 +48,7 @@ module Ketchup
 
         `diff -u #{baseline_file.path} #{current_file.path}`.lines.drop(2).filter_map do |line|
           name = line[1..].chomp
+          next if name.empty?
           case line[0]
           when " " then Comparison.new(name: name, baseline: @baseline.fetch(name), current: @current.fetch(name))
           when "-" then Comparison.new(name: name, baseline: @baseline.fetch(name), current: nil)
@@ -214,7 +216,8 @@ module Ketchup
         require_relative "dev_auth"
 
         app = Rack::Builder.app do
-          use Ketchup::DevAuth, Config::DefaultUser.new(login: "snapshot@example.com", name: "Snapshot User")
+          default_user = Config::DefaultUser.new(login: "snapshot@example.com", name: "Snapshot User")
+          use Ketchup::DevAuth, default_user
           run Web.freeze.app
         end