Back-End

25 mai, 2011

Sinatra: um pouco de DSL e recursos 2.0

Publicidade

Olá pessoal!

A quanto tempo não escrevia por aqui. Fiquei afastado durante esse tempo, devido a alguns projetos que me tomaram muito do tempo. Mas agora, pra compensar, vamos falar um pouco de Ruby (#coisalindahein), e mais especificamente sobre Sinatra.

Sinatra é uma linguagem de domínio específico (DSL) para a criação rápida de aplicações web escritas em Ruby. Ele mantém uma característica mínima definida, deixando livre o desenvolvedor para utilizar as ferramentas que melhor lhe servir em sua aplicação. E destaca por sua simplicidade em fazer as coisas acontecerem.

Vamos preparar o terremo pra usarmos o poder de Sinatra:

gem install sinatra

Agora, um simples “hello”:

#myapp.rb
get '/hello/' do
"Hello, my name is Sinatra"
end

Salve o arquivo, como myapp.rb, assim como o comentário la primeira linha de nosso arquivo rb.

Agora execute:

ruby -rubygems myapp.rb

Se tudo correr bem, você verá isso:

Sinatra has take the stage ..
Listening on 0.0.0.0:4567

Agora acesse localhost:4567/helloHan

Mas o que realmente fizemos? O que realmente o Sinatra fez?

Bem, como Sinatra é uma DSL, os recursos que vamos disponibizar, são os próprios metodos. O Sinatra usa recursos padrões REST.

GET
POST
PUT
DELETE

Outro exemplo, agora com parâmetro:

get '/hello/:name' do
"Hello #{params[:name]}!"
end

Você pode escrever essa “rota” no mesmo arquivo, basta apenas chamar este recurso:

http://localhost:4567/hello/mateus

Ah, também podemos usar um outro recurso de Ruby, block:

get '/say/hello/to/:name' do |n| 
"Hello #{n}!"
end
http://localhost:4567/say/hello/to/mateus

E um exemplo usando Regular Expressions:

get %r{/carambameu/([w]+)} do
"Hello, #{params[:captures].first}!"
end

Agora algumas outras coisas interessantes:

error 403 do
'Access forbidden'
end

get '/secret' do
403
end

Acessando o recurso /secret ele chama o metodo de error 403, nos dando a mensagem ‘Access forbidden’. Legal, né?

Agora personalizando nosso “error 404”:

not_found
'This is nowhere to be found'
end

Mas até gosto da paágina de erros default do Sinatra. Tente acessar:

http://localhost:4567/issonaoexiste

Pra ambiente dev, é muito legal. Ele ainda te dá um dica de como fazer esse recurso.

Considerações

Sinatra não é um framework Model-View-Controller. São apenas controles especificos de URL que o direciona para código Ruby relevante, que retorna resultados como resposta. Isto irá habilitar você a escrever códigos limpos, com aplicações devidamente organizadas, separando as views do código da aplicação, por exemplo.

Neste link do Github, você também encontra Sinatra, a página oficial do projeto é www.sinatrarb.com.

As aplicações em produção com Sinatra são:

  • Github Services;
  • Git Wiki;
  • Integrity;
  • Seinfeld Calendar;

Espero que este artigo traga bons resultados em estudos e casos de uso de Sinatra. Postem dúvidas e comentários, porque realmente agora estou de volta.

Abraço!