effective_mentorships 0.2.3 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/admin/mentorship_bulk_groups_controller.rb +19 -0
  3. data/app/datatables/admin/effective_mentorship_bulk_group_mentees_datatable.rb +65 -0
  4. data/app/datatables/admin/effective_mentorship_bulk_group_mentors_datatable.rb +66 -0
  5. data/app/datatables/admin/effective_mentorship_bulk_groups_datatable.rb +32 -0
  6. data/app/datatables/admin/effective_mentorship_cycles_datatable.rb +0 -1
  7. data/app/datatables/admin/effective_mentorship_groups_datatable.rb +59 -7
  8. data/app/datatables/admin/effective_mentorship_registrations_datatable.rb +18 -3
  9. data/app/datatables/effective_mentorships_available_cycles_datatable.rb +1 -1
  10. data/app/datatables/effective_mentorships_groups_datatable.rb +1 -1
  11. data/app/datatables/effective_mentorships_registrations_datatable.rb +1 -0
  12. data/app/helpers/effective_mentorships_helper.rb +1 -0
  13. data/app/jobs/effective/mentorships_bulk_create_groups_job.rb +10 -0
  14. data/app/jobs/effective/mentorships_bulk_notify_groups_job.rb +10 -0
  15. data/app/mailers/effective/mentorships_mailer.rb +41 -3
  16. data/app/models/concerns/effective_mentorships_bulk_group.rb +368 -0
  17. data/app/models/concerns/effective_mentorships_group.rb +80 -5
  18. data/app/models/concerns/effective_mentorships_registration.rb +69 -8
  19. data/app/models/concerns/effective_mentorships_user.rb +42 -0
  20. data/app/models/effective/mentorship_bulk_group.rb +6 -0
  21. data/app/models/effective/mentorship_cycle.rb +1 -1
  22. data/app/models/effective/mentorship_group_user.rb +15 -0
  23. data/app/views/admin/mentorship_bulk_groups/_content.html.haml +1 -0
  24. data/app/views/admin/mentorship_bulk_groups/_creation.html.haml +9 -0
  25. data/app/views/admin/mentorship_bulk_groups/_layout.html.haml +3 -0
  26. data/app/views/admin/mentorship_bulk_groups/_selection.html.haml +24 -0
  27. data/app/views/admin/mentorship_bulk_groups/finished.html.haml +35 -0
  28. data/app/views/admin/mentorship_bulk_groups/group.html.haml +31 -0
  29. data/app/views/admin/mentorship_bulk_groups/grouping.html.haml +10 -0
  30. data/app/views/admin/mentorship_bulk_groups/notify.html.haml +49 -0
  31. data/app/views/admin/mentorship_bulk_groups/notifying.html.haml +10 -0
  32. data/app/views/admin/mentorship_bulk_groups/publish.html.haml +30 -0
  33. data/app/views/admin/mentorship_bulk_groups/review.html.haml +49 -0
  34. data/app/views/admin/mentorship_bulk_groups/start.html.haml +8 -0
  35. data/app/views/admin/mentorship_cycles/_form_mentorship_cycle.html.haml +0 -4
  36. data/app/views/admin/mentorship_groups/_form_mentorship_group.html.haml +11 -4
  37. data/app/views/effective/mentorship_registrations/_fields.html.haml +2 -2
  38. data/app/views/effective/mentorships/_dashboard.html.haml +1 -1
  39. data/app/views/effective/mentorships_mailer/mentorship_group_created_to_mentee.liquid +14 -0
  40. data/app/views/effective/mentorships_mailer/mentorship_group_created_to_mentor.liquid +14 -0
  41. data/config/effective_mentorships.rb +1 -0
  42. data/config/locales/effective_mentorships.en.yml +1 -0
  43. data/config/routes.rb +12 -5
  44. data/db/migrate/101_create_effective_mentorships.rb +26 -2
  45. data/lib/effective_mentorships/engine.rb +1 -0
  46. data/lib/effective_mentorships/version.rb +1 -1
  47. data/lib/effective_mentorships.rb +6 -2
  48. metadata +24 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0bac641b57e5bb8212e4d09422be2faf6aaf324e5815895ebc3fcc7ab8bb2bf7
4
- data.tar.gz: 42304f4ed8f6771aa9db5340ff6616e042a22daeecf15833ce9e3b3a67b01bd5
3
+ metadata.gz: 95229a4d568c5fc8d66a4cdd38218cbe2dc2ff9c352c3f23a7acda317fb0bce3
4
+ data.tar.gz: 7d9ca438ab03dfc14ba509eac03921a43e84c76189f9238481ec0cda7074ad58
5
5
  SHA512:
6
- metadata.gz: ece7cbf406a81a5d2cb8aced061e74a87262a1ab9be94c668695a9a99cab3bc0b731efafbeed6991000889ebfb6aaf3b3cefab536dac645aca501a2d0ba8b31a
7
- data.tar.gz: 92b24f232c54179460330f88a2d466afec28ac7997a7ab3dc3000da0a02e8bf72fe842b94ebd45f3bc6d8e9c1484e7917d7d39acc2397c3ba1580e689b1ed92b
6
+ metadata.gz: 7b3cce00a2d088be42079fe29e905fafcaf385ebec8f6a2e90600bf8308155011907683ed744aa7e44ad8ece78b5fecd2e314488a1bd7cf0ed4649d138d2e13c
7
+ data.tar.gz: 4e83bdcce4526ac587f9bc322d22e31e73452905cee86d896adcd970e3b35ac062c33b712bcf8dac82507ecc23951415091e9a677b5d4d5186d63bd4ee631cc1
@@ -0,0 +1,19 @@
1
+ module Admin
2
+ class MentorshipBulkGroupsController < ApplicationController
3
+ before_action(:authenticate_user!) if defined?(Devise)
4
+ before_action { EffectiveResources.authorize!(self, :admin, :effective_mentorships) }
5
+
6
+ include Effective::WizardController
7
+
8
+ resource_scope -> { EffectiveMentorships.MentorshipBulkGroup.deep.all }
9
+ datatable -> { EffectiveResources.best('Admin::EffectiveMentorshipBulkGroupsDatatable').new }
10
+
11
+ private
12
+
13
+ def permitted_params
14
+ model = (params.key?(:effective_mentorship_bulk_group) ? :effective_mentorship_bulk_group : :mentorship_bulk_group)
15
+ params.require(model).permit!
16
+ end
17
+
18
+ end
19
+ end
@@ -0,0 +1,65 @@
1
+ module Admin
2
+ class EffectiveMentorshipBulkGroupMenteesDatatable < Effective::Datatable
3
+ datatable do
4
+ order :updated_at
5
+
6
+ col :updated_at, visible: false
7
+ col :created_at, visible: false
8
+ col :id, visible: false
9
+ col :token, visible: false
10
+
11
+ col :user
12
+ col 'user.first_name', visible: false
13
+ col 'user.last_name', visible: false
14
+ col 'user.email', visible: false
15
+
16
+ if defined?(EffectiveMemberships)
17
+ col(:member_number, label: 'Member #', sort: false, visible: false) do |registration|
18
+ registration.user.try(:membership).try(:number)
19
+ end.search do |collection, term|
20
+ memberships = Effective::Membership.where(owner_type: current_user.class.name).where('number ILIKE ?', "%#{term}%")
21
+ collection.where(user_id: memberships.select('owner_id'))
22
+ end
23
+
24
+ col(:membership_categories, label: 'Member Category', sort: false, visible: false, search: EffectiveMemberships.Category.sorted.all) do |registration|
25
+ Array(registration.user.try(:membership).try(:membership_categories)).each do |membership_category|
26
+ content_tag(:div, membership_category, class: 'col-resource')
27
+ end.join.html_safe
28
+ end.search do |collection, term|
29
+ memberships = Effective::Membership.where(owner_type: current_user.class.name).with_category(term)
30
+ collection.where(user_id: memberships.select('owner_id'))
31
+ end
32
+
33
+ col(:membership_statuses, label: 'Member Status', sort: false, visible: false, search: EffectiveMemberships.Status.sorted.all) do |registration|
34
+ Array(registration.user.try(:membership).try(:statuses)).each do |status|
35
+ content_tag(:div, status, class: 'col-resource')
36
+ end.join.html_safe
37
+ end.search do |collection, term|
38
+ memberships = Effective::Membership.where(owner_type: current_user.class.name).with_status(term)
39
+ collection.where(user_id: memberships.select('owner_id'))
40
+ end
41
+ end
42
+
43
+ col :mentorship_role, label: 'Role', search: mentorship_roles_collection() do |registration|
44
+ mentorship_role_label(registration.mentorship_role)
45
+ end
46
+
47
+ col :category, search: EffectiveMentorships.MentorshipRegistration.categories
48
+ col :venue, search: EffectiveMentorships.MentorshipRegistration.venues
49
+ col :location, search: EffectiveMentorships.MentorshipRegistration.locations
50
+
51
+ actions_col(only: [:show, :edit])
52
+ end
53
+
54
+ collection do
55
+ registrations = mentorship_bulk_group.mentees_mentorship_registrations.without_groups
56
+ raise("expected a relation of registrations") unless registrations.klass.try(:effective_mentorships_registration?)
57
+
58
+ registrations.joins(:user)
59
+ end
60
+
61
+ def mentorship_bulk_group
62
+ @mentorship_bulk_group ||= EffectiveMentorships.MentorshipBulkGroup.find_by_id(attributes[:mentorship_bulk_group_id])
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,66 @@
1
+ module Admin
2
+ class EffectiveMentorshipBulkGroupMentorsDatatable < Effective::Datatable
3
+ datatable do
4
+ order :updated_at
5
+
6
+ col :updated_at, visible: false
7
+ col :created_at, visible: false
8
+ col :id, visible: false
9
+ col :token, visible: false
10
+
11
+ col :user
12
+ col 'user.first_name', visible: false
13
+ col 'user.last_name', visible: false
14
+ col 'user.email', visible: false
15
+
16
+ if defined?(EffectiveMemberships)
17
+ col(:member_number, label: 'Member #', sort: false, visible: false) do |registration|
18
+ registration.user.try(:membership).try(:number)
19
+ end.search do |collection, term|
20
+ memberships = Effective::Membership.where(owner_type: current_user.class.name).where('number ILIKE ?', "%#{term}%")
21
+ collection.where(user_id: memberships.select('owner_id'))
22
+ end
23
+
24
+ col(:membership_categories, label: 'Member Category', sort: false, visible: false, search: EffectiveMemberships.Category.sorted.all) do |registration|
25
+ Array(registration.user.try(:membership).try(:membership_categories)).each do |membership_category|
26
+ content_tag(:div, membership_category, class: 'col-resource')
27
+ end.join.html_safe
28
+ end.search do |collection, term|
29
+ memberships = Effective::Membership.where(owner_type: current_user.class.name).with_category(term)
30
+ collection.where(user_id: memberships.select('owner_id'))
31
+ end
32
+
33
+ col(:membership_statuses, label: 'Member Status', sort: false, visible: false, search: EffectiveMemberships.Status.sorted.all) do |registration|
34
+ Array(registration.user.try(:membership).try(:statuses)).each do |status|
35
+ content_tag(:div, status, class: 'col-resource')
36
+ end.join.html_safe
37
+ end.search do |collection, term|
38
+ memberships = Effective::Membership.where(owner_type: current_user.class.name).with_status(term)
39
+ collection.where(user_id: memberships.select('owner_id'))
40
+ end
41
+ end
42
+
43
+ col :mentorship_role, label: 'Role', search: mentorship_roles_collection() do |registration|
44
+ mentorship_role_label(registration.mentorship_role)
45
+ end
46
+
47
+ col :category, search: EffectiveMentorships.MentorshipRegistration.categories
48
+ col :venue, search: EffectiveMentorships.MentorshipRegistration.venues
49
+ col :location, search: EffectiveMentorships.MentorshipRegistration.locations
50
+ col :mentor_multiple_mentees_limit, label: "#{mentorships_mentees_label} Limit"
51
+
52
+ actions_col(only: [:show, :edit])
53
+ end
54
+
55
+ collection do
56
+ registrations = mentorship_bulk_group.mentors_mentorship_registrations.without_groups
57
+ raise("expected a relation of registrations") unless registrations.klass.try(:effective_mentorships_registration?)
58
+
59
+ registrations.joins(:user)
60
+ end
61
+
62
+ def mentorship_bulk_group
63
+ @mentorship_bulk_group ||= EffectiveMentorships.MentorshipBulkGroup.find_by_id(attributes[:mentorship_bulk_group_id])
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,32 @@
1
+ module Admin
2
+ class EffectiveMentorshipBulkGroupsDatatable < Effective::Datatable
3
+ datatable do
4
+ order :updated_at
5
+
6
+ col :updated_at, visible: false
7
+ col :created_at, visible: false
8
+ col :id, visible: false
9
+ col :token, visible: false
10
+
11
+ col :to_s, label: 'Title'
12
+
13
+ col :mentorship_cycle
14
+ col :last_completed_step
15
+
16
+ col :mentorship_groups_count, label: "#{mentorship_groups_label} count"
17
+ col :mentorship_groups, label: "#{mentorship_groups_label}", search: :string, visible: false
18
+ col :email_form_skip, label: "Skip email"
19
+
20
+ col :job_status, visible: false
21
+ col :job_started_at, visible: false
22
+ col :job_ended_at, visible: false
23
+ col :job_error, visible: false
24
+
25
+ actions_col
26
+ end
27
+
28
+ collection do
29
+ EffectiveMentorships.MentorshipBulkGroup.deep.all
30
+ end
31
+ end
32
+ end
@@ -22,7 +22,6 @@ module Admin
22
22
  col :registration_start_at, as: :date
23
23
  col :registration_end_at, as: :date
24
24
 
25
- col :max_pairings_mentor, label: "Max #{mentorships_mentors_label}"
26
25
  col :max_pairings_mentee, label: "Max #{mentorships_mentees_label}"
27
26
 
28
27
  col :mentorship_registrations_count, label: mentorship_registrations_label
@@ -1,31 +1,83 @@
1
1
  module Admin
2
2
  class EffectiveMentorshipGroupsDatatable < Effective::Datatable
3
+ bulk_actions do
4
+ bulk_action(
5
+ "Notify all published selected #{mentorship_groups_label}",
6
+ effective_mentorships.bulk_notify_admin_mentorship_groups_path,
7
+ data: { confirm: "Send email notifications to all published #{mentorship_groups_label}?" }
8
+ )
9
+
10
+ bulk_action(
11
+ "Publish all selected #{mentorship_groups_label}",
12
+ effective_mentorships.bulk_publish_admin_mentorship_groups_path,
13
+ data: { confirm: "Publish all selected #{mentorship_groups_label}?" }
14
+ )
15
+
16
+ bulk_action(
17
+ "Draft all selected #{mentorship_groups_label}",
18
+ effective_mentorships.bulk_draft_admin_mentorship_groups_path,
19
+ data: { confirm: "Draft all selected #{mentorship_groups_label}?" }
20
+ )
21
+ end
22
+
3
23
  filters do
4
24
  scope :all
5
- scope :archived
25
+ scope :published
26
+ scope :draft
6
27
  end
7
28
 
8
29
  datatable do
9
30
  order :updated_at
10
31
 
32
+ bulk_actions_col
33
+
11
34
  col :updated_at, visible: false
12
35
  col :created_at, visible: false
13
36
  col :id, visible: false
14
37
  col :token, visible: false
15
38
 
16
- col :mentorship_cycle
39
+ col :mentorship_bulk_group, visible: false
40
+ col :mentorship_cycle, visible: attributes[:mentorship_bulk_group_id].blank?
41
+
42
+ col :published?, as: :boolean
43
+ col :published_start_at, label: "Published start", visible: false
44
+ col :published_end_at, label: "Published end", visible: false
45
+
17
46
  col :title
18
- col :rich_text_admin_notes, label: "Admin notes"
19
47
 
20
- col :mentorship_group_users, search: :string do |mentorship_group|
21
- mentorship_group.mentorship_group_users.map do |mentorship_group_user|
48
+ col(:mentorship_group_mentors, label: mentorships_mentors_label) do |mentorship_group|
49
+ mentorship_group.mentorship_group_mentors.map do |mentorship_group_user|
50
+ user = mentorship_group_user.user
51
+ registration = mentorship_group_user.mentorship_registration
52
+
22
53
  content_tag(:div, class: 'col-resource_item') do
23
- mentorship_role_badge(mentorship_group_user.mentorship_role) + ' ' + mentorship_group_user.name
54
+ [
55
+ content_tag(:div) { link_to(user, "/admin/users/#{user.to_param}/edit") },
56
+ (content_tag(:div, content_tag(:small, registration.details)) if registration.present?)
57
+ ].compact.join.html_safe
24
58
  end
25
59
  end.join.html_safe
26
60
  end
27
61
 
28
- col :archived
62
+ col(:mentorship_group_mentees, label: mentorships_mentees_label) do |mentorship_group|
63
+ mentorship_group.mentorship_group_mentees.map do |mentorship_group_user|
64
+ user = mentorship_group_user.user
65
+ registration = mentorship_group_user.mentorship_registration
66
+
67
+ content_tag(:div, class: 'col-resource_item') do
68
+ [
69
+ content_tag(:div) { link_to(user, "/admin/users/#{user.to_param}/edit") },
70
+ (content_tag(:div, content_tag(:small, registration.details)) if registration.present?)
71
+ ].compact.join.html_safe
72
+ end
73
+ end.join.html_safe
74
+ end
75
+
76
+ col :rich_text_admin_notes, label: "Admin notes"
77
+
78
+ col :last_notified_at, as: :date do |mentorship_group|
79
+ mentorship_group.last_notified_at&.strftime('%F') || '-'
80
+ end
29
81
 
30
82
  actions_col
31
83
  end
@@ -4,6 +4,7 @@ module Admin
4
4
  scope :all
5
5
  scope :opt_in
6
6
  scope :opt_out
7
+ scope :opt_in_without_groups
7
8
  end
8
9
 
9
10
  datatable do
@@ -17,7 +18,7 @@ module Admin
17
18
  col :mentorship_cycle
18
19
  col :user
19
20
 
20
- col :opt_in
21
+ col :opt_in, visible: attributes[:opt_in_without_groups].blank?
21
22
 
22
23
  col :mentorship_role, search: mentorship_roles_collection() do |registration|
23
24
  mentorship_role_label(registration.mentorship_role)
@@ -26,16 +27,30 @@ module Admin
26
27
  col :category, search: EffectiveMentorships.MentorshipRegistration.categories
27
28
  col :venue, search: EffectiveMentorships.MentorshipRegistration.venues
28
29
  col :location, search: EffectiveMentorships.MentorshipRegistration.locations
29
- col :mentor_multiple_mentees_limit, visible: false
30
+ col :mentor_multiple_mentees_limit, label: "#{mentorships_mentees_label} Limit"
30
31
 
31
32
  col :parent, visible: false
32
33
  col :rich_text_comments, label: "Comments", visible: false
33
34
 
35
+ col(:mentorship_groups, search: :string, visible: false) do |registration|
36
+ registration.mentorship_groups.map do |mentorship_group|
37
+ content_tag(:div, class: 'col-resource_item') do
38
+ link_to(mentorship_group, effective_mentorships.edit_admin_mentorship_group_path(mentorship_group), target: '_blank')
39
+ end
40
+ end.join.html_safe
41
+ end
42
+
34
43
  actions_col
35
44
  end
36
45
 
37
46
  collection do
38
- EffectiveMentorships.MentorshipRegistration.deep.all
47
+ scope = EffectiveMentorships.MentorshipRegistration.deep.all
48
+
49
+ if attributes[:opt_in_without_groups]
50
+ scope = scope.opt_in.without_groups
51
+ end
52
+
53
+ scope
39
54
  end
40
55
  end
41
56
  end
@@ -5,7 +5,7 @@ class EffectiveMentorshipsAvailableCyclesDatatable < Effective::Datatable
5
5
 
6
6
  col :title
7
7
 
8
- col :registration, label: "Registration available" do |mentorship_cycle|
8
+ col :registration, label: "Available" do |mentorship_cycle|
9
9
  mentorship_cycle.registrable_date
10
10
  end
11
11
 
@@ -20,6 +20,6 @@ class EffectiveMentorshipsGroupsDatatable < Effective::Datatable
20
20
  end
21
21
 
22
22
  collection do
23
- EffectiveMentorships.MentorshipGroup.deep.unarchived.where(id: current_user.mentorship_groups)
23
+ EffectiveMentorships.MentorshipGroup.deep.published.where(id: current_user.mentorship_groups)
24
24
  end
25
25
  end
@@ -8,6 +8,7 @@ class EffectiveMentorshipsRegistrationsDatatable < Effective::Datatable
8
8
  end
9
9
 
10
10
  col :opt_in
11
+
11
12
  col :mentorship_role do |mentorship_registration|
12
13
  if mentorship_registration.opt_in?
13
14
  badge(mentorship_registration.mentorship_role)
@@ -64,6 +64,7 @@ module EffectiveMentorshipsHelper
64
64
  case role.to_s
65
65
  when 'mentor' then et('effective_mentorships.mentor')
66
66
  when 'mentee' then et('effective_mentorships.mentee')
67
+ when '' then ''
67
68
  else
68
69
  raise("unexpected mentorship role: #{role}")
69
70
  end
@@ -0,0 +1,10 @@
1
+ module Effective
2
+ class MentorshipsBulkCreateGroupsJob < ApplicationJob
3
+
4
+ def perform(id)
5
+ bulk_group = EffectiveMentorships.MentorshipBulkGroup.find(id)
6
+ bulk_group.with_job_status { bulk_group.create_groups! }
7
+ end
8
+
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module Effective
2
+ class MentorshipsBulkNotifyGroupsJob < ApplicationJob
3
+
4
+ def perform(id)
5
+ bulk_group = EffectiveMentorships.MentorshipBulkGroup.find(id)
6
+ bulk_group.with_job_status { bulk_group.notify_groups! }
7
+ end
8
+
9
+ end
10
+ end
@@ -4,14 +4,52 @@ module Effective
4
4
  include EffectiveMailer
5
5
  include EffectiveEmailTemplatesMailer
6
6
 
7
+ def mentorship_group_created_to_mentor(resource, opts = {})
8
+ raise('expected an Effective::MentorshipGroupUser') unless resource.kind_of?(Effective::MentorshipGroupUser)
9
+ raise('expected a mentor') unless resource.mentor?
10
+
11
+ @assigns = assigns_for(resource).merge(url: effective_mentorships.mentorship_group_url(resource))
12
+ mail(to: resource.user.email, **headers_for(resource, opts))
13
+ end
14
+
15
+ def mentorship_group_created_to_mentee(resource, opts = {})
16
+ raise('expected an Effective::MentorshipGroupUser') unless resource.kind_of?(Effective::MentorshipGroupUser)
17
+ raise('expected a mentee') unless resource.mentee?
18
+
19
+ @assigns = assigns_for(resource).merge(url: effective_mentorships.mentorship_group_url(resource))
20
+ mail(to: resource.user.email, **headers_for(resource, opts))
21
+ end
22
+
7
23
  protected
8
24
 
9
25
  def assigns_for(resource)
10
- unless resource.kind_of?(EffectiveMentorships.MentorshipGroup)
11
- raise('expected an EffectiveMentorships.MentorshipGroup')
26
+ unless resource.kind_of?(Effective::MentorshipGroupUser)
27
+ raise('expected an Effective.MentorshipGroupUser')
12
28
  end
29
+
30
+ @mentorship_group_user = resource
31
+
32
+ @user = resource.user
33
+ @mentorship_group = resource.mentorship_group
34
+ @mentorship_cycle = resource.mentorship_group.mentorship_cycle
13
35
 
14
- {}
36
+ {
37
+ user: {
38
+ name: @user.to_s,
39
+ first_name: @user.try(:first_name),
40
+ last_name: @user.try(:last_name),
41
+ email: @user.try(:email),
42
+ mentorship_role: @mentorship_group_user.mentorship_role
43
+ },
44
+ group: {
45
+ title: @mentorship_group.to_s,
46
+ mentorship_cycle: @mentorship_group.mentorship_cycle.to_s,
47
+ mentor_names: @mentorship_group.mentors.map(&:to_s).join(', '),
48
+ mentor_emails: @mentorship_group.mentors.map(&:email).join(', '),
49
+ mentee_names: @mentorship_group.mentees.map(&:to_s).join(', '),
50
+ mentee_emails: @mentorship_group.mentees.map(&:email).join(', '),
51
+ }
52
+ }
15
53
  end
16
54
 
17
55
  end