Я злюсь каждый раз, создавая фикстуры для приложения на Rails, так как любое более-менее сложное приложение требует множества фикстур. Наиболее сложная вещь — это отслеживать связи, валидацию, поддерживать фикстуры свежими. Несколько дней назад Юра Рашковский написал маленькую утилитку — Fixturease. Что если я скажу, что сейчас Вы можете создавать фикстуры используя модели?
Для установки gem’а введите:
1 | gem install fixturease |
Теперь можно попробовать что-нибудь создать:
1 2 3 4 5 6 7 8 9 10 11 12 | # Loading Fixturease console for test mode. @mike = User.create(:login => 'mike', :password => 'pass') # <User:0x482ac18 @new_record_before_save=true, @attributes={"id"=>5, "password"=>"pass", "login"=>"mike", "created_at"=>Sat Jan 20 21:40:23 +0200 2007}, @errors=#<ActiveRecord::Errors:0x4827b08 @base=#<User:0x482ac18 ...>, @errors={}>, @new_record=false> @mike_post_1 = @mike.posts.create(:name => 'first post by mike') # <Post:0x4811bb4 @new_record_before_save=true, @attributes={"name"=>"first post by mike", "updated_at"=>Sat Jan 20 21:40:38 +0200 2007, "id"=>3, "user_id"=>5, "created_at"=>Sat Jan 20 21:40:38 +0200 2007}, @errors=#<ActiveRecord::Errors:0x4811510 @base=#<Post:0x4811bb4 ...>, @errors={}>, @new_record=false> @mike_post_2 = @mike.posts.create(:name => 'second post by mike') # <Post:0x48099dc @new_record_before_save=true, @attributes={"name"=>"second post by mike", "updated_at"=>Sat Jan 20 21:40:45 +0200 2007, "id"=>4, "user_id"=>5, "created_at"=>Sat Jan 20 21:40:45 +0200 2007}, @errors=#<ActiveRecord::Errors:0x48093d8 @base=#<Post:0x48099dc ...>, @errors={}>, @new_record=false> exit # Saving fixtures: # User [./spec/fixtures/users.yml]: mike # Post [./spec/fixtures/posts.yml]: mike_post_1 and mike_post_2 |
В этом простом примере мы создали одну фикстуру для модели User с именем mike, и две для модели Post с именами mike_post_1 и mike_post_2:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | span class="re0"> mike: id: 5 password: pass login: mike created_at: 2007-01-20 21:40:23.250000 +02:00 mike_post_1: name: first post by mike updated_at: 2007-01-20 21:40:38.765000 +02:00 id: 3 user_id: 5 created_at: 2007-01-20 21:40:38.765000 +02:00 mike_post_2: name: second post by mike updated_at: 2007-01-20 21:40:45.562000 +02:00 id: 4 user_id: 5 created_at: 2007-01-20 21:40:45.562000 +02:00 |
Вы всегда можете загрузить фикстуры в текущую среду используя команду load_fixtures! (или параметр командной строки -l). Это позволяет использовать ранее созданные фикстуры для построения новых.
Мне нравятся юнит-тесты, но я ненавижу писать фикстуры. Этот простой gem позволяет мне расслабиться и получать удовольствие от работы.

WOW !! Really Really interesting !! Thank you !
Извиняюсь за оффтоп, подскажи, какой плагин использовал для мультиязычности?
С тем же результатом можно написать:
2
3
4
5
6
7
8
9
10
password: pass
login: mike
mike_post_1:
name: first post by mike
user: mike
mike_post_2:
name: second post by mike
user: mike
А еще у вас сломана openid-аутентификация на блоге.