Class: Ull::Etsii::Alu4321::Quiz::Quiz
- Inherits:
-
Object
- Object
- Ull::Etsii::Alu4321::Quiz::Quiz
- Defined in:
- lib/ull-etsii-alu4321-quiz.rb
Overview
Clase que permite la construcciC3n de cuestionarios tipo test mediante un DSL
Instance Attribute Summary collapse
-
#name ⇒ Object
Returns the value of attribute name.
-
#questions ⇒ Object
Returns the value of attribute questions.
Instance Method Summary collapse
-
#initialize(name) {|_self| ... } ⇒ Quiz
constructor
Recibe el nombre del test y un bloque con las preguntas y sus respuestas.
-
#question(title, anss) ⇒ Object
MC)todo que recibe el tC-tulo title de la pregunta y una serie de parC!metros como respuestas.
-
#right ⇒ Object
Pregunta correcta.
-
#run ⇒ Object
Ejecuta el test por consola.
-
#to_html ⇒ Object
Genera el test en formato html.
-
#to_s ⇒ Object
RepresentaciC3n visual de un Test en forma de String.
-
#wrong ⇒ Object
Pregunta incorrecta.
Constructor Details
#initialize(name) {|_self| ... } ⇒ Quiz
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.rigth => “Respuesta correcta” }
26 27 28 29 30 31 32 33 |
# File 'lib/ull-etsii-alu4321-quiz.rb', line 26 def initialize(name) @counter = 0 @aciertos = 0 @name = name @questions = [] yield self end |
Instance Attribute Details
#name ⇒ Object
Returns the value of attribute name.
14 15 16 |
# File 'lib/ull-etsii-alu4321-quiz.rb', line 14 def name @name end |
#questions ⇒ Object
Returns the value of attribute questions.
14 15 16 |
# File 'lib/ull-etsii-alu4321-quiz.rb', line 14 def questions @questions end |
Instance Method Details
#question(title, anss) ⇒ Object
MC)todo que recibe el tC-tulo title de la pregunta y una serie de parC!metros como respuestas
50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/ull-etsii-alu4321-quiz.rb', line 50 def question(title, anss) answers = [] anss.each do |ans| a = Answer.new(ans) answers << a end q = Question.new(title, answers) questions << q end |
#right ⇒ Object
Pregunta correcta
44 45 46 |
# File 'lib/ull-etsii-alu4321-quiz.rb', line 44 def right :right end |
#run ⇒ Object
Ejecuta el test por consola. Presenta cada pregunta y las posibles respuestas. Al final muestra los resultados.
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/ull-etsii-alu4321-quiz.rb', line 64 def run puts name questions.each do |q| puts q print "Su respuesta: " resp = gets.chomp.to_i raise IndexError, "Answer must be between 1 and #{q.answers.size}." unless resp <= q.answers.size and resp > 0 if q.answers[resp-1].state puts "Correcto!".colorize(:light_green) @aciertos += 1 else correcta = q.answers.select { |ans| ans.state }.first puts "Fallo, la respuesta correcta era #{correcta}".colorize(:red) end puts end puts "Has acertado el #{(@aciertos/questions.size.to_f)*100}% de las preguntas [#{@aciertos} de #{questions.size}]." end |
#to_html ⇒ Object
Genera el test en formato html. Dicho test es totalmente funcional, permitiendo la selecciC3n de respuestas y la correcciC3n de las mismas
95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
# File 'lib/ull-etsii-alu4321-quiz.rb', line 95 def to_html # SetUp del fichero de salida if not Dir.exist? "html" # Copiamos el directorio html con los ficheros bC!sicos require 'fileutils' FileUtils.cp_r File.(File.dirname(__FILE__)) + '/html', 'html' end # Generamos HTML htmlFile = File.new("html/#{name.gsub(/[\ \\\/:]/, '_')}.html", "w") raise IOError, 'Can\'t access to html output file' unless htmlFile # Generamos JavaScript jsFile = File.new("html/js/quiz.js", "w") raise IOError, 'Can\'t access to javascript output file' unless jsFile # Construimos los ERB y los escribimos en los ficheros require 'templates' rhtml = ERB.new(HTML_TEMPLATE) htmlFile.syswrite(rhtml.result(binding)) htmlFile.close rjs = ERB.new(JAVASCRIPT_TEMPLATE) jsFile.syswrite(rjs.result(binding)) jsFile.close end |
#to_s ⇒ Object
RepresentaciC3n visual de un Test en forma de String.
84 85 86 87 88 89 90 |
# File 'lib/ull-etsii-alu4321-quiz.rb', line 84 def to_s out = name + "\n" questions.each do |q| out << "#{q}\n" end out end |
#wrong ⇒ Object
Pregunta incorrecta
Avoid collisions
38 39 40 41 |
# File 'lib/ull-etsii-alu4321-quiz.rb', line 38 def wrong @counter += 1 [@counter, WRONG] end |