Normalmente demoro um bom tempo para escrever um tutorial completo, mas dessa vez vou tentar ser o mais breve possível, tanto ao escrever, quanto no resultado final.
O tema é CouchDB, o revolucionario banco de dados orientado a documentos e com interface totalmente RESTful, e a Ruby gem CouchRest, que é uma verdadeira mão-na-roda. Obviamente que, em tão pouco tempo — até para cumprir a promessa inicial –, eu não vou explicar os fundamentos do CouchDB, mas você pode encontrar uma introdução interessante aqui.
A primeira coisa que você precisa fazer é se certificar de que possui Ruby e CouchDB instalados. Caso você ainda não os possua, no Google você encontra inumeras receitas para todo sabor de sistema operacional. No meu caso, estou usando Mac OS X com Ruby EE da Phusion e CouchDB instalado via MacPorts — que acho a maneira mais prática de instação de qualquer coisa; esforço zero.
$ sudo port install couchdb
De qualquer forma, se você quiser uma fonte rápida de informação sobre instalação do CouchDB no seu sistema operacional, consulte o apêndice do livro CouchDB: The Definitive Guide. Lá você encontra um guia rápido para instalação em Windows, Mac OS X, Unix-like e a partir do fonte.
Mão na massa
Bem, com todos os pré-requisitos OK, vamos por a mão na massa logo de uma vez!
1- Instale a gem CouchRest
$ sudo gem install jchris-couchrest
2- Inicie o CouchDB
$ sudo couchdb -b
Acesse http://localhost:5984/_utils. Se você viu um camaradinha relaxando num sofá vermelho no canto superior direito da página, é porque está tudo certo com seu CouchDB. Vamos em frente.
3- Abra um terminal IRB
require 'rubygems' require 'couchrest'
Tudo requerido corretamente, hora de começar a brincar com nosso banco de dados. Mas antes, vamos criá-lo!
db = CouchRest.database!('http://localhost:5984/my_db')
Agora vamos criar os atributos do documento que será gravado nesse banco.
attributes = { "name" => "Leandro Silva", "blog" => "leandrosilva.com.br", "titles" => ["System Architect", "Blogger"]}
Criado os atributos do documento, vamos gravá-lo.
result = db.save_doc(attributes)
Documento criado! Você pode acessar novamente http://localhost:5984/_utils e ver o que aconteceu até agora. Há um documento criado no banco my_db, com uma revisão apenas, contendo os dados que definimos no hash attributes.
Você também pode acessar informações resultantes da operação anterior através do hash result.
result['id'] result['rev']
Viu? São as mesmas informações que você viu no gerenciador web do CouchDB.
Vamos continuar acessando estas informações [de maneira absurdamente fácil] através da CouchRest.
record = db.get(result['id'])
Veja o hash record. Há duas chaves particularmente interessantes: _id e _rev. Estas duas chaves são equivalentes a id e rev do nosso hash anterior, o result.
Um teste? Compare os resultados abaixo.
result['id'] record['_id']
result['rev'] record['_rev']
Taí, simples assim. Viu a equivalência?
Vamos ver outros campos do nosso registro.
record['titles']
Que tal adicionar mais um titulo?
record['titles'] << 'Polyglot Programmer'
Bem, acho que já é hora de salvar e ir adiante, porque este tutorial tem que ser breve. Vamos lá.
result = db.save_doc(record)
Outra coisa interessante aqui. Vamos conferir a chave rev do nosso hash result.
result['rev']
Diferente da primeira vez que vimos, não? Vá ao gerenciador web do CouchDB e veja se algo mudou. Sim, algo mudou. Agora você tem a opção de navegar pelas revisões do seu documento. Fantástico!
Legal, muito bem por hoje.
db.delete_doc(record)
Agora volte ao gerenciador web do CouchDB e dê um refresh na página de visualização — caso você esteja nela.
O que aconteceu? Sumiu! O registro foi apagado.
Finalizando
$ sudo couchdb -d
Bem, por hoje é só pessoal. Espero que tenha sido realmente útil e que vocês tenham gostado.
Ah! E se gostaram, please, me deem um pontinho lá no WWRails. =p