0

O Dia em que parei de utilizar Fixtures

-

Ok, sempre vi por aí que o pessoal recomenda fortemente a utilização de factories de objetos ao invés de fixtures, porém as fixtures sempre serviram pra mim. Pelo menos até hoje.

O Problema comecou quando eu tive que sair da convenção do Rails. Tenho uma classe, digamos Customer, por exemplo, que possui dois Addresses:

class Customer < ActiveRecord::Base

has_one :business_address, :class_name => 'Address'
has_one :home_address, :class_name => 'Address'

end

Para os meus testes, criei os arquivos de fixtures

# addresses.yml

endereco_1:
street: Endereco 1

endereco_2:
street: Segundo Endereco

# customers.yml
rafael:
name: Rafael
business_address: endereco_1
home_address: endereco_2

Com as novas sexy fixtures, acreditei que isso seria possível. Porém, as fixtures, por natureza, refletem o que está no banco de dados, e nao nos objetos. Não importa que a minha classe Customer tenha atributos business_address e home_address mapeando para a classe Address, o sistema de fixtures não irá conseguir vincular o meu endereco_1 e endereco_2 com o customer rafael. Eu teria que criar uma fixture da seguinte forma:

# customers.yml
rafael:
name: Rafael
business_address_id: 1
home_address_id: 2

E com isso, perder toda a legibilidade. Imagina a bagunça que ficaria se todas as associações do meu modelo fossem com os ids. Quem conseguiria entender além do computador ?

Foi por isso que decidi utilizar o factory_girls. Com ele é possível fazer este tipo de associação sem ter que ficar fazendo macumba gambiarra workarounds. Após a instalação da gem, e configuração (que pode ser vista aqui), basta criar um factories.rb da seguinte forma:

Factory.define :endereco_1, :class => Address do |a|
a.street "Endereco 1"
end

Factory.define :endereco_2, :class => Address do |a|
a.street "Endereco 2"
end

Factory.define :rafael, :class => Customer do |c|
c.association :business_address, :factory => endereco_1
c.association :home_address, :factory => endereco_2
end

E no seu teste:

rafael = Factory(:rafael)

Simples, não ? E bem melhor…

1

Certificação Ruby

-

E não é que já saiu uma certificação Ruby ? Sei lá, mas achei isso meio contraditório. Evidentemente o Ruby não veio para substituir o Java, e sim para dar alternativas e para focar em um nicho muito específico (tá bom, isso é a proposta do rails), mas quando ouço falar em certificação, já aparece o logo tipo do Java na minha mente.

Talvez essa certificação venha apenas para burocratizar algo que é extremamente dinâmico e está evoluindo bem rápido. Bom, mas se o mercado pedir, acredito que fará sentido, mas por enquanto não vejo o mercado sinalizando isso.

E você, o que acha desta certificação ?

0

Deixando o seu GEdit com a cara do TextMate

-

Existem vários tutoriais sobre isso na net, mas aqui vou fazer uma compilação e falar o que funcionou para mim.

Para começar, estou utilizando ubuntu 8.04 (Hardy Heron) com gnome 2.22. Portanto, não sei se este tutorial vale para todos os linux disponíveis por ai.

Um bom lugar de partida é este tutorial do site grigro.org. O tutorial é bem completo.

A única ressalva para este tutorial, é que os plugins devem ser colocados no dir /usr/lib/gedit-2/plugins. Se colocar no local indicado pelo autor, não irá funcionar.

Passo 2. Instalando a fonte.

A fonte utilizada no TextMate é a Liberation Mono, que pode ser encontra para download aqui. Após baixá-la e descompactá-la, rode:

sudo mkdir /usr/share/fonts/truetype/liberation

e depois copie todos os arquivos .ttf para o diretório criado e rode o comando:

sudo fc-cache

Desta forma a nova fonte estará disponível para todos que utilizarem o sistema. Agora basta abrir o gedit e selecioná-la. Sugiro que deixe com tamanho 11.

Qualquer dúvida, é só me escrever.

0

Rails 2.0 – Rotas aninhadas

-

Estava eu seguindo o tutorial “Rolling with Rails 2.0″ do Akita, quando me deparei com um pequeno problema envolvendo autenticação com o plugin restful_authentication. No tutorial, o Akita “migra” o famoso “Webblog in 15 minutes” para rails 2.0, inclusive usando as características restful desta versão.

Porém, na hora de falar sobre autenticação, o Akita apenas cita o plugin restful_authentication e parte para a autenticação básica via http, me deixando sem rumo…

Confesso que foi super simples utilizar o plugin. Há muita documentação sobre isso na net, porém, eu não conseguia criar rotas aninhadas em 2 níveis, do tipo:

localhost:3000/users/1/posts/3/comments

Porém, tava deificil encontrar como fazer isso, mas finalmente achei. Basta fazer isso no routes.rb:

  map.resources :users do |user|
    user.resources :posts do |post|
      post.resources :comments
    end
  end

Com isso, teremos as seguintes rotas:

  • user_posts_path
  • new_user_post_path
  • user_posts_comments_path

E assim resolvi o meu problema! Bom, por ter dado tanto trabalho, talvez alguém também precise disso. Fica ai a dica

0

Comparativo entre IDEs para RubyOnRails

-

Bom, antes de começar o post, quero deixar bem claro, que nesta análise não entrou o TextMate, que é amplamente o mais famoso e aclamado ambiente de desenvolvimento para Ruby no Mac. Na minha análise concentrei mais na alternativas ao TextMate.

IDE’s analisadas: Emacs, Aptana / RadRails, NetBeans 6.0 e IntelliJ.

Bom, vamos lá, começando pelo Emacs:
Se você não gosta de usar o mouse, esta IDE é excelente para você. Claro que você vai perder um certo tempo instalando os plugins para ruby, rails e outros mais, mas depois de acertado fica tudo muito rápido e produtivo. O problema é que se você ficar 2 semanas sem usar, já começa a esquecer as teclas de atalhos, pois são vários ctrl+c+x+z+r+1, etc… Fiquei um bom tempo desenvolvendo com EMacs e realmente me agradou. Mas recentemente fui meio que forçado a abandonar o ambiente Linux :-(

Aptana / RadRails: Esse é o preferido para quem vem do mundo java! As teclas de atalho, visual e filosofia são os mesmos do eclipse, mesmo porque esta IDE é baseada nele. A integração com os “script/generate” é muito boa, a forma de configuração do webserver é tranquila, e há um console IRB nele, o que é muito legal ;-) . Infelizmente nem tudo são flores. Pelo fato do eclipse ser voltado a linguagem estaticamente tipadas (Java e C++ por exemplo), o seu autocomplete para ruby é bem deficiente. Mas mesmo assim acredito que vale a pena. É a minha favorita.

NetBeans 6.0: tem gente que quando ouve falar do netbeans já sente um certo enjôo. Confesso que era uma delas, até começar a brincar com JRuby no NetBeans 5.5. Mesmo com um autocomplete superior ao do RadRails, esta versão do netbeans ainda nao tava legal. Não era muito ágil, o editor de textos não é aquelas coisas, etc. Porém com a versão 6.0 muita coisa mudou. O NetBeans está bem legal! Tem uma integração muito boa com JRuby e com o Rails. O editor está bem ágil e decente! Infelizmente tive que abandoná-lo, pois não estava conseguindo atualizar os gems, e consequentemente o rails 2.0, devido a um: “problema com o proxy da rede”. Engraçado que o gems no console roda perfeitamente.

IntelliJ: A minha menina dos olhos! Apesar de pouco tempo de desenvolvimento com o IntelliJ, estou gostando bastante. Realmente é uma IDE que parece adivinhar o que você que fazer :-) . O Autocomplete é bem legal (mas ainda acho que o do netbenas é melhor), é bem ágil o desenvolvimento, e a criação de snippets é super simples de se fazer. Há também wizards para os “script/generate”. O maior problema desta IDE é o fato dela ser paga :-( . E isso altera o rumo das coisas, né ? Não vou falar ainda que vale a pena, pois estou engatinhando nela. Mas que vale a pena dar uma olhada na versão trial por 30 dias e “de grátis”, vale com certeza. Atente para o fato de que precisa instalar um plugin de rails, que não vem na instalação default. Mas não se preocupe, há um plugin manager de causar inveja na concorrência.

Minha opnião: Pelo fato de ser free e ter uma interface amplamente conhecida por desenvolvedores Java, ainda fico com o Aptana / RadRails, mas confesso que a IntelliJ me cativa a cada dia…

Links:
Aptana
NetBeans 6.0
Emacs
IntelliJ

Mais links:
Como usar Emacs com Rails
IntelliJ + Ruby: Live Demo