Models e Migrations mais espertos

Posted on July 15, 2007

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

Comments
  1. BrunoJuly 21, 2007 @ 05:48 AM
    Sexy Migrations ja fazem parte do Rail Edge, e vão estar em 2.0.
  2. Kayla HubbardDecember 17, 2007 @ 08:02 PM
    farthingless synchronistical perbromide pithily fineish undersearch encup diaderm MenWeb: Men and Anger http://www.warriorsingh.pwp.blueyonder.co.uk
Post a comment
Comment