Show More
Commit Description:
update hint on test interface...
Commit Description:
update hint on test interface git-svn-id: http://theory.cpe.ku.ac.th/grader/web/trunk@99 6386c4cd-e34a-4fa8-8920-d93eb39b512e
File last commit:
Show/Diff file:
Action:
app/models/submission.rb | 120 lines | 3.3 KiB | text/x-ruby | RubyLexer |
pramook
initial commit...
r0 class Submission < ActiveRecord::Base
belongs_to :language
belongs_to :problem
jittat
moved to ror 2.0.2, add user rel to model submission...
r1 belongs_to :user
pramook
initial commit...
r0
jittat
moved submission validation to model...
r31 validates_presence_of :source
validates_length_of :source, :maximum => 100_000, :allow_blank => true, :message => 'too long'
validates_length_of :source, :minimum => 1, :allow_blank => true, :message => 'too short'
validate :must_specify_language
validate :must_have_valid_problem
jittat
fixed bug: increament of number on old records in submission...
r46 before_save :assign_latest_number_if_new_recond
jittat
added number (auto generated when submitting) to submissions...
r35
def self.find_last_by_user_and_problem(user_id, problem_id)
last_sub = find(:first,
:conditions => {:user_id => user_id,
:problem_id => problem_id},
:order => 'submitted_at DESC')
return last_sub
pramook
initial commit...
r0 end
jittat
added number (auto generated when submitting) to submissions...
r35 def self.find_all_last_by_problem(problem_id)
pramook
initial commit...
r0 # need to put in SQL command, maybe there's a better way
Submission.find_by_sql("SELECT * FROM submissions " +
"WHERE id = " +
"(SELECT MAX(id) FROM submissions AS subs " +
"WHERE subs.user_id = submissions.user_id AND " +
"problem_id = " + problem_id.to_s + " " +
"GROUP BY user_id)")
end
jittat
test interface upload...
r36 def self.find_last_for_all_available_problems(user_id)
submissions = Array.new
problems = Problem.find_available_problems
problems.each do |problem|
sub = Submission.find_last_by_user_and_problem(user_id, problem.id)
submissions << sub if sub!=nil
end
submissions
end
def self.find_by_user_problem_number(user_id, problem_id, number)
Submission.find(:first,
:conditions => {
:user_id => user_id,
:problem_id => problem_id,
:number => number
})
end
jittat
added number (auto generated when submitting) to submissions...
r35 protected
pramook
initial commit...
r0 def self.find_option_in_source(option, source)
jittat
moved submission validation to model...
r31 if source==nil
return nil
end
pramook
initial commit...
r0 i = 0
source.each_line do |s|
if s =~ option
words = s.split
return words[1]
end
i = i + 1
if i==10
return nil
end
end
return nil
end
def self.find_language_in_source(source)
langopt = find_option_in_source(/^LANG:/,source)
if language = Language.find_by_name(langopt)
return language
elsif language = Language.find_by_pretty_name(langopt)
return language
else
return nil
end
end
def self.find_problem_in_source(source)
prob_opt = find_option_in_source(/^TASK:/,source)
if problem = Problem.find_by_name(prob_opt)
return problem
else
return nil
end
end
jittat
moved submission validation to model...
r31 # validation codes
def must_specify_language
return if self.source==nil
self.language = Submission.find_language_in_source(self.source)
errors.add_to_base("must specify programming language") unless self.language!=nil
end
def must_have_valid_problem
return if self.source==nil
if self.problem_id!=-1
problem = Problem.find(self.problem_id)
else
problem = Submission.find_problem_in_source(self.source)
end
if problem==nil
errors.add_to_base("must specify problem")
elsif !problem.available
errors.add_to_base("must specify valid problem")
end
end
jittat
added number (auto generated when submitting) to submissions...
r35 # callbacks
jittat
fixed bug: increament of number on old records in submission...
r46 def assign_latest_number_if_new_recond
return if !self.new_record?
jittat
added number (auto generated when submitting) to submissions...
r35 latest = Submission.find_last_by_user_and_problem(self.user_id, self.problem_id)
self.number = (latest==nil) ? 1 : latest.number + 1;
end
pramook
initial commit...
r0 end