module WithSubmissionProcess
Public Instance Methods
assignment_from(json)
click to toggle source
# File lib/mumuki/classroom/models/concerns/with_submission_process.rb, line 89 def assignment_from(json) assignment_without_submission_from.merge submission: submission_from(json) end
assignment_query(json)
click to toggle source
# File lib/mumuki/classroom/models/concerns/with_submission_process.rb, line 44 def assignment_query(json) guide_progress_query(json).merge 'exercise.eid': exercise_from(json)[:eid] end
assignment_without_submission_from(json)
click to toggle source
# File lib/mumuki/classroom/models/concerns/with_submission_process.rb, line 83 def assignment_without_submission_from(json) {guide: guide_from(json), student: student_from(json), exercise: exercise_from(json)} end
course_slug(json)
click to toggle source
# File lib/mumuki/classroom/models/concerns/with_submission_process.rb, line 71 def course_slug(json) json[:course] end
exercise_from(json)
click to toggle source
# File lib/mumuki/classroom/models/concerns/with_submission_process.rb, line 120 def exercise_from(json) exercise = json[:exercise] {eid: exercise[:eid], name: exercise[:name], number: exercise[:number]}.compact end
find_student_from(json)
click to toggle source
# File lib/mumuki/classroom/models/concerns/with_submission_process.rb, line 24 def find_student_from(json) Mumuki::Classroom::Student.find_by(organization: organization(json), course: course_slug(json), uid: uid(json)) end
find_submission_course!(json)
click to toggle source
# File lib/mumuki/classroom/models/concerns/with_submission_process.rb, line 18 def find_submission_course!(json) student = Mumuki::Classroom::Student.last_updated_student_by(organization: organization(json), uid: uid(json)) raise ActiveRecord::RecordNotFound, "Mumuki::Classroom::Student not found" unless student student.course end
guide_from(json)
click to toggle source
# File lib/mumuki/classroom/models/concerns/with_submission_process.rb, line 105 def guide_from(json) guide = json[:guide] classroom_guide = { slug: guide[:slug], name: guide[:name], parent: guide[:parent], language: { name: guide[:language][:name], devicon: guide[:language][:devicon] }.compact } classroom_guide.compact end
guide_progress_from(json)
click to toggle source
# File lib/mumuki/classroom/models/concerns/with_submission_process.rb, line 75 def guide_progress_from(json) {guide: guide_from(json), student: student_from(json), stats: stats_from(json), last_assignment: {exercise: exercise_from(json), submission: submission_from(json)}} end
guide_progress_query(json)
click to toggle source
# File lib/mumuki/classroom/models/concerns/with_submission_process.rb, line 48 def guide_progress_query(json) {'organization': organization(json), 'course': course_slug(json), 'guide.slug': guide_from(json)[:slug], 'student.uid': uid(json)} end
organization(json)
click to toggle source
# File lib/mumuki/classroom/models/concerns/with_submission_process.rb, line 14 def organization(json) json[:organization] end
process!(data)
click to toggle source
# File lib/mumuki/classroom/models/concerns/with_submission_process.rb, line 2 def process!(data) json = data.deep_symbolize_keys json[:course] = find_submission_course! json json[:student] = find_student_from json update_assignment json update_guide_progress json update_student_progress json update_student_last_assignment json end
stats_from(json)
click to toggle source
# File lib/mumuki/classroom/models/concerns/with_submission_process.rb, line 93 def stats_from(json) stats = json[:stats] {passed: stats[:passed], failed: stats[:failed], passed_with_warnings: stats[:passed_with_warnings]}.compact end
student_from(json)
click to toggle source
# File lib/mumuki/classroom/models/concerns/with_submission_process.rb, line 101 def student_from(json) json[:student].as_submission_json end
student_stats_for(json)
click to toggle source
# File lib/mumuki/classroom/models/concerns/with_submission_process.rb, line 63 def student_stats_for(json) Mumuki::Classroom::Assignment.stats_by guide_progress_query(json) end
submission_from(json)
click to toggle source
# File lib/mumuki/classroom/models/concerns/with_submission_process.rb, line 128 def submission_from(json) Mumuki::Classroom::FailedSubmission.new(json).as_assignment_submission end
uid(json)
click to toggle source
# File lib/mumuki/classroom/models/concerns/with_submission_process.rb, line 67 def uid(json) json[:submitter][:uid] end
update_assignment(json)
click to toggle source
# File lib/mumuki/classroom/models/concerns/with_submission_process.rb, line 36 def update_assignment(json) assignment = Mumuki::Classroom::Assignment .where(assignment_query(json)) .first_or_create!(assignment_without_submission_from(json)) assignment.upsert_attributes(assignment_without_submission_from(json)) assignment.add_submission! submission_from(json) end
update_guide_progress(json)
click to toggle source
# File lib/mumuki/classroom/models/concerns/with_submission_process.rb, line 55 def update_guide_progress(json) json[:stats] = student_stats_for json Mumuki::Classroom::GuideProgress .where(guide_progress_query(json)) .first_or_create!(guide_progress_from json) .upsert_attributes(guide_progress_from json) end
update_student_last_assignment(json)
click to toggle source
# File lib/mumuki/classroom/models/concerns/with_submission_process.rb, line 32 def update_student_last_assignment(json) Mumuki::Classroom::Student.find_by!(organization: organization(json), course: course_slug(json), uid: uid(json)).update_last_assignment_for end
update_student_progress(json)
click to toggle source
# File lib/mumuki/classroom/models/concerns/with_submission_process.rb, line 28 def update_student_progress(json) Mumuki::Classroom::Student.find_by!(organization: organization(json), course: course_slug(json), uid: uid(json)).update_all_stats end