Páginas

4 de abril de 2011

Aplicação web com Ruby - Sinatra

Percebo que muitas pessoas começam a aprender Ruby por causa da fama que o Rails trouxe à comunidade de desenvolvimento. Comigo não foi diferente. Mas logo percebi que toda essa maestria com desenvolvimento web não era apenas um "Ruby on Rails".

Muitos inclusive confundem o tal "Ruby on Rails" com uma linguagem, sendo que é um full- framework. Um poderoso framework para desenvolvimento web, que utiliza a linguagem Ruby como sua engine. Apesar de notar seu poder e simplicidade, fui atrás de focar mais no aprendizado da linguagem Ruby.

Com Ruby me aventurei em desenvolver diversos aplicativos para facilitar algumas rotinas, automação, enfim. Lá estava eu com uma aplicação pronta mas queria colocá-la em um web server. Já tinha desenvolvido com Rails, mas minha aplicação era tão simples que encaixá-la ao Rails seria de fato "muito copo para pouca água". Foi aí que conheci o Sinatra...

Sinatra é uma DSL que permite desenvolver aplicações web em Ruby com o mínimo de esforço. É flexível e permite ao desenvolvedor, de uma forma muito simples e rápida, aplicar os conceitos de REST e MVC na aplicação. O Sinatra utiliza diversas bibliotecas para renderizar as views/templates da aplicação. Neste artigo iremos utilizar o famoso "erb".

Quem já tem familiaridade com frameworks MVC terá pouca ou nenhuma dificuldade em entender o Sinatra.


Instalando as gems:
gem install sinatra
gem install erb

Vamos criar uma aplicação web que recebe uma palavra ou frase em letras minúsculas, e transforma em letras maiúsculas (as explicações estão em forma de comentário no código):

upcase_web.rb
require 'sinatra'
require 'erb'

# Por padrão, o Sinatra assume que as views estão no diretório "/views" da aplicação.
# Para mudar, utilize o comando "set" do Sinatra informando em qual diretório estarão as views
set :views, File.dirname(__FILE__) + '/pages'



# Aqui estou dizendo ao Sinatra: para uma requisição em "/", com método "get" (REST), você deve redirecionar para a página "index.erb"
get '/' do
  erb :index
end



# O código por si só já diz tudo...
get '/transforma' do
  erb :form_transforma
end



# Toda requisição a "/transforma" com método "post" deve redirecionar o resultado para a página "result_transforma.erb"
post '/transforma' do
  # Em params[:simbolo] o Sinatra guarda todos os parâmetros passados na requisição
  result = params[:letras_minusculas] 

  # O Sinatra utiliza variáveis de instância que serão mostradas no resultado a ser redirecionado
  @letras_maiusculas = result.upcase

  # Redireciona para a página "result_transforma.erb", que terá a variável de instância de retorno
  erb :result_transforma
end
index.erb:
html...
Transformar palavra
html...
form_transforma.erb (o paramêtro a ser enviado no form chegará para o Sinatra dentro do hash "params[ ]" supracitado):
html...
Insira uma palavra:
html...

result_transforma.erb (para quem ainda não conhece o erb do Ruby, isto é similiar ao "scriptlet" do JSP no Java, e a variável mostrada é a mesma que foi redirecionada pela action no controller):
html...
Palavra transformada: <%= @letras_maiusculas %>
html...
Rodando (o Ruby vai olhar para o "require 'sinatra' " no arquivo, onde o Sinatra irá iniciar o WebServer, que por padrão é o WEBrick na porta 4567):
ruby upcase_web.rb
Simples, não?
O objetivo deste artigo foi mostrar uma introdução ao Sinatra e uma alternativa ao Rails para desenvolver aplicações web. Com Sinatra é permitido ainda fazer coisas muito mais avançadas.
Para quem quiser se aprofundar mais no uso desta poderosa DSL, acesse o site do SinatraRB.

Nenhum comentário: