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