Add new file role teacher_defined_linter

This commit is contained in:
Sebastian Serth
2020-10-15 00:43:57 +02:00
parent a5416758eb
commit be3ec82bd4
17 changed files with 41 additions and 28 deletions

View File

@ -19,11 +19,11 @@ module CodeOcean
include DefaultValues
DEFAULT_WEIGHT = 1.0
ROLES = %w(main_file reference_implementation regular_file executable_file teacher_defined_test user_defined_file user_defined_test)
TEACHER_DEFINED_ROLES = ROLES - %w(user_defined_file)
ROLES = %w[main_file reference_implementation regular_file executable_file teacher_defined_test user_defined_file user_defined_test teacher_defined_linter].freeze
TEACHER_DEFINED_ROLES = ROLES - %w[user_defined_file]
after_initialize :set_default_values
before_validation :clear_weight, unless: :teacher_defined_test?
before_validation :clear_weight, unless: :teacher_defined_assessment?
before_validation :hash_content, if: :content_present?
before_validation :set_ancestor_values, if: :incomplete_descendent?
@ -45,19 +45,20 @@ module CodeOcean
ROLES.each do |role|
scope :"#{role}s", -> { where(role: role) }
end
scope :teacher_defined_assessments, -> { where(role: %w[teacher_defined_test teacher_defined_linter]) }
default_scope { order(name: :asc) }
validates :feedback_message, if: :teacher_defined_test?, presence: true
validates :feedback_message, absence: true, unless: :teacher_defined_test?
validates :feedback_message, if: :teacher_defined_assessment?, presence: true
validates :feedback_message, absence: true, unless: :teacher_defined_assessment?
validates :file_type_id, presence: true
validates :hashed_content, if: :content_present?, presence: true
validates :hidden, boolean_presence: true
validates :name, presence: true
validates :read_only, boolean_presence: true
validates :role, inclusion: {in: ROLES}
validates :weight, if: :teacher_defined_test?, numericality: true, presence: true
validates :weight, absence: true, unless: :teacher_defined_test?
validates :weight, if: :teacher_defined_assessment?, numericality: true, presence: true
validates :weight, absence: true, unless: :teacher_defined_assessment?
validates :file, presence: true if :context.is_a?(Submission)
validates_with FileNameValidator, fields: [:name, :path, :file_type_id]
@ -75,6 +76,10 @@ module CodeOcean
end
private :clear_weight
def teacher_defined_assessment?
teacher_defined_test? || teacher_defined_linter?
end
def content_present?
content? || native_file?
end
@ -111,7 +116,7 @@ module CodeOcean
def set_default_values
set_default_values_if_present(content: '', hidden: false, read_only: false)
set_default_values_if_present(weight: DEFAULT_WEIGHT) if teacher_defined_test?
set_default_values_if_present(weight: DEFAULT_WEIGHT) if teacher_defined_assessment?
end
private :set_default_values