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.7 KiB

  1. require_relative 'lib/kgrader'
  2. def die(error)
  3. abort "fatal: [#{error.class}] #{error}"
  4. end
  5. def run
  6. yield KGrader::CLI.new Rake.application.original_dir
  7. rescue KGrader::KGraderError => err
  8. die err
  9. end
  10. def parse_args(num, keywords = {})
  11. args, options = KGrader::parse_args ARGV.drop(1), num, keywords
  12. args.each { |arg| task arg.to_sym {} unless arg.nil? }
  13. args + [options]
  14. rescue KGrader::KGraderError => err
  15. die err
  16. end
  17. task :default => :help do ; end
  18. task :help do
  19. puts %{usage:
  20. - rake list [<course>] [<semester>]
  21. - rake roster <course> <rosterfile> [<semester>]
  22. - rake grade <course> <assignment> [semester=<...>] [students=<...>]
  23. [due=<...>] [fetch=<yes/no>] [regrade=<yes/no>]
  24. [superscore=<yes/no>]
  25. - rake commit <course> <assignment> [semester=<...>] [students=<...>]
  26. - rake clean
  27. - rake clobber}
  28. end
  29. task :list do
  30. course, semester = parse_args 0..2
  31. run { |cli| cli.list course, semester }
  32. end
  33. task :roster do
  34. course, rosterfile, semester = parse_args 2..3
  35. run { |cli| cli.roster course, semester, rosterfile }
  36. end
  37. task :grade do
  38. course, assignment, options = parse_args 2..2,
  39. { :semester => :string, :students => :array, :due => :time,
  40. :fetch => :bool, :regrade => :bool, :superscore => :bool }
  41. semester, students = options[:semester], options[:students]
  42. run { |cli| cli.grade course, semester, assignment, students, options }
  43. end
  44. task :commit do
  45. course, assignment, options = parse_args 2..2,
  46. { :semester => :string, :students => :array }
  47. semester, students = options[:semester], options[:students]
  48. run { |cli| cli.commit course, semester, assignment, students }
  49. end
  50. task :clean do
  51. run { |cli| cli.clean }
  52. end
  53. task :clobber do
  54. run { |cli| cli.clobber }
  55. end