Compare commits
10 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d45a339a33 | ||
|
|
c543a5c2c3 | ||
|
|
3a3ad90e64 | ||
|
|
6440b3e9a0 | ||
|
|
c834545a40 | ||
|
|
1dea73392c | ||
|
|
61efcb09df | ||
|
|
a6ffa9b663 | ||
|
|
46c47b5d2d | ||
|
|
4c0dd454b5 |
24
.continue/rules/roda-project.md
Normal file
24
.continue/rules/roda-project.md
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
---
|
||||||
|
name: Roda Project
|
||||||
|
description: describes this project for AI to better understand
|
||||||
|
alwaysApply: true
|
||||||
|
---
|
||||||
|
|
||||||
|
# Project Architecture
|
||||||
|
|
||||||
|
This is a Roda application using:
|
||||||
|
|
||||||
|
- Roda web framework
|
||||||
|
- Bundler for dependency management
|
||||||
|
- Puma for the application server
|
||||||
|
- systemd for process management
|
||||||
|
|
||||||
|
## Coding Standards
|
||||||
|
|
||||||
|
- Use Context7
|
||||||
|
- Follow the existing naming conventions.
|
||||||
|
- Testing should use minitest.
|
||||||
|
- Tests should be unit tests, not spec tests.
|
||||||
|
- Any database access should use sequel, never use raw sql.
|
||||||
|
- Prioritize **simplicity, clarity, and performance** over cleverness.
|
||||||
|
- Ask clarifying questions if the goal is ambiguous (e.g., “Are you building a REST API or a full web app?”).
|
||||||
15
Gemfile
15
Gemfile
|
|
@ -1,15 +1,20 @@
|
||||||
source "https://rubygems.org"
|
# frozen_string_literal: true
|
||||||
|
|
||||||
gem "roda"
|
source 'https://rubygems.org'
|
||||||
|
|
||||||
|
gem 'rake'
|
||||||
|
gem 'roda'
|
||||||
|
|
||||||
# change to gunicorn or passenger if you prefer:
|
# change to gunicorn or passenger if you prefer:
|
||||||
gem "puma"
|
gem 'puma'
|
||||||
|
|
||||||
group :development, :test do
|
group :development do
|
||||||
gem "rerun"
|
gem 'rerun'
|
||||||
|
gem 'rubocop'
|
||||||
end
|
end
|
||||||
|
|
||||||
group :test do
|
group :test do
|
||||||
gem 'capybara'
|
gem 'capybara'
|
||||||
gem 'minitest'
|
gem 'minitest'
|
||||||
|
gem 'minitest-reporters'
|
||||||
end
|
end
|
||||||
|
|
|
||||||
61
Gemfile.lock
61
Gemfile.lock
|
|
@ -3,6 +3,9 @@ GEM
|
||||||
specs:
|
specs:
|
||||||
addressable (2.8.7)
|
addressable (2.8.7)
|
||||||
public_suffix (>= 2.0.2, < 7.0)
|
public_suffix (>= 2.0.2, < 7.0)
|
||||||
|
ansi (1.5.0)
|
||||||
|
ast (2.4.3)
|
||||||
|
builder (3.3.0)
|
||||||
capybara (3.40.0)
|
capybara (3.40.0)
|
||||||
addressable
|
addressable
|
||||||
matrix
|
matrix
|
||||||
|
|
@ -15,51 +18,85 @@ GEM
|
||||||
ffi (1.17.2)
|
ffi (1.17.2)
|
||||||
ffi (1.17.2-arm64-darwin)
|
ffi (1.17.2-arm64-darwin)
|
||||||
ffi (1.17.2-x86_64-darwin)
|
ffi (1.17.2-x86_64-darwin)
|
||||||
|
ffi (1.17.2-x86_64-linux-gnu)
|
||||||
|
json (2.15.1)
|
||||||
|
language_server-protocol (3.17.0.5)
|
||||||
|
lint_roller (1.1.0)
|
||||||
listen (3.9.0)
|
listen (3.9.0)
|
||||||
rb-fsevent (~> 0.10, >= 0.10.3)
|
rb-fsevent (~> 0.10, >= 0.10.3)
|
||||||
rb-inotify (~> 0.9, >= 0.9.10)
|
rb-inotify (~> 0.9, >= 0.9.10)
|
||||||
matrix (0.4.3)
|
matrix (0.4.3)
|
||||||
mini_mime (1.1.5)
|
mini_mime (1.1.5)
|
||||||
mini_portile2 (2.8.9)
|
minitest (5.26.0)
|
||||||
minitest (5.25.5)
|
minitest-reporters (1.7.1)
|
||||||
|
ansi
|
||||||
|
builder
|
||||||
|
minitest (>= 5.0)
|
||||||
|
ruby-progressbar
|
||||||
nio4r (2.7.4)
|
nio4r (2.7.4)
|
||||||
nokogiri (1.18.8)
|
nokogiri (1.18.10-arm64-darwin)
|
||||||
mini_portile2 (~> 2.8.2)
|
|
||||||
racc (~> 1.4)
|
racc (~> 1.4)
|
||||||
nokogiri (1.18.8-arm64-darwin)
|
nokogiri (1.18.10-x86_64-darwin)
|
||||||
racc (~> 1.4)
|
racc (~> 1.4)
|
||||||
nokogiri (1.18.8-x86_64-darwin)
|
nokogiri (1.18.10-x86_64-linux-gnu)
|
||||||
racc (~> 1.4)
|
racc (~> 1.4)
|
||||||
|
parallel (1.27.0)
|
||||||
|
parser (3.3.9.0)
|
||||||
|
ast (~> 2.4.1)
|
||||||
|
racc
|
||||||
|
prism (1.6.0)
|
||||||
public_suffix (6.0.2)
|
public_suffix (6.0.2)
|
||||||
puma (6.6.0)
|
puma (7.1.0)
|
||||||
nio4r (~> 2.0)
|
nio4r (~> 2.0)
|
||||||
racc (1.8.1)
|
racc (1.8.1)
|
||||||
rack (3.1.16)
|
rack (3.2.3)
|
||||||
rack-test (2.2.0)
|
rack-test (2.2.0)
|
||||||
rack (>= 1.3)
|
rack (>= 1.3)
|
||||||
|
rainbow (3.1.1)
|
||||||
|
rake (13.3.0)
|
||||||
rb-fsevent (0.11.2)
|
rb-fsevent (0.11.2)
|
||||||
rb-inotify (0.11.1)
|
rb-inotify (0.11.1)
|
||||||
ffi (~> 1.0)
|
ffi (~> 1.0)
|
||||||
regexp_parser (2.10.0)
|
regexp_parser (2.11.3)
|
||||||
rerun (0.14.0)
|
rerun (0.14.0)
|
||||||
listen (~> 3.0)
|
listen (~> 3.0)
|
||||||
roda (3.93.0)
|
roda (3.97.0)
|
||||||
rack
|
rack
|
||||||
|
rubocop (1.81.1)
|
||||||
|
json (~> 2.3)
|
||||||
|
language_server-protocol (~> 3.17.0.2)
|
||||||
|
lint_roller (~> 1.1.0)
|
||||||
|
parallel (~> 1.10)
|
||||||
|
parser (>= 3.3.0.2)
|
||||||
|
rainbow (>= 2.2.2, < 4.0)
|
||||||
|
regexp_parser (>= 2.9.3, < 3.0)
|
||||||
|
rubocop-ast (>= 1.47.1, < 2.0)
|
||||||
|
ruby-progressbar (~> 1.7)
|
||||||
|
unicode-display_width (>= 2.4.0, < 4.0)
|
||||||
|
rubocop-ast (1.47.1)
|
||||||
|
parser (>= 3.3.7.2)
|
||||||
|
prism (~> 1.4)
|
||||||
|
ruby-progressbar (1.13.0)
|
||||||
|
unicode-display_width (3.2.0)
|
||||||
|
unicode-emoji (~> 4.1)
|
||||||
|
unicode-emoji (4.1.0)
|
||||||
xpath (3.2.0)
|
xpath (3.2.0)
|
||||||
nokogiri (~> 1.8)
|
nokogiri (~> 1.8)
|
||||||
|
|
||||||
PLATFORMS
|
PLATFORMS
|
||||||
arm64-darwin
|
arm64-darwin
|
||||||
ruby
|
|
||||||
x86_64-darwin
|
x86_64-darwin
|
||||||
x86_64-linux
|
x86_64-linux
|
||||||
|
|
||||||
DEPENDENCIES
|
DEPENDENCIES
|
||||||
capybara
|
capybara
|
||||||
minitest
|
minitest
|
||||||
|
minitest-reporters
|
||||||
puma
|
puma
|
||||||
|
rake
|
||||||
rerun
|
rerun
|
||||||
roda
|
roda
|
||||||
|
rubocop
|
||||||
|
|
||||||
BUNDLED WITH
|
BUNDLED WITH
|
||||||
2.6.9
|
2.7.1
|
||||||
|
|
|
||||||
19
README.md
19
README.md
|
|
@ -1,3 +1,22 @@
|
||||||
# Roda step 1 - Single File app (sort of)
|
# Roda step 1 - Single File app (sort of)
|
||||||
|
|
||||||
Example single file Roda web app. There are extra files for launching the server, running tests, the license, etc, but the app itself is all in app.rb.
|
Example single file Roda web app. There are extra files for launching the server, running tests, the license, etc, but the app itself is all in app.rb.
|
||||||
|
|
||||||
|
Prepare the environment with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
bundle install
|
||||||
|
# could do "bundle update" instead if you want to fetch new versions of packages
|
||||||
|
```
|
||||||
|
|
||||||
|
Run tests with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
bundle exec rake test
|
||||||
|
```
|
||||||
|
|
||||||
|
Run the app with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
bundle exec puma
|
||||||
|
```
|
||||||
7
Rakefile
Normal file
7
Rakefile
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require 'rake/testtask'
|
||||||
|
|
||||||
|
Rake::TestTask.new do |task|
|
||||||
|
task.pattern = '*_test.rb'
|
||||||
|
end
|
||||||
12
app.rb
12
app.rb
|
|
@ -1,16 +1,16 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
require "roda"
|
|
||||||
|
|
||||||
|
require 'roda'
|
||||||
|
|
||||||
|
# A simple Roda app all in one file.
|
||||||
class App < Roda
|
class App < Roda
|
||||||
route do |r|
|
route do |r|
|
||||||
|
|
||||||
r.root do
|
r.root do
|
||||||
"My Homepage"
|
'My Homepage'
|
||||||
end
|
end
|
||||||
|
|
||||||
r.get 'about' do
|
r.get 'about' do
|
||||||
"About This Site"
|
'About This Site'
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,17 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
require 'minitest/autorun'
|
require 'minitest/autorun'
|
||||||
require 'capybara/minitest'
|
require 'capybara/minitest'
|
||||||
|
|
||||||
require_relative 'app'
|
require_relative 'app'
|
||||||
|
|
||||||
|
# make test report prettier
|
||||||
|
require 'minitest/reporters'
|
||||||
|
Minitest::Reporters.use!
|
||||||
|
|
||||||
Capybara.app = App
|
Capybara.app = App
|
||||||
|
|
||||||
|
# Run tests for my simple Roda app.
|
||||||
class AppTest < Minitest::Test
|
class AppTest < Minitest::Test
|
||||||
include Capybara::DSL
|
include Capybara::DSL
|
||||||
include Capybara::Minitest::Assertions
|
include Capybara::Minitest::Assertions
|
||||||
|
|
@ -33,13 +40,12 @@ class AppTest < Minitest::Test
|
||||||
# Can change the checked content as your site evolves:
|
# Can change the checked content as your site evolves:
|
||||||
def test_home_page_has_content
|
def test_home_page_has_content
|
||||||
visit '/'
|
visit '/'
|
||||||
assert_content "My Homepage"
|
assert_content 'My Homepage'
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_about_page_exists_and_has_content
|
def test_about_page_exists_and_has_content
|
||||||
visit '/about'
|
visit '/about'
|
||||||
assert_equal 200, page.status_code
|
assert_equal 200, page.status_code
|
||||||
assert_content "About This Site"
|
assert_content 'About This Site'
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
Loading…
Reference in a new issue