@@ -8,16 +8,16 @@ module KGrader | |||||
def initialize(filesystem, name) | def initialize(filesystem, name) | ||||
@fs = filesystem | @fs = filesystem | ||||
@name = name | @name = name | ||||
@config = @fs.load @fs.course_config(@name) | @config = @fs.load @fs.course_config(@name) | ||||
@rosters = {} | |||||
end | end | ||||
def roster(semester) | def roster(semester) | ||||
# TODO: cache | |||||
Roster.new @fs, self, semester | |||||
@rosters[semester] ||= Roster.new @fs, self, semester | |||||
end | end | ||||
def task(semester, assignment) | def task(semester, assignment) | ||||
# TODO: cache | |||||
Task.new @fs, self, semester, assignment | Task.new @fs, self, semester, assignment | ||||
end | end | ||||
@@ -27,20 +27,22 @@ module KGrader | |||||
File.join course(name), '_config.yml' | File.join course(name), '_config.yml' | ||||
end | end | ||||
def roster(course_name, semester) | |||||
File.join desk, course_name, semester, '_roster.csv' | |||||
end | |||||
def courses | def courses | ||||
Dir[File.join spec, '*', ''].map! { |fn| File.basename fn } | Dir[File.join spec, '*', ''].map! { |fn| File.basename fn } | ||||
end | end | ||||
def assignments(course) | |||||
Dir[File.join spec, course, '*', '_config.yml'].map! do |fn| | |||||
def assignments(course_name) | |||||
Dir[File.join course(course_name), '*', '_config.yml'].map! do |fn| | |||||
File.basename File.dirname fn | File.basename File.dirname fn | ||||
end | end | ||||
end | end | ||||
def semesters(course) | |||||
Dir[File.join desk, course, '*', '_roster.csv'].map! do |fn| | |||||
File.basename File.dirname fn | |||||
end | |||||
def semesters(course_name) | |||||
Dir[roster course_name, '*'].map! { |fn| File.basename File.dirname fn } | |||||
end | end | ||||
def load(path) | def load(path) | ||||
@@ -48,7 +50,7 @@ module KGrader | |||||
when '.yml', '.yaml' | when '.yml', '.yaml' | ||||
YAML.load File.read(path) | YAML.load File.read(path) | ||||
when '.csv' | when '.csv' | ||||
# TODO | |||||
File.read(path).split("\n").map! { |line| line.split "," } | |||||
end | end | ||||
end | end | ||||
end | end | ||||
@@ -6,16 +6,26 @@ module KGrader | |||||
@fs = filesystem | @fs = filesystem | ||||
@course = course | @course = course | ||||
@semester = semester | @semester = semester | ||||
@students = nil | |||||
end | end | ||||
def load(filename) | def load(filename) | ||||
# TODO | |||||
puts "Loading roster for #{@course.name}:#{@semester} from [#{filename}]..." | |||||
@students = @fs.load(filename).map! { |item| item.first } | |||||
FileUtils.mkdir_p File.dirname(rosterfile) | |||||
File.write rosterfile, @students.join("\n") | |||||
end | end | ||||
def students | def students | ||||
@students ||= @fs.load(rosterfile).map! { |item| item.first } | |||||
end | |||||
def intersect(other) | |||||
# TODO | # TODO | ||||
["ksmith12"] | |||||
end | |||||
private | |||||
def rosterfile | |||||
@fs.roster @course.name, @semester | |||||
end | end | ||||
end | end | ||||
end | end |
@@ -6,6 +6,7 @@ module KGrader | |||||
@course = course | @course = course | ||||
@semester = semester | @semester = semester | ||||
@assignment = assignment | @assignment = assignment | ||||
@roster = @course.roster @semester | |||||
end | end | ||||
def grade(options = {}) | def grade(options = {}) | ||||