examen 1.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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