examLPP 0.1.1

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 +5 -0
  4. data/.rspec +2 -0
  5. data/.travis.yml +4 -0
  6. data/Gemfile +5 -0
  7. data/Guardfile +70 -0
  8. data/LICENSE.txt +22 -0
  9. data/README.md +19 -0
  10. data/Rakefile +6 -0
  11. data/coverage/.last_run.json +5 -0
  12. data/coverage/.resultset.json +714 -0
  13. data/doc/Exam.html +112 -0
  14. data/doc/Examen.html +319 -0
  15. data/doc/Gemfile.html +101 -0
  16. data/doc/Gemfile_lock.html +186 -0
  17. data/doc/Guardfile.html +169 -0
  18. data/doc/LICENSE_txt.html +116 -0
  19. data/doc/Lista.html +472 -0
  20. data/doc/Nodo.html +264 -0
  21. data/doc/Object.html +119 -0
  22. data/doc/Pregunta.html +346 -0
  23. data/doc/PreguntaS.html +338 -0
  24. data/doc/PreguntaVF.html +210 -0
  25. data/doc/README_md.html +120 -0
  26. data/doc/Rakefile.html +99 -0
  27. data/doc/created.rid +18 -0
  28. data/doc/exam_gemspec.html +127 -0
  29. data/doc/fonts.css +167 -0
  30. data/doc/fonts/Lato-Light.ttf +0 -0
  31. data/doc/fonts/Lato-LightItalic.ttf +0 -0
  32. data/doc/fonts/Lato-Regular.ttf +0 -0
  33. data/doc/fonts/Lato-RegularItalic.ttf +0 -0
  34. data/doc/fonts/SourceCodePro-Bold.ttf +0 -0
  35. data/doc/fonts/SourceCodePro-Regular.ttf +0 -0
  36. data/doc/images/add.png +0 -0
  37. data/doc/images/arrow_up.png +0 -0
  38. data/doc/images/brick.png +0 -0
  39. data/doc/images/brick_link.png +0 -0
  40. data/doc/images/bug.png +0 -0
  41. data/doc/images/bullet_black.png +0 -0
  42. data/doc/images/bullet_toggle_minus.png +0 -0
  43. data/doc/images/bullet_toggle_plus.png +0 -0
  44. data/doc/images/date.png +0 -0
  45. data/doc/images/delete.png +0 -0
  46. data/doc/images/find.png +0 -0
  47. data/doc/images/loadingAnimation.gif +0 -0
  48. data/doc/images/macFFBgHack.png +0 -0
  49. data/doc/images/package.png +0 -0
  50. data/doc/images/page_green.png +0 -0
  51. data/doc/images/page_white_text.png +0 -0
  52. data/doc/images/page_white_width.png +0 -0
  53. data/doc/images/plugin.png +0 -0
  54. data/doc/images/ruby.png +0 -0
  55. data/doc/images/tag_blue.png +0 -0
  56. data/doc/images/tag_green.png +0 -0
  57. data/doc/images/transparent.png +0 -0
  58. data/doc/images/wrench.png +0 -0
  59. data/doc/images/wrench_orange.png +0 -0
  60. data/doc/images/zoom.png +0 -0
  61. data/doc/index.html +118 -0
  62. data/doc/js/darkfish.js +140 -0
  63. data/doc/js/jquery.js +18 -0
  64. data/doc/js/navigation.js +142 -0
  65. data/doc/js/search.js +109 -0
  66. data/doc/js/search_index.js +1 -0
  67. data/doc/js/searcher.js +228 -0
  68. data/doc/rdoc.css +580 -0
  69. data/doc/table_of_contents.html +222 -0
  70. data/exam.gemspec +32 -0
  71. data/lib/exam.rb +12 -0
  72. data/lib/exam/examen.rb +69 -0
  73. data/lib/exam/lista.rb +109 -0
  74. data/lib/exam/nodo.rb +14 -0
  75. data/lib/exam/pregunta.rb +38 -0
  76. data/lib/exam/preguntaMadre.rb +47 -0
  77. data/lib/exam/preguntaVF.rb +19 -0
  78. data/lib/exam/quiz.rb +44 -0
  79. data/lib/exam/version.rb +3 -0
  80. data/pkg/exam-0.0.1.gem +0 -0
  81. data/spec/exam_spec.rb +353 -0
  82. data/spec/spec_helper.rb +22 -0
  83. metadata +226 -0
data/lib/exam/nodo.rb ADDED
@@ -0,0 +1,14 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ #(!) Actualmente en desuso!
4
+ class Nodo
5
+ attr_reader :id, :valor
6
+ attr_accessor :next
7
+
8
+ #Constructor
9
+ def initialize(valor)
10
+ @valor = valor
11
+ @id = object_id #identificador univoco
12
+ @next = nil
13
+ end
14
+ end
@@ -0,0 +1,38 @@
1
+ # -*- coding: utf-8 -*-
2
+ #Pregunta de respuesta múltiple
3
+ class PreguntaS < Pregunta
4
+
5
+ attr_reader :re
6
+
7
+ #Constructor
8
+ def initialize (pregunta, dificultad = 5)
9
+ super
10
+ @re = Array.new(0)
11
+ #inicializamos un array con 0 elementos para las respuestas
12
+ end
13
+
14
+ #Método que devuelve la pregunta como String
15
+ def preg
16
+ "Pregunta: #{@pr}"
17
+ end
18
+
19
+ #Agrega una respuesta adicional a la pregunta
20
+ def addr (respuesta)
21
+ @re.push(respuesta)
22
+ end
23
+
24
+ #Devuelve las respuestas como String
25
+ def resp
26
+ respuestas = ""
27
+ for i in (0..(@re.length - 1))
28
+ respuestas += "#{i+1}) #{@re[i]}\n"
29
+ end
30
+ respuestas
31
+ end
32
+
33
+ #Muestra la pregunta y sus posibles respuestas como una String
34
+ def to_s
35
+ preg + "\n\n" + resp
36
+ end
37
+
38
+ end
@@ -0,0 +1,47 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ #Clase base de las preguntas. No contiene respuestas.
4
+ class Pregunta
5
+ attr_reader :pr, :df
6
+ attr_accessor :correcta
7
+
8
+ include Comparable
9
+
10
+ #Método constructor
11
+ def initialize(pregunta, dificultad)
12
+ @pr = pregunta
13
+ @df = dificultad
14
+ @correcta = nil #debe modificarse; int que refiere a pos en Array de pr.
15
+ end
16
+
17
+ #Método de comparación (se fija en la dificultad)
18
+ def <=> (other)
19
+ @df <=> other.df
20
+ end
21
+
22
+ #Evitamos que se consideren iguales dos preguntas cualquiera
23
+ #sólo porque tengan la misma dificultad.
24
+ #Esto es una sobrecarga del método de comparación.
25
+ def == (other)
26
+ @pr == other.pr && @df == other.df
27
+ end
28
+
29
+ #Método que contrasta la respuesta entregada (por parámetro)
30
+ #con el atributo que señala la respuesta correcta.
31
+ def resp_correcta?(resp)
32
+ if resp.to_i != 0
33
+ #sera numero, lo pasamos a int.
34
+ resp = resp.to_i
35
+ else
36
+ #sera String, admitimos mayus y minus.
37
+ resp.upcase!
38
+ end
39
+
40
+ if resp == @correcta
41
+ true
42
+ else
43
+ false
44
+ end
45
+ end
46
+
47
+ end
@@ -0,0 +1,19 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ #Pregunta de verdadero o falso
4
+ class PreguntaVF < Pregunta
5
+ #Método de inicialización
6
+ def initialize(pregunta, dificultad = 5, correcta = "v")
7
+ super(pregunta, dificultad)
8
+ @correcta = correcta
9
+ end
10
+
11
+ #Método para mostrar la pregunta con sus respuestas
12
+ #en formato String
13
+ def to_s
14
+ string = ''
15
+ string += @pr
16
+ string += "\nVerdadero"
17
+ string += "\nFalso"
18
+ end
19
+ end
data/lib/exam/quiz.rb ADDED
@@ -0,0 +1,44 @@
1
+ class Quiz
2
+
3
+ def initialize (&block)
4
+ @lista = Lista.new()
5
+
6
+ if block_given?
7
+ if block.arity == 1
8
+ yield self
9
+ else
10
+ instance_eval &block
11
+ end
12
+ end
13
+
14
+ @examen = Examen.new(@lista)
15
+ end
16
+
17
+ def to_s
18
+ @examen.to_s
19
+ end
20
+
21
+ def questionS (pregunta, respuesta = {})
22
+ preg = PreguntaS.new(pregunta)
23
+ count = 1
24
+ respuesta.each do |key, val|
25
+ preg.addr(val)
26
+ if key
27
+ count += 1
28
+ else
29
+ preg.correcta = count
30
+ end
31
+ end
32
+
33
+ @lista.addn(preg)
34
+ end
35
+
36
+ def questionVF (pregunta, respuesta)
37
+ preg = PreguntaVF.new(pregunta)
38
+
39
+ preg.correcta = respuesta
40
+
41
+ @lista.addn(preg)
42
+ end
43
+
44
+ end
@@ -0,0 +1,3 @@
1
+ module Exam
2
+ VERSION = "0.1.1"
3
+ end
Binary file
data/spec/exam_spec.rb ADDED
@@ -0,0 +1,353 @@
1
+ # -*- coding: utf-8 -*-
2
+ require "exam"
3
+ require 'spec_helper'
4
+
5
+ describe Exam do
6
+ before :all do
7
+ @p1 = PreguntaS.new("¿Pregunta?", 5)
8
+ @p1.addr("Si.")
9
+ @p1.addr("No.")
10
+ end
11
+
12
+ describe 'Seleccion simple' do
13
+ it 'Debe existir una pregunta.' do
14
+ expect(@p1.pr).to eq("¿Pregunta?")
15
+ end
16
+
17
+ it 'Debe existir un metodo para obtener la pregunta.' do
18
+ expect(@p1.preg).to eq("Pregunta: ¿Pregunta?")
19
+ end
20
+
21
+ it 'Deben existir opciones de respuesta(introducir respuesta).' do
22
+
23
+ expect(@p1.re).not_to be_empty
24
+ end
25
+
26
+ it 'Se debe invocar a un metodo para obtener las opciones de respuesta.' do
27
+
28
+ expect(@p1.resp).to eq("1) Si.\n2) No.\n")
29
+ end
30
+
31
+ it 'Se debe mostrar por consola la pregunta y las opciones de respuesta.' do
32
+ expect(@p1.to_s).to eq("Pregunta: ¿Pregunta?\n\n1) Si.\n2) No.\n")
33
+ end
34
+ end
35
+
36
+
37
+ it 'Prueba relacion de preguntas' do
38
+
39
+ @p1 = PreguntaS.new("Cual es la salida del siguiente codigo Ruby?", 5)
40
+ @p1.addr("<#Xyz:0xa000208>")
41
+ @p1.addr("nil")
42
+ @p1.addr("0")
43
+ @p1.addr("Ninguna de las anteriores")
44
+
45
+ @p2 = PreguntaS.new("La siguiente definicion de un hash en ruby es valida:\nhash_raro = {\n[1,2,3] => Object.new(),\nHash.new => :toto", 5)
46
+ @p2.addr("Cierto")
47
+ @p2.addr("Falso")
48
+
49
+ @p3 = PreguntaS.new("Cual es la salida del siguiente codigo Ruby?", 5)
50
+ @p3.addr("1")
51
+ @p3.addr("bob")
52
+ @p3.addr("HEY")
53
+ @p3.addr("Ninguna de las anteriores")
54
+
55
+ @p4 = PreguntaS.new("Cual es el tipo de objeto en el siguiente codigo Ruby?\nclass Objeto\nend", 5)
56
+ @p4.addr("Una instancia de la clase Class")
57
+ @p4.addr("Una constante")
58
+ @p4.addr("Un objeto")
59
+ @p4.addr("Ninguna de las anteriores")
60
+
61
+ @p5 = PreguntaS.new("Es apropiado que una clase Tablero herede de una clase Juego", 5)
62
+ @p5.addr("Verdadero")
63
+ @p5.addr("Falso")
64
+
65
+ @n1 = Nodo.new(@p1)
66
+ @n2 = Nodo.new(@p2)
67
+ @n3 = Nodo.new(@p3)
68
+ @n4 = Nodo.new(@p4)
69
+ @n5 = Nodo.new(@p5)
70
+
71
+ @lista = Lista.new()
72
+ @lista.addn(@n1)
73
+ @lista.addn(@n2)
74
+ @lista.addn(@n3)
75
+ @lista.addn(@n4)
76
+ @lista.addn(@n5)
77
+ end
78
+ end
79
+
80
+
81
+ describe Exam do
82
+ describe 'Lista' do
83
+
84
+ before :each do
85
+ @lista = Lista.new()
86
+ @n1 = Nodo.new("Nodo 1")
87
+ @n2 = Nodo.new("Nodo 2")
88
+ @n3 = Nodo.new("Nodo 3")
89
+ end
90
+
91
+ it 'Debe ser posible insertar nodos en la lista.' do
92
+ @lista.addn(@n1)
93
+ expect(@lista.head).to eq(@n1)
94
+ end
95
+
96
+ it 'Se pueden insertar varios elementos.' do
97
+ @lista.addn(@n1)
98
+ @lista.addn(@n2)
99
+ expect(@lista.head).to eq(@n2)
100
+ @lista.deln
101
+ expect(@lista.head).to eq(@n1)
102
+ end
103
+
104
+ it 'Se extrae el primer elemento de la lista.' do
105
+ @lista.addn(@n1)
106
+ @lista.addn(@n2)
107
+ @lista.deln
108
+ expect(@lista.head).to eq(@n1)
109
+ end
110
+
111
+ it 'Cada nodo apunta a su siguiente y su anterior' do
112
+ @lista.addn(@n1)
113
+ @lista.addn(@n2)
114
+ @lista.addn(@n3)
115
+ expect(@lista.head).to eq(@n3)
116
+ expect(@lista.head.next).to eq(@n2)
117
+ extra = Nodo.new("EXTRA")
118
+ @lista.addn(extra)
119
+ expect(@lista.head).to eq(extra)
120
+ expect(@lista.tail).to eq(@n1)
121
+
122
+ end
123
+
124
+ it 'Cada nodo apunta a su siguiente, desde head' do
125
+ @lista.addn(@n1)
126
+ @lista.addn(@n2)
127
+ @lista.addn(@n3)
128
+ extra = Nodo.new("EXTRA")
129
+ @lista.addn(extra)
130
+ expect(@lista.head).to eq(extra)
131
+ expect(@lista.head.next).to eq(@n3)
132
+ expect(@lista.head.next.next).to eq(@n2)
133
+ expect(@lista.head.next.next.next).to eq(@n1)
134
+ end
135
+
136
+ it 'Cada nodo apunta a su anterior, desde tail' do
137
+ @lista.addn(@n1)
138
+ @lista.addn(@n2)
139
+ @lista.addn(@n3)
140
+ extra = Nodo.new("EXTRA")
141
+ @lista.addn(extra)
142
+ expect(@lista.tail.previus.previus.previus).to eq(extra)
143
+ expect(@lista.tail.previus.previus).to eq(@n3)
144
+ expect(@lista.tail.previus).to eq(@n2)
145
+ expect(@lista.tail).to eq(@n1)
146
+ end
147
+
148
+ it 'Prueba de pregunta VF' do
149
+ @pregunta = PreguntaVF.new("Esto es una pregunta?", 5, "Verdadero")
150
+ expect(@pregunta.to_s).to eq("Esto es una pregunta?\nVerdadero\nFalso")
151
+ end
152
+ end
153
+
154
+ describe 'Exam practica 8: ' do
155
+ before :each do
156
+ @D5 = PreguntaS.new("Dificultad5", 5)
157
+ @D5_2 = PreguntaS.new("Dificultad5", 5)
158
+
159
+ @D2 = PreguntaS.new("Dificultad2", 2)
160
+ end
161
+
162
+ describe 'Comparable: ' do
163
+ it "Pregunta D5 debe ser mayor que pregunta D2" do
164
+ expect(@D5 > @D2).to eq(true)
165
+ end
166
+
167
+ it "Pregunta D2 debe ser menor que pregunta D5" do
168
+ expect(@D2 < @D5).to eq(true)
169
+ end
170
+
171
+ it "Pregunta D5 debe ser igual que pregunta D5_2" do
172
+ expect(@D5 == @D5_2).to eq(true)
173
+ end
174
+
175
+ end
176
+ describe 'Enumerable: ' do
177
+
178
+ before :all do
179
+
180
+ @p1 = PreguntaS.new("Cual es la salida del siguiente codigo Ruby?", 3)
181
+ @p1.addr("<#Xyz:0xa000208>")
182
+ @p1.addr("nil")
183
+ @p1.addr("0")
184
+ @p1.addr("Ninguna de las anteriores")
185
+
186
+ @p2 = PreguntaS.new("ZLa siguiente definicion de un hash en ruby es valida:\nhash_raro = {\n[1,2,3] => Object.new(),\nHash.new => :toto", 2)
187
+ @p2.addr("Cierto")
188
+ @p2.addr("Falso")
189
+
190
+ @p3 = PreguntaS.new("Cual es la salida del siguiente codigo Ruby?", 4)
191
+ @p3.addr("1")
192
+ @p3.addr("bob")
193
+ @p3.addr("HEY")
194
+ @p3.addr("Ninguna de las anteriores")
195
+
196
+ @p4 = PreguntaS.new("Cual es el tipo de objeto en el siguiente codigo Ruby?\nclass Objeto\nend", 9)
197
+ @p4.addr("Una instancia de la clase Class")
198
+ @p4.addr("Una constante")
199
+ @p4.addr("Un objeto")
200
+ @p4.addr("Ninguna de las anteriores")
201
+
202
+ @p5 = PreguntaVF.new("Es apropiado que una clase Tablero herede de una clase Juego", 5)
203
+
204
+ @n1 = Nodo.new(@p1)
205
+ @n2 = Nodo.new(@p2)
206
+ @n3 = Nodo.new(@p3)
207
+ @n4 = Nodo.new(@p4)
208
+ @n5 = Nodo.new(@p5)
209
+
210
+ @lista = Lista.new()
211
+ @lista.addn(@n1)
212
+ @lista.addn(@n2)
213
+ @lista.addn(@n3)
214
+ @lista.addn(@n4)
215
+ @lista.addn(@n5)
216
+ end
217
+
218
+ it "La lista es enumerable" do
219
+ string = ""
220
+ @lista.each do |l|
221
+ string << "test"
222
+ string << "\n"
223
+ end
224
+ expect(string).to eq("test\n"*5)
225
+ end
226
+
227
+ it "Cuenta los elementos de la lista" do
228
+ expect(@lista.count).to eq(5)
229
+ end
230
+
231
+ it "Drop" do
232
+ expect(@lista.drop(5)).to eq([])
233
+ end
234
+
235
+ it "Find index" do
236
+ expect(@lista.find_index {|i| i.value == @n3.value}).to eq(2)
237
+ end
238
+
239
+ it "Maximo" do
240
+ expect(@lista.max).to eq(@n4)
241
+ end
242
+
243
+ it "Minimo" do
244
+ expect(@lista.min).to eq(@n2)
245
+ end
246
+
247
+ end
248
+ end
249
+
250
+ describe 'Exam Practica9' do
251
+ before :all do
252
+ @p1 = PreguntaS.new("Cuanto es 7*3?", 3)
253
+ @p1.addr("16")
254
+ @p1.addr("21")
255
+ @p1.addr("33")
256
+ @p1.addr("15")
257
+ @p1.correcta = 2
258
+
259
+ @p2 = PreguntaVF.new("¿La siguiente definicion de un hash en ruby es valida?:\nhash_raro = {\n[1,2,3] => Object.new(),\nHash.new => :toto", 2)
260
+ @p2.correcta = 'F'
261
+
262
+ @p3 = PreguntaS.new("Cual es la salida del siguiente codigo Ruby? puts 'bob'", 4)
263
+ @p3.addr("1")
264
+ @p3.addr("bob")
265
+ @p3.addr("HEY")
266
+ @p3.addr("Ninguna de las anteriores")
267
+ @p3.correcta = 1
268
+
269
+ @p4 = PreguntaS.new("Cual es el tipo de objeto en el siguiente codigo Ruby?\nclass Objeto\nend", 9)
270
+ @p4.addr("Una instancia de la clase Class")
271
+ @p4.addr("Una constante")
272
+ @p4.addr("Un objeto")
273
+ @p4.addr("Ninguna de las anteriores")
274
+ @p4.correcta = 3
275
+
276
+ @p5 = PreguntaVF.new("Es apropiado que una clase Tablero herede de una clase Juego", 1)
277
+ @p5.correcta = 'V'
278
+
279
+ @n1 = Nodo.new(@p1)
280
+ @n2 = Nodo.new(@p2)
281
+ @n3 = Nodo.new(@p3)
282
+ @n4 = Nodo.new(@p4)
283
+ @n5 = Nodo.new(@p5)
284
+ @lista = Lista.new()
285
+ @lista.addn(@n1)
286
+ @lista.addn(@n2)
287
+ @lista.addn(@n3)
288
+ @lista.addn(@n4)
289
+ @lista.addn(@n5)
290
+ end
291
+
292
+ it "¿Se puede ordenar una lista?" do
293
+ @lista.ordenar
294
+ expect(@lista.head).to eq(@n5)
295
+ expect(@lista.head.next).to eq(@n2)
296
+ expect(@lista.head.next.next).to eq(@n1)
297
+ expect(@lista.head.next.next.next).to eq(@n3)
298
+ expect(@lista.tail).to eq(@n4)
299
+ end
300
+
301
+ it "Clase examen, muestra las preguntas en orden" do
302
+ exam = Examen.new(@lista)
303
+ expect(exam.to_s).to eq(@p5.to_s+"\n"+@p2.to_s+"\n"+@p1.to_s+"\n"+@p3.to_s+"\n"+@p4.to_s+"\n")
304
+
305
+ end
306
+
307
+ it "Existe y se puede modificar la respuesta correcta" do
308
+ expect(@p1.resp_correcta?("2")).to eq(true)
309
+ expect(@p1.resp_correcta?("3")).to eq(false)
310
+ @p1.correcta = 3
311
+ expect(@p1.resp_correcta?("2")).to eq(false)
312
+ expect(@p1.resp_correcta?("3")).to eq(true)
313
+ @p1.correcta = 2 #le devolvemos su valor para que no de error la prueba hacer_examen
314
+ end
315
+
316
+ it "Probando hacer_examen" do
317
+ examen = Examen.new(@lista)
318
+ resps = ['v','f','2','1','3']
319
+ expect(examen.hacer_examen(resps)).to eq(5)
320
+ end
321
+
322
+ it "Practica 10: invertir orden" do
323
+ examen = Examen.new(@lista)
324
+ expect(examen.inverso).to eq(@p4.to_s+"\n"+@p3.to_s+"\n"+@p1.to_s+"\n"+@p2.to_s+"\n"+@p5.to_s+"\n")
325
+ end
326
+ end
327
+
328
+ it "Practica 11: DSL" do
329
+ listilla = Lista.new()
330
+ preg1 = PreguntaS.new("5+4")
331
+ preg2 = PreguntaVF.new("1+1=2?")
332
+ preg1.addr("7")
333
+ preg1.addr("5")
334
+ preg1.addr("9")
335
+ preg1.correcta = 3
336
+ preg2.correcta = "V"
337
+ listilla.addn(preg1)
338
+ listilla.addn(preg2)
339
+ examen = Examen.new(listilla)
340
+
341
+ quiz = Quiz.new do
342
+ questionS "5+4",
343
+ :wrong => "7",
344
+ :wrong => "5",
345
+ :right => "9"
346
+ questionVF "1+1=2?",
347
+ "V"
348
+ end
349
+
350
+ expect(examen.to_s).to eq(quiz.to_s)
351
+ end
352
+
353
+ end