diff --git a/app.rb b/app.rb index 6a03c5c..7a0adf9 100644 --- a/app.rb +++ b/app.rb @@ -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 - end + 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 \ No newline at end of file diff --git a/views/chapa-sigmoide/henrique.markdown b/views/chapa-sigmoide/members/henrique.markdown similarity index 100% rename from views/chapa-sigmoide/henrique.markdown rename to views/chapa-sigmoide/members/henrique.markdown diff --git a/views/chapa-sigmoide/joao.markdown b/views/chapa-sigmoide/members/joao.markdown similarity index 100% rename from views/chapa-sigmoide/joao.markdown rename to views/chapa-sigmoide/members/joao.markdown diff --git a/views/chapa-sigmoide/leonardo.markdown b/views/chapa-sigmoide/members/leonardo.markdown similarity index 100% rename from views/chapa-sigmoide/leonardo.markdown rename to views/chapa-sigmoide/members/leonardo.markdown diff --git a/views/chapa-sigmoide/lucas.markdown b/views/chapa-sigmoide/members/lucas.markdown similarity index 100% rename from views/chapa-sigmoide/lucas.markdown rename to views/chapa-sigmoide/members/lucas.markdown diff --git a/views/chapa-sigmoide/mateus.markdown b/views/chapa-sigmoide/members/mateus.markdown similarity index 100% rename from views/chapa-sigmoide/mateus.markdown rename to views/chapa-sigmoide/members/mateus.markdown diff --git a/views/chapa-sigmoide/readme.md b/views/chapa-sigmoide/readme.markdown similarity index 100% rename from views/chapa-sigmoide/readme.md rename to views/chapa-sigmoide/readme.markdown diff --git a/views/chapa-sigmoide/symbology.md b/views/chapa-sigmoide/symbology.markdown similarity index 100% rename from views/chapa-sigmoide/symbology.md rename to views/chapa-sigmoide/symbology.markdown