|
- module KGrader
- class Course
- attr_reader :name, :backend
-
- def initialize(filesystem, name)
- @fs = filesystem
- @name = name
-
- @config = @fs.load @fs.course_config(@name)
- type = @config['backend']
- @backend = KGrader::backend(type).new @fs, self, @config[type]
- @rosters = {}
- @assignments = {}
- rescue FilesystemError
- raise CourseError, "unknown or invalid course: #{name}"
- end
-
- def roster(semester)
- @rosters[semester] ||= Roster.new @fs, self, semester
- end
-
- def assignment(name)
- @assignments[name] ||= Assignment.new @fs, self, name
- end
-
- def task(semester, assignment, students = nil)
- Task.new @fs, self, semester, assignment, students
- end
-
- def rosters
- @fs.semesters(@name).map! { |semester| roster semester }
- end
-
- def assignments
- @fs.assignments(@name).map! { |name| assignment name }
- end
-
- def current_semester
- KGrader::current_semester @config['semesters']
- end
- end
- end
|