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.

70 lignes
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