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.

43 lines
1015 B

  1. module KGrader
  2. class Course
  3. attr_reader :name, :backend
  4. def initialize(filesystem, name)
  5. @fs = filesystem
  6. @name = name
  7. @config = @fs.load @fs.course_config(@name)
  8. type = @config['backend']
  9. @backend = KGrader::backend(type).new @fs, self, @config[type]
  10. @rosters = {}
  11. @assignments = {}
  12. rescue FilesystemError
  13. raise CourseError, "unknown or invalid course: #{name}"
  14. end
  15. def roster(semester)
  16. @rosters[semester] ||= Roster.new @fs, self, semester
  17. end
  18. def assignment(name)
  19. @assignments[name] ||= Assignment.new @fs, self, name
  20. end
  21. def task(semester, assignment, students = nil)
  22. Task.new @fs, self, semester, assignment, students
  23. end
  24. def rosters
  25. @fs.semesters(@name).map! { |semester| roster semester }
  26. end
  27. def assignments
  28. @fs.assignments(@name).map! { |name| assignment name }
  29. end
  30. def current_semester
  31. KGrader::current_semester @config['semesters']
  32. end
  33. end
  34. end