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.

67 lines
1.5 KiB

  1. require_relative 'course'
  2. require_relative 'filesystem'
  3. module KGrader
  4. class CLI
  5. def initialize(dir)
  6. @fs = Filesystem.new dir
  7. end
  8. def list
  9. @fs.courses.each do |name|
  10. puts "course: #{name}"
  11. course = Course.new(@fs, name)
  12. puts " rosters:"
  13. course.rosters.each do |roster|
  14. puts " - #{roster.semester} (#{roster.students.size} students)"
  15. end
  16. puts " assignments:"
  17. course.assignments.each do |assignment|
  18. puts " - #{assignment}"
  19. end
  20. end
  21. end
  22. def roster(course, semester, rosterfile)
  23. Course.new(@fs, course).roster(semester).load rosterfile
  24. end
  25. def grade(course, semester, assignment, options = {})
  26. course = Course.new @fs, course
  27. semester ||= course.current_semester
  28. course.task(semester, assignment).grade options
  29. end
  30. def commit(course, semester, assignment, options = {})
  31. course = Course.new @fs, course
  32. semester ||= course.current_semester
  33. course.task(semester, assignment).commit options
  34. end
  35. def clean
  36. # TODO: also purge uncommitted grades
  37. reset_jail
  38. end
  39. def clobber
  40. # TODO: confirm
  41. reset_jail
  42. reset_desk
  43. end
  44. private
  45. def reset_jail
  46. FileUtils.rm_rf @fs.jail
  47. FileUtils.mkdir @fs.jail
  48. FileUtils.touch File.join(@fs.jail, '.gitkeep')
  49. end
  50. def reset_desk
  51. FileUtils.rm_rf Dir[File.join @fs.desk, '*', '']
  52. end
  53. end
  54. end