Sinatra – Uma DSL Ruby

Quem não está muito ligado na comunidade Ruby talvez só tenha ouvido falar sobre o Rails. É claro que o Rails é o framework mais famoso de Ruby e vem ajudando a alavancar o crescimento da linguagem, porém existem outros frameworks e DSLs em Ruby. Uma DSL muito boa é o Sinatra. O Sinatra é uma DSL para se criar aplicações web de maneira rápida e com o mínimo de esforço. (eu aprendi a utilizá-lo com o Anderson Leite da Caelum)

O Sinatra possui algumas diferenças com relação ao Rails como por exemplo, não segue o padrão MVC. Seu uso é recomendado para resolver problemas pequenos e é realmente bem fácil utilizá-lo.

Vamos supor que você precise fazer algo simples como criar uma listagem qualquer ou qualquer outra coisa simples não compensando o desenvolvimento em Rails. (hoje eu precisei criar um sitemap com alguns dados da minha aplicação, bem simples, algo que não seria necessário agregar ao escopo da minha aplicação Rails).

Antes de começar é necessário instalar o Sinatra

sudo gem install sinatra

Vou utilizar também o MySQL e o Data Mapper como ORM

sudo gem install dm-core
sudo gem install dm-mysql-adapter

Supondo então que quero fazer uma simples consulta em uma tabela posteriormente criada e com dados cadastrados.
Crie o arquivo my_sinatra.rb com seu editor preferido

require 'rubygems'
require 'sinatra'
require 'dm-core'

#conexao com mysql
DataMapper.setup(:default, "mysql://user:pass@localhost/database")

#classe qualquer
class Product
  include DataMapper::Resource

  property :id, Serial
  property :name, String
  property :status, String

  def self.active
    all(:status => "A")
  end
end

#listando produtos ativos
get '/' do
  @products = Product.active 
  erb :index
end

#utilizando SQL diretamente
get '/sql' do
  @products =  repository(:default).adapter.select("SELECT * FROM produtos WHERE status = 'A'")
  @products.collect{|p| p.id.to_s + " "}
end

Crie também uma pasta chamada views e o arquivo index.erb

<% @products.each do |p| %>
  <%= p.name %><br />
<%  end %>

Para startar a aplicação

ruby my_sinatra.rb

O Sinatra roda na porta 4567 (http://localhost:4567/)
Repare que as urls são definidas no início do bloco: get ‘/’ do

Para complementar o post, recomendo a leitura:
http://www.sinatrarb.com/intro
http://datamapper.org/getting-started