class QuizDsl::Quiz
Clase Quiz
DSL
Attributes
name[RW]
questions[RW]
Public Class Methods
new(name) { |self| ... }
click to toggle source
Recibe el nombre del test y un bloque con las preguntas y sus respuestas
Ejemplo de uso: quiz = Quiz.new
(“Test 1”){ |e| e.question “Pregunta 1”, e.wrong => “Respuesta incorrecta 1”, e.wrong => “Respuesta incorrecta 2”, e.wrong => “Respuesta incorrecta 3”, e.wrong => “Respuesta correcta” }
# File lib/quiz_dsl.rb, line 20 def initialize(name) raise ArgumentError, "El nombre del cuestionario tiene que ser una cadena" unless name.is_a? String @count = 0 @aciertos = 0 @name = name @questions = [] yield self end
Public Instance Methods
question(title, anss)
click to toggle source
Método que recibe el título de la pregunta y una serie de parámetros como respuestas
# File lib/quiz_dsl.rb, line 38 def question(title, anss) raise ArgumentError, "El título tiene que ser una cadena" unless title.is_a? String answers = [] anss.each do |ans| a = Answer.new(ans) answers << a end q = Question.new(title, answers) questions << q end
right()
click to toggle source
Preguntas correctas
# File lib/quiz_dsl.rb, line 34 def right :right end
run()
click to toggle source
Ejecuta el test por consola
# File lib/quiz_dsl.rb, line 49 def run puts name questions.each do |q| puts q print "Su respuesta: " resp = gets.chomp.to_i raise IndexError, "La respuesta debe estar entre 1 y #{q.answers.size}." unless resp <= q.answers.size and resp > 0 if q.answers[resp-1].state puts "Correcto!" @aciertos += 1 else correcta = q.answers.select { |ans| ans.state }.first puts "Fallo, la respuesta correcta era #{correcta}" end puts end puts "Has acertado el #{(@aciertos/questions.size.to_f)*100}% de las preguntas [#{@aciertos} de #{questions.size}]." end
to_s()
click to toggle source
Representación visual de un Test en forma de String.
# File lib/quiz_dsl.rb, line 68 def to_s out = name + "\n" questions.each do |q| out << "#{q}\n" end out end
wrong()
click to toggle source
Preguntas incorrectas
# File lib/quiz_dsl.rb, line 29 def wrong @count += 1 [@count, WRONG] end