Add Roda web skeleton with Puma
Minimal config.ru and Web class so the app can serve HTTP.

Assisted-by: Claude Opus 4.6 via pi
change voypovnxsqykxozmvpypoztkurnnknxp
commit 00a358f95f797a34615cbbfe472b2e5e8cacec0c
author Alpha Chen <alpha@kejadlen.dev>
date
parent nvmmzxmx
diff --git a/Gemfile b/Gemfile
index 11d36dd..ea425a5 100644
--- a/Gemfile
+++ b/Gemfile
@@ -4,6 +4,8 @@ source "https://rubygems.org"
 
 git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
 
+gem "puma"
+gem "rackup"
 gem "roda"
 gem "sequel"
 gem "sqlite3"
diff --git a/Gemfile.lock b/Gemfile.lock
index bf1ecc8..e21fb9c 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -45,12 +45,17 @@ GEM
     minitest (6.0.1)
       prism (~> 1.5)
     mutex_m (0.3.0)
+    nio4r (2.7.5)
     parser (3.3.10.1)
       ast (~> 2.4.1)
       racc
     prism (1.9.0)
+    puma (7.2.0)
+      nio4r (~> 2.0)
     racc (1.8.1)
     rack (3.2.4)
+    rackup (2.3.1)
+      rack (>= 3)
     rainbow (3.1.1)
     rake (13.3.1)
     rb-fsevent (0.11.2)
@@ -119,6 +124,8 @@ PLATFORMS
 
 DEPENDENCIES
   minitest
+  puma
+  rackup
   rake
   rbs-inline
   roda
@@ -154,10 +161,13 @@ CHECKSUMS
   logger (1.7.0) sha256=196edec7cc44b66cfb40f9755ce11b392f21f7967696af15d274dde7edff0203
   minitest (6.0.1) sha256=7854c74f48e2e975969062833adc4013f249a4b212f5e7b9d5c040bf838d54bb
   mutex_m (0.3.0) sha256=cfcb04ac16b69c4813777022fdceda24e9f798e48092a2b817eb4c0a782b0751
+  nio4r (2.7.5) sha256=6c90168e48fb5f8e768419c93abb94ba2b892a1d0602cb06eef16d8b7df1dca1
   parser (3.3.10.1) sha256=06f6a725d2cd91e5e7f2b7c32ba143631e1f7c8ae2fb918fc4cebec187e6a688
   prism (1.9.0) sha256=7b530c6a9f92c24300014919c9dcbc055bf4cdf51ec30aed099b06cd6674ef85
+  puma (7.2.0) sha256=bf8ef4ab514a4e6d4554cb4326b2004eba5036ae05cf765cfe51aba9706a72a8
   racc (1.8.1) sha256=4a7f6929691dbec8b5209a0b373bc2614882b55fc5d2e447a21aaa691303d62f
   rack (3.2.4) sha256=5d74b6f75082a643f43c1e76b419c40f0e5527fcfee1e669ac1e6b73c0ccb6f6
+  rackup (2.3.1) sha256=6c79c26753778e90983761d677a48937ee3192b3ffef6bc963c0950f94688868
   rainbow (3.1.1) sha256=039491aa3a89f42efa1d6dec2fc4e62ede96eb6acd95e52f1ad581182b79bc6a
   rake (13.3.1) sha256=8c9e89d09f66a26a01264e7e3480ec0607f0c497a861ef16063604b1b08eb19c
   rb-fsevent (0.11.2) sha256=43900b972e7301d6570f64b850a5aa67833ee7d87b458ee92805d56b7318aefe
diff --git a/config.ru b/config.ru
new file mode 100644
index 0000000..802bcd1
--- /dev/null
+++ b/config.ru
@@ -0,0 +1,5 @@
+# frozen_string_literal: true
+
+require_relative "lib/web"
+
+run Web.freeze.app
diff --git a/lib/web.rb b/lib/web.rb
new file mode 100644
index 0000000..ec41dc1
--- /dev/null
+++ b/lib/web.rb
@@ -0,0 +1,11 @@
+# frozen_string_literal: true
+
+require "roda"
+
+class Web < Roda
+  route do |r|
+    r.root do
+      "Hello, World!"
+    end
+  end
+end