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

  1. require 'yaml'
  2. module KGrader
  3. class Filesystem
  4. def initialize(root)
  5. @root = root
  6. end
  7. def desk
  8. File.join @root, 'desk'
  9. end
  10. def jail
  11. File.join @root, 'jail'
  12. end
  13. def spec
  14. File.join @root, 'spec'
  15. end
  16. def course(name)
  17. File.join spec, name
  18. end
  19. def course_config(name)
  20. File.join course(name), '_config.yml'
  21. end
  22. def roster(course_name, semester)
  23. File.join desk, course_name, semester, '_roster.csv'
  24. end
  25. def courses
  26. Dir[File.join spec, '*', ''].map! { |fn| File.basename fn }
  27. end
  28. def assignments(course_name)
  29. Dir[File.join course(course_name), '*', '_config.yml'].map! do |fn|
  30. File.basename File.dirname fn
  31. end
  32. end
  33. def semesters(course_name)
  34. Dir[roster course_name, '*'].map! { |fn| File.basename File.dirname fn }
  35. end
  36. def load(path)
  37. case File.extname path
  38. when '.yml', '.yaml'
  39. YAML.load File.read(path)
  40. when '.csv'
  41. File.read(path).split("\n").map! { |line| line.split "," }
  42. end
  43. end
  44. end
  45. end