Page 1
Un newbie conocea Sinatra
Alejandro “Jano” González
Page 2
http://janogonzalez.com
Page 3
Sinatra es un DSL para crear aplicaciones web en
Ruby
Page 4
De acuerdo...¿Pero cómo lo uso?
Page 5
Mientras tanto en New York...
Do it my way...gem install sinatra
Page 6
# hello_world.rbrequire 'sinatra'
get '/' do 'Hello World!'end
Page 7
$ ruby hello_world.rb
Page 9
Parece sencillo...¿Qué otras gracias tiene?
Page 10
Las rutas son el concepto fundamental de Sinatra
Page 12
Método HTTP+
Patrón URL
Page 13
get, post, put o delete+
Patrón URL
Page 14
get '/' do # Leer entidadEnd
post '/' do # Crear entidadend
put '/' do # Actualizar entidadend
delete '/' do # Eliminar entidadend
Page 15
Método HTTP+
'/ruta/fija' o 'ruta/:parm'
Page 16
get '/entidad/:id' do # El id está en params[:id]End
get '/entidad/:id' do |id| # El id está en idend
Page 17
Método HTTP+
'/ruta/*'
Page 18
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
Page 19
Los archivos estáticos están por omisión en
/public
Page 20
Las vistas están por omisión en /view
Page 21
También pueden declararse dentro del
mismo archivo!
Page 22
Soporte para ERB, HAML, Markdown,
Textile, etc.
Page 23
get '/' do # Para obtener la plantilla bajo # /view/index.haml haml :indexend
Page 24
Es posible definir filtros
Page 25
before do # Hacer algo antesend
after do # Hacer algo despuésend
Page 26
Es posible manejar errores
Page 27
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
Page 28
Aplicaciones modulares
Page 29
class MyApp < Sinatra::Base
Page 30
¿Qué camino debe seguir un newbie para crear una
aplicación?
Page 31
Revisemos el pulento ejemplo...
http://my-tweet-week.heroku.com
Fork me on GitHub
Page 32
RVM+
GitHub+
Heroku+
Bundler
Page 33
$ rvm gemset create nombre_aplicacion$ rvm gemset use nombre_aplicacion$ gem install bundler$ gem install heroku
Page 34
Crea un Gemfile indicando las gems que requiere tu aplicación
Page 35
source 'http://rubygems.org'
gem 'sinatra'gem 'haml'gem 'twitter'gem 'oauth'gem 'json_pure'
group :test do gem 'rspec' gem 'rack-test'end
Page 37
Crea un config.ru para el despliegue de tu
aplicación
Page 38
require File.join(File.dirname(__FILE__), 'my_tweet_week.rb')
run MyTweetWeek
Page 39
Programa tu aplicación
Page 40
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
. . .
Page 41
Haz un push en Heroku y tendrás tu aplicación en la
web :)
Page 42
$ git push heroku master
Page 44
Tus sugerencias y críticas me ayudarán a dejar de
ser un newbie :)
Page 45
Sinatra es ideal para aplicaciones pequeñas y
servicios web
Page 46
http://www.sinatrarb.com
Page 47
No actuaron hoy
Rutas Regex,Rutas condicionales,
Helpers,Acceso al objeto Request,
Et ál.
Page 48
Imágenes deWikimedia Commons