Replace tilt/ERB views with Phlex components
Assisted-by: Claude Opus 4.6 via pi
change lvkorwruvkoptkqzulslmtsonqokuuxw
commit 432eb0745545f364f50790b16392e1996a9458db
author Alpha Chen <alpha@kejadlen.dev>
date
parent noorrnoo
diff --git a/Gemfile b/Gemfile
index 81b64b1..734a2bd 100644
--- a/Gemfile
+++ b/Gemfile
@@ -4,10 +4,10 @@ source "https://rubygems.org"
 
 git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
 
+gem "phlex"
 gem "puma"
 gem "rackup"
 gem "roda"
-gem "tilt"
 gem "sequel"
 gem "sqlite3"
 
diff --git a/Gemfile.lock b/Gemfile.lock
index d610586..a13c2d2 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -49,6 +49,9 @@ GEM
     parser (3.3.10.1)
       ast (~> 2.4.1)
       racc
+    phlex (2.4.1)
+      refract (~> 1.0)
+      zeitwerk (~> 2.7)
     prism (1.9.0)
     puma (7.2.0)
       nio4r (~> 2.0)
@@ -69,6 +72,9 @@ GEM
     rbs-inline (0.12.0)
       prism (>= 0.29)
       rbs (>= 3.8.0)
+    refract (1.1.0)
+      prism
+      zeitwerk
     roda (3.100.0)
       rack
     securerandom (0.4.1)
@@ -104,7 +110,6 @@ GEM
     strscan (3.1.7)
     terminal-table (4.0.0)
       unicode-display_width (>= 1.1.1, < 4)
-    tilt (2.7.0)
     tsort (0.2.0)
     tzinfo (2.0.6)
       concurrent-ruby (~> 1.0)
@@ -112,6 +117,7 @@ GEM
       unicode-emoji (~> 4.1)
     unicode-emoji (4.2.0)
     uri (1.1.1)
+    zeitwerk (2.7.4)
 
 PLATFORMS
   aarch64-linux-gnu
@@ -127,6 +133,7 @@ PLATFORMS
 
 DEPENDENCIES
   minitest
+  phlex
   puma
   rack-test
   rackup
@@ -136,7 +143,6 @@ DEPENDENCIES
   sequel
   sqlite3
   steep
-  tilt
 
 CHECKSUMS
   activesupport (8.1.2) sha256=88842578ccd0d40f658289b0e8c842acfe9af751afee2e0744a7873f50b6fdae
@@ -168,6 +174,7 @@ CHECKSUMS
   mutex_m (0.3.0) sha256=cfcb04ac16b69c4813777022fdceda24e9f798e48092a2b817eb4c0a782b0751
   nio4r (2.7.5) sha256=6c90168e48fb5f8e768419c93abb94ba2b892a1d0602cb06eef16d8b7df1dca1
   parser (3.3.10.1) sha256=06f6a725d2cd91e5e7f2b7c32ba143631e1f7c8ae2fb918fc4cebec187e6a688
+  phlex (2.4.1) sha256=e596717fbfe38b5271840266758779ebe75092e02629f0c170287e6290a70b12
   prism (1.9.0) sha256=7b530c6a9f92c24300014919c9dcbc055bf4cdf51ec30aed099b06cd6674ef85
   puma (7.2.0) sha256=bf8ef4ab514a4e6d4554cb4326b2004eba5036ae05cf765cfe51aba9706a72a8
   racc (1.8.1) sha256=4a7f6929691dbec8b5209a0b373bc2614882b55fc5d2e447a21aaa691303d62f
@@ -180,6 +187,7 @@ CHECKSUMS
   rb-inotify (0.11.1) sha256=a0a700441239b0ff18eb65e3866236cd78613d6b9f78fea1f9ac47a85e47be6e
   rbs (3.10.3) sha256=70627f3919016134d554e6c99195552ae3ef6020fe034c8e983facc9c192daa6
   rbs-inline (0.12.0) sha256=0b84ec69fa5b3deb89e60f08d9b47966c9e26a222c7c65b5014857a3b10c62b2
+  refract (1.1.0) sha256=ee3b9627e39f7692831101e2fedd73e0d09a592ff5d5c05f171d14211fc7a9c7
   roda (3.100.0) sha256=35d36f43c68d2bd1974dc77ade8c873558265a191018e1ada88ca662f1fa8e62
   securerandom (0.4.1) sha256=cc5193d414a4341b6e225f0cb4446aceca8e50d5e1888743fac16987638ea0b1
   sequel (5.101.0) sha256=d2ae3fd997a7c4572e8357918e777869faf90dc19310fcd6332747122aed2b29
@@ -196,12 +204,12 @@ CHECKSUMS
   steep (1.10.0) sha256=1b295b55f9aaff1b8d3ee42453ee55bc2a1078fda0268f288edb2dc014f4d7d1
   strscan (3.1.7) sha256=5f76462b94a3ea50b44973225b7d75b2cb96d4e1bee9ef1319b99ca117b72c8c
   terminal-table (4.0.0) sha256=f504793203f8251b2ea7c7068333053f0beeea26093ec9962e62ea79f94301d2
-  tilt (2.7.0) sha256=0d5b9ba69f6a36490c64b0eee9f6e9aad517e20dcc848800a06eb116f08c6ab3
   tsort (0.2.0) sha256=9650a793f6859a43b6641671278f79cfead60ac714148aabe4e3f0060480089f
   tzinfo (2.0.6) sha256=8daf828cc77bcf7d63b0e3bdb6caa47e2272dcfaf4fbfe46f8c3a9df087a829b
   unicode-display_width (3.2.0) sha256=0cdd96b5681a5949cdbc2c55e7b420facae74c4aaf9a9815eee1087cb1853c42
   unicode-emoji (4.2.0) sha256=519e69150f75652e40bf736106cfbc8f0f73aa3fb6a65afe62fefa7f80b0f80f
   uri (1.1.1) sha256=379fa58d27ffb1387eaada68c749d1426738bd0f654d812fcc07e7568f5c57c6
+  zeitwerk (2.7.4) sha256=2bef90f356bdafe9a6c2bd32bcd804f83a4f9b8bc27f3600fff051eb3edcec8b
 
 BUNDLED WITH
   4.0.3
diff --git a/lib/views/series/new.rb b/lib/views/series/new.rb
new file mode 100644
index 0000000..a1c4e98
--- /dev/null
+++ b/lib/views/series/new.rb
@@ -0,0 +1,20 @@
+# frozen_string_literal: true
+
+require "phlex"
+
+module Views
+  module Series
+    class New < Phlex::HTML
+      def view_template
+        h1 { "New Series" }
+
+        form(method: "post", action: "/series") do
+          label(for: "name") { "Name" }
+          input(type: "text", id: "name", name: "name", required: true)
+
+          button(type: "submit") { "Create" }
+        end
+      end
+    end
+  end
+end
diff --git a/lib/web.rb b/lib/web.rb
index ff450a9..7dfe7d4 100644
--- a/lib/web.rb
+++ b/lib/web.rb
@@ -2,12 +2,12 @@
 
 require "roda"
 
-class Web < Roda
-  plugin :render, engine: "erb"
+require_relative "views/series/new"
 
+class Web < Roda
   route do |r|
     r.root do
-      render("series/new")
+      Views::Series::New.new.call
     end
   end
 end
diff --git a/views/series/new.erb b/views/series/new.erb
deleted file mode 100644
index e6d477c..0000000
--- a/views/series/new.erb
+++ /dev/null
@@ -1,8 +0,0 @@
-<h1>New Series</h1>
-
-<form method="post" action="/series">
-  <label for="name">Name</label>
-  <input type="text" id="name" name="name" required>
-
-  <button type="submit">Create</button>
-</form>