Sha256: 3fee3a506093f07974cb6ab30d48dd291887cd9853dea1696b076713a2a936c9
Contents?: true
Size: 986 Bytes
Versions: 70
Compression:
Stored size: 986 Bytes
Contents
class Exam::PassingCriterion attr_reader :value def initialize(value) @value = value end def type self.class.name.demodulize.underscore end def as_json {type: type, value: value} end def ensure_valid! raise "Invalid criterion value #{value} for #{type}" unless valid_passing_grade? end def self.parse(type, value) parse_criterion_type(type, value) end def self.parse_criterion_type(type, value) "Exam::PassingCriterion::#{type.camelize}".constantize.new(value) rescue raise "Invalid criterion type #{type}" end end class Exam::PassingCriterion::None < Exam::PassingCriterion def initialize(_) @value = nil end def valid_passing_grade? !value end end class Exam::PassingCriterion::Percentage < Exam::PassingCriterion def valid_passing_grade? value.between? 0, 100 end end class Exam::PassingCriterion::PassedExercises < Exam::PassingCriterion def valid_passing_grade? value >= 0 end end
Version data entries
70 entries across 70 versions & 2 rubygems