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.

58 lines
1.3 KiB

  1. module KGrader
  2. class CLI
  3. def initialize(dir)
  4. @dir = dir
  5. end
  6. def list
  7. # TODO
  8. puts "[list]"
  9. end
  10. def roster(course, semester, rosterfile)
  11. # TODO
  12. puts "[installing roster: c=#{course} s=#{semester} rf=#{rosterfile}]"
  13. end
  14. def grade(course, semester, assignment, options = {})
  15. # TODO
  16. puts "[grading c=#{course} s=#{semester} a=#{assignment}]"
  17. puts " - [students=#{options[:students].inspect}]"
  18. puts " - [due=#{options[:due].inspect}]"
  19. puts " - [fetch=#{options.fetch(:fetch, true).inspect}]"
  20. puts " - [regrade=#{options.fetch(:regrade, false).inspect}]"
  21. end
  22. def commit(course, semester, assignment, options = {})
  23. # TODO
  24. puts "[committing c=#{course} s=#{semester} a=#{assignment}]"
  25. puts " - [students=#{options[:students].inspect}]"
  26. end
  27. def clean
  28. # TODO: also purge uncommitted grades
  29. reset_jail
  30. end
  31. def clobber
  32. # TODO: confirm
  33. reset_jail
  34. reset_desk
  35. end
  36. private
  37. def reset_jail
  38. jail_dir = File.join(@dir, 'jail')
  39. FileUtils.rm_rf jail_dir
  40. FileUtils.mkdir jail_dir
  41. FileUtils.touch File.join(jail_dir, '.gitkeep')
  42. end
  43. def reset_desk
  44. desk_dir = File.join(@dir, 'desk')
  45. FileUtils.rm_rf Dir.glob(File.join(desk_dir, '*', ''))
  46. end
  47. end
  48. end