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.

63 lignes
1.5 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 {} }
  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
  21. - rake roster <course> <rosterfile> [semester=<...>]
  22. - rake grade <course> <assignment> [semester=<...>] [students=<...>]
  23. [due=<...>] [fetch=<yes/no>] [regrade=<yes/no>]
  24. - rake commit <course> <assignment> [semester=<...>] [students=<...>]
  25. - rake clean
  26. - rake clobber}
  27. end
  28. task :list do
  29. run { |cli| cli.list }
  30. end
  31. task :roster do
  32. course, rosterfile, options = parse_args 2, { :semester => :string }
  33. run { |cli| cli.roster course, options[:semester], rosterfile }
  34. end
  35. task :grade do
  36. course, assignment, options = parse_args 2,
  37. { :semester => :string, :students => :array, :due => :time,
  38. :fetch => :bool, :regrade => :bool }
  39. run { |cli| cli.grade course, options[:semester], assignment, options }
  40. end
  41. task :commit do
  42. course, assignment, options = parse_args 2,
  43. { :semester => :string, :students => :array }
  44. run { |cli| cli.commit course, options[:semester], assignment, options }
  45. end
  46. task :clean do
  47. run { |cli| cli.clean }
  48. end
  49. task :clobber do
  50. run { |cli| cli.clobber }
  51. end