A code autograder for student homework submissions
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

78 lignes
1.8 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 = fetch_course course
  24. semester ||= course.current_semester
  25. course.roster(semester).load rosterfile
  26. end
  27. def grade(course, semester, assignment, options = {})
  28. course = fetch_course course
  29. semester ||= course.current_semester
  30. course.task(semester, assignment).grade options
  31. end
  32. def commit(course, semester, assignment, options = {})
  33. course = fetch_course course
  34. semester ||= course.current_semester
  35. course.task(semester, assignment).commit options
  36. end
  37. def clean
  38. # TODO: also purge uncommitted grades
  39. reset_jail
  40. end
  41. def clobber
  42. puts "clobbering means deleting local student repos and roster files"
  43. print "are you sure? [y/N] "
  44. abort "aborted" unless ['y', 'yes'].include? STDIN.gets.strip.downcase
  45. reset_jail
  46. reset_desk
  47. end
  48. private
  49. def fetch_course(course)
  50. Course.new(@fs, course)
  51. rescue FilesystemError
  52. KGrader::die "unknown course"
  53. end
  54. def reset_jail
  55. FileUtils.rm_rf @fs.jail
  56. FileUtils.mkdir @fs.jail
  57. FileUtils.touch File.join(@fs.jail, '.gitkeep')
  58. end
  59. def reset_desk
  60. FileUtils.rm_rf Dir[File.join @fs.desk, '*', '']
  61. end
  62. end
  63. end