|
1 | 1 | if Rails.env.development? |
2 | 2 | # Check for ImageMagick before seeding |
3 | 3 | imagemagick_available = system('convert --version > /dev/null 2>&1') || |
4 | | - system('magick --version > /dev/null 2>&1') |
| 4 | + system('magick --version > /dev/null 2>&1') |
5 | 5 |
|
6 | 6 | unless imagemagick_available |
7 | | - Rails.logger.error "=" * 80 |
8 | | - Rails.logger.error "ERROR: ImageMagick is required to run db:seed" |
9 | | - Rails.logger.error "=" * 80 |
10 | | - Rails.logger.error "" |
11 | | - Rails.logger.error "The seed task processes sponsor logo images, which requires ImageMagick." |
12 | | - Rails.logger.error "" |
13 | | - Rails.logger.error "Install ImageMagick:" |
14 | | - Rails.logger.error " macOS: brew install imagemagick" |
15 | | - Rails.logger.error " Ubuntu/Debian: apt-get install imagemagick" |
16 | | - Rails.logger.error " Windows: https://imagemagick.org/script/download.php" |
17 | | - Rails.logger.error "" |
18 | | - Rails.logger.error "See native-installation-instructions.md for details." |
19 | | - Rails.logger.error "=" * 80 |
| 7 | + Rails.logger.error '=' * 80 |
| 8 | + Rails.logger.error 'ERROR: ImageMagick is required to run db:seed' |
| 9 | + Rails.logger.error '=' * 80 |
| 10 | + Rails.logger.error '' |
| 11 | + Rails.logger.error 'The seed task processes sponsor logo images, which requires ImageMagick.' |
| 12 | + Rails.logger.error '' |
| 13 | + Rails.logger.error 'Install ImageMagick:' |
| 14 | + Rails.logger.error ' macOS: brew install imagemagick' |
| 15 | + Rails.logger.error ' Ubuntu/Debian: apt-get install imagemagick' |
| 16 | + Rails.logger.error ' Windows: https://imagemagick.org/script/download.php' |
| 17 | + Rails.logger.error '' |
| 18 | + Rails.logger.error 'See native-installation-instructions.md for details.' |
| 19 | + Rails.logger.error '=' * 80 |
20 | 20 | exit 1 |
21 | 21 | end |
22 | 22 |
|
23 | 23 | begin |
24 | 24 | Rails.logger.info 'Running migrations...' |
25 | 25 | Rails.application.config.log_level = :info |
26 | | - Rails.logger.info "Creating chapters..." |
27 | | - chapters = ['London', 'Brighton', 'Cambridge', 'Barcelona', 'Paris', 'Merlbourne', 'Berlin', 'New York'].map do |name| |
| 26 | + Rails.logger.info 'Creating chapters...' |
| 27 | + chapters = ['London', 'Brighton', 'Cambridge', 'Barcelona', 'Paris', 'Merlbourne', 'Berlin', |
| 28 | + 'New York'].map do |name| |
28 | 29 | Fabricate(:chapter_with_groups, name: name) |
29 | 30 | end |
30 | 31 |
|
31 | | - Rails.logger.info "Creating workshops..." |
32 | | - workshops = 6.times.map do |n| |
33 | | - start = Time.zone.now + 1.month - n.weeks |
34 | | - ends_at = start + 3.hours |
35 | | - Fabricate(:workshop, title: 'Workshop', |
| 32 | + Rails.logger.info 'Creating workshops...' |
| 33 | + |
| 34 | + Rails.logger.info 'Creating 1000 past workshops...' |
| 35 | + past_workshops = [] |
| 36 | + 1000.times do |
| 37 | + months_ago = rand(0..60) |
| 38 | + start = Time.zone.now - months_ago.months + rand(0..28).days + rand(0..23).hours |
| 39 | + workshop = Fabricate(:workshop, |
| 40 | + title: 'Workshop', |
36 | 41 | chapter: chapters.sample, |
37 | 42 | date_and_time: start, |
38 | | - ends_at: ends_at) |
| 43 | + ends_at: start + 3.hours) |
| 44 | + past_workshops << workshop |
39 | 45 | end |
40 | 46 |
|
41 | | - workshops.concat Fabricate.times(2, :workshop, title: 'Workshop', chapter: chapters.sample) |
42 | | - |
43 | | - Rails.logger.info "Creating a lot of old workshops..." |
44 | | - past_workshops_since_n_months = 5 * 12 |
45 | | - past_workshops_one_per_n_months = 6 |
46 | | - past_workshops_count = past_workshops_since_n_months/past_workshops_one_per_n_months |
47 | | - |
48 | | - past_workshops = past_workshops_count.times.map do |n| |
49 | | - Fabricate(:workshop, title: 'Workshop', |
| 47 | + Rails.logger.info 'Creating 100 future workshops...' |
| 48 | + future_workshops = [] |
| 49 | + 100.times do |
| 50 | + months_ahead = rand(1..3) |
| 51 | + start = Time.zone.now + months_ahead.months + rand(0..28).days + rand(0..23).hours |
| 52 | + workshop = Fabricate(:workshop, |
| 53 | + title: 'Workshop', |
50 | 54 | chapter: chapters.sample, |
51 | | - date_and_time: Time.zone.now - past_workshops_since_n_months.months + (past_workshops_one_per_n_months * n).months) |
| 55 | + date_and_time: start, |
| 56 | + ends_at: start + 3.hours) |
| 57 | + future_workshops << workshop |
52 | 58 | end |
53 | 59 |
|
54 | | - Rails.logger.info "Creating events..." |
| 60 | + future_workshops.first(10) |
| 61 | + |
| 62 | + Rails.logger.info 'Creating events...' |
55 | 63 | events = 20.times.map do |n| |
56 | 64 | Fabricate(:event, name: 'Event', |
57 | 65 | chapters: chapters.sample(4), |
58 | 66 | date_and_time: Time.zone.now + 2.months - n.months) |
59 | 67 | end |
60 | 68 |
|
61 | | - Rails.logger.info "Creating meetings..." |
| 69 | + Rails.logger.info 'Creating meetings...' |
62 | 70 |
|
63 | 71 | 20.times.map do |n| |
64 | 72 | Fabricate(:meeting, name: 'Meeting', |
65 | 73 | date_and_time: Time.zone.now + 1.month - n.months) |
66 | 74 | end |
67 | 75 |
|
68 | | - Rails.logger.info "Creating coaches..." |
69 | | - coaches = 50.times.map { Fabricate(:coach, groups: Group.coaches.order('RANDOM()').limit(2)) } |
| 76 | + Rails.logger.info 'Creating coaches...' |
| 77 | + coaches_group = Group.coaches.to_a |
| 78 | + students_group = Group.students.to_a |
| 79 | + coaches = 500.times.map { Fabricate(:coach, groups: coaches_group.sample(2)) } |
70 | 80 | tutorials = Fabricate.times(20, :tutorial) |
71 | 81 | 30.times { Fabricate(:feedback_request, workshop: past_workshops.sample) } |
72 | 82 | 20.times { Fabricate(:feedback, tutorial: tutorials.sample, coach: coaches.sample) } |
73 | 83 | 10.times { Fabricate(:testimonial, member: coaches.sample) } |
74 | 84 |
|
75 | | - job_titles = [ |
76 | | - 'Software Engineer', |
77 | | - 'Software Developer', |
78 | | - 'Front-end Developer', |
79 | | - 'Back-end Developer', |
80 | | - 'Full-stack Developer' |
| 85 | + # Add skills to some coaches using acts_as_taggable_on |
| 86 | + skill_lists = [ |
| 87 | + 'javascript, ruby, rails', |
| 88 | + 'python, django, sql', |
| 89 | + 'react, typescript, node', |
| 90 | + 'java, spring, kotlin', |
| 91 | + 'css, html, bootstrap', |
| 92 | + 'go, kubernetes, docker', |
| 93 | + 'c++, rust, systems', |
| 94 | + 'swift, ios, android', |
| 95 | + 'php, laravel, mysql', |
| 96 | + 'git, linux, devops' |
81 | 97 | ] |
82 | 98 |
|
83 | | - job_companies = %w[ |
84 | | - ACME |
85 | | - Globex |
86 | | - Soylent |
87 | | - Initech |
88 | | - Umbrella |
89 | | - Wonka |
90 | | - ] |
| 99 | + coaches.each do |coach| |
| 100 | + next if rand > 0.7 # 70% of coaches get skills |
| 101 | + |
| 102 | + coach.skill_list.add(skill_lists.sample(rand(1..4)).split(', ')) |
| 103 | + coach.save(validate: false) |
| 104 | + end |
91 | 105 |
|
92 | | - Rails.logger.info "Creating students..." |
93 | | - students = 50.times.map { Fabricate(:student, groups: Group.students.order('RANDOM()').limit(2)) } |
| 106 | + Rails.logger.info 'Creating students...' |
| 107 | + students = 500.times.map { Fabricate(:student, groups: students_group.sample(2)) } |
94 | 108 |
|
95 | | - Rails.logger.info "Creating event invitations..." |
96 | | - 10.times do |n| |
| 109 | + Rails.logger.info 'Creating event invitations...' |
| 110 | + 10.times do |_n| |
97 | 111 | Fabricate(:invitation, member: students.sample, event: events.sample) |
98 | 112 | Fabricate(:coach_invitation, member: coaches.sample, event: events.sample) |
99 | 113 | end |
100 | 114 |
|
101 | | - Rails.logger.info "Creating attended by coach workshop invitations..." |
102 | | - coaches.sample(15).each do |coach| |
103 | | - past_workshops.sample(3).each do |workshop| |
104 | | - Fabricate(:attended_coach, workshop: workshop, member: coach) |
| 115 | + Rails.logger.info 'Creating workshop invitations for past workshops...' |
| 116 | + past_workshops.each do |workshop| |
| 117 | + invitation_count = rand(8..15) |
| 118 | + invitation_count.times do |
| 119 | + Fabricate(:coach_workshop_invitation, member: coaches.sample, workshop: workshop) |
| 120 | + rescue StandardError |
| 121 | + nil |
| 122 | + end |
| 123 | + invitation_count.times do |
| 124 | + Fabricate(:student_workshop_invitation, member: students.sample, workshop: workshop) |
| 125 | + rescue StandardError |
| 126 | + nil |
| 127 | + end |
| 128 | + |
| 129 | + # Create some attended invitations so coaches appear on wall_of_fame |
| 130 | + # Track which coaches already have invitations to avoid duplicates |
| 131 | + existing_invitees = WorkshopInvitation.where(workshop: workshop, role: 'Coach').pluck(:member_id) |
| 132 | + available_coaches = coaches.reject { |c| existing_invitees.include?(c.id) } |
| 133 | + rand(3..8).times do |
| 134 | + break if available_coaches.empty? |
| 135 | + |
| 136 | + coach = available_coaches.sample |
| 137 | + available_coaches.delete(coach) |
| 138 | + Fabricate(:attended_coach, member: coach, workshop: workshop) |
| 139 | + rescue StandardError |
| 140 | + nil |
105 | 141 | end |
106 | 142 | end |
107 | 143 |
|
108 | | - Rails.logger.info "Creating workshop invitations..." |
109 | | - 30.times do |n| |
110 | | - Fabricate(:coach_workshop_invitation, member: coaches.sample, workshop: workshops.sample) rescue nil |
111 | | - Fabricate(:student_workshop_invitation, member: students.sample, workshop: workshops.sample) rescue nil |
| 144 | + Rails.logger.info 'Creating workshop invitations for future workshops...' |
| 145 | + future_workshops.each do |workshop| |
| 146 | + invitation_count = rand(10..20) |
| 147 | + invitation_count.times do |
| 148 | + Fabricate(:coach_workshop_invitation, member: coaches.sample, workshop: workshop) |
| 149 | + rescue StandardError |
| 150 | + nil |
| 151 | + end |
| 152 | + invitation_count.times do |
| 153 | + Fabricate(:student_workshop_invitation, member: students.sample, workshop: workshop) |
| 154 | + rescue StandardError |
| 155 | + nil |
| 156 | + end |
112 | 157 | end |
113 | 158 | Rails.logger.info '..done!' |
114 | 159 | rescue Exception => e |
|
0 commit comments