effective_mentorships 0.2.3 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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