A nova sintaxe de mocks do rspec

No último artigo escrevi sobre a nova sintaxe do rspec, agora vou falar sobre a nova sintaxe para os mocks do rspec. Veja a documentação.

Apartir do rspec 2.14.0 as duas sintaxes estão presentes e você pode especificar qual deseja usar no spec_helper.

spec_helper.rb
RSpec.configure do |config|
  config.mock_with :rspec do |c|
    # c.syntax = [:expect, :should]
    # c.syntax = :should
    c.syntax = :expect
  end
  config.expect_with :rspec do |c|
    # c.syntax = [:should, :expect]
    # c.syntax = :should
    c.syntax = :expect
  end

A nova sintaxe do rspec

O Rspec agora possui uma nova sintaxe que ao meu ponto de vista ficou um pouco mais coeso com o que realmente o teste está testando.

Pra configurar é bem simples, basta você setar qual modo deseja usar no seu spec_helper.

spec_helper.rb
RSpec.configure do |config|
  config.expect_with :rspec do |c|
    # c.syntax = [:should, :expect]
    # c.syntax = :should
    c.syntax = :expect
  end
end

Acredito que o código acima é auto explicativo e não se faz necessário explicações.


Utilizando gems locais em desenvolvimento

Hoje encontrei uma dica muito útil no site The Life of a Radar.

Quem utiliza alguma gem na qual está trabalhando constantemente sabe como é chato ficar alterando o arquivo Gemfile sempre que vai fazer um deploy. Este é o meu caso que tenho os models do meu projeto separado em uma gem (Rails Engine) a fim de reutiliza-los em todos os projetos, tanto front-end quanto workers.

Como a maior parte do tempo estou desenvolvendo, mantenho o meu Gemfile configurado desta forma:

Gemfile
gem 'projet-models', path: "../project-models"

Começando com Mongoid

Hoje quero mostrar algo muito simples, mas é pra encorajar as pessoas que ainda não usaram o MongoDB como banco de dados de seus projetos.

É importante você conhecer pelo menos um pouco do mongodb, saber como instalar, iniciar, parar, reiniciar, fazer uma query e inserir e editar documentos.

Depois que já tiver este background então vale a pena dar uma olhada na página do Mongoid, que é uma ótima gem criada pelo Durran Jordan pra trabalhar com mongodb no rails.


Pjax

Não faz muito tempo que escutei falar de pjax uma técnica que une ajax + pushState e que o Chris Wanstrath do github difundiu criando o jquery-pjax, recentemente o Ryan Bates do railscts.com publicou um epsódio mostrando como você pode utiliza-la com o rails.

Você já deve ter visto a arvore de códigos (source tree) que o github utiliza, quando você clica em um arquivo ou diretório ele atualiza o conteúdo via ajax e altera a url pra que você possa copiar e mandar pra outras pessoas sem o uso de ancoras que hoje em dia é o uso comum. Isso mantém o histórico de navegação dos navegadores funcionando.


Nginx + Unicorn

Desde que a Phusion lançou o passenger eu sempre o utilizei em conjunto com o apache que já era familizarizado.

Quando trabalhei na Digital Pages me deparei com o pessoal utilizando o passenger com nginx, pra falar a verdade eu só tinha escutado falar deste servidor web e nem dei muita bola, além de que a aplicação caia de tempos em tempos e o log ficava poluído com algumas mensagens que o passenger adicionava, mostrei para o pessoal como utilizar o apache no lugar do nginx, a aplicação acabou ficando bem estável e optamos por colocar em produção.


Introdução ao Guard

Dando continuidade aos últimos artigos resolvi escrever sobre a Guard, uma gem que complementa de forma incrível o uso do spork e automatiza seus testes.

A Guard tem uma função parecida com a Watcher, que praticamente fica monitorando alterações em seus arquivos e pode executar deterinadas ações quando isso ocorre, porém ele é bem estruturado e aceita outras gems complementares pra facilitar nosso dia a dia, uma destas é a guard-rspec e a guard-spork.


ActiveReload pra melhorar a performance de projetos rails

Embalado um pouco com o último post que era pra melhorar a performance do seus test vou falar um pouquinho de outra gem que também melhora a performance, mas agora em modo de desenvolvimento.

A Gem ActiveReload do Robert Pankowecki faz uma boa diferença em projetos grande com muitos arquivos, pois quando você sobe um servidor em modo de desenvolvimento ele carrega todos os arquivos como se fosse no modo de produção e quando você alterar suas classes ele faz o reload somente dos arquivos alterados, logo o tempo pra de carregamento das páginas diminui bastante. É compatível com ruby >= 1.8.7 e já foi testado com rails >= 3.0.10.


Conhecendo o Spork

A um certo tempo ouvi falar da gem Spork criada pelo Tim Happer que trabalha como um servidor drb, funciona mais ou menos como um servidor web em modo development onde todo rails e as configurações como rotas, spec_helper, factories e outras são carregadas e persistem em memória, então quando você rodar seus testes usando o servidor drb não será necessário carregar todo o framework e sim apenas suas classes e testes.


Templates simples e rápidos com Slim

O Slim é uma gem desenvolvida por Andrew Stone pra criação de templates com foco na simplicidade como o HAML, mas que tem um foco mais voltado pra velocidade. A sintaxe dos dois são bem parecidas como maior diferença que no Slim você não precisa escrever o % na frente das tags, outra diferença que encontrei foi que ao meu ver o Slim está com uma organização um pouco melhor no código.

O Fred Wu escreveu um bundle para o text-mate e no embalo o "bbommarito" escreveu este bundle para o vim. O fred ainda publicou mais uma gem pra converter haml pra slim que funciona bem em muitos casos, mas ainda tem alguns problemas com certos tipos de atributos.