Dev & EngARTIGO

Sinatra: um pouco de DSL e recursos 2.0

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 RubyRuby3 conteúdosComo migrei meus testes automatizados de Java para Ruby… Será que fiz bem?Dev (Back & Front) · jun 2019Refatoração em RubyDev (Back & Front) · mai 20197 exemplos de linguagens de programação server-sideGestão Dev & TI · jun 2024Ver tudo em Dev (Back & Front) (#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!

é especialista em Engenharia de Software. É palestrante de eventos nacionais sobre Ruby, Rails, Python, Java e Arquitetura. Trabalha como desenvolvedor na Locaweb, empresa líder em Hosting e Serviços de Internet na América Latina, onde é responsável em criar projetos em multiplas linguagens, como, C#, .NET, Ruby, Rails, Sinatra, Python, Web.py e outras tecnologias Web 2.0. Além disso, é apaixonado por virtualização e cloud computing e user expert de MacBooks.

Ver perfil