<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>CØdeZØne! &#187; couchdb</title>
	<atom:link href="http://leandrosilva.com.br/category/couchdb/feed/" rel="self" type="application/rss+xml" />
	<link>http://leandrosilva.com.br</link>
	<description>Coisas sobre desenvolvimento de software</description>
	<lastBuildDate>Sun, 22 Jan 2012 22:38:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>5 minutos de CouchDB e CouchRest</title>
		<link>http://leandrosilva.com.br/2009/08/02/5-minutos-de-couchdb-e-couchrest/</link>
		<comments>http://leandrosilva.com.br/2009/08/02/5-minutos-de-couchdb-e-couchrest/#comments</comments>
		<pubDate>Sun, 02 Aug 2009 16:05:47 +0000</pubDate>
		<dc:creator>Leandro Silva</dc:creator>
				<category><![CDATA[banco de dados]]></category>
		<category><![CDATA[couchdb]]></category>
		<category><![CDATA[rest]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://leandrosilva.com.br/?p=374</guid>
		<description><![CDATA[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 [...]]]></description>
			<content:encoded><![CDATA[<p>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.</p>
<p>O tema é <strong><a href="http://couchdb.apache.org/" target="_blank">CouchDB</a></strong>, o revolucionario banco de dados orientado a documentos e com interface totalmente <a href="http://en.wikipedia.org/wiki/Representational_State_Transfer" target="_blank">RESTful</a>, e a Ruby gem <strong><a href="http://github.com/jchris/couchrest" target="_blank">CouchRest</a></strong>, que é uma verdadeira mão-na-roda. Obviamente que, em tão pouco tempo &#8212; até para cumprir a promessa inicial &#8211;, eu não vou explicar os fundamentos do CouchDB, mas você pode encontrar uma introdução interessante <a href="http://tapajos.me/2009/7/19/falando-um-pouco-sobre-couchdb" target="_blank">aqui</a>.</p>
<p>A primeira coisa que você precisa fazer é se certificar de que possui <a href="http://www.ruby-lang.org/" target="_blank">Ruby</a> 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 <a href="http://www.rubyenterpriseedition.com/" target="_blank">Ruby EE</a> da <a href="http://www.phusion.nl/" target="_blank">Phusion</a> e CouchDB instalado via <a href="http://www.macports.org/" target="_blank">MacPorts</a> &#8212; que acho a maneira mais prática de instação de qualquer coisa; esforço zero.</p>
<pre class="brush: bash; title: ; notranslate">

$ sudo port install couchdb
</pre>
<p>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 <a href="http://books.couchdb.org/relax" target="_blank">CouchDB: The Definitive Guide</a>. Lá você encontra um guia rápido para instalação em <a href="http://books.couchdb.org/relax/appendix/installing-on-windows" target="_blank">Windows</a>, <a href="http://books.couchdb.org/relax/appendix/installing-on-mac" target="_blank">Mac OS X</a>, <a href="http://books.couchdb.org/relax/appendix/installing-on-unix" target="_blank">Unix-like</a> e <a href="http://books.couchdb.org/relax/appendix/installing-from-source" target="_blank">a partir do fonte</a>.</p>
<p><strong>Mão na massa</strong></p>
<p>Bem, com todos os pré-requisitos OK, vamos por a mão na massa logo de uma vez!</p>
<p><strong>1- Instale a gem CouchRest</strong></p>
<pre class="brush: bash; title: ; notranslate">
$ sudo gem install jchris-couchrest
</pre>
<p><strong>2- Inicie o CouchDB</strong></p>
<pre class="brush: bash; title: ; notranslate">
$ sudo couchdb -b
</pre>
<p>Acesse <a href="http://localhost:5984/_utils/" target="_blank">http://localhost:5984/_utils</a>. 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.</p>
<p><strong>3- Abra um terminal IRB</strong></p>
<pre class="brush: ruby; title: ; notranslate">
require 'rubygems'
require 'couchrest'
</pre>
<p>Tudo requerido corretamente, hora de começar a brincar com nosso banco de dados. Mas antes, vamos criá-lo!</p>
<pre class="brush: ruby; title: ; notranslate">
db = CouchRest.database!('http://localhost:5984/my_db')
</pre>
<p>Agora vamos criar os atributos do <em>documento</em> que será gravado nesse banco.</p>
<pre class="brush: ruby; title: ; notranslate">
attributes = { &quot;name&quot; =&gt; &quot;Leandro Silva&quot;, &quot;blog&quot; =&gt; &quot;leandrosilva.com.br&quot;, &quot;titles&quot; =&gt; [&quot;System Architect&quot;, &quot;Blogger&quot;]}
</pre>
<p>Criado os atributos do documento, vamos gravá-lo.</p>
<pre class="brush: ruby; title: ; notranslate">
result = db.save_doc(attributes)
</pre>
<p>Documento criado! Você pode acessar novamente <a href="http://localhost:5984/_utils/" target="_blank">http://localhost:5984/_utils</a> e ver o que aconteceu até agora. Há um documento criado no banco my_db, com uma <em>revisão</em> apenas, contendo os dados que definimos no hash attributes.</p>
<p>Você também pode acessar informações resultantes da operação anterior através do hash result.</p>
<pre class="brush: ruby; title: ; notranslate">
result['id']
result['rev']
</pre>
<p>Viu? São as mesmas informações que você viu no gerenciador web do CouchDB.</p>
<p>Vamos continuar acessando estas informações [de maneira absurdamente fácil] através da CouchRest.</p>
<pre class="brush: ruby; title: ; notranslate">
record = db.get(result['id'])
</pre>
<p>Veja o hash record. Há duas chaves particularmente interessantes: <em>_id</em> e <em>_rev</em>. Estas duas chaves são equivalentes a <em>id</em> e <em>rev</em> do nosso hash anterior, o result.</p>
<p>Um teste? Compare os resultados abaixo.</p>
<pre class="brush: ruby; title: ; notranslate">
result['id']
record['_id']
</pre>
<pre class="brush: ruby; title: ; notranslate">
result['rev']
record['_rev']
</pre>
<p>Taí, simples assim. Viu a equivalência?</p>
<p>Vamos ver outros campos do nosso registro.</p>
<pre class="brush: ruby; title: ; notranslate">
record['titles']
</pre>
<p>Que tal adicionar mais um titulo?</p>
<pre class="brush: ruby; title: ; notranslate">
record['titles'] &lt;&lt; 'Polyglot Programmer'
</pre>
<p>Bem, acho que já é hora de salvar e ir adiante, porque este tutorial tem que ser breve. Vamos lá.</p>
<pre class="brush: ruby; title: ; notranslate">
result = db.save_doc(record)
</pre>
<p>Outra coisa interessante aqui. Vamos conferir a chave rev do nosso hash result.</p>
<pre class="brush: ruby; title: ; notranslate">
result['rev']
</pre>
<p>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!</p>
<p>Legal, muito bem por hoje.</p>
<pre class="brush: ruby; title: ; notranslate">
db.delete_doc(record)
</pre>
<p>Agora volte ao gerenciador web do CouchDB e dê um refresh na página de visualização &#8212; caso você esteja nela.</p>
<p>O que aconteceu? Sumiu! O registro foi apagado.</p>
<p><strong>Finalizando</strong></p>
<pre class="brush: bash; title: ; notranslate">
$ sudo couchdb -d
</pre>
<p>Bem, por hoje é só pessoal. Espero que tenha sido realmente útil e que vocês tenham gostado.</p>
<p>Ah! E se gostaram, please, me deem um pontinho lá no <a href="http://workingwithrails.com/recommendation/new/person/16274-leandro-silva" target="_blank">WWRails</a>. =p</p>
]]></content:encoded>
			<wfw:commentRss>http://leandrosilva.com.br/2009/08/02/5-minutos-de-couchdb-e-couchrest/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>

