estefania_exam 0.0.2

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 (77) hide show
  1. checksums.yaml +7 -0
  2. data/.coveralls.yml +1 -0
  3. data/.gitignore +15 -0
  4. data/.rspec +2 -0
  5. data/.travis.yml +4 -0
  6. data/Gemfile +4 -0
  7. data/Guardfile +39 -0
  8. data/LICENSE.txt +22 -0
  9. data/README.md +12 -0
  10. data/Rakefile +14 -0
  11. data/exam.gemspec +28 -0
  12. data/lib/doc/Exam.html +114 -0
  13. data/lib/doc/Exam/Examen.html +350 -0
  14. data/lib/doc/Interfaz.html +285 -0
  15. data/lib/doc/List.html +453 -0
  16. data/lib/doc/Node.html +170 -0
  17. data/lib/doc/Object.html +121 -0
  18. data/lib/doc/Question.html +309 -0
  19. data/lib/doc/SimpleSelection.html +275 -0
  20. data/lib/doc/VerdaderoFalso.html +228 -0
  21. data/lib/doc/created.rid +9 -0
  22. data/lib/doc/fonts.css +167 -0
  23. data/lib/doc/fonts/Lato-Light.ttf +0 -0
  24. data/lib/doc/fonts/Lato-LightItalic.ttf +0 -0
  25. data/lib/doc/fonts/Lato-Regular.ttf +0 -0
  26. data/lib/doc/fonts/Lato-RegularItalic.ttf +0 -0
  27. data/lib/doc/fonts/SourceCodePro-Bold.ttf +0 -0
  28. data/lib/doc/fonts/SourceCodePro-Regular.ttf +0 -0
  29. data/lib/doc/images/add.png +0 -0
  30. data/lib/doc/images/arrow_up.png +0 -0
  31. data/lib/doc/images/brick.png +0 -0
  32. data/lib/doc/images/brick_link.png +0 -0
  33. data/lib/doc/images/bug.png +0 -0
  34. data/lib/doc/images/bullet_black.png +0 -0
  35. data/lib/doc/images/bullet_toggle_minus.png +0 -0
  36. data/lib/doc/images/bullet_toggle_plus.png +0 -0
  37. data/lib/doc/images/date.png +0 -0
  38. data/lib/doc/images/delete.png +0 -0
  39. data/lib/doc/images/find.png +0 -0
  40. data/lib/doc/images/loadingAnimation.gif +0 -0
  41. data/lib/doc/images/macFFBgHack.png +0 -0
  42. data/lib/doc/images/package.png +0 -0
  43. data/lib/doc/images/page_green.png +0 -0
  44. data/lib/doc/images/page_white_text.png +0 -0
  45. data/lib/doc/images/page_white_width.png +0 -0
  46. data/lib/doc/images/plugin.png +0 -0
  47. data/lib/doc/images/ruby.png +0 -0
  48. data/lib/doc/images/tag_blue.png +0 -0
  49. data/lib/doc/images/tag_green.png +0 -0
  50. data/lib/doc/images/transparent.png +0 -0
  51. data/lib/doc/images/wrench.png +0 -0
  52. data/lib/doc/images/wrench_orange.png +0 -0
  53. data/lib/doc/images/zoom.png +0 -0
  54. data/lib/doc/index.html +99 -0
  55. data/lib/doc/js/darkfish.js +140 -0
  56. data/lib/doc/js/jquery.js +4 -0
  57. data/lib/doc/js/navigation.js +142 -0
  58. data/lib/doc/js/search.js +109 -0
  59. data/lib/doc/js/search_index.js +1 -0
  60. data/lib/doc/js/searcher.js +228 -0
  61. data/lib/doc/rdoc.css +580 -0
  62. data/lib/doc/table_of_contents.html +186 -0
  63. data/lib/exam.rb +46 -0
  64. data/lib/exam/interfaz.rb +49 -0
  65. data/lib/exam/list.rb +111 -0
  66. data/lib/exam/node.rb +5 -0
  67. data/lib/exam/question.rb +34 -0
  68. data/lib/exam/simpleSelection.rb +29 -0
  69. data/lib/exam/verdaderoFalso.rb +21 -0
  70. data/lib/exam/version.rb +3 -0
  71. data/lib/quiz.rb +61 -0
  72. data/lib/quiz/answer.rb +25 -0
  73. data/lib/quiz/question.rb +29 -0
  74. data/spec/exam_spec.rb +297 -0
  75. data/spec/quiz_spec.rb +55 -0
  76. data/spec/spec_helper.rb +19 -0
  77. metadata +221 -0
@@ -0,0 +1,186 @@
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
+
29
+ <h2 id="classes">Classes and Modules</h2>
30
+ <ul>
31
+ <li class="module">
32
+ <a href="Exam.html">Exam</a>
33
+ </li>
34
+ <li class="class">
35
+ <a href="Exam/Examen.html">Exam::Examen</a>
36
+ </li>
37
+ <li class="class">
38
+ <a href="Interfaz.html">Interfaz</a>
39
+ </li>
40
+ <li class="class">
41
+ <a href="List.html">List</a>
42
+ </li>
43
+ <li class="class">
44
+ <a href="Node.html">Node</a>
45
+ </li>
46
+ <li class="class">
47
+ <a href="Object.html">Object</a>
48
+ </li>
49
+ <li class="class">
50
+ <a href="Question.html">Question</a>
51
+ </li>
52
+ <li class="class">
53
+ <a href="SimpleSelection.html">SimpleSelection</a>
54
+ </li>
55
+ <li class="class">
56
+ <a href="VerdaderoFalso.html">VerdaderoFalso</a>
57
+ </li>
58
+ </ul>
59
+
60
+ <h2 id="methods">Methods</h2>
61
+ <ul>
62
+
63
+ <li class="method">
64
+ <a href="Exam/Examen.html#method-c-new">::new</a>
65
+ &mdash;
66
+ <span class="container">Exam::Examen</span>
67
+
68
+ <li class="method">
69
+ <a href="VerdaderoFalso.html#method-c-new">::new</a>
70
+ &mdash;
71
+ <span class="container">VerdaderoFalso</span>
72
+
73
+ <li class="method">
74
+ <a href="Question.html#method-c-new">::new</a>
75
+ &mdash;
76
+ <span class="container">Question</span>
77
+
78
+ <li class="method">
79
+ <a href="SimpleSelection.html#method-c-new">::new</a>
80
+ &mdash;
81
+ <span class="container">SimpleSelection</span>
82
+
83
+ <li class="method">
84
+ <a href="List.html#method-c-new">::new</a>
85
+ &mdash;
86
+ <span class="container">List</span>
87
+
88
+ <li class="method">
89
+ <a href="Interfaz.html#method-c-new">::new</a>
90
+ &mdash;
91
+ <span class="container">Interfaz</span>
92
+
93
+ <li class="method">
94
+ <a href="Question.html#method-i-3C-3D-3E">#&lt;=&gt;</a>
95
+ &mdash;
96
+ <span class="container">Question</span>
97
+
98
+ <li class="method">
99
+ <a href="Node.html#method-i-3C-3D-3E">#&lt;=&gt;</a>
100
+ &mdash;
101
+ <span class="container">Node</span>
102
+
103
+ <li class="method">
104
+ <a href="Question.html#method-i-3D-3D">#==</a>
105
+ &mdash;
106
+ <span class="container">Question</span>
107
+
108
+ <li class="method">
109
+ <a href="SimpleSelection.html#method-i-answers_to_s">#answers_to_s</a>
110
+ &mdash;
111
+ <span class="container">SimpleSelection</span>
112
+
113
+ <li class="method">
114
+ <a href="Interfaz.html#method-i-compararRespuestas">#compararRespuestas</a>
115
+ &mdash;
116
+ <span class="container">Interfaz</span>
117
+
118
+ <li class="method">
119
+ <a href="List.html#method-i-delete">#delete</a>
120
+ &mdash;
121
+ <span class="container">List</span>
122
+
123
+ <li class="method">
124
+ <a href="Exam/Examen.html#method-i-each">#each</a>
125
+ &mdash;
126
+ <span class="container">Exam::Examen</span>
127
+
128
+ <li class="method">
129
+ <a href="List.html#method-i-each">#each</a>
130
+ &mdash;
131
+ <span class="container">List</span>
132
+
133
+ <li class="method">
134
+ <a href="List.html#method-i-insert">#insert</a>
135
+ &mdash;
136
+ <span class="container">List</span>
137
+
138
+ <li class="method">
139
+ <a href="List.html#method-i-insertElements">#insertElements</a>
140
+ &mdash;
141
+ <span class="container">List</span>
142
+
143
+ <li class="method">
144
+ <a href="Exam/Examen.html#method-i-insertQuestion">#insertQuestion</a>
145
+ &mdash;
146
+ <span class="container">Exam::Examen</span>
147
+
148
+ <li class="method">
149
+ <a href="Exam/Examen.html#method-i-invertirPreguntas">#invertirPreguntas</a>
150
+ &mdash;
151
+ <span class="container">Exam::Examen</span>
152
+
153
+ <li class="method">
154
+ <a href="List.html#method-i-pullHead">#pullHead</a>
155
+ &mdash;
156
+ <span class="container">List</span>
157
+
158
+ <li class="method">
159
+ <a href="SimpleSelection.html#method-i-to_s">#to_s</a>
160
+ &mdash;
161
+ <span class="container">SimpleSelection</span>
162
+
163
+ <li class="method">
164
+ <a href="Interfaz.html#method-i-to_s">#to_s</a>
165
+ &mdash;
166
+ <span class="container">Interfaz</span>
167
+
168
+ <li class="method">
169
+ <a href="Exam/Examen.html#method-i-to_s">#to_s</a>
170
+ &mdash;
171
+ <span class="container">Exam::Examen</span>
172
+
173
+ <li class="method">
174
+ <a href="VerdaderoFalso.html#method-i-to_s">#to_s</a>
175
+ &mdash;
176
+ <span class="container">VerdaderoFalso</span>
177
+ </ul>
178
+ </main>
179
+
180
+
181
+ <footer id="validator-badges" role="contentinfo">
182
+ <p><a href="http://validator.w3.org/check/referer">Validate</a>
183
+ <p>Generated by <a href="http://rdoc.rubyforge.org">RDoc</a> 4.1.2.
184
+ <p>Based on <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
185
+ </footer>
186
+
data/lib/exam.rb ADDED
@@ -0,0 +1,46 @@
1
+ require_relative "exam/version"
2
+ require_relative "exam/simpleSelection.rb"
3
+ require_relative "exam/list.rb"
4
+ require_relative "exam/verdaderoFalso.rb"
5
+ # Módulo que contiene la clase Examen.
6
+ module Exam
7
+ # Esta clase permite crear un examen donde se almacenan preguntas.
8
+ class Examen
9
+ include Enumerable
10
+ # Atributo que almacena un listado de preguntas para el examen
11
+ attr_reader :preguntas
12
+ # Inicialización del conjunto de preguntas del examen.
13
+ def initialize (listaPreguntas)
14
+ @preguntas = listaPreguntas
15
+ end
16
+ # Método que permite la inserción de una pregunta en el listado del examen
17
+ def insertQuestion(question)
18
+ nodoNuevo = Node.new(question,nil,@preguntas.cola)
19
+ nodoInsertado = @preguntas.insert(nodoNuevo)
20
+ nodoInsertado.value
21
+ end
22
+ #Método para invertir la lista
23
+ def invertirPreguntas
24
+ cadena=""
25
+ @preguntas.reverse_each do |preg|
26
+ cadena += preg.to_s
27
+ end
28
+ cadena
29
+ end
30
+ # Método que devuelve una cadena con las preguntas del examen
31
+ def to_s
32
+ cadena =""
33
+ for i in @preguntas do
34
+ cadena +=i.to_s
35
+ end
36
+ cadena
37
+ end
38
+ # Método que hay que implementar al incluir el Mixin Enumerable. LLamada al each de la lista de preguntas.
39
+ def each
40
+ @preguntas.each
41
+
42
+ end
43
+
44
+
45
+ end
46
+ end
@@ -0,0 +1,49 @@
1
+ require_relative "../exam.rb"
2
+ # Clase que permite representar un examen con sus preguntas y comprobar la puntuación del mismo.
3
+ class Interfaz
4
+ # Atributo que tendrá el examen sobre el que se realizarán las comprobaciones.
5
+ attr_reader :examen
6
+ # Inicialización del atributo examen.
7
+ def initialize(examen)
8
+ @examen = examen
9
+
10
+ end
11
+ =begin
12
+ Método que en función de unas respuestas proporcionadas por el usuario comprueba la nota obtenida en el
13
+ examen y se la muestra al usuario.
14
+ =end
15
+ def compararRespuestas(respuestasUsuario)
16
+ iterador =0
17
+ respuestasCorrectas = 0
18
+
19
+ for i in @examen.preguntas do
20
+ if i.respuestaCorrecta == respuestasUsuario[iterador]
21
+ respuestasCorrectas += 1
22
+ end
23
+ iterador +=1
24
+ end
25
+ if respuestasCorrectas < (iterador/2)+1
26
+ mensaje = "Ha suspendido el examen: #{respuestasCorrectas}/#{iterador}"
27
+ else
28
+ if respuestasCorrectas == iterador
29
+ mensaje = "Su nota es: Sobresaliente 10"
30
+ else
31
+ mensaje = "Ha aprobado el examen: #{respuestasCorrectas}/#{iterador}"
32
+ end
33
+ end
34
+ mensaje
35
+ end
36
+
37
+ # Método que devuelve una cadena con las preguntas ordenadas de menor a mayor.
38
+ def to_s
39
+ cadena=""
40
+ preguntas = @examen.preguntas.sort{|p1,p2| p1<=>p2}
41
+ for i in preguntas do
42
+ cadena +=i.to_s
43
+ end
44
+ cadena
45
+ end
46
+
47
+
48
+
49
+ end
data/lib/exam/list.rb ADDED
@@ -0,0 +1,111 @@
1
+ require_relative "node.rb"
2
+ # Clase que permitirá crear una lista de objetos.
3
+ class Node
4
+ include Comparable
5
+ =begin
6
+ Método que se ha de implementar al incluir el Mixin Comparable y con el que se hace la comparativa
7
+ entre el valor del nodo y otro pasado por parámetro
8
+ =end
9
+ def <=> (other)
10
+ value <=> other.value
11
+ end
12
+ end
13
+ # Clase que permite crear un listado de nodos. Se ha incluido el Mixin Enumerable.
14
+ class List
15
+ include Enumerable
16
+ # Atributos cola y cabeza que permitirán la identificación del principio y fin de la lista.
17
+ attr_reader :cabeza,:cola
18
+ # Inicialización de variables cabeza y cola.
19
+ def initialize(nodoCabeza)
20
+ @cabeza = nodoCabeza
21
+ @cola = @cabeza.next
22
+ end
23
+ # Método que permite extraer la cabeza de la lista
24
+ def pullHead
25
+ if @cabeza != nil
26
+
27
+ contenido = @cabeza.value
28
+ @cabeza = @cabeza.next
29
+ end
30
+ contenido
31
+
32
+ end
33
+ # Método que permite insertar un nodo en la lista
34
+ def insert(node)
35
+ if @cola == nil
36
+ node.anterior = @cabeza
37
+ @cola = node
38
+ @cabeza.next = @cola
39
+
40
+ else
41
+ @cola.next = node
42
+ @cola.next.anterior = @cola
43
+ @cola = @cola.next
44
+ end
45
+
46
+ @cola
47
+ end
48
+ # Método que recibe un conjunto de nodos y los inserta en la lista.
49
+ def insertElements(arrayNodos)
50
+ i=0
51
+ if @cola == nil
52
+ arrayNodos[0].anterior = @cabeza
53
+ @cola = arrayNodos[0]
54
+ @cabeza.next = @cola
55
+ i += 1
56
+ end
57
+ while i<arrayNodos.length
58
+ arrayNodos[i].anterior = @cola
59
+ @cola.next = arrayNodos[i]
60
+ @cola = @cola.next
61
+
62
+ i +=1
63
+ end
64
+
65
+ @cola #Se devuelve el ultimo nodo insertado
66
+
67
+ end
68
+ # Método que permite eliminar un nodo de lista independientemente de su posición en ella.
69
+ def delete(nodo)
70
+ if nodo == @cola
71
+ contenido = @cola.value
72
+ @cola = nodo.anterior
73
+ @cola.next = nil
74
+
75
+ else
76
+ if nodo == @cabeza
77
+
78
+ pullHead(nodo)
79
+
80
+ else
81
+ actual = @cabeza
82
+ while actual != nodo
83
+ actual = actual.next
84
+ end
85
+ anterior = actual.anterior
86
+ siguiente = actual.next
87
+ anterior.next = siguiente
88
+ siguiente.anterior = anterior
89
+ contenido = siguiente.value
90
+ end
91
+
92
+ end
93
+ contenido
94
+ end
95
+
96
+ =begin
97
+ Método implementado al incluir el Mixin Enumerable y con el cual devolvemos el valor de cada nodo de la
98
+ lista
99
+ =end
100
+ def each
101
+ actual = @cabeza
102
+ while actual != nil
103
+ yield actual.value
104
+ actual = actual.next
105
+ end
106
+
107
+ end
108
+
109
+
110
+
111
+ end
data/lib/exam/node.rb ADDED
@@ -0,0 +1,5 @@
1
+ =begin
2
+ Representación de un nodo que tendrá su valor, la dirección del siguiente nodo y la del anterior. Esta clase
3
+ será usada posteriormente por la clase List.
4
+ =end
5
+ Node = Struct.new(:value,:next, :anterior)
@@ -0,0 +1,34 @@
1
+ =begin
2
+ Clase que representa una pregunta y que contiene las posibles respuestas así como la opción correcta.
3
+ Se incluye el Mixin Comparable.
4
+ =end
5
+ class Question
6
+ include Comparable
7
+ # Atributos que almacenarán el enunciado (ask), la dificultad (difficulty) y la opción correcta (respuestaCorrecta)
8
+ attr_reader :ask,:difficulty,:respuestaCorrecta
9
+ # Inicialización de la pregunta, recogiendo los atributos ask, respuestaCorrecta y difficulty (por defecto 0).
10
+ def initialize(ask,respuestaCorrecta,difficulty=0)
11
+ @ask,@respuestaCorrecta,@difficulty = ask,respuestaCorrecta,difficulty
12
+ end
13
+ =begin
14
+ Método que hace la comparativa entre preguntas en función de su dificultad y sólo si la pasada por
15
+ parámetro es también una Question
16
+ =end
17
+ def <=> (other)
18
+ return nil unless other.is_a?Question
19
+ @difficulty <=> other.difficulty
20
+ end
21
+ =begin
22
+ Método que invalida el == y lo ajusta en el caso de que se den dos preguntas con la misma dificultad
23
+ donde entonces se determinará que realmente son iguales si tienen además el mismo enunciado (ask).
24
+ =end
25
+ def == (other)
26
+ return nil unless other.is_a?Question
27
+ iguales = false
28
+ if (self.difficulty == other.difficulty) && (self.ask == other.ask)
29
+ iguales = true
30
+ end
31
+ iguales
32
+ end
33
+
34
+ end
@@ -0,0 +1,29 @@
1
+ require_relative "../exam/question.rb"
2
+ # Clase que hereda de Question y que permitirá crear preguntas con muchas opciones de respuesta.
3
+ class SimpleSelection < Question
4
+ # Atributo que almacenará las opciones de respuesta para la pregunta.
5
+ attr_reader :answers
6
+ =begin
7
+ Inicialización de las variables ask, answers, respuestaCorrecta y difficulty. Ésta última con valor por
8
+ defecto a 0. Para inicializar se llamará al método super que mandará la información al constructor
9
+ de la clase madre (Question).
10
+ =end
11
+ def initialize(ask, answers,respuestaCorrecta,difficulty=0)
12
+ super(ask,respuestaCorrecta,difficulty)
13
+ @answers = answers
14
+ end
15
+ # Método que devuelve una cadena con las opciones de respuesta de la pregunta.
16
+ def answers_to_s
17
+ cadena = ""
18
+ @answers.each do |m,i|
19
+ cadena += "#{m})#{i}\n"
20
+ end
21
+ cadena
22
+ end
23
+ # Método que devuelve una cadena con el enunciado y las opciones de respuesta de la pregunta.
24
+ def to_s
25
+ cadena = "#{@ask}\n"
26
+ cadena +=self.answers_to_s
27
+ cadena
28
+ end
29
+ end