Véase en GitHub sinatra-up-and-running/tree/master/chapter2/views/external_view_files/external_in_subfolders
$ ls Rakefile app.rb config.ru views
$ cat app.rb require 'sinatra/base' class App < Sinatra::Base get '/:user/profile' do |user| @user = user erb '/user/profile'.to_sym end get '/:user/help' do |user| @user = user erb :'/user/help' end end
$ cat views/user/profile.erb <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Profile Template</title> </head> <body> <h1>Profile of <%= @user %></h1> <%= params %> </body> </html>
$ cat views/user/help.erb <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>HELP Template</title> </head> <body> <h1>Help for user <%= @user %></h1> <pre> <%= params %> </pre> </body> </html>
$ cat config.ru require './app' run App
$ cat Rakefile PORT = 9292 task :default => :server desc "run server" task :server do sh "rackup" end desc "make a get /pepe/profile request via curl" task :profile, :name do |t, h| user = h['name'] || 'pepe' sh "curl -v localhost:#{PORT}/#{user}/profile" end desc "make a get /pepe/help request via curl" task :help do sh "curl -v localhost:#{PORT}/pepe/help" end
$ rake server rackup >> Thin web server (v1.5.1 codename Straight Razor) >> Maximum connections set to 1024 >> Listening on 0.0.0.0:9292, CTRL+C to stop 127.0.0.1 - - [03/Jul/2013 21:40:04] "GET /Pedro/profile HTTP/1.1" 200 227 0.1077
$ rake profile[Pedro] curl -v localhost:9292/Pedro/profile * About to connect() to localhost port 9292 (#0) * Trying 127.0.0.1... connected * Connected to localhost (127.0.0.1) port 9292 (#0) > GET /Pedro/profile HTTP/1.1 > User-Agent: curl/7.21.4 (universal-apple-darwin11.0) libcurl/7.21.4 OpenSSL/0.9.8x zlib/1.2.5 > Host: localhost:9292 > Accept: */* > < HTTP/1.1 200 OK < Content-Type: text/html;charset=utf-8 < Content-Length: 227 < X-XSS-Protection: 1; mode=block < X-Content-Type-Options: nosniff < X-Frame-Options: SAMEORIGIN < Connection: keep-alive < Server: thin 1.5.1 codename Straight Razor < <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Profile Template</title> </head> <body> <h1>Profile of Pedro</h1> {"splat"=>[], "captures"=>["Pedro"], "user"=>"Pedro"} </body> </html> * Connection #0 to host localhost left intact * Closing connection #0