@@ -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 |