Renderer independent rendering

This commit is contained in:
Mateus Cezário Barreto 2025-11-29 21:03:50 +00:00
commit 167bddc127
8 changed files with 48 additions and 10 deletions

56
app.rb
View file

@ -2,8 +2,48 @@ require 'gollum/app'
require 'sinatra/flash'
require "sqlite3"
require 'tonton_web'
# TODO: better, simpler route matching
require 'pathname'
class TonTonWeb::App < Sinatra::Base
# Renders a view by the filename without the extension (without a predefined render)
# TODO: pass this to tonton-web code
def render_any template_name, base_dir, options = {}
views_root = settings.views || "./views"
# Search for any file with the given name and any extension
# Dir.glob returns an array of matching file paths
views_dir = Dir.new("#{views_root}/#{base_dir}")
found = false
filename = nil
while not found and ( filename = views_dir.read ) != nil
if File.basename(filename, ".*") == template_name
found = true
end
end
if not found
halt 404, "Template named '#{template_name}' not found."
end
file_path = "#{base_dir}/#{template_name}"
extension = File.extname(filename).delete('.')
engine = case extension
when 'md', 'markdown' then :markdown
when 'erb' then :erb
else
# Fallback: try to use the extension name as the method
extension.to_sym
end
# Dynamically call the correct Sinatra method (e.g., erb :hello, markdown :hello)
# We use 'send' to call the method by its name symbol
send(engine, file_path.to_sym, options)
end
set :host_authorization, { permitted_hosts: ['localhost', 'mytonton.com.br'] }
set :sessions, true
@ -16,19 +56,17 @@ class TonTonWeb::App < Sinatra::Base
markdown File.read("readme.md"), layout_engine: :erb, layout: true
end
get '/:name' do
markdown request.path_info.to_sym, layout_engine: :erb, layout: true
end
# Chapa Sigmóide
get '/chapa-sigmoide/readme' do
get '/chapa-sigmoide' do
redirect "/chapa-sigmoide/readme.markdown"
end
get '/chapa-sigmoide/:name' do
if request.path_info.end_with? '.markdown'
markdown request.path_info.sub('.markdown', '').to_sym, layout_engine: :erb, layout: :chapa_sigmoide
elsif request.path_info.end_with? '.erb'
erb request.path_info.sub('.erb', '').to_sym, layout_engine: :erb, layout: :chapa_sigmoide
render_any params['name'], 'chapa-sigmoide', layout_engine: :erb, layout: :chapa_sigmoide
end
get '/chapa-sigmoide/members/:name' do
render_any params['name'], 'chapa-sigmoide/members', layout_engine: :erb, layout: :chapa_sigmoide
end
end