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.

81 lignes
1.9 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(course, semester)
  9. if semester
  10. puts Course.new(@fs, course).roster(semester).students
  11. elsif course
  12. list_course course, 0
  13. else
  14. @fs.courses.each do |name|
  15. puts "course: #{name}"
  16. list_course name, 1
  17. end
  18. end
  19. end
  20. def roster(course, semester, rosterfile)
  21. course = Course.new(@fs, course)
  22. semester ||= course.current_semester
  23. 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. clear_jail
  38. end
  39. def clobber
  40. puts "clobbering means deleting local student repos and roster files"
  41. print "are you sure? [y/N] "
  42. abort "aborted" unless ['y', 'yes'].include? STDIN.gets.strip.downcase
  43. clear_jail
  44. clear_desk
  45. end
  46. private
  47. def list_course(name, indent = 0)
  48. course = Course.new(@fs, name)
  49. pad = ' ' * indent
  50. puts "#{pad}rosters:"
  51. course.rosters.each do |roster|
  52. puts "#{pad} - #{roster.semester} (#{roster.students.size} students)"
  53. end
  54. puts "#{pad}assignments:"
  55. course.assignments.each do |assignment|
  56. puts "#{pad} - #{assignment}"
  57. end
  58. end
  59. def clear_jail
  60. FileUtils.rm_rf @fs.jail
  61. end
  62. def clear_desk
  63. FileUtils.rm_rf Dir[File.join @fs.desk, '*', '']
  64. end
  65. end
  66. end