Class: Mumuki::Classroom::Student

Inherits:
Document
  • Object
show all
Includes:
CourseMember
Defined in:
lib/mumuki/classroom/models/student.rb

Constant Summary

Constants included from CourseMember

CourseMember::MANDATORY_FIELDS

Class Method Summary collapse

Instance Method Summary collapse

Methods included from CourseMember

#as_user

Methods inherited from Document

inherited, whitelist_attributes

Class Method Details

.attach_all_by!(uids, query) ⇒ Object



91
92
93
94
95
96
# File 'lib/mumuki/classroom/models/student.rb', line 91

def attach_all_by!(uids, query)
  where(query).in(uid: uids).unset(:detached, :detached_at)
  criteria = query.merge('student.uid': {'$in': uids})
  Mumuki::Classroom::Assignment.attach_all_by! criteria
  Mumuki::Classroom::GuideProgress.attach_all_by! criteria
end

.detach_all_by!(uids, query) ⇒ Object



84
85
86
87
88
89
# File 'lib/mumuki/classroom/models/student.rb', line 84

def detach_all_by!(uids, query)
  where(query).in(uid: uids).update_all(detached: true, detached_at: Time.now)
  criteria = query.merge('student.uid': {'$in': uids})
  Mumuki::Classroom::Assignment.detach_all_by! criteria
  Mumuki::Classroom::GuideProgress.detach_all_by! criteria
end

.last_updated_student_by(query) ⇒ Object



80
81
82
# File 'lib/mumuki/classroom/models/student.rb', line 80

def last_updated_student_by(query)
  where(query).ne(detached: true).order_by(updated_at: :desc).first
end

.report(criteria, &block) ⇒ Object



72
73
74
# File 'lib/mumuki/classroom/models/student.rb', line 72

def report(criteria, &block)
  where(criteria).select(&block).as_json(only: [:first_name, :last_name, :email, :created_at, :detached_at])
end

.uid_fieldObject



98
99
100
# File 'lib/mumuki/classroom/models/student.rb', line 98

def uid_field
  :uid
end

.update_all_stats(options) ⇒ Object



76
77
78
# File 'lib/mumuki/classroom/models/student.rb', line 76

def update_all_stats(options)
  where(options).each(&:update_all_stats)
end

Instance Method Details

#as_submission_jsonObject



67
68
69
# File 'lib/mumuki/classroom/models/student.rb', line 67

def as_submission_json
  as_json(only: %i(uid name email image_url social_id last_name first_name)).compact
end

#attach!Object



51
52
53
54
55
# File 'lib/mumuki/classroom/models/student.rb', line 51

def attach!
  unset :detached, :detached_at
  Mumuki::Classroom::Assignment.attach_all_by! sub_student_query(uid)
  Mumuki::Classroom::GuideProgress.attach_all_by! sub_student_query(uid)
end

#course_nameObject



14
15
16
# File 'lib/mumuki/classroom/models/student.rb', line 14

def course_name
  course.to_mumukit_slug.course
end

#destroy_cascade!Object



18
19
20
21
# File 'lib/mumuki/classroom/models/student.rb', line 18

def destroy_cascade!
  destroy_progress!
  destroy!
end

#destroy_progress!Object



23
24
25
# File 'lib/mumuki/classroom/models/student.rb', line 23

def destroy_progress!
  destroy_progress_for_query!(sub_student_query uid)
end

#destroy_progress_for_guide!(guide) ⇒ Object



27
28
29
# File 'lib/mumuki/classroom/models/student.rb', line 27

def destroy_progress_for_guide!(guide)
  destroy_progress_for_query!(sub_student_query(uid).merge 'guide.slug': guide.slug)
end

#destroy_progress_for_query!(query) ⇒ Object



31
32
33
34
# File 'lib/mumuki/classroom/models/student.rb', line 31

def destroy_progress_for_query!(query)
  Mumuki::Classroom::GuideProgress.destroy_all_by!(query)
  Mumuki::Classroom::Assignment.destroy_all_by!(query)
end

#detach!Object



45
46
47
48
49
# File 'lib/mumuki/classroom/models/student.rb', line 45

def detach!
  update_attributes! detached: true, detached_at: Time.now
  Mumuki::Classroom::Assignment.detach_all_by! sub_student_query(uid)
  Mumuki::Classroom::GuideProgress.detach_all_by! sub_student_query(uid)
end

#sub_student_query(uid) ⇒ Object



41
42
43
# File 'lib/mumuki/classroom/models/student.rb', line 41

def sub_student_query(uid)
  {'organization': organization, 'course': course, 'student.uid': uid}
end

#transfer_to!(organization, course) ⇒ Object



57
58
59
60
61
# File 'lib/mumuki/classroom/models/student.rb', line 57

def transfer_to!(organization, course)
  Mumuki::Classroom::Assignment.transfer_all_by! sub_student_query(uid), organization, course
  Mumuki::Classroom::GuideProgress.transfer_all_by! sub_student_query(uid), organization, course
  update_attributes! organization: organization, course: course
end

#update_all_statsObject



36
37
38
39
# File 'lib/mumuki/classroom/models/student.rb', line 36

def update_all_stats
  all_stats = Mumuki::Classroom::Assignment.stats_by(sub_student_query uid)
  update_attributes!(stats: all_stats)
end

#update_last_assignment_forObject



63
64
65
# File 'lib/mumuki/classroom/models/student.rb', line 63

def update_last_assignment_for
  update_attributes!(last_assignment: Mumuki::Classroom::GuideProgress.last_assignment_by(sub_student_query uid))
end