Un newbie conoce a Sinatra

48
Un newbie conoce a Sinatra Alejandro “Jano” González

Transcript of Un newbie conoce a Sinatra

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

$ bundle install

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