diff --git a/grader b/grader --- a/grader +++ b/grader @@ -46,11 +46,22 @@ puts <=1 options[:mode] = ARGV.shift end + else + puts 'no argument specified, using default mode and environment.' end options[:dry_run] = (ARGV.delete('--dry') != nil) @@ -119,6 +132,8 @@ exit(0) end + options[:all_sub] = (ARGV.delete('--all-sub') != nil) + return options end @@ -295,7 +310,7 @@ if prob==nil puts "cannot find problem: #{prob_name}" else - runner.grade_problem(prob) + runner.grade_problem(prob,options) end end @@ -378,6 +393,7 @@ dry_run = options[:dry_run] puts "environment: #{GRADER_ENV}" +puts "grader mode: #{grader_mode}" require File.join(File.dirname(__FILE__),'config/environment') # add grader_mode to config diff --git a/lib/runner.rb b/lib/runner.rb --- a/lib/runner.rb +++ b/lib/runner.rb @@ -25,16 +25,21 @@ end def grade_problem(problem, options={}) - users = User.find(:all) - users.each do |u| + User.find_each do |u| puts "user: #{u.login}" if options[:user_conditions]!=nil con_proc = options[:user_conditions] next if not con_proc.call(u) end - last_sub = Submission.find_last_by_user_and_problem(u.id,problem.id) - if last_sub!=nil - @engine.grade(last_sub) + if options[:all_sub] + Submission.where(user_id: u.id,problem_id: problem.id).find_each do |sub| + @engine.grade(sub) + end + else + last_sub = Submission.find_last_by_user_and_problem(u.id,problem.id) + if last_sub!=nil + @engine.grade(last_sub) + end end end end