class Mumuki::Classroom::Assignment
Private Class Methods
attach_all_by!(query)
click to toggle source
# File lib/mumuki/classroom/models/assignment.rb, line 101 def attach_all_by!(query) where(query).unset(:detached) end
classroom_sibling_for(assignment, organization)
click to toggle source
# File lib/mumuki/classroom/models/assignment.rb, line 147 def classroom_sibling_for(assignment, organization) find_by(organization: organization, 'student.uid': assignment.user.uid, 'exercise.eid': assignment.exercise.bibliotheca_id) end
destroy_all_by!(query)
click to toggle source
# File lib/mumuki/classroom/models/assignment.rb, line 105 def destroy_all_by!(query) where(query).destroy end
detach_all_by!(query)
click to toggle source
# File lib/mumuki/classroom/models/assignment.rb, line 97 def detach_all_by!(query) where(query).set(detached: true) end
empty_stats()
click to toggle source
# File lib/mumuki/classroom/models/assignment.rb, line 113 def empty_stats {passed: 0, failed: 0, passed_with_warnings: 0} end
items_to_review(query, exercises)
click to toggle source
# File lib/mumuki/classroom/models/assignment.rb, line 122 def items_to_review(query, exercises) passed_exercises_ids = where(query) .map { |assignment| [assignment.exercise.eid, assignment.submissions.max_by(&:created_at)] } .map { |eid, submission| eid if solved?(submission.status) } exercises.reject { |exercise| passed_exercises_ids.include? exercise[:id] } .pluck(:tag_list, :language) .flatten .uniq end
solved?(status)
click to toggle source
# File lib/mumuki/classroom/models/assignment.rb, line 132 def solved?(status) status.passed? || status.skipped? end
stats_by(query)
click to toggle source
# File lib/mumuki/classroom/models/assignment.rb, line 136 def stats_by(query) stats = where(query) .map { |assignment| assignment.submissions.max_by(&:created_at) } .group_by { |submission| submission.status } .map { |status, submissions| [status.to_sym, submissions.size] } .to_h.compact stats = empty_stats.merge(stats) stats[:failed] += stats.delete(:errored) || 0 stats.slice(*empty_stats.keys) end
transfer_all_by!(query, new_organization, new_course)
click to toggle source
# File lib/mumuki/classroom/models/assignment.rb, line 109 def transfer_all_by!(query, new_organization, new_course) where(query).set(organization: new_organization, course: new_course) end
with_full_messages(query, user)
click to toggle source
# File lib/mumuki/classroom/models/assignment.rb, line 117 def with_full_messages(query, user) where(query) .map { |assignment| assignment.with_full_messages(user) } end
Public Instance Methods
add_message!(message, sid)
click to toggle source
# File lib/mumuki/classroom/models/assignment.rb, line 27 def add_message!(message, sid) submission(sid).tap do |it| it.add_message! message update_submissions! end end
add_message_to_submission!(message, sid)
click to toggle source
# File lib/mumuki/classroom/models/assignment.rb, line 67 def add_message_to_submission!(message, sid) submission = add_message! message, sid notify_message! message, sid submission end
add_submission!(submission)
click to toggle source
# File lib/mumuki/classroom/models/assignment.rb, line 34 def add_submission!(submission) self.submissions << Mumuki::Classroom::Submission.new(submission.as_json) update_submissions! end
evaluate_manually!(sid, comment, status)
click to toggle source
# File lib/mumuki/classroom/models/assignment.rb, line 17 def evaluate_manually!(sid, comment, status) submission = submission(sid) submission.evaluate_manually! comment, status update_submissions! end
json_to_notify(message, sid)
click to toggle source
# File lib/mumuki/classroom/models/assignment.rb, line 48 def json_to_notify(message, sid) { message: message, submission_id: sid, exercise_id: exercise.eid, organization: organization }.as_json end
notification_preview()
click to toggle source
# File lib/mumuki/classroom/models/assignment.rb, line 73 def notification_preview as_json( only: %i(course exercise guide student), include: { exercise: { only: %i(eid name) }, guide: { only: %i(slug) }, student: { only: %i(first_name last_name image_url uid) } } ) end
notify_manual_evaluation!(sid)
click to toggle source
# File lib/mumuki/classroom/models/assignment.rb, line 43 def notify_manual_evaluation!(sid) assignment = {submission_id: sid}.merge(submission(sid).as_json only: [:status, :manual_evaluation]) Mumukit::Nuntius.notify_event!('AssignmentManuallyEvaluated', {assignment: assignment}, {sender: :classroom}) end
notify_message!(message, sid)
click to toggle source
# File lib/mumuki/classroom/models/assignment.rb, line 39 def notify_message!(message, sid) Mumukit::Nuntius.notify! 'teacher-messages', json_to_notify(message, sid) end
submission(sid)
click to toggle source
# File lib/mumuki/classroom/models/assignment.rb, line 23 def submission(sid) submissions.find_by!(sid: sid) end
threads(language)
click to toggle source
# File lib/mumuki/classroom/models/assignment.rb, line 57 def threads(language) language = guide[:language][:name] if language.blank? submissions.map { |it| it.thread(language) }.compact end
with_full_messages(user)
click to toggle source
# File lib/mumuki/classroom/models/assignment.rb, line 62 def with_full_messages(user) self[:submissions] = submissions.map { |it| it.with_full_messages user } self end
Private Instance Methods
update_submissions!()
click to toggle source
# File lib/mumuki/classroom/models/assignment.rb, line 92 def update_submissions! update_attributes! submissions: submissions end