examen 1.2.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (83) hide show
  1. checksums.yaml +7 -0
  2. data/.coveralls.yml +1 -0
  3. data/.gitignore +14 -0
  4. data/.rspec +2 -0
  5. data/.travis.yml +6 -0
  6. data/Gemfile +8 -0
  7. data/Gemfile.lock +91 -0
  8. data/Guardfile +40 -0
  9. data/LICENSE.txt +22 -0
  10. data/README.md +65 -0
  11. data/README.rdoc +65 -0
  12. data/Rakefile +25 -0
  13. data/doc/prct10.pdf +0 -0
  14. data/doc/prct5.pdf +0 -0
  15. data/doc/prct6.pdf +0 -0
  16. data/doc/prct7.pdf +0 -0
  17. data/doc/prct8.pdf +0 -0
  18. data/doc/prct9.pdf +0 -0
  19. data/doc/pruebas/index.html +430 -0
  20. data/examen.gemspec +29 -0
  21. data/html/Exam.html +296 -0
  22. data/html/Examen.html +119 -0
  23. data/html/ExamenIu.html +278 -0
  24. data/html/Lista.html +536 -0
  25. data/html/Object.html +119 -0
  26. data/html/Pregunta.html +361 -0
  27. data/html/PreguntaVerdaderoFalso.html +169 -0
  28. data/html/Quiz.html +363 -0
  29. data/html/README_rdoc.html +154 -0
  30. data/html/created.rid +11 -0
  31. data/html/fonts.css +167 -0
  32. data/html/fonts/Lato-Light.ttf +0 -0
  33. data/html/fonts/Lato-LightItalic.ttf +0 -0
  34. data/html/fonts/Lato-Regular.ttf +0 -0
  35. data/html/fonts/Lato-RegularItalic.ttf +0 -0
  36. data/html/fonts/SourceCodePro-Bold.ttf +0 -0
  37. data/html/fonts/SourceCodePro-Regular.ttf +0 -0
  38. data/html/images/add.png +0 -0
  39. data/html/images/arrow_up.png +0 -0
  40. data/html/images/brick.png +0 -0
  41. data/html/images/brick_link.png +0 -0
  42. data/html/images/bug.png +0 -0
  43. data/html/images/bullet_black.png +0 -0
  44. data/html/images/bullet_toggle_minus.png +0 -0
  45. data/html/images/bullet_toggle_plus.png +0 -0
  46. data/html/images/date.png +0 -0
  47. data/html/images/delete.png +0 -0
  48. data/html/images/find.png +0 -0
  49. data/html/images/loadingAnimation.gif +0 -0
  50. data/html/images/macFFBgHack.png +0 -0
  51. data/html/images/package.png +0 -0
  52. data/html/images/page_green.png +0 -0
  53. data/html/images/page_white_text.png +0 -0
  54. data/html/images/page_white_width.png +0 -0
  55. data/html/images/plugin.png +0 -0
  56. data/html/images/ruby.png +0 -0
  57. data/html/images/tag_blue.png +0 -0
  58. data/html/images/tag_green.png +0 -0
  59. data/html/images/transparent.png +0 -0
  60. data/html/images/wrench.png +0 -0
  61. data/html/images/wrench_orange.png +0 -0
  62. data/html/images/zoom.png +0 -0
  63. data/html/index.html +178 -0
  64. data/html/js/darkfish.js +140 -0
  65. data/html/js/jquery.js +4 -0
  66. data/html/js/navigation.js +142 -0
  67. data/html/js/search.js +109 -0
  68. data/html/js/search_index.js +1 -0
  69. data/html/js/searcher.js +228 -0
  70. data/html/rdoc.css +580 -0
  71. data/html/table_of_contents.html +204 -0
  72. data/lib/examen.rb +3 -0
  73. data/lib/examen/base.rb +3 -0
  74. data/lib/examen/exam.rb +24 -0
  75. data/lib/examen/examen_iu.rb +38 -0
  76. data/lib/examen/lista.rb +108 -0
  77. data/lib/examen/pregunta.rb +38 -0
  78. data/lib/examen/pregunta_verdadero_falso.rb +16 -0
  79. data/lib/examen/quiz.rb +35 -0
  80. data/lib/examen/version.rb +4 -0
  81. data/spec/examen_spec.rb +334 -0
  82. data/spec/spec_helper.rb +99 -0
  83. metadata +229 -0
@@ -0,0 +1,204 @@
1
+ <!DOCTYPE html>
2
+
3
+ <html>
4
+ <head>
5
+ <meta charset="UTF-8">
6
+
7
+ <title>Table of Contents - RDoc Documentation</title>
8
+
9
+ <link href="./fonts.css" rel="stylesheet">
10
+ <link href="./rdoc.css" rel="stylesheet">
11
+
12
+ <script type="text/javascript">
13
+ var rdoc_rel_prefix = "./";
14
+ </script>
15
+
16
+ <script src="./js/jquery.js"></script>
17
+ <script src="./js/navigation.js"></script>
18
+ <script src="./js/search_index.js"></script>
19
+ <script src="./js/search.js"></script>
20
+ <script src="./js/searcher.js"></script>
21
+ <script src="./js/darkfish.js"></script>
22
+
23
+
24
+ <body id="top" class="table-of-contents">
25
+ <main role="main">
26
+ <h1 class="class">Table of Contents - RDoc Documentation</h1>
27
+
28
+ <h2 id="pages">Pages</h2>
29
+ <ul>
30
+ <li class="file">
31
+ <a href="README_rdoc.html">README</a>
32
+
33
+ <ul>
34
+ <li><a href="README_rdoc.html#label-"></a>
35
+ </ul>
36
+ </li>
37
+
38
+ </ul>
39
+
40
+ <h2 id="classes">Classes and Modules</h2>
41
+ <ul>
42
+ <li class="class">
43
+ <a href="Exam.html">Exam</a>
44
+ </li>
45
+ <li class="class">
46
+ <a href="Examen.html">Examen</a>
47
+ </li>
48
+ <li class="class">
49
+ <a href="ExamenIu.html">ExamenIu</a>
50
+ </li>
51
+ <li class="class">
52
+ <a href="Lista.html">Lista</a>
53
+ </li>
54
+ <li class="class">
55
+ <a href="Object.html">Object</a>
56
+ </li>
57
+ <li class="class">
58
+ <a href="Pregunta.html">Pregunta</a>
59
+ </li>
60
+ <li class="class">
61
+ <a href="PreguntaVerdaderoFalso.html">PreguntaVerdaderoFalso</a>
62
+ </li>
63
+ <li class="class">
64
+ <a href="Quiz.html">Quiz</a>
65
+ </li>
66
+ </ul>
67
+
68
+ <h2 id="methods">Methods</h2>
69
+ <ul>
70
+
71
+ <li class="method">
72
+ <a href="Exam.html#method-c-new">::new</a>
73
+ &mdash;
74
+ <span class="container">Exam</span>
75
+
76
+ <li class="method">
77
+ <a href="Quiz.html#method-c-new">::new</a>
78
+ &mdash;
79
+ <span class="container">Quiz</span>
80
+
81
+ <li class="method">
82
+ <a href="Pregunta.html#method-c-new">::new</a>
83
+ &mdash;
84
+ <span class="container">Pregunta</span>
85
+
86
+ <li class="method">
87
+ <a href="Lista.html#method-c-new">::new</a>
88
+ &mdash;
89
+ <span class="container">Lista</span>
90
+
91
+ <li class="method">
92
+ <a href="ExamenIu.html#method-c-new">::new</a>
93
+ &mdash;
94
+ <span class="container">ExamenIu</span>
95
+
96
+ <li class="method">
97
+ <a href="PreguntaVerdaderoFalso.html#method-c-new">::new</a>
98
+ &mdash;
99
+ <span class="container">PreguntaVerdaderoFalso</span>
100
+
101
+ <li class="method">
102
+ <a href="Exam.html#method-i-3C-3C">#&lt;&lt;</a>
103
+ &mdash;
104
+ <span class="container">Exam</span>
105
+
106
+ <li class="method">
107
+ <a href="Lista.html#method-i-3C-3C">#&lt;&lt;</a>
108
+ &mdash;
109
+ <span class="container">Lista</span>
110
+
111
+ <li class="method">
112
+ <a href="Pregunta.html#method-i-3C-3D-3E">#&lt;=&gt;</a>
113
+ &mdash;
114
+ <span class="container">Pregunta</span>
115
+
116
+ <li class="method">
117
+ <a href="Pregunta.html#method-i-3D-3D">#==</a>
118
+ &mdash;
119
+ <span class="container">Pregunta</span>
120
+
121
+ <li class="method">
122
+ <a href="Lista.html#method-i-each">#each</a>
123
+ &mdash;
124
+ <span class="container">Lista</span>
125
+
126
+ <li class="method">
127
+ <a href="Lista.html#method-i-inv">#inv</a>
128
+ &mdash;
129
+ <span class="container">Lista</span>
130
+
131
+ <li class="method">
132
+ <a href="Lista.html#method-i-invertir">#invertir</a>
133
+ &mdash;
134
+ <span class="container">Lista</span>
135
+
136
+ <li class="method">
137
+ <a href="Lista.html#method-i-pop">#pop</a>
138
+ &mdash;
139
+ <span class="container">Lista</span>
140
+
141
+ <li class="method">
142
+ <a href="Lista.html#method-i-push_back">#push_back</a>
143
+ &mdash;
144
+ <span class="container">Lista</span>
145
+
146
+ <li class="method">
147
+ <a href="Exam.html#method-i-push_back">#push_back</a>
148
+ &mdash;
149
+ <span class="container">Exam</span>
150
+
151
+ <li class="method">
152
+ <a href="Quiz.html#method-i-question">#question</a>
153
+ &mdash;
154
+ <span class="container">Quiz</span>
155
+
156
+ <li class="method">
157
+ <a href="Quiz.html#method-i-right">#right</a>
158
+ &mdash;
159
+ <span class="container">Quiz</span>
160
+
161
+ <li class="method">
162
+ <a href="ExamenIu.html#method-i-test">#test</a>
163
+ &mdash;
164
+ <span class="container">ExamenIu</span>
165
+
166
+ <li class="method">
167
+ <a href="ExamenIu.html#method-i-testinteractivo">#testinteractivo</a>
168
+ &mdash;
169
+ <span class="container">ExamenIu</span>
170
+
171
+ <li class="method">
172
+ <a href="Lista.html#method-i-to_s">#to_s</a>
173
+ &mdash;
174
+ <span class="container">Lista</span>
175
+
176
+ <li class="method">
177
+ <a href="Exam.html#method-i-to_s">#to_s</a>
178
+ &mdash;
179
+ <span class="container">Exam</span>
180
+
181
+ <li class="method">
182
+ <a href="Quiz.html#method-i-to_s">#to_s</a>
183
+ &mdash;
184
+ <span class="container">Quiz</span>
185
+
186
+ <li class="method">
187
+ <a href="Pregunta.html#method-i-to_s">#to_s</a>
188
+ &mdash;
189
+ <span class="container">Pregunta</span>
190
+
191
+ <li class="method">
192
+ <a href="Quiz.html#method-i-wrong">#wrong</a>
193
+ &mdash;
194
+ <span class="container">Quiz</span>
195
+ </ul>
196
+ </main>
197
+
198
+
199
+ <footer id="validator-badges" role="contentinfo">
200
+ <p><a href="http://validator.w3.org/check/referer">Validate</a>
201
+ <p>Generated by <a href="http://rdoc.rubyforge.org">RDoc</a> 4.1.0.
202
+ <p>Based on <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
203
+ </footer>
204
+
data/lib/examen.rb ADDED
@@ -0,0 +1,3 @@
1
+ # encoding: utf-8
2
+ require "examen/version"
3
+ require "examen/base"
@@ -0,0 +1,3 @@
1
+ # encoding: utf-8
2
+ require "examen_iu"
3
+ require "quiz"
@@ -0,0 +1,24 @@
1
+ # coding: utf-8
2
+ require "lista"
3
+ # Clase gestora de examenes con preguntas
4
+ class Exam
5
+ attr_accessor :list
6
+ # Crea una instancia de la clase Exam , a partir de una pregunta.
7
+ def initialize(p)
8
+ @list = Lista.new(p)
9
+ end
10
+ # Definición del Metotodo to_s, para la clase Exam.
11
+ def to_s
12
+ "#{@list}"
13
+ end
14
+ # Sobrecarga del operador << para insertar preguntas al final del Examen.
15
+ def <<(p)
16
+ @list << p
17
+ end
18
+ # Inserta una o varias preguntas sucesivamente.
19
+ def push_back(*preguntas)
20
+ preguntas.each { |p| @list << p}
21
+ preguntas
22
+ end
23
+
24
+ end
@@ -0,0 +1,38 @@
1
+ # encoding: utf-8
2
+ require 'exam'
3
+ # Clase gestora de la Interfaz de usuario de la gema.
4
+ class ExamenIu
5
+ attr_accessor :exam
6
+ # Crea una nueva instancia a partir de una pregunta.
7
+ def initialize(pregunta)
8
+ @exam = Exam.new(pregunta)
9
+ end
10
+ # Dado un conjunto de respuestas las evalua e indica cuales son correctas y cuales no.
11
+ def test(resp)
12
+ result = Array.new(@exam.list.count, 0)
13
+ i = 0
14
+ @exam.list.each do |p|
15
+ result[i] = (p.right.to_s.eql?resp[i].to_s)?1:0
16
+ i += 1
17
+ end
18
+ result
19
+ end
20
+ # Muestra la Interfaz de Usuario solicitando por pantalla las respuestas e indicando si son correctas o no.
21
+ def testinteractivo
22
+ result = Array.new(@exam.list.count, 0)
23
+ i = 0
24
+ acertadas = 0
25
+ @exam.list.each do |p|
26
+ pActual = p.to_s
27
+ puts (i + 1).to_s + ") " + pActual
28
+ STDOUT.flush
29
+ opc = pActual.match(%r{#{gets.chomp}\)\s+(.*)})[1]
30
+ result[i] = (p.right.to_s.eql?opc)?1:0
31
+ acertadas += 1 if (result[i] == 1)
32
+ puts "> Respuesta #{((result[i] == 1)?"correcta":"incorrecta") + " (" + acertadas.to_s + "/" + result.size.to_s + ")"}\n\n"
33
+ i += 1
34
+ end
35
+ result
36
+ end
37
+
38
+ end
@@ -0,0 +1,108 @@
1
+ # coding: utf-8
2
+ require "pregunta_verdadero_falso"
3
+
4
+ Nodo = Struct.new :value, :next, :prev
5
+
6
+ # Clase gestora de Lista doblemente enlazada.
7
+ class Lista
8
+ attr_accessor :cabeza, :cola, :total
9
+
10
+ include Enumerable
11
+
12
+ # Instancia de la clase Lista a partir de una Pregunta.
13
+ def initialize(p)
14
+ raise TypeError, "Esperada pregunta como parámetro de entrada" unless p.is_a? (Pregunta)
15
+ @cabeza = Nodo.new(p, nil, nil)
16
+ @cola = @cabeza
17
+ @total = 1
18
+ end
19
+
20
+ # Extrae la cabeza de la lista actualmente. Si la lista está vacía genera una excepción (IndexError).
21
+ def pop
22
+ raise IndexError, "Lista vacía, imposible hacer pop" unless @total > 0
23
+ head = nil
24
+ if @cola == @cabeza
25
+ head = @cabeza
26
+ @cola = @cabeza = nil
27
+ head.next = head.prev = nil
28
+ else
29
+ head = @cabeza
30
+ @cabeza = @cabeza.next
31
+ @cabeza.prev = nil
32
+ head.next = nil
33
+ end
34
+ @total -= 1
35
+ head.value
36
+ end
37
+
38
+ # Sobrecarga del operador << para insertar una pregunta al final de la lista.
39
+ def <<(p)
40
+ raise TypeError, "Esperada pregunta para inserción" unless p.is_a? (Pregunta)
41
+ if (@total == 0)
42
+ @cabeza = Nodo.new(p, nil, nil)
43
+ @cola = @cabeza
44
+ else
45
+ @cola.next = Nodo.new(p, nil, @cola)
46
+ @cola = @cola.next
47
+ @cola.value
48
+ end
49
+ @total += 1
50
+ end
51
+
52
+ # Inserta una o varias preguntas sucesivamente.
53
+ def push_back(*preguntas)
54
+ preguntas.each do |p|
55
+ if (@total == 0)
56
+ @cabeza = Nodo.new(p, nil, nil)
57
+ @cola = @cabeza
58
+ else
59
+ @cola.next = Nodo.new(p, nil, @cola)
60
+ @cola = @cola.next
61
+ end
62
+ @total += 1
63
+ end
64
+ preguntas
65
+ end
66
+
67
+ # Definición del Metotodo to_s, para la clase Lista.
68
+ def to_s
69
+ aux = @cabeza
70
+ s = ''
71
+ i = 1
72
+ while (aux != nil) do
73
+ s += "#{i}.-) #{aux.value}\n"
74
+ aux = aux.next
75
+ i += 1
76
+ end
77
+ s
78
+ end
79
+
80
+ # Definición del método :each para el manejo de métodos del módulo Enumerable.
81
+ def each
82
+ aux = @cabeza
83
+ while (aux != nil) do
84
+ yield aux.value
85
+ aux = aux.next
86
+ end
87
+ end
88
+
89
+ # Devuelve la lista actual invertida.
90
+ def inv(&block)
91
+ block = ->(x) {true} if !block_given?
92
+ list = invertir(@cabeza, &block)
93
+ list.pop
94
+ return nil if list.total == 0
95
+ list
96
+ end
97
+
98
+ # Método auxiliar utilizado para invertir la lista mediante recursividad.
99
+ def invertir(actual, &block)
100
+ return Lista.new(Pregunta.new(:text => "dummy", :right => "dummy", :distractors => ["dummy"])) if (actual == nil)
101
+ list = invertir(actual.next, &block)
102
+ list << actual.value if block[actual.value]
103
+ list
104
+ end
105
+
106
+ private :invertir
107
+
108
+ end
@@ -0,0 +1,38 @@
1
+ # encoding: utf-8
2
+ # Clase gestora de una Pregunta de multiples opciones.
3
+ class Pregunta
4
+ attr_accessor :text, :right, :distractors, :difficulty
5
+
6
+ include Comparable
7
+ # Instancia una nueva Pregunta, a partir de un texto, una respuesta correcta, un conjunto de respuestas falsas y opcionalmente la dificultad.
8
+ def initialize(args)
9
+ raise ArgumentError, "Esperada pregunta (:text)" unless args[:text]
10
+ raise ArgumentError, "Esperada respuesta correcta (:right)" unless args[:right]
11
+ raise ArgumentError, "Esperadas respuestas incorrectas (:distractors)" unless args[:distractors]
12
+ @text = args[:text]
13
+ @right = args[:right]
14
+ @distractors = args[:distractors]
15
+ @difficulty = (args.key?:difficulty)?args[:difficulty]:1
16
+ end
17
+ # Definición del Metodo to_s para mostrar una pregunta.
18
+ def to_s
19
+ opciones = @distractors + [@right]
20
+ opciones = opciones.shuffle
21
+ s = "#{@text}\n"
22
+ letras = ('a'..'z').to_a[0..(opciones.size - 1)]
23
+ i = 0
24
+ opciones.each do |o|
25
+ s += "#{letras[i]}) #{o}\n"
26
+ i += 1
27
+ end
28
+ s
29
+ end
30
+ # Sobrecarga el operador <=> para comparar por dificultad.
31
+ def <=>(p)
32
+ @difficulty <=> p.difficulty
33
+ end
34
+ # Sobrecarga el operador == para comparar por el texto.
35
+ def ==(p)
36
+ @text.eql?p.text
37
+ end
38
+ end
@@ -0,0 +1,16 @@
1
+ # encoding: utf-8
2
+ require 'pregunta'
3
+
4
+ # Clase gestora de preguntas de verdadero y falso.
5
+ class PreguntaVerdaderoFalso < Pregunta
6
+
7
+ # Instancia de la clase PreguntaVerdaderoFalso donde le pasas un texto y un booleano asociado a la respuesta correcta.
8
+ def initialize(args)
9
+ raise ArgumentError, "Esperada pregunta (:text)" unless args.key?(:text)
10
+ raise ArgumentError, "Esperada respuesta correcta (:right)" unless args.key?(:right)
11
+ args[:right] = ((args[:right])?"Cierto":"Falso")
12
+ args[:distractors] = [((args[:right])?"Falso":"Cierto")]
13
+ super args
14
+ end
15
+
16
+ end
@@ -0,0 +1,35 @@
1
+ # encoding: utf-8
2
+ require "exam"
3
+ #Clase gestora de un DSL
4
+ class Quiz
5
+ attr_accessor :exam, :count, :title
6
+ #Crea una Instancia de la clase Quiz, a partir de un título y un bloque
7
+ def initialize(title, &block)
8
+ @title = title
9
+ @exam = Exam.new(Pregunta.new(:text => "dummy", :right => "dummy", :distractors => ["dummy"]))
10
+ @exam.list.pop
11
+ @count = 0
12
+ instance_eval &block
13
+ end
14
+ #Devuelve el Simbolo :right
15
+ def right
16
+ :right
17
+ end
18
+ #Devuelve un Array con el Simbolo :wrong y un indice
19
+ def wrong
20
+ @count += 1
21
+ [:wrong, @count]
22
+ end
23
+ #Actualiza el examen actual, con una nueva pregunta
24
+ def question(*args)
25
+ distract = Array.new
26
+ args[1].keys.each { |x| distract << args[1][x] if x.class.equal? Array }
27
+ exam << Pregunta.new(:text => args[0], :right => args[1][:right], :distractors => distract)
28
+ exam
29
+ end
30
+ #Definicion del Metodo to_s, para la Clase Quiz
31
+ def to_s
32
+ "\s\s#{@title}\n#{'#' * (@title.size + 4)}\n\n#{@exam}"
33
+ end
34
+
35
+ end