$ bundle install # Instala todas las gemas indicadas en Gemfile.lock
$ bundle update rack # Actualiza la versión de `rack` y sus dependencias
$ bundle update # Actualiza todas las gemas
$ bundle exec SCRIPT # Ejecuta un script con las gemas indicadas en Gemfile.lock
En el repositorio se guardan Gemfile & Gemfile.lock
Sinatra
Sinatra (~2000 loc)
require'sinatra'
get '/frank-says'do'Put this in your pipe & smoke it!'end
use FirstMiddleware
use SecondMiddleware
# ...use LoggingMiddleware
use AuthenticationMiddleware
run OurApp.new
y se levanta el servidor mediante el comando rackup
ver rack-contrib para más ejemplos de Rack Middlewares
Middleware - Casos de uso
Los Middleware son perfecto para la lógica no específica de la aplicación. Cosas como configurar caching headers, logging, parsear el request object, etc. Por ejemplo, en Rails, el manejo de cookies, las sesiones y el parseo de parámetros se hace a través de Middleware.
Sinatra
require'sinatra'
get '/hello'do'Hello World!'end
get '/hello/:name'do"Hello #{params['name']}!"end
get '/bye/:name'do|name|"Goodbye #{name}!"end
Sinatra
# matches "GET /posts?title=foo&author=bar"
get '/posts'do# uses title and author variables; query is optional to the /posts route
title = params['title']
author = params['author']
end# admin.example.com/
get '/', host_name: /^admin\./ do"Admin Area, Access denied!"end
Sinatra
# This renders views/index.erb.
get '/'
erb :indexend# This will render views/index.erb embedded in the views/post.erb# (default is views/layout.erb, if it exists).
get '/'do
erb :index, layout::postend
ERB (Embedded Ruby)
<h1>Esto es HTML</h1><%if @user %>
Hola <%= @user.name %><%else%><ahref="/login">Login</a><%end%>
# Nested routes
get '/post/:id/comments'
@post = Post.find params['id']
@comments = @post.comments
erb :commentsend# Local params
get '/post/:id/comments'
post = Post.find params['id']
comments = post.comments
erb :comments, locals: {post: post, comments: comments}
end
Sinatra
# Modular appsrequire'sinatra/base'classMyApp < Sinatra::Base
set :sessions, true
set :foo, 'bar'
get '/'do'Hello world!'endend# y en config.ru ...require'./my_app'
run MyApp