Ruby – Og: ObjectGraph

Há alguns dias (não lembro como…) descobri o Nitro, um framework para desenvolvimento web ágil em Ruby. Um detalhe interessante é que ele usa o Og (mesmo site do Nitro) para abstrair a persistência dos dados. O Og serve de interface entre sua aplicação e o sistema de persistência, como um banco de dados MySQL.

Este tutorial (baseado neste, mas atualizado para a nova API do Og) mostra a instalação e um exemplo de uso _muito_ simples do Og: Armazenar apenas uma classe no banco de dados. No próximo tutorial (até segunda, se der tudo certo…) o assunto será usar Og com várias classes relacionadas. No final, o objetivo é criar a estrutura para controlar um mini-sistema de blog, com categorias (tags), artigos e comentários. O banco de dados utilizado será o MySQL. Mãos à obra!

Como a maioria das bibliotecas em Ruby, a instalação é bastante facilitada pelo uso dos “Gems”. Para instalar o Og, basta executar o comando abaixo:

gem install og

Nossa classe exemplo será a mais simples possível: Uma categoria. Em Ruby “puro”, o código seria o seguinte:

class Categoria
    attr_accessor :nome
end

Devido à tipagem dinâmica de Ruby, você não precisa definir o tipo da variável nome (uma String). Apesar disso, é necessário especificar o tipo uma vez que esse dado será armazenado no banco de dados e ele não consegue descobrir qual o tipo desse dado. Para solucionar esse problema, Og substitui o attr* por prop*. Os métodos prop permitem adicionar metadados aos atributos:

attr        =>; prop
attr_accessor    =>t; prop_accessor
attr_reader    =>; prop_reader
attr_writer    =>; prop_writer

Para melhor legibilidade, Og fornece o método property. Usando esse método, nossa classe ficaria assim:

class Categoria
    property :nome, String
end

Uma vez que nossa classe está pronta, é hora de acessar o banco de dados. Para isso, Og usa o método setup, que recebe um Hash com as opções de configuração. No nosso exemplo, vamos usar a configuração seguinte (Os parâmetros :name, :user e :password podem ser diferentes no seu caso):

config = {
    :destroy =>; false,    # nao destruir os dados se eles ja existirem
    :store =>; :mysql,    # adaptador utilizado: MySQL
    :name =>; 'test',    # nome da base de dados utilizada
    :user =>; 'root',    # nome de usuário
    :password =>; ''        # senha
}

Logo em seguida é só ativar a conexão:

db = Og.setup(config)

A partir daí você pode usar os métodos create (criar um objeto) e save (salvar no banco de dados) para manipular os objetos. Caso uma tabela ou mesmo o banco de dados não exista no servidor MySQL, Og cuida de criar todo o necessário para armazenar aquele objeto no servidor.

cat = Category.create("Ruby")
cat.save

Por hoje é só e até a próxima!

Update: A segunda parte desse tutorial vai demorar um pouco, uma vez que outros projetos e provas estão sugando minha alma….

Anúncios