Skip to content

Commit 26cd226

Browse files
committed
Mark points after soft deadline
1 parent 483824c commit 26cd226

File tree

4 files changed

+26
-14
lines changed

4 files changed

+26
-14
lines changed

app/models/exercise.rb

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -228,11 +228,11 @@ def soft_deadline_for(user)
228228

229229
# Whether the deadline has passed
230230
def expired_for?(user)
231-
deadline_expired?(deadline_for(user))
231+
Exercise.deadline_expired?(deadline_for(user))
232232
end
233233

234234
def soft_deadline_expired_for?(user)
235-
deadline_expired?(soft_deadline_for(user))
235+
Exercise.deadline_expired?(soft_deadline_for(user))
236236
end
237237

238238
# Whether a user has made a submission for this exercise
@@ -453,6 +453,10 @@ def toggle_submission_result_visiblity
453453
save!
454454
end
455455

456+
def deadline_expired?(deadline, time = Time.now)
457+
deadline != nil && deadline < time
458+
end
459+
456460
private
457461

458462
def new_deadline_spec_obj(spec)
@@ -463,10 +467,6 @@ def new_deadline_spec_obj(spec)
463467
end
464468
end
465469

466-
def deadline_expired?(deadline)
467-
deadline != nil && deadline < Time.now
468-
end
469-
470470
def new_gdocs_sheet(enabled, sheetname)
471471
return nil unless enabled
472472
return sheetname.to_s unless sheetname.blank?
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
class AddSoftDeadlineMultiplier < ActiveRecord::Migration
2+
def change
3+
add_column :courses, :soft_deadline_point_multiplier, :float, null: false, default: 0.75
4+
add_column :awarded_points, :awarded_after_soft_deadline, :boolean, null: false, default: false
5+
end
6+
end

db/schema.rb

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
#
1212
# It's strongly recommended that you check this file into your version control system.
1313

14-
ActiveRecord::Schema.define(version: 20180903081927) do
14+
ActiveRecord::Schema.define(version: 20180912080101) do
1515

1616
# These are extensions that must be enabled in order to support this database
1717
enable_extension "plpgsql"
@@ -43,11 +43,12 @@
4343
add_index "available_points", ["exercise_id", "name"], name: "index_available_points_on_exercise_id_and_name", unique: true, using: :btree
4444

4545
create_table "awarded_points", force: :cascade do |t|
46-
t.integer "course_id", null: false
47-
t.integer "user_id", null: false
46+
t.integer "course_id", null: false
47+
t.integer "user_id", null: false
4848
t.integer "submission_id"
49-
t.string "name", null: false
49+
t.string "name", null: false
5050
t.datetime "created_at"
51+
t.boolean "awarded_after_soft_deadline", default: false, null: false
5152
end
5253

5354
add_index "awarded_points", ["course_id", "user_id", "name"], name: "index_awarded_points_on_course_id_and_user_id_and_name", unique: true, using: :btree
@@ -114,6 +115,7 @@
114115
t.boolean "initial_refresh_ready", default: false
115116
t.boolean "hide_submissions", default: false, null: false
116117
t.boolean "model_solution_visible_before_completion", default: false, null: false
118+
t.float "soft_deadline_point_multiplier", default: 0.75, null: false
117119
end
118120

119121
add_index "courses", ["organization_id"], name: "index_courses_on_organization_id", using: :btree

lib/test_run_grader.rb

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
# frozen_string_literal: true
2+
13
require 'point_comparison'
24
require 'natsort'
35

@@ -67,9 +69,7 @@ def self.create_test_case_runs(submission, results)
6769

6870
def validations_passed?(validations)
6971
if !validations.nil? && validations['strategy'] && validations['strategy'] == 'FAIL'
70-
if validations['validationErrors'] && validations['validationErrors'].any?
71-
return false
72-
end
72+
return false if validations['validationErrors']&.any?
7373
end
7474
true
7575
end
@@ -88,6 +88,9 @@ def self.award_points(submission, results, review_points)
8888
course = exercise.course
8989
available_points = exercise.available_points.to_a.map(&:name)
9090
awarded_points = AwardedPoint.course_user_points(course, user).map(&:name)
91+
soft_deadline = exercise.sosft_deadline_for(user)
92+
awarded_after_soft_deadline = false
93+
awarded_after_soft_deadline = true if soft_deadline && Exercise.deadline_expired?(soft_deadline, submission.created_at)
9194

9295
points = []
9396
((available_points & points_from_test_results(results)) - review_points).each do |point_name|
@@ -97,7 +100,8 @@ def self.award_points(submission, results, review_points)
97100
submission.awarded_points << AwardedPoint.new(
98101
name: point_name,
99102
course: course,
100-
user: user
103+
user: user,
104+
awarded_after_soft_deadline: awarded_after_soft_deadline
101105
)
102106
end
103107

0 commit comments

Comments
 (0)