Da série “Plugins que uso ;)”: Sexy Migrations, Validation Reflection e Validate Attributes.
Sexy Migrations
Nome sugestivo? :) Talvez seu chefe não goste… (renomeie), mas a satisfação é garantida (ops!).
Por exemplo, sem Sexy Migrations:
create_table :funcionarios do |t|
t.column :nome, :string
t.column :email, :string
t.column :nascimento, :date, :null => true
t.column :empresa_id, :integer
t.column :created_at
t.column :updated_at
end
Com Sexy Migrations:
create_table :funcionarios do |t|
string :nome, :email
date :nascimento, :null => true
fkey :empresa
timestamps
end
Gostou? Acesse o ‘post’ do projeto. :D
Vaditation Reflection
Que tal ter informações sobre as validações de um model? Para que? Para utilizar nos testes ou nos formulários. Como? É só instalar o Validation Reflection e usar:
Funcionario.reflect_on_all_validations
Funcionario.reflect_on_validations_for(:nome)
Isto retornará um vetor de MacroReflections , com informações sobre as validações do Model(ou de apenas um atributo). MacroReflections também são os mesmos utilizados para armazenar informações sobre as agregações e associações.
Exemplo:
Funcionario.reflect_on_validations_for(:nome).detect do |v|
v.macro == "validates_uniqueness_of"
end.options[:scope]
O Validation Reflection também possui três métodos que define algumas validações baseadas no metadados da tabela:
validates_presence_of_mandatory_content_columns # v*_presence_of para atributos :null => false
validates_lengths_of_string_attributes #v*_size_of para strings
validates_all_associated # v*_associated para todas as associações
E se não fosse suficiente, ainda adiciona no class das tags dos campos dos atributos informações sobre as validações, fazendo text_field(‘funcionario’,’nome’) obrigatório com limite 30 retornar:
<input id="funcionario_nome" name="funcionario[nome]" class="mandatory validate_maxlength_30" size="30" type="text" />
Validate Attributes
Com o Validate Attributes podemos chamar o velho valid? para um ou mais atributos. Exemplo:@funcionario.validate_attributes(:only => ["nome", "email"])
Interessante para testes, wizards e validações com ajax.
Espero que (alguém) tenha gostado! :) E até as próximas dicas! :D