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