A code autograder for student homework submissions
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

70 lines
1.7 KiB

  1. module KGrader
  2. class CLI
  3. def initialize(dir)
  4. @fs = Filesystem.new dir
  5. end
  6. def list(course, semester)
  7. if semester
  8. puts Course.new(@fs, course).roster(semester).students
  9. elsif course
  10. list_course course, 0
  11. else
  12. @fs.courses.each do |name|
  13. puts "course: #{name}"
  14. list_course name, 1
  15. end
  16. end
  17. end
  18. def roster(course, semester, rosterfile)
  19. course = Course.new(@fs, course)
  20. semester ||= course.current_semester
  21. course.roster(semester).load rosterfile
  22. end
  23. def grade(course, semester, assignment, students = nil, options = {})
  24. course = Course.new(@fs, course)
  25. semester ||= course.current_semester
  26. course.task(semester, assignment, students).grade options
  27. end
  28. def commit(course, semester, assignment, students = nil)
  29. course = Course.new(@fs, course)
  30. semester ||= course.current_semester
  31. course.task(semester, assignment, students).commit
  32. end
  33. def clean
  34. @fs.jail.reset
  35. @fs.clean_desk
  36. end
  37. def clobber
  38. puts "clobbering means deleting local student repos and roster files"
  39. print "are you sure? [y/N] "
  40. abort "aborted" unless ['y', 'yes'].include? STDIN.gets.strip.downcase
  41. @fs.jail.reset
  42. @fs.reset_desk
  43. end
  44. private
  45. def list_course(name, indent = 0)
  46. course = Course.new(@fs, name)
  47. pad = ' ' * indent
  48. puts "#{pad}rosters:"
  49. course.rosters.each do |roster|
  50. puts "#{pad} - #{roster.semester} (#{roster.students.size} students)"
  51. end
  52. puts "#{pad}assignments:"
  53. course.assignments.each do |assignment|
  54. puts "#{pad} - #{assignment.name}"
  55. end
  56. end
  57. end
  58. end