07 Jan

Melhorando Seus Testes em Ruby com Spork e Guard

Com o decorrer de qualquer projeto a bateria de testes vão crescendo com os testes de unidade, funcionais, integração, aceitação e afins. Além disso criamos diversas configurações das quais carregam bibliotecas auxiliares, inclusive o Rails. Com isso começamos a perceber uma lentidão na hora de rodar os testes. Dado esse problema veremos como melhor nossos testes em performance e facilidade de execução.

Objetivo

Tornar os testes mais rápidos e mais fáceis de serem executados utilizando o Spork e o Guard

Spork

Normalmente em nossas specs, carregamos o famoso spec_helper.rb, pois é nele que ficam declaradas algumas bibliotecas necessárias para rodar os testes como, por exemplo, o Capybara, Database Cleaner, RSpec e o Rails. E todo este carregamento ocorre cada vez que rodamos os testes, o que pode ser muito demorado dependendo do tamanho do projeto.

O Spork basicamente faz todo este carregamento uma única vez em seu próprio servidor, o Distributed object system for Ruby, assim, quando os testes forem executados, tudo já estará carregado poupando um bom tempo.

Para manipular o Spork iremos utilizar a gem guard-spork que faz uma abstração pra gente:

group :development do
  gem 'guard-spork', '~> 1.4.0'
end

E então podemos iniciar a sua configuração:

bundle install
guard init spork

...

Leia mais...

25 Dez

Os métodos nil?, empty?, blank?, present? e any? do Ruby

Ok, nem todos eles são do Ruby, mas por mais que pareça simples, no decorrer do desenvolvimento paramos para analizar qual método utilizar para verificar se um objeto esta vazio, se é nulo ou não e afim. Para facilitar a memorização, vamos reunir aqui algumas situações.

Objetivo

Diferenciar o uso dos métodos nil?, empty?, blank?, present? e any? para aplicá-los da melhor forma.

nil?

Este é o mais simples dos métodos, pois ele simplesmente verifica se algo é nulo, onde apenas nil irá retornar true:

nil.nil? # true
qualquer_outra_coisa.nil? # false

empty?

A princípio este método é simples e até bem inteligente por verificar até se um hash esta vazio:

''.empty? # true
[].empty? # true
{}.empty? # true

...

Leia mais...

20 Nov

Rails Deploy com Capistrano na Amazon EC2

No artigo passado, Ruby, Unicorn e Nginx na Amazon EC2, montamos toda a estrutura necessária para rodar uma aplicação Ruby on Rails, porém não colocamos nada no ar. Essa tarefa será feita agora e iremos automatizar o deploy utilizando o Capistrano.

Objetivo

Criar uma aplicação Ruby on Rails e automatizar a publicação da mesma na Amazon EC2 utilizando o Capistrano.

Criando a aplicação

Iremos criar uma aplicação crua, somente com uma página inicial que execute algum código Ruby para vermos o Unicorn funcionando. Entre na pasta onde você costuma deixar o seus projetos (workspace) e execute:

rails new wbotelhos-com-br -STJ -d mysql

S: não instala nada do Sprockets, já que não vamos usar Asset Pipeline;
T: não instala nada do Test Unit, até porque usaríamos o RSpec né?; :P
J: não instala os arquivos JavaScripts de exemplo;
-d mysql: prepara a aplicação para rodar usando o MySQL.

...

Leia mais...

23 Out

Ruby, Unicorn e Nginx na Amazon EC2

Se você esta lendo este artigo através do blog, então esta acessando uma estrutura igual a que iremos criar. Irei mostrar como instalar e configurar todos os elementos citados no título deste post, passo-a-passo.

Objetivo

Será mostrado como instalar o Ruby junto ao Rails para ser rodado no Unicorn e servido pelo Nginx na Amazon EC2.

Instância da Amazon EC2

Para criar a instância, siga o artigo Amazon EC2 com Java, MySQL e Tomcat, porém escolha uma instância mais recente do Ubuntu. Enquanto escrevo este artigo, a versão 12.04.

Atualização do Ubuntu

Quando instalamos a versão do SO, é claro que esta não vem totalmente atualizada, por isso iremos dar uma arrumada na casa e deixar tudo preparado.

...

Leia mais...

17 Out

Instalando e Configurando o MySQL

Este artigo surgiu devido a um refactor, no qual foi extraído para ser referenciado em outros. A intenção é tratar de diferentes distribuições, servindo assim, como uma referência pra mim e consequentemente para você que esta lendo. Com o passar do tempo irei atualizando com mais informações.

Objetivo

Instalar e configurar o MySQL em diferentes distribuições.

Linux

Sem dúvidas no Linix o apt-get deixa tudo mais fácil, bastanto executar:

sudo apt-get install mysql-client mysql-server libmysqlclient-dev

...

Leia mais...

04 Set

Instalando o Ruby, Rails e RVM no Mac

Ruby

Com o passar do tempo algumas linguagens de desenvolvimento vão surgindo e outras sendo mais popularizadas como é o caso do Ruby, que vem tomando grande porção do mercado de software. Essa "linguagem de script" com sua tipagem dinâmica conquista cada dia mais os desenvolvedores.

Objetivo

Instalar o Ruby, Rails e o RVM no Mac deixando o ambiente pronto para codar.

...

Leia mais...

04 Abr

Amazon EC2 com Java, MySQL e Tomcat

Amazon EC2

Com a popularização do Cloud Computing foram surgindos mais e mais empresas disponibilizando bons serviços sobre o assunto. Aqui no Brasil já tínhamos a conhecida Locaweb, que alguns diziam ser um Cloud Manual, diga-se de passagem. Outras empresas lá fora como o Heroku ficaram bem conhecidas, assim como a Amazon que já vinha disponibilizando o melhor dos serviços, porém o preço e o ping as vezes deixavam a desejar. Mas para a felicidade de todos a Amazon passou a ter servidores aqui em São Paulo, além de ótimos preço.

...

Leia mais...

04 Mar

VRaptor e Hibernate Com Repository, Generics e Herança

Uma dificuldade frequente para os desenvolvedores, iniciantes ou não, em seus primeiros projetos é como organizar a estrutura de suas aplicações. Com tantos padrões e idéias diferentes fica fácil se perder em meio às palavras abstract, interface, generics, herança, sobrescrita, sobrecarga e afins. Pensando em dar um norte para quem esta começando uma aplicação, vamos criar um projeto utilizando alguns padrões junto a esse monte de palavras que a princípio nos assutam.

Objetivo:

Usando VRaptor e o Hibernate, criar um projeto voltado a interface que tire proveito das classes genéricas e da herança.

...

Leia mais...

17 Jan

Hibernate – Relacionamento ManyToMany Com Atributos e Chave Composta

Neste último post da série de relacionamentos ManyToMany iremos explorar um pouco mais o poder do Hibernate. Desta vez iremos utilizar chave composta na tabela intermediária, além dos atributos próprio da tabela. Antes de ler este post recomendo a leitura dos anteriores: Hibernate – Relacionamento ManyToMany Sem Atributos e o Hibernate – Relacionamento ManyToMany Com Atributos.

...

Leia mais...

06 Dez

Hibernate - Relacionamento ManyToMany Com Atributos

Neste post será mostrado como utilizar o relacionamento ManyToMany do Hibernate com uma maior autonomia de alteração da tabela intermediária. Sendo assim teremos um pouquinho mais de trabalho, porém uma maior flexibilidade. Se você não esta familiarizado com o Hibernate, recomendo a leitura do post Hibernate – Relacionamento ManyToMany Sem Atributos, pois este post esta sendo tratado com uma evolução do anterior.

...

Leia mais...