Populando banco de dados utilizando exemplares e faker
Ter dados para testes é fundamental para testar qualquer tipo de aplicativo entretanto, ficar populando banco de dados é um trabalho muito cansativo, sem contar que é muito chato. Pensando que este é o que se pode considerar um problema para qualquer desenvolvedor, este post lhe ajudará bastante.
Irei tratar do Faker. Para quem não o conhece, o mesmo é responsável por gerar dados fictícios sendo eles dados pessoais, empresariais, endereços enfim, muitas coisas. Garantindo assim uma grande praticidade.
O primeiro passo e óbvio é instalarmos o Faker.
[bash]
sudo gem install faker
[/bash]
Acessando a documentação, você poderá perceber a quantidade de coisas que ele é capaz de gerar. Faça um teste no console, abra-o e faça um require ‘faker’ e é só brincar.
Alguns exemplos
[bash]
#fazendo o require da gem
>> require ‘faker’
=> true
#Nomes
>> Faker::Name.name
=> "Arlo Moore"
#Sobrenomes
>> Faker::Name.last_name
=> "Stoltenberg"
#Cidades
>> Faker::Address.city
=> "Jerrellfort"
[/bash]
Chega de brincar e vamos a proposta do post: Gerar exemplares inteligentes.
Primeiramente, instale o plugin object_daddy para que possamos utilizar os exemplares. Pois, é com ele que utilizaremos o .generate na hora de popularmos o banco.
[bash]
script/plugin install git://github.com/flogic/object_daddy.git
[/bash]
Caso você utilize rspec, crie dentro da pasta spec uma pasta chamada exemplars e aqueles que não utilizam, crie dentro da pasta test.
Usuários rspec:

Não usuários rspec:

Agora dentro da pasta criada, você irá criando os exemplares de seus models. Por exemplo no meu caso tenho o model User. Então dentro desta pasta criarei um arquivo user_exemplar.rb. Em outras palavras é o nome do model seguido do sufixo ‘_exemplar.rb‘.

O exemplar inicialmente ficará assim:
[ruby]
class User
end
[/ruby]
Vamos ao que interessa! =)
Considera-se que minha classe de usuário possua os atributos: nome, sobrenome, nome da rua, número da casa e nome da cidade. Se fosse no modo convencional, ficaria assim:
[ruby]
class User
generator_for :name, “Adriano”
generator_for :sobrenome, “Tadao”
generator_for :street, “Rua Americana”
generator_for :number, “104”
generator_for :city, “Birigui”
end
[/ruby]
Mas como nos interessa um model inteligente capaz de gerar usuários de nomes diferentes isso ai não nos interessa! Ao invés de informarmos um valor estático, setaremos um método em seu lugar. Veja o exemplo:
[ruby]
class User
generator_for :name, :method=>:some_name
generator_for :surname, :method=>:some_surname
generator_for :street, :method=>:some_street
generator_for :number, :method=>:some_number
generator_for :city, :method=>:some_city
#Faremos com que os nomes sejam todos diferentes, para isso utilizaremos o while para garantir que não se repetirá
def self.some_name
begin
last_name = Faker::Name.name
end while User.find_by_name(last_name)!=nil
last_name
end
#Como o sobrenome não importa se irá repetir ou não, fica simples assim
def self.some_surname
Faker::Name.last_name
end
#Nome da rua que também poderá repetir
def self.some_street
Faker::Address.street_name
end
#O número da casa que este não utilizará o faker, apenas sorteará números de até três dígitos
def self.some_number
rand(999)
end
#O nome da cidade que também poderá ser repetido
def self.some_city
Faker::Address.city
end
end
[/ruby]
Ok! Nosso exemplar já está apto a popular nosso banco de dados. Veja como será o processo agora.
Abra o console (script/console) da aplicação em questão e faça o require do faker.
[bash]
>> require ‘faker’
=> []
#Gerar uma única vez
>> User.generate
=> #<User id: 3, name: "Camila Hamill", created_at: "2009-10-15 23:07:50", updated_at: "2009-10-15 23:07:50", surname: "Sauer", street: "Dixie Route", number: 152, city: "Yostfort">
#Gerar determinada quantidade de usuários.
>> 10.times{ User.generate }
=> 10
[/bash]
Para gerar determinada quantidade de vezes a sintax é a seguinte:
[bash]
[Quantidade].times{ [Model].generate }
[/bash]
Note no seu banco que está tudo lá gerado e salvo.
Abraços
1 comentário
Deixe um comentário!
Adriano Tadao » Populando banco de dados utilizando exemplares e faker
21/10/2009 22:59[...] http://blog.voraz.com.br/populando-banco-de-dados-utilizando-exemplares-e-faker/ [...]