| @@ -1,4 +1,5 @@ | |||||
| require_relative 'kgrader/assignment' | require_relative 'kgrader/assignment' | ||||
| require_relative 'kgrader/backend' | |||||
| require_relative 'kgrader/cli' | require_relative 'kgrader/cli' | ||||
| require_relative 'kgrader/course' | require_relative 'kgrader/course' | ||||
| require_relative 'kgrader/errors' | require_relative 'kgrader/errors' | ||||
| @@ -11,5 +11,9 @@ module KGrader | |||||
| rescue FilesystemError | rescue FilesystemError | ||||
| raise AssignmentError, "unknown assignment: #{name}" | raise AssignmentError, "unknown assignment: #{name}" | ||||
| end | end | ||||
| def id | |||||
| @config['id'] || @name | |||||
| end | |||||
| end | end | ||||
| end | end | ||||
| @@ -0,0 +1 @@ | |||||
| require_relative 'backend/svn' | |||||
| @@ -0,0 +1,17 @@ | |||||
| module KGrader::Backend | |||||
| class SVN | |||||
| def initialize(filesystem, config) | |||||
| @fs = filesystem | |||||
| @config = config | |||||
| end | |||||
| def fetch(semester, assignment, student) | |||||
| url = @config['url'] % { | |||||
| :semester => semester, :assignment => assignment, :student => student } | |||||
| # TODO | |||||
| puts "[fetching #{student}: #{url}]" | |||||
| end | |||||
| end | |||||
| end | |||||
| @@ -1,12 +1,14 @@ | |||||
| module KGrader | module KGrader | ||||
| class Course | class Course | ||||
| attr_reader :name | |||||
| attr_reader :name, :backend | |||||
| 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) | ||||
| type = @config['backend'] | |||||
| @backend = KGrader::backend(type).new self, @config[type] | |||||
| @rosters = {} | @rosters = {} | ||||
| @assignments = {} | @assignments = {} | ||||
| rescue FilesystemError | rescue FilesystemError | ||||
| @@ -19,11 +19,17 @@ module KGrader | |||||
| regrade = options.fetch(:regrade, false) | regrade = options.fetch(:regrade, false) | ||||
| # TODO | # TODO | ||||
| puts "Grading #{@course.name}:#{@semester} assignment #{@assignment.name}..." | |||||
| puts "- students: #{students.inspect}" | |||||
| puts "- due: #{due}" | |||||
| puts "- fetch: #{fetch}" | |||||
| puts "- regrade: #{regrade}" | |||||
| puts "[grading]" | |||||
| puts "course => #{@course.name}" | |||||
| puts "semester => #{@semester}" | |||||
| puts "assignment => #{@assignment.name}" | |||||
| puts "students => #{students.join ', '}" | |||||
| puts "due => #{due}" | |||||
| puts "fetch => #{fetch}" | |||||
| puts "regrade => #{regrade}" | |||||
| puts | |||||
| fetch_students students if fetch | |||||
| end | end | ||||
| def commit(options = {}) | def commit(options = {}) | ||||
| @@ -31,8 +37,18 @@ module KGrader | |||||
| students &= options[:students] unless options[:students].nil? | students &= options[:students] unless options[:students].nil? | ||||
| # TODO | # TODO | ||||
| puts "Committing #{@course.name}:#{@semester} assignment #{@assignment.name}..." | |||||
| puts "- students: #{students.inspect}" | |||||
| puts "[committing]" | |||||
| puts "course => #{@course.name}" | |||||
| puts "semester => #{@semester}" | |||||
| puts "assignment => #{@assignment.name}" | |||||
| puts "students => #{students.join ', '}" | |||||
| end | |||||
| private | |||||
| def fetch_students(students) | |||||
| students.each do |student| | |||||
| @course.backend.fetch @semester, @assignment.id, student | |||||
| end | |||||
| end | end | ||||
| end | end | ||||
| end | end | ||||
| @@ -33,6 +33,15 @@ module KGrader | |||||
| return args, options | return args, options | ||||
| end | end | ||||
| def self.backend(type) | |||||
| case type | |||||
| when 'svn' | |||||
| Backend::SVN | |||||
| else | |||||
| raise ConfigError, "unknown backend: #{type}" | |||||
| end | |||||
| end | |||||
| def self.current_semester(format) | def self.current_semester(format) | ||||
| season = Time.now.strftime('%m').to_i <= 6 ? 'sp' : 'fa' | season = Time.now.strftime('%m').to_i <= 6 ? 'sp' : 'fa' | ||||
| case format | case format | ||||
| @@ -1 +1 @@ | |||||
| Subproject commit 3c6f5d050d8a66de6b3c36ce1985c225700a5c2f | |||||
| Subproject commit 438e509e4c9097894f275dd66a5ae37bbcb62c24 | |||||