LearnPulse / app /models /assignment.rb
Nambinintsoa Rovatiana RAMAROSON
first commit
874ae95
Raw
History Blame Contribute Delete
2.19 kB
class Assignment < ApplicationRecord
belongs_to :target
has_one :course, through: :target
has_many :timeline_events, through: :target
has_one :quiz, dependent: :restrict_with_error
has_many :assignments_prerequisite_assignments, dependent: :destroy
has_many :prerequisite_assignments,
through: :assignments_prerequisite_assignments
has_many :assignments_evaluation_criteria, dependent: :destroy
has_many :evaluation_criteria, through: :assignments_evaluation_criteria
scope :student, -> { where(role: ROLE_STUDENT) }
scope :not_student, -> { where.not(role: ROLE_STUDENT) }
scope :team, -> { where(role: ROLE_TEAM) }
scope :sessions, -> { where.not(session_at: nil) }
scope :not_archived, -> { where.not(archived: true) }
scope :milestone, -> { not_archived.where(milestone: true) }
normalize_attribute :completion_instructions
ROLE_STUDENT = "student"
ROLE_TEAM = "team"
# See en.yml's target.role
def self.valid_roles
[ROLE_STUDENT, ROLE_TEAM].freeze
end
CHECKLIST_KIND_SHORT_TEXT = "shortText"
CHECKLIST_KIND_LONG_TEXT = "longText"
CHECKLIST_KIND_LINK = "link"
CHECKLIST_KIND_FILES = "files"
CHECKLIST_KIND_MULTI_CHOICE = "multiChoice"
CHECKLIST_KIND_AUDIO = "audio"
def self.valid_checklist_kind_types
[
CHECKLIST_KIND_FILES,
CHECKLIST_KIND_LINK,
CHECKLIST_KIND_LONG_TEXT,
CHECKLIST_KIND_MULTI_CHOICE,
CHECKLIST_KIND_SHORT_TEXT,
CHECKLIST_KIND_AUDIO
].freeze
end
validates :role, presence: true, inclusion: { in: valid_roles }
validates_with RateLimitValidator, limit: 2, scope: :target_id
validate :milestone_should_have_a_number
def milestone_should_have_a_number
return unless milestone?
return if milestone_number.present?
errors.add(:milestone_number, "must be present for milestone assignments")
end
def quiz?
quiz.present?
end
def team_assignment?
role == ROLE_TEAM
end
def individual_assignment?
role == ROLE_STUDENT
end
# Returns the latest submission linked to this target from a student
def latest_submission(student)
student.latest_submissions.where(target: self.target).last
end
end