ExamSimple 1.0.0

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 (81) hide show
  1. checksums.yaml +7 -0
  2. data/.coveralls.yml +1 -0
  3. data/.gitignore +15 -0
  4. data/.rspec +3 -0
  5. data/.travis.yml +5 -0
  6. data/Exam.gemspec +28 -0
  7. data/Gemfile +8 -0
  8. data/Guardfile +41 -0
  9. data/LICENSE.txt +22 -0
  10. data/README.md +48 -0
  11. data/README.rdoc +0 -0
  12. data/Rakefile +24 -0
  13. data/doc/prct10.pdf +0 -0
  14. data/doc/prct11.pdf +0 -0
  15. data/doc/prct5.pdf +0 -0
  16. data/doc/prct6.pdf +0 -0
  17. data/doc/prct7.pdf +0 -0
  18. data/doc/prct8.pdf +0 -0
  19. data/doc/prct9.pdf +0 -0
  20. data/doc/test/index.html +467 -0
  21. data/html/Exam.html +316 -0
  22. data/html/Examui.html +230 -0
  23. data/html/List.html +469 -0
  24. data/html/Object.html +119 -0
  25. data/html/Question.html +357 -0
  26. data/html/README_rdoc.html +82 -0
  27. data/html/TrueOrFalse.html +169 -0
  28. data/html/created.rid +10 -0
  29. data/html/fonts.css +167 -0
  30. data/html/fonts/Lato-Light.ttf +0 -0
  31. data/html/fonts/Lato-LightItalic.ttf +0 -0
  32. data/html/fonts/Lato-Regular.ttf +0 -0
  33. data/html/fonts/Lato-RegularItalic.ttf +0 -0
  34. data/html/fonts/SourceCodePro-Bold.ttf +0 -0
  35. data/html/fonts/SourceCodePro-Regular.ttf +0 -0
  36. data/html/images/add.png +0 -0
  37. data/html/images/arrow_up.png +0 -0
  38. data/html/images/brick.png +0 -0
  39. data/html/images/brick_link.png +0 -0
  40. data/html/images/bug.png +0 -0
  41. data/html/images/bullet_black.png +0 -0
  42. data/html/images/bullet_toggle_minus.png +0 -0
  43. data/html/images/bullet_toggle_plus.png +0 -0
  44. data/html/images/date.png +0 -0
  45. data/html/images/delete.png +0 -0
  46. data/html/images/find.png +0 -0
  47. data/html/images/loadingAnimation.gif +0 -0
  48. data/html/images/macFFBgHack.png +0 -0
  49. data/html/images/package.png +0 -0
  50. data/html/images/page_green.png +0 -0
  51. data/html/images/page_white_text.png +0 -0
  52. data/html/images/page_white_width.png +0 -0
  53. data/html/images/plugin.png +0 -0
  54. data/html/images/ruby.png +0 -0
  55. data/html/images/tag_blue.png +0 -0
  56. data/html/images/tag_green.png +0 -0
  57. data/html/images/transparent.png +0 -0
  58. data/html/images/wrench.png +0 -0
  59. data/html/images/wrench_orange.png +0 -0
  60. data/html/images/zoom.png +0 -0
  61. data/html/index.html +102 -0
  62. data/html/js/darkfish.js +140 -0
  63. data/html/js/jquery.js +18 -0
  64. data/html/js/navigation.js +142 -0
  65. data/html/js/search.js +109 -0
  66. data/html/js/search_index.js +1 -0
  67. data/html/js/searcher.js +228 -0
  68. data/html/rdoc.css +580 -0
  69. data/html/table_of_contents.html +159 -0
  70. data/lib/Exam.rb +2 -0
  71. data/lib/Exam/base.rb +5 -0
  72. data/lib/Exam/examen.rb +37 -0
  73. data/lib/Exam/examui.rb +27 -0
  74. data/lib/Exam/list.rb +106 -0
  75. data/lib/Exam/question.rb +44 -0
  76. data/lib/Exam/quiz.rb +52 -0
  77. data/lib/Exam/trueorfalse.rb +15 -0
  78. data/lib/Exam/version.rb +5 -0
  79. data/spec/Exam_spec.rb +392 -0
  80. data/spec/spec_helper.rb +98 -0
  81. metadata +226 -0
@@ -0,0 +1,159 @@
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
+ </li>
33
+
34
+ </ul>
35
+
36
+ <h2 id="classes">Classes and Modules</h2>
37
+ <ul>
38
+ <li class="class">
39
+ <a href="Exam.html">Exam</a>
40
+ </li>
41
+ <li class="class">
42
+ <a href="Examui.html">Examui</a>
43
+ </li>
44
+ <li class="class">
45
+ <a href="List.html">List</a>
46
+ </li>
47
+ <li class="class">
48
+ <a href="Object.html">Object</a>
49
+ </li>
50
+ <li class="class">
51
+ <a href="Question.html">Question</a>
52
+ </li>
53
+ <li class="class">
54
+ <a href="TrueOrFalse.html">TrueOrFalse</a>
55
+ </li>
56
+ </ul>
57
+
58
+ <h2 id="methods">Methods</h2>
59
+ <ul>
60
+
61
+ <li class="method">
62
+ <a href="Exam.html#method-c-new">::new</a>
63
+ &mdash;
64
+ <span class="container">Exam</span>
65
+
66
+ <li class="method">
67
+ <a href="Question.html#method-c-new">::new</a>
68
+ &mdash;
69
+ <span class="container">Question</span>
70
+
71
+ <li class="method">
72
+ <a href="Examui.html#method-c-new">::new</a>
73
+ &mdash;
74
+ <span class="container">Examui</span>
75
+
76
+ <li class="method">
77
+ <a href="List.html#method-c-new">::new</a>
78
+ &mdash;
79
+ <span class="container">List</span>
80
+
81
+ <li class="method">
82
+ <a href="TrueOrFalse.html#method-c-new">::new</a>
83
+ &mdash;
84
+ <span class="container">TrueOrFalse</span>
85
+
86
+ <li class="method">
87
+ <a href="Question.html#method-i-3C-3D-3E">#&lt;=&gt;</a>
88
+ &mdash;
89
+ <span class="container">Question</span>
90
+
91
+ <li class="method">
92
+ <a href="Question.html#method-i-3D-3D">#==</a>
93
+ &mdash;
94
+ <span class="container">Question</span>
95
+
96
+ <li class="method">
97
+ <a href="Examui.html#method-i-compare">#compare</a>
98
+ &mdash;
99
+ <span class="container">Examui</span>
100
+
101
+ <li class="method">
102
+ <a href="List.html#method-i-each">#each</a>
103
+ &mdash;
104
+ <span class="container">List</span>
105
+
106
+ <li class="method">
107
+ <a href="List.html#method-i-invert">#invert</a>
108
+ &mdash;
109
+ <span class="container">List</span>
110
+
111
+ <li class="method">
112
+ <a href="List.html#method-i-inverter">#inverter</a>
113
+ &mdash;
114
+ <span class="container">List</span>
115
+
116
+ <li class="method">
117
+ <a href="List.html#method-i-pop">#pop</a>
118
+ &mdash;
119
+ <span class="container">List</span>
120
+
121
+ <li class="method">
122
+ <a href="List.html#method-i-push">#push</a>
123
+ &mdash;
124
+ <span class="container">List</span>
125
+
126
+ <li class="method">
127
+ <a href="Exam.html#method-i-push">#push</a>
128
+ &mdash;
129
+ <span class="container">Exam</span>
130
+
131
+ <li class="method">
132
+ <a href="Exam.html#method-i-right">#right</a>
133
+ &mdash;
134
+ <span class="container">Exam</span>
135
+
136
+ <li class="method">
137
+ <a href="Exam.html#method-i-to_s">#to_s</a>
138
+ &mdash;
139
+ <span class="container">Exam</span>
140
+
141
+ <li class="method">
142
+ <a href="Question.html#method-i-to_s">#to_s</a>
143
+ &mdash;
144
+ <span class="container">Question</span>
145
+
146
+ <li class="method">
147
+ <a href="List.html#method-i-to_s">#to_s</a>
148
+ &mdash;
149
+ <span class="container">List</span>
150
+ </ul>
151
+ </main>
152
+
153
+
154
+ <footer id="validator-badges" role="contentinfo">
155
+ <p><a href="http://validator.w3.org/check/referer">Validate</a>
156
+ <p>Generated by <a href="http://rdoc.rubyforge.org">RDoc</a> 4.1.0.
157
+ <p>Based on <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
158
+ </footer>
159
+
data/lib/Exam.rb ADDED
@@ -0,0 +1,2 @@
1
+ require "Exam/version"
2
+ require "Exam/base"
data/lib/Exam/base.rb ADDED
@@ -0,0 +1,5 @@
1
+ require 'question'
2
+ require 'trueorfalse'
3
+ require 'examen'
4
+ require 'examui'
5
+ require 'quiz'
@@ -0,0 +1,37 @@
1
+ # coding: utf-8
2
+ require 'list'
3
+
4
+
5
+ #Clase para la gestión de examens con preguntas.
6
+ class Exam
7
+ attr_accessor :exam
8
+
9
+ #Creacion de una isntancia a partir de una pregunta.
10
+ def initialize(o)
11
+ @exam = List.new(o)
12
+ end
13
+
14
+ #Metodo to_s.
15
+ def to_s
16
+ "#{@exam}"
17
+ end
18
+
19
+
20
+ #Metodo para la inserción de preguntas sucesivamente.
21
+ def push(*input)
22
+ input.each { |o| @exam.push(o)}
23
+ input
24
+ end
25
+
26
+ #Metodo para obtener el conjunto de respuestas correctas asociadas a las respuestas.
27
+ def right
28
+ result = Array.new()
29
+ i=0
30
+ @exam.each do |q|
31
+ result[i] = q.r1
32
+ i += 1
33
+ end
34
+ result
35
+ end
36
+
37
+ end
@@ -0,0 +1,27 @@
1
+ # coding: UTF-8
2
+ require 'examen'
3
+
4
+
5
+ #Clase para la muestra de examenes con interfaz grafica.
6
+ class Examui
7
+ attr_accessor :examui
8
+
9
+ #inicialización de la instancia a partir de una pregunta.
10
+ def initialize(o)
11
+ @examui = Exam.new(o)
12
+ end
13
+
14
+
15
+ #Comparacion de respuestas que se evaluan con la indicacion de cuales son correctas y cuales no.
16
+ def compare(useranswers)
17
+ right = @examui.right
18
+ comp = Array.new(right.count, false)
19
+ i = 0
20
+ while i < right.count do
21
+ comp[i] = (right[i].eql?useranswers[i])? true : false
22
+ i += 1
23
+ end
24
+ comp
25
+ end
26
+
27
+ end
data/lib/Exam/list.rb ADDED
@@ -0,0 +1,106 @@
1
+ # coding: utf-8
2
+ require 'question'
3
+ require 'trueorfalse'
4
+
5
+ #nodos
6
+ Node = Struct.new :value, :next, :prev
7
+
8
+
9
+ #Clase para las listas doblemente enlazadas
10
+ class List
11
+
12
+ attr_accessor :head, :tail
13
+
14
+ include Enumerable
15
+
16
+ #Inicializacion de una instancia de la clase Lista a partir de una Question pregunta).
17
+ def initialize (o)
18
+ raise TypeError, "Se esperaba que se pasara una pregunta como parámetro" unless o.instance_of? (Question)
19
+ @head = Node.new(o, nil,nil)
20
+ @tail = @head
21
+ end
22
+
23
+
24
+ #Metodo para extraer "por la cabeza" de la lista acutalmente.
25
+ def pop
26
+ raise IndexError, "La lista se encuentra vacía" unless @head.is_a? (Node)
27
+ aux = @head
28
+
29
+ if (@head == @tail)
30
+ @head = @tail = nil
31
+ aux.next = aux.prev = nil
32
+ else
33
+ @head = @head.next
34
+ @head.prev = nil
35
+ aux.next = aux.prev = nil
36
+ end
37
+ aux.value
38
+ end
39
+
40
+
41
+ #Metodo para instertar varias preguntas sucesivamente
42
+ def push (*input)
43
+ input.each do |x|
44
+ if @head == nil
45
+ @head = @tail = Node.new(x, nil, nil)
46
+ else
47
+ aux = Node.new(x, nil, nil)
48
+ @tail.next = aux
49
+ aux.prev = @tail
50
+ @tail = @tail.next
51
+ @tail.value
52
+ end
53
+ end
54
+ input
55
+ end
56
+
57
+
58
+ #Metodo to_s
59
+ def to_s
60
+ aux = @head
61
+ s = ' '
62
+ i = 1
63
+ while (aux != nil) do
64
+ s += "#{i}) #{aux.value}\n"
65
+ aux = aux.next
66
+ i += 1
67
+ end
68
+ s
69
+ end
70
+
71
+
72
+
73
+ #Metodo para le manejo de metodos del modulo Enumerable
74
+ def each
75
+ aux =@head
76
+ while (aux != nil) do
77
+ yield aux.value
78
+ aux = aux.next
79
+ end
80
+ end
81
+
82
+
83
+
84
+ #Metodo que devuelve la lista actual invertida.
85
+ def inverter (&block)
86
+ block = ->(x) {true} if !block_given?
87
+ list = invert(@head, &block)
88
+ list.pop
89
+ return nil if list.count == 0
90
+ list
91
+ end
92
+
93
+
94
+ #Metodo auxiliar que se utiliza para invertir la lista (recursividad).
95
+ def invert(actual, &block)
96
+ return List.new(Question.new(:qt => "dummy", :r1 => "dummy", :wrong => ["dummy"])) if (actual == nil)
97
+ list = invert(actual.next, &block)
98
+ list.push(actual.value) if block[actual.value]
99
+ list
100
+ end
101
+
102
+ private :invert
103
+
104
+ end
105
+
106
+
@@ -0,0 +1,44 @@
1
+
2
+
3
+ #Clase para la gestion de preguntas de multiples opciones.
4
+ class Question
5
+ attr_accessor :qt, :r1, :wrong, :difficulty
6
+
7
+ #Se incluye el método Comparable
8
+ include Comparable
9
+
10
+ def <=>(other)
11
+ @difficulty <=> other.difficulty
12
+ end
13
+
14
+ def ==(other)
15
+ @qt.eql?other.qt
16
+ end
17
+
18
+
19
+ #Inicializacion de una nueva instancia de una nueva pregunta a partir de un texto.
20
+ def initialize (args)
21
+ @qt = args[:qt]
22
+ raise ArgumentError, "Se esperaba una pregunta" unless args.key?(:qt)
23
+ @r1 = args[:r1]
24
+ raise ArgumentError, "Se esperaba la respuesta correcta" unless args.key?(:r1)
25
+ @wrong = args[:wrong]
26
+ raise ArgumentError, "Se esperaba un array con las respuestas incorrectas" unless args.key?(:wrong)
27
+ args.has_key?(:difficulty)? (@difficulty = args[:difficulty]) : (@difficulty = 1)
28
+ end
29
+
30
+
31
+ #Metodo to_s.
32
+ def to_s
33
+ s = "#{@qt}\n"
34
+ opt = [@r1] + @wrong
35
+ opt = opt.shuffle
36
+ i = 1
37
+ opt.each do |o|
38
+ s += "#{i}- #{o}\n"
39
+ i += 1
40
+ end
41
+ s
42
+ end
43
+
44
+ end
data/lib/Exam/quiz.rb ADDED
@@ -0,0 +1,52 @@
1
+ #coding: utf-8
2
+ require 'examen'
3
+ class Quiz
4
+
5
+ attr_accessor :name, :counter, :exam
6
+
7
+ def initialize(name, &block)
8
+ @name = name
9
+ @exam = Exam.new(Question.new(:qt => "-", :r1 => "-", :wrong => ["-"]))
10
+ @exam.exam.pop
11
+ @counter = 0
12
+ instance_eval &block
13
+ end
14
+
15
+ def right
16
+ :right
17
+ end
18
+
19
+ def wrong
20
+ @counter += 1
21
+ [:wrong, @counter]
22
+ end
23
+
24
+ def question(*args)
25
+ wrong = Array.new
26
+ args[1].keys.each { |x| wrong << args[1][x] if x.instance_of?(Array)}
27
+ @exam.push(Question.new(:qt => args[0], :r1 => args[1][:right], :wrong => wrong))
28
+ @exam
29
+ end
30
+
31
+ def to_s
32
+ "\t#{@name}\n\n#{@exam}"
33
+ end
34
+
35
+ def run
36
+ puts "#{@name}\n\n"
37
+ punt = 0
38
+ right = @exam.right
39
+ userans = Array.new(right.count, false)
40
+ @exam.exam.each_with_index do |x, i|
41
+ puts x
42
+ print "Su respuesta es: "
43
+ STDOUT.flush
44
+ if right[i].to_s.eql?gets.chomp
45
+ punt += 1
46
+ end
47
+ puts "\n"
48
+ end
49
+ puts "Ha acertado #{punt} de #{right.count}"
50
+ end
51
+
52
+ end
@@ -0,0 +1,15 @@
1
+ require 'question'
2
+
3
+
4
+ #Clase de gestion de preguntar True or False.
5
+ class TrueOrFalse < Question
6
+
7
+ #Inicializacion de la isntancia de la clase TrueOrFalse al cual se le pasa un texto para la pregunta y un booleano para la respuesta.
8
+ def initialize (args)
9
+ raise ArgumentError,"Se esperaba una pregunta" unless args.key?(:qt)
10
+ raise ArgumentError,"Se esperaba la pregunta correcta" unless args.key?(:r1)
11
+ args[:r1] = (args[:r1] ? "Cierto" : "Falso")
12
+ args[:wrong] = [(args[:r1] ? "Falso" : "Cierto")]
13
+ super(args)
14
+ end
15
+ end