Marcio Trindade

Ruby

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.



Settingslogic

A gem settingslogic é uma forma simples de consumir arquivos de configuração em uma applicação rails. Já faz alguns anos que utilizo nos meu projetos e recomendo pra quem ainda não a usa.

Esses dias trabalhei em um projeto e vi o pessoal usando uma constante CONFIG que carrega um arquivo config.yml dentro do environment.rb ou em um initializer qualquer. Basicamente o settingslogic tem a mesma funcionalidade a diferença é que em vez de ficar criando constantes você cria um model e este model responde como método, através de method_missing pra cada item do yml. Veja abaixo dois exemplos pra entender esta diferença.


Rails carregando 36% mais rápido com Ruby 1.9.3

O Xavier Shay públicou a alguns dias um artigo mostrando um patch que ele fez alterando mais de 3000 linhas de código e 20 dependências do ruby 1.9.2 e conseguiu fazer o load do rails ficar aproximadamente 60% mais rápido. O que todos achavam estranho é o patch não ser aceito pelo core team, mas a de se entender que alterar tanta coisa como o que o Xavier fez é algo extremamente complicado. Porém 4 dias após este artigo o Masaya Tarui do core team do ruby fez um commit de 26 linhas na class load.c (o loader em c do ruby) e obteve uma performance até melhor do que o código do Xavier chegando a um ganho de até 64% em relação ao ruby 1.9.2.

Se tiver mais interesse neste assunto o Ruby Inside publicou um artigo contando toda esta história.


Problemas com timezone no ActiveRecord

Quando você esta usando o ActiveRecord você acaba aproveitando os campos mágicos createdat e updatedat do Rails, mas uma coisa que poucos sabem é como ele lida com estes.

Quando você inicia a aplicação o Rails seta o time zone de acordo com a sua configuração, seja ela no application.rb no rails 3.x ou enveronment.rb no rails 2.x, porém este time zone não é utilizado no ActiveRecord por uma questão de configuração também, sendo assim quando um registro é criado o Rails utiliza o Time.zone.utc como padrão e salva no banco a hora com time zone utc, e quando ele traz este registro de volta a mágica é feita novamente e altera esta hora para o seu time zone, porém quando você utiliza estes como condições a mágica já não acontece, então é preciso que você faça isso manalmente.


Formtastic

O formtastic é uma gem mantida pelo Justin French que pode ser considerado com um conjuto de helper que utilizam semântica HTML e facilita a criação de formulários em projetos Rails.

A instalação é bem simples, basta adicionar a linha abaixo no arquivo environment.rb.


Resource Controller com template scaffold

Pra quem não conhece o resource_controller é uma gem que facilita a criação de CRUD em seus controllers criando até os 7 métodos básicos pra você dinamicamente (index, show, new, create, edit, update e destroy), se assemelha um pouco ao que o ActiveRecord faz com o model.

Você pode saber mais através da documentação ou no ótimo material disponibilizado pelo autor no github além de encontrar muita coisa nos buscadores, por este motivo que não vou entrar em muito em detalhes sobre a gem ou como ela funciona, mas vou explicar uma implementação que utilizei para tentar diminuir o número de views em meus projetos.

Incomodado de ficar criando o arquivo new e edit a todo momento resolvi alterar o resource controller pra renderizar um template padrão caso não encontre o template da ação que segue a conveniência do Rails. Para isso eu criei um arquivo dentro no initializer que sobrescrevi o método response_for do resource_controller adicionando um rescue para na falta do template tentar renderizar o meu template padrão, veja como ficou:


Live Validations

Em meus últimos projetos utilizei o plugin live-validations que me facilitou trabalhar com as validações no lado do cliente. A lógica do plugin é passar a validação de seus models para js evitando assim posts desnecessários. Este funciona com jQuery ou Prototype No meu caso utilizei a jQuery e vou mostrar abaixo como é simples fazer isso.

jQuery - live-validations


Jammit uma nova opção pra compactar arquivos

A um certo tempo eu venho falando do Jammit uma gem que me chamou a atenção e mudou minha forma de trabalhar com a parte de interface de meus projetos.

Praticamente a mesma coisa que o asset_packager que muitos estão acostumados a utilizar, porém ha algumas diferenças que me fizeram mudar como por exemplo você ter a opção de escolher qual compressor usar o YUI Compressor ou o Google Clouser que pode gerar um arquivo até 40% menor. Outra vantagem é no css que ele utiliza data-uri (um código dentro de um padrão que quando lido pelo navegador gera a imagem dinamicamente) em todas as imagens utilizadas em seu css que estão dentro do diretório embed e que menores do que 32 KB.