| @@ -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 = {}) | ||||