Skip to content

Commit 189484d

Browse files
GyodaiDDAgmkoeb
andcommitted
Refactor do Superseed
- Postagens com textos de tamanho e estrutura mais realistas - Melhorias de performance - Andamento do seed mostrado em tela Co-authored-by: Gabriel Manika <[email protected]>
1 parent d216962 commit 189484d

File tree

4 files changed

+63
-9
lines changed

4 files changed

+63
-9
lines changed

README.md

+6
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,12 @@ O Portfoliorrr é uma rede social com funcionalidades de portfólio para pessoas
2222
- Rode o comando `bin/setup` e aguarde sua conclusão;
2323
- Rode o comando `yarn install` (necessário ter `node` instalado em sua máquina);
2424

25+
## Populando o banco de dados
26+
27+
- O seed comum, para desenvolvimento, pode ser feito normalmente com `rails db:seed`
28+
- Para apresentações e testes de front-end, é possível fazer um superseed, utilizando `rails db:seed:superseed`
29+
- O superseed utiliza as gems Faker e FactoryBot, que são instaladas durante a configuração (ver item anterior)
30+
2531
## Como visualizar a aplicação no navegador
2632

2733
- Siga as instruções de configuração da aplicação

db/seeds/superseed.rb

+18-6
Original file line numberDiff line numberDiff line change
@@ -58,17 +58,19 @@
5858
]
5959

6060
# Adiciona usuários, perfis, informações pessoais
61+
print "\n4. criando usuários "
6162
@number_of_users.times do
6263
user = FactoryBot.create(:user, :seed)
6364
profile = FactoryBot.create(:profile, :seed, user:)
6465
profile.photo.attach(Rails.root.join('app', 'assets', 'images', 'avatars', "avatar#{user.id}.png"))
6566
personal_info = FactoryBot.create(:personal_info, :seed, profile:)
6667

6768
# Adiciona experiências profissionais
68-
FactoryBot.create(:professional_info, :first_seed, profile:)
69+
FactoryBot.create(:professional_info, :first_job, profile:)
6970
rand(2..7).times do
70-
FactoryBot.create(:professional_info, :seed, profile:)
71+
FactoryBot.create(:professional_info, :seed_job, profile:)
7172
end
73+
FactoryBot.create(:professional_info, :current_job, profile:)
7274

7375
# Adiciona experiências acadêmicas
7476
FactoryBot.create(:education_info, :first_seed, profile:)
@@ -85,25 +87,33 @@
8587
job_category: job_categories.sample,
8688
description: Faker::Lorem.paragraph)
8789
end
90+
print '.'
91+
end
8892

89-
# Cria um post com imagem e outros posts somente texto (WIP)
93+
# Para cada user cria um post com imagem e de um a três sem imagens
94+
print "\n3. criando postagens "
95+
User.all.each do |user|
9096
html_post = %(<action-text-attachment sgid="#{images_for_posts.sample.attachable_sgid}"></action-text-attachment>)
91-
user.posts.create(title: Faker::Lorem.sentence, content: "#{Faker::Lorem.paragraph} #{html_post}", tag_list: [tags].sample)
97+
FactoryBot.create(:post, :seed, user:, content: "#{Faker::Lorem.paragraphs(number: 3).join(' ')} #{html_post}")
9298
rand(1..3).times do
93-
user.posts.create(title: Faker::Lorem.sentence, content: "#{Faker::Lorem.paragraph}", tag_list: [tags].sample)
99+
FactoryBot.create(:post, :seed, user:)
94100
end
101+
print '.'
95102
end
96103

97104
# Adiciona followers aos perfis
105+
print "\n2. estabelecendo seguidores e seguidos "
98106
User.all.each do |user|
99107
rand(2..5).times do
100108
not_followed_profiles = Profile.all.reject { |profile| profile.following?(user.profile) }
101109
followed_profile = not_followed_profiles.sample if not_followed_profiles.any?
102110
Connection.create!(follower: user.profile, followed_profile:) unless followed_profile == user.profile
103111
end
112+
print '.'
104113
end
105114

106115
# Adiciona comentários e likes
116+
print "\n1. criando comentários e dando likes "
107117
Post.all.each do |post|
108118
rand(0..10).times do
109119
FactoryBot.create(:like, likeable: post, user: User.all.reject { |user| post.likes.pluck(:user_id).include?(user.id) }.sample)
@@ -114,7 +124,9 @@
114124
FactoryBot.create(:like, likeable: comment, user: User.all.reject { |user| comment.likes.pluck(:user_id).include?(user.id) }.sample)
115125
end
116126
end
127+
print '.'
117128
end
118129

119-
puts "Pronto! #{@number_of_users} usuários criados."
130+
puts "\nPronto! #{@number_of_users} usuários criados."
120131
puts "Admin: #{admin.email}, senha: #{admin.password}"
132+
puts "\n"

spec/factories/posts.rb

+25-1
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,37 @@
11
FactoryBot.define do
2+
3+
def long_post
4+
'very big sentence'
5+
end
6+
27
factory :post do
38
user
49
title { Faker::Lorem.sentence }
5-
content { Faker::Lorem.paragraph sentence_count: rand(35..50) }
10+
content { Faker::Lorem.paragraph sentence_count: rand(2..12) }
611
edited_at { Time.zone.now }
712

813
trait :published do
914
published_at { Time.zone.now }
1015
status { :published }
1116
end
17+
18+
trait :seed do
19+
content {
20+
[
21+
Faker::Lorem.paragraph(sentence_count: rand(4..18)),
22+
Faker::Lorem.paragraph(sentence_count: rand(2..18)),
23+
Faker::Lorem.paragraph(sentence_count: rand(4..18)),
24+
Faker::Lorem.paragraph(sentence_count: rand(4..18)),
25+
Faker::Lorem.paragraph(sentence_count: rand(4..18))
26+
].join('<br><br>')
27+
}
28+
tag_list {
29+
[
30+
['tdd', 'rubocop'], ['seeds', 'desafios'], ['boaspraticas', 'solid'], ['vue', 'zoom'], ["vue", "desafios"],
31+
['codesaga', 'desafios', 'tdd'], ['rubocop', 'vue', 'seeds'], ['zoom', 'boaspraticas', 'solid'],
32+
["tdd", "codesaga"], ["rubocop", "vue", "desafios"], ["seeds", "boaspraticas", "zoom"], ["solid", "codesaga"]
33+
].sample
34+
}
35+
end
1236
end
1337
end

spec/factories/professional_infos.rb

+14-2
Original file line numberDiff line numberDiff line change
@@ -12,22 +12,34 @@
1212
position { %w[programador estagiário gerente].sample }
1313
end
1414

15-
trait :first_seed do
15+
trait :first_job do
1616
company { Faker::Company.name }
1717
position { Faker::Job.position }
18+
description { Faker::Lorem.sentences(number: 6)}
1819
profile
1920
start_date { Faker::Date.backward(days: Time.zone.today - profile.personal_info.birth_date + 5840) }
2021
end_date { Faker::Date.between(from: start_date, to: start_date.advance(months: rand(2..120))) }
2122
end
2223

23-
trait :seed do
24+
trait :seed_job do
2425
company { Faker::Company.name }
2526
position { Faker::Job.position }
27+
description { Faker::Lorem.sentences(number: 6)}
2628
start_date do
2729
Faker::Date.between(from: profile.professional_infos.last.end_date,
2830
to: profile.professional_infos.last.end_date.advance(months: rand(2..12)))
2931
end
3032
end_date { Faker::Date.between(from: start_date, to: start_date.advance(months: rand(2..120))) }
3133
end
34+
35+
trait :current_job do
36+
company { Faker::Company.name }
37+
position { Faker::Job.position }
38+
description { Faker::Lorem.sentences(number: 6)}
39+
profile
40+
start_date { Faker::Date.backward(days: Time.zone.today - profile.personal_info.birth_date + 5840) }
41+
end_date { }
42+
current_job { true }
43+
end
3244
end
3345
end

0 commit comments

Comments
 (0)