ull-etsii-alu4321-quiz 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in ull-etsii-alu4321-quiz.gemspec
4
+ gemspec
5
+
data/Rakefile ADDED
@@ -0,0 +1,11 @@
1
+ $:.unshift File.dirname(__FILE__) + 'lib'
2
+ require "bundler"
3
+ require 'rspec/core/rake_task'
4
+ Bundler::GemHelper.install_taskswe can take a look at those task by running rake-T
5
+ RSpec::Core::RakeTask.new
6
+ task :default => :spec
7
+
8
+ desc "Genera la documentaciC3n de la GEM"
9
+ task :rdoc do
10
+ sh 'rdoc --exclude Gemfile --exclude Guardfile --exclude Rakefile --exclude rspec_*'
11
+ end
@@ -0,0 +1,9 @@
1
+ module Ull
2
+ module Etsii
3
+ module Alu4321
4
+ module Quiz
5
+ VERSION = "0.0.1"
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,172 @@
1
+ require "ull-etsii-alu4321-quiz/version"
2
+ require 'colorize'
3
+ require 'erb'
4
+ module Ull
5
+ module Etsii
6
+ module Alu4321
7
+ module Quiz
8
+
9
+ WRONG = false
10
+ RIGHT = true
11
+
12
+ # Clase que permite la construcciC3n de cuestionarios tipo test mediante un DSL
13
+ class Quiz
14
+ attr_accessor :name, :questions
15
+
16
+ # Recibe el nombre del test y un bloque con las preguntas y sus respuestas
17
+ #
18
+ # Ejemplo de uso:
19
+ # quiz = Quiz.new("Test 1"){ |e|
20
+ # e.question "Pregunta 1",
21
+ # e.wrong => "Respuesta incorrecta 1",
22
+ # e.wrong => "Respuesta incorrecta 2",
23
+ # e.wrong => "Respuesta incorrecta 3",
24
+ # e.rigth => "Respuesta correcta"
25
+ # }
26
+ def initialize(name)
27
+ @counter = 0
28
+ @aciertos = 0
29
+ @name = name
30
+ @questions = []
31
+
32
+ yield self
33
+ end
34
+
35
+ # Pregunta incorrecta
36
+ #
37
+ # Avoid collisions
38
+ def wrong
39
+ @counter += 1
40
+ [@counter, WRONG]
41
+ end
42
+
43
+ # Pregunta correcta
44
+ def right
45
+ :right
46
+ end
47
+
48
+ # MC)todo que recibe el tC-tulo <em>title</em> de la pregunta y una serie de
49
+ # parC!metros como respuestas
50
+ def question(title, anss)
51
+ answers = []
52
+
53
+ anss.each do |ans|
54
+ a = Answer.new(ans)
55
+ answers << a
56
+ end
57
+
58
+ q = Question.new(title, answers)
59
+ questions << q
60
+ end
61
+
62
+ # Ejecuta el test por consola. Presenta cada pregunta y las posibles respuestas.
63
+ # Al final muestra los resultados.
64
+ def run
65
+ puts name
66
+ questions.each do |q|
67
+ puts q
68
+ print "Su respuesta: "
69
+ resp = gets.chomp.to_i
70
+ raise IndexError, "Answer must be between 1 and #{q.answers.size}." unless resp <= q.answers.size and resp > 0
71
+ if q.answers[resp-1].state
72
+ puts "Correcto!".colorize(:light_green)
73
+ @aciertos += 1
74
+ else
75
+ correcta = q.answers.select { |ans| ans.state }.first
76
+ puts "Fallo, la respuesta correcta era #{correcta}".colorize(:red)
77
+ end
78
+ puts
79
+ end
80
+ puts "Has acertado el #{(@aciertos/questions.size.to_f)*100}% de las preguntas [#{@aciertos} de #{questions.size}]."
81
+ end
82
+
83
+ # RepresentaciC3n visual de un Test en forma de String.
84
+ def to_s
85
+ out = name + "\n"
86
+ questions.each do |q|
87
+ out << "#{q}\n"
88
+ end
89
+ out
90
+ end
91
+
92
+ # Genera el test en formato html.
93
+ # Dicho test es totalmente funcional, permitiendo la selecciC3n de respuestas y
94
+ # la correcciC3n de las mismas
95
+ def to_html
96
+ # SetUp del fichero de salida
97
+ if not Dir.exist? "html"
98
+ # Copiamos el directorio html con los ficheros bC!sicos
99
+ require 'fileutils'
100
+ FileUtils.cp_r File.expand_path(File.dirname(__FILE__)) + '/html', 'html'
101
+ end
102
+ # Generamos HTML
103
+ htmlFile = File.new("html/#{name.gsub(/[\ \\\/:]/, '_')}.html", "w")
104
+ raise IOError, 'Can\'t access to html output file' unless htmlFile
105
+ # Generamos JavaScript
106
+ jsFile = File.new("html/js/quiz.js", "w")
107
+ raise IOError, 'Can\'t access to javascript output file' unless jsFile
108
+
109
+ # Construimos los ERB y los escribimos en los ficheros
110
+ require 'templates'
111
+ rhtml = ERB.new(HTML_TEMPLATE)
112
+ htmlFile.syswrite(rhtml.result(binding))
113
+ htmlFile.close
114
+
115
+ rjs = ERB.new(JAVASCRIPT_TEMPLATE)
116
+ jsFile.syswrite(rjs.result(binding))
117
+ jsFile.close
118
+
119
+
120
+ end
121
+
122
+ end
123
+
124
+ # Clase que representa una de pregunta a un test.
125
+ class Question
126
+ attr_accessor :answers, :title
127
+ # Recibe un tC-tulo <em>title</em> de la pregunta y el resto de parC!metros son las
128
+ # posibles respuestas.
129
+ def initialize(title, anss)
130
+ raise ArgumentError, "Title has to be a String, got #{title.class}" unless title.is_a? String
131
+ @title = title
132
+ @answers = anss
133
+ end
134
+
135
+ # RepresentaciC3n visual de una pregunta en forma de String.
136
+ def to_s
137
+ out = "# #{@title}".colorize(:light_blue) + "\n"
138
+ i = 1
139
+ answers.each do |a|
140
+ out << " [#{i}] #{a}\n"
141
+ i += 1
142
+ end
143
+ out
144
+ end
145
+ end
146
+
147
+ # Clase que representa las respuestas a preguntas de un test.
148
+ class Answer
149
+ attr_reader :state, :value
150
+
151
+ # Recibe como parC!metro una lista de dos elementos que contiene
152
+ # el <em>state</em> o estado de la respuesta (si es verdadera o falsa)
153
+ # y el <em>value</em> con el texto que la representa.
154
+ def initialize(ans)
155
+ raise ArgumentError, "Array spected, got #{ans.class}" unless ans.is_a? Array
156
+ raise IndexError, 'Must have two (2) elements; state and value' unless ans.size == 2
157
+ state = ans[0]
158
+ value = ans[1]
159
+ state == :right ? @state = RIGHT : @state = WRONG
160
+ @value = value
161
+ end
162
+
163
+ # Devuelve <em>value</em>, es decir, el texto que describe a la respuesta
164
+ def to_s
165
+ "#{@value}"
166
+ end
167
+ end
168
+ end
169
+ end
170
+ end
171
+ end
172
+
@@ -0,0 +1,21 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "ull-etsii-alu4321-quiz/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "ull-etsii-alu4321-quiz"
7
+ s.version = Ull::Etsii::Alu4321::Quiz::VERSION
8
+ s.authors = ["katerine"]
9
+ s.email = ["katerine_cardona@hotmail.com"]
10
+ s.homepage = ""
11
+ s.summary = %q{ hacer cuestionarios}
12
+ s.description = %q{ redatar cuestionarios}
13
+
14
+ s.rubyforge_project = "ull-etsii-alu4321-quiz"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ end
metadata ADDED
@@ -0,0 +1,51 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ull-etsii-alu4321-quiz
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - katerine
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-01-11 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: ! ' redatar cuestionarios'
15
+ email:
16
+ - katerine_cardona@hotmail.com
17
+ executables: []
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - .gitignore
22
+ - Gemfile
23
+ - Rakefile
24
+ - lib/ull-etsii-alu4321-quiz.rb
25
+ - lib/ull-etsii-alu4321-quiz/version.rb
26
+ - ull-etsii-alu4321-quiz.gemspec
27
+ homepage: ''
28
+ licenses: []
29
+ post_install_message:
30
+ rdoc_options: []
31
+ require_paths:
32
+ - lib
33
+ required_ruby_version: !ruby/object:Gem::Requirement
34
+ none: false
35
+ requirements:
36
+ - - ! '>='
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ required_rubygems_version: !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ! '>='
43
+ - !ruby/object:Gem::Version
44
+ version: '0'
45
+ requirements: []
46
+ rubyforge_project: ull-etsii-alu4321-quiz
47
+ rubygems_version: 1.8.11
48
+ signing_key:
49
+ specification_version: 3
50
+ summary: hacer cuestionarios
51
+ test_files: []