Class: Gaku::Exam
Class Method Summary
collapse
Instance Method Summary
collapse
Methods included from Gradable
#use_primary_grading_method_set
Class Method Details
.without_syllabuses ⇒ Object
29
30
31
32
|
# File 'app/models/gaku/exam.rb', line 29
def self.without_syllabuses
includes(:syllabuses).where(standalone: false)
.select { |p| p.syllabuses.length == 0 }
end
|
Instance Method Details
#check_record_completion?(student_eps) ⇒ Boolean
99
100
101
102
103
104
|
# File 'app/models/gaku/exam.rb', line 99
def check_record_completion?(student_eps)
student_eps.score.nil? && !student_eps.attendances
.last
.try(:attendance_type)
.try(:auto_credit)
end
|
#completed_by_student?(student) ⇒ Boolean
86
87
88
89
90
91
92
93
94
95
96
97
|
# File 'app/models/gaku/exam.rb', line 86
def completed_by_student?(student)
state = true
exam_portions.each do |ep|
student_eps = ep.exam_portion_scores.find do |eps|
eps.student_id == student.id
end
state = false if check_record_completion?(student_eps)
end
state
end
|
#completed_by_students(students) ⇒ Object
78
79
80
81
82
83
84
|
# File 'app/models/gaku/exam.rb', line 78
def completed_by_students(students)
completed = []
students.each do |student|
completed.append(student.id) if self.completed_by_student?(student)
end
completed
end
|
#completion(students) ⇒ Object
52
53
54
55
56
|
# File 'app/models/gaku/exam.rb', line 52
def completion(students)
total_records = total_records(students)
completion_ratio = 1 - (ungraded(students) / total_records.to_f)
(completion_ratio * 100).round(2)
end
|
#max_score ⇒ Object
48
49
50
|
# File 'app/models/gaku/exam.rb', line 48
def max_score
exam_portions.inject(0) { |sum, p| sum + p.max_score }
end
|
#to_s ⇒ Object
25
26
27
|
# File 'app/models/gaku/exam.rb', line 25
def to_s
name
end
|
#total_records(students) ⇒ Object
74
75
76
|
# File 'app/models/gaku/exam.rb', line 74
def total_records(students)
exam_portions.count * students.count
end
|
#total_weight ⇒ Object
34
35
36
|
# File 'app/models/gaku/exam.rb', line 34
def total_weight
exam_portions.reduce(0) { |sum, p| p.weight ? sum + p.weight : sum }
end
|
#total_weight_except(portion) ⇒ Object
38
39
40
41
42
43
44
45
46
|
# File 'app/models/gaku/exam.rb', line 38
def total_weight_except(portion)
exam_portions.reduce(0) do |sum, p|
if portion == p
sum
else
p.weight ? sum + p.weight : sum
end
end
end
|
#ungraded(students) ⇒ Object
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
# File 'app/models/gaku/exam.rb', line 58
def ungraded(students)
ungraded = 0
students.each do |student|
student_exam_eps = exam_portion_scores.select do |eps|
eps.student_id == student.id
end
student_exam_eps.each do |eps|
ungraded += 1 if check_record_completion?(eps)
end
end
ungraded
end
|