Un newbie conocea Sinatra
Alejandro “Jano” González
http://janogonzalez.com
Sinatra es un DSL para crear aplicaciones web en
Ruby
De acuerdo...¿Pero cómo lo uso?
Mientras tanto en New York...
Do it my way...gem install sinatra
# hello_world.rbrequire 'sinatra'
get '/' do 'Hello World!'end
$ ruby hello_world.rb
Parece sencillo...¿Qué otras gracias tiene?
Las rutas son el concepto fundamental de Sinatra
Método HTTP+
Patrón URL
get, post, put o delete+
Patrón URL
get '/' do # Leer entidadEnd
post '/' do # Crear entidadend
put '/' do # Actualizar entidadend
delete '/' do # Eliminar entidadend
Método HTTP+
'/ruta/fija' o 'ruta/:parm'
get '/entidad/:id' do # El id está en params[:id]End
get '/entidad/:id' do |id| # El id está en idend
Método HTTP+
'/ruta/*'
get '/desde/*/hasta/*' do # Los 2 matches de * están # en params[:splat]End
get '/entidad/*.html' do # El match de * está en params[:splat]end
Los archivos estáticos están por omisión en
/public
Las vistas están por omisión en /view
También pueden declararse dentro del
mismo archivo!
Soporte para ERB, HAML, Markdown,
Textile, etc.
get '/' do # Para obtener la plantilla bajo # /view/index.haml haml :indexend
Es posible definir filtros
before do # Hacer algo antesend
after do # Hacer algo despuésend
Es posible manejar errores
not_found do # Hacer algo en caso de 404end
error 403 do# Hacer algo en caso de no autorizado
end
error Twitter::Unauthorized do# Manejar la excepción
end
error do# Manejar error genérico
end
Aplicaciones modulares
class MyApp < Sinatra::Base
¿Qué camino debe seguir un newbie para crear una
aplicación?
Revisemos el pulento ejemplo...
http://my-tweet-week.heroku.com
Fork me on GitHub
RVM+
GitHub+
Heroku+
Bundler
$ rvm gemset create nombre_aplicacion$ rvm gemset use nombre_aplicacion$ gem install bundler$ gem install heroku
Crea un Gemfile indicando las gems que requiere tu aplicación
source 'http://rubygems.org'
gem 'sinatra'gem 'haml'gem 'twitter'gem 'oauth'gem 'json_pure'
group :test do gem 'rspec' gem 'rack-test'end
Crea un config.ru para el despliegue de tu
aplicación
require File.join(File.dirname(__FILE__), 'my_tweet_week.rb')
run MyTweetWeek
Programa tu aplicación
require 'bundler'Bundler.setup(:default)
require 'sinatra'require 'haml'require 'twitter'require 'oauth'
class MyTweetWeek < Sinatra::Base set :haml, :format => :html5, :attr_wrapper => '"' enable :sessions, :static, :raise_errors set :public, File.join(File.dirname(__FILE__), 'public')
get '/' do haml :index end get '/login' do request_token = consumer.get_request_token(:oauth_callback => ENV['OAUTH_CALLBACK'])
session[:request_token] = request_token.token session[:request_token_secret] = request_token.secret redirect request_token.authorize_url end
. . .
Haz un push en Heroku y tendrás tu aplicación en la
web :)
$ git push heroku master
Tus sugerencias y críticas me ayudarán a dejar de
ser un newbie :)
Sinatra es ideal para aplicaciones pequeñas y
servicios web
http://www.sinatrarb.com
No actuaron hoy
Rutas Regex,Rutas condicionales,
Helpers,Acceso al objeto Request,
Et ál.
Imágenes deWikimedia Commons