quizzer 0.1.5

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 (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/quizzer.rb +145 -0
  3. metadata +73 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 41dfa99e11985d3c6ef27fd19421d32ce4bb7680
4
+ data.tar.gz: 0f4f5d4bb207072dfb9206a4b2c562b55df8d7a3
5
+ SHA512:
6
+ metadata.gz: 718351a41f2dc5a19396c615896235f9fd291ba856205f3bf88e21610549b97bd74d72fe25b11e26b5531de7d1081c391eb8b287fa1bd5b5110ffd74b9e1225c
7
+ data.tar.gz: b3f462b0cb055d861453f6f6da68f7ffde5a960afb5cc2a1d8eec7b9ff6214e2e6e08a55bde17dc593bdd62c34961e49c7fcb0d5c0589768a3dcf86172f492f0
data/lib/quizzer.rb ADDED
@@ -0,0 +1,145 @@
1
+ require 'json'
2
+
3
+ class Quizz
4
+ attr_accessor :questions
5
+
6
+ def initialize(questions = Hash.new)
7
+ @questions = questions
8
+ end
9
+
10
+ def self.parse(quiz)
11
+ quiz = JSON.parse(IO.read(quiz))
12
+ questions = Hash.new
13
+ quiz["questions"].each do |q|
14
+ case q["type"]
15
+ when 'truefalse' then
16
+ questions[q["id"]] = TrueFalse.new(q["type"], q["id"], q["questionText"], q["correct"],
17
+ { value_ok: q["valueOK"],
18
+ value_failed: q["valueFailed"],
19
+ feedback: q["feedback"] })
20
+ when 'multichoice' then
21
+ alt = Hash.new
22
+ q["alternatives"].each { |a| alt[a["code"]] = Alternative.new(a["text"], a["code"], a["value"]) }
23
+ questions[q["id"]] = Multichoice.new(q["type"], q["id"], q["questionText"], alt)
24
+ else
25
+ raise "Incomplete question"
26
+ end
27
+ end
28
+ return Quizz.new(questions)
29
+ end
30
+ end
31
+
32
+ class Question
33
+ attr_accessor :type, :id, :question_text
34
+ def initialize(type, id, question_text)
35
+ @type = type
36
+ @id = id
37
+ @question_text = question_text
38
+ end
39
+ end
40
+
41
+ class TrueFalse < Question
42
+ attr_accessor :correct, :value_ok, :value_failed, :feedback
43
+ def initialize(type, id, question_text, correct, prop = Hash.new)
44
+ super(type, id, question_text)
45
+ @correct = correct
46
+ @value_ok = prop["value_ok"] || 1
47
+ @value_failed = prop["value_failed"] || -0.25
48
+ @feedback = prop["feedback"] || String.new
49
+ end
50
+ end
51
+
52
+ class Multichoice < Question
53
+ attr_accessor :alternatives
54
+ def initialize(type, id, question_text, alternatives = Hash.new)
55
+ super(type, id, question_text)
56
+ @alternatives = alternatives
57
+ end
58
+ end
59
+
60
+ class Alternative
61
+ attr_accessor :text, :code, :value
62
+ def initialize(text, code, value)
63
+ @text = text
64
+ @code = code
65
+ @value = value
66
+ end
67
+ end
68
+
69
+ class Assessment
70
+ attr_accessor :items
71
+ def initialize(items = Hash.new)
72
+ @items = items
73
+ end
74
+
75
+ def self.parse(assessment)
76
+ assessment = JSON.parse(IO.read(assessment))
77
+ items = Hash.new
78
+ assessment["items"].each do |i|
79
+ answers = Hash.new
80
+ i["answers"].each { |a| answers[a["question"]] = Answer.new(a["question"], a["value"]) }
81
+ items[i["studentId"]] = Item.new(i["studentId"], answers)
82
+ end
83
+ return Assessment.new(items)
84
+ end
85
+ end
86
+
87
+ class Item
88
+ attr_accessor :student_id, :answers
89
+ def initialize(student_id, answers = Hash.new)
90
+ @student_id = student_id
91
+ @answers = answers
92
+ end
93
+ end
94
+
95
+ class Answer
96
+ attr_accessor :question, :value
97
+ def initialize(question, value)
98
+ @question = question
99
+ @value = value
100
+ end
101
+ end
102
+
103
+ class Scores
104
+ attr_accessor :scores
105
+ def initialize(quiz, assesment)
106
+ @scores = Hash.new
107
+ assesment.items.each do |i_id, i|
108
+ s = Score.new(i_id)
109
+ quiz.questions.each do |q_id, q|
110
+ case q.type
111
+ when 'truefalse' then
112
+ if q.correct == i.answers[q_id].value
113
+ s.value += q.value_ok
114
+ else
115
+ s.value += q.value_failed
116
+ end
117
+ when 'multichoice' then
118
+ s.value += q.alternatives[i.answers[q_id].value].value
119
+ else
120
+ raise 'Incomplete question'
121
+ end
122
+ end
123
+ @scores[i_id] = s
124
+ end
125
+ end
126
+
127
+ def serialize()
128
+ output = { "scores" => Array.new }
129
+ @scores.each do |s_id, s|
130
+ output["scores"].push({ "studentId" => s_id, "value" => s.value })
131
+ end
132
+ File.open("test/scores.json","w") do |f|
133
+ f.write(JSON.pretty_generate(output))
134
+ end
135
+ end
136
+ end
137
+
138
+ class Score
139
+ attr_accessor :student_id, :value
140
+ def initialize(student_id, value = 0)
141
+ @student_id = student_id
142
+ @value = value
143
+ end
144
+ end
145
+
metadata ADDED
@@ -0,0 +1,73 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: quizzer
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.5
5
+ platform: ruby
6
+ authors:
7
+ - Adrian Cepillo
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-10-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.6'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.6'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: Write a longer description. Optional.
42
+ email:
43
+ - adrian.cepillo@gmail.com
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - lib/quizzer.rb
49
+ homepage: http://github.com/adriancm/quizzer-ruby
50
+ licenses:
51
+ - MIT
52
+ metadata: {}
53
+ post_install_message:
54
+ rdoc_options: []
55
+ require_paths:
56
+ - lib
57
+ required_ruby_version: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ required_rubygems_version: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ requirements: []
68
+ rubyforge_project:
69
+ rubygems_version: 2.2.2
70
+ signing_key:
71
+ specification_version: 4
72
+ summary: Write a short summary. Required.
73
+ test_files: []