ruql 0.1.5 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1 @@
1
+ .instructions { clear: both; border: 5px solid black; align: left; padding: 2ex; margin: 2ex; }
@@ -0,0 +1,37 @@
1
+ quiz 'Example quiz' do
2
+
3
+ fill_in :points => 2 do
4
+ text 'The capital of California is ---'
5
+ answer 'sacramento'
6
+ end
7
+
8
+ choice_answer :randomize => true do
9
+ text "What is the largest US state?"
10
+ explanation "Not big enough." # for distractors without their own explanation
11
+ answer 'Alaska'
12
+ distractor 'Hawaii'
13
+ distractor 'Texas', :explanation => "That's pretty big, but think colder."
14
+ end
15
+
16
+ select_multiple do
17
+ text "Which are American political parties?"
18
+ answer "Democrats"
19
+ answer "Republicans"
20
+ answer "Greens", :explanation => "Yes, they're a party!"
21
+ distractor "Tories", :explanation => "They're British"
22
+ distractor "Social Democrats"
23
+ end
24
+
25
+ select_multiple do
26
+ text "Which are American political parties?"
27
+ answer "Democrats"
28
+ answer "Republicans"
29
+ answer "Greens", :explanation => "Yes, they're a party!"
30
+ distractor "Tories", :explanation => "They're British"
31
+ distractor "Social Democrats"
32
+ end
33
+
34
+ truefalse 'The week has 7 days.', true
35
+ truefalse 'The earth is flat.', false, :explanation => 'No, just looks that way'
36
+
37
+ end
@@ -0,0 +1,94 @@
1
+ <html>
2
+ <head>
3
+ <title>Example quiz</title>
4
+ </head>
5
+ <body>
6
+ <!-- Seed: 193198071281985290800198331169288892539 -->
7
+ <form>
8
+ <ol class="questions">
9
+ <li id="question-0" class="question fillin ">
10
+ <div class="text">
11
+ <p>
12
+ [2 points] The capital of California is <input type="text" class="fillin"/>
13
+ </p>
14
+ </div>
15
+ </li>
16
+ <li id="question-1" class="question multiplechoice ">
17
+ <div class="text">
18
+ <p>
19
+ [1 point] What is the largest US state? </p>
20
+ </div>
21
+ <ol class="answers">
22
+ <input type="radio" name="a" class="select">
23
+ Alaska</br> </input>
24
+ <input type="radio" name="a" class="select">
25
+ Texas</br> </input>
26
+ <input type="radio" name="a" class="select">
27
+ Hawaii</br> </input>
28
+ </ol>
29
+ </li>
30
+ <li id="question-2" class="question selectmultiple multiple">
31
+ <div class="text">
32
+ <p>
33
+ [1 point] Select ALL that apply: Which are American political parties? </p>
34
+ </div>
35
+ <ol class="answers">
36
+ <input type="checkbox" name="b" class="check">
37
+ Democrats</br> </input>
38
+ <input type="checkbox" name="b" class="check">
39
+ Republicans</br> </input>
40
+ <input type="checkbox" name="b" class="check">
41
+ Greens</br> </input>
42
+ <input type="checkbox" name="b" class="check">
43
+ Tories</br> </input>
44
+ <input type="checkbox" name="b" class="check">
45
+ Social Democrats</br> </input>
46
+ </ol>
47
+ </li>
48
+ <li id="question-3" class="question selectmultiple multiple">
49
+ <div class="text">
50
+ <p>
51
+ [1 point] Select ALL that apply: Which are American political parties? </p>
52
+ </div>
53
+ <ol class="answers">
54
+ <input type="checkbox" name="b" class="check">
55
+ Democrats</br> </input>
56
+ <input type="checkbox" name="b" class="check">
57
+ Republicans</br> </input>
58
+ <input type="checkbox" name="b" class="check">
59
+ Greens</br> </input>
60
+ <input type="checkbox" name="b" class="check">
61
+ Tories</br> </input>
62
+ <input type="checkbox" name="b" class="check">
63
+ Social Democrats</br> </input>
64
+ </ol>
65
+ </li>
66
+ <li id="question-4" class="question truefalse ">
67
+ <div class="text">
68
+ <p>
69
+ [1 point] True or False: The week has 7 days. </p>
70
+ </div>
71
+ <ol class="answers">
72
+ <input type="radio" name="a" class="select">
73
+ True</br> </input>
74
+ <input type="radio" name="a" class="select">
75
+ False</br> </input>
76
+ </ol>
77
+ </li>
78
+ <li id="question-5" class="question truefalse ">
79
+ <div class="text">
80
+ <p>
81
+ [1 point] True or False: The earth is flat. </p>
82
+ </div>
83
+ <ol class="answers">
84
+ <input type="radio" name="a" class="select">
85
+ True</br> </input>
86
+ <input type="radio" name="a" class="select">
87
+ False</br> </input>
88
+ </ol>
89
+ </li>
90
+ </ol>
91
+ <input type="submit" value="Enviar"/>
92
+ </form>
93
+ </body>
94
+ </html>
@@ -0,0 +1,55 @@
1
+ Usage: #<Enumerator:0x979a960> filename.rb renderer [options]
2
+ filename.rb contains questions expressed in RuQL
3
+
4
+ renderer choices are:
5
+ Html5 - HTML 5 suitable for Web display/printing
6
+ EdXml - XML for OpenEdX platform in-course questions
7
+ AutoQCM - LaTeX for use with AutoQCM (http://home.gna.org/auto-qcm)
8
+ Coursera- [obsolete] Coursera HTML/XML format for online auto-grading
9
+ JSON - [partially implemented] JSON format
10
+
11
+ Global options:
12
+ -l <loglevel>, --log=<loglevel>
13
+ In increasing verbosity, they are 'error' (nonfatal), 'warn', 'info',
14
+ 'debug'; default is 'warn'
15
+ -p <penalty>, --penalty <penalty>
16
+ The penalty for WRONG answers, as a fraction of the penalty for
17
+ RIGHT answers. For a 2-point question, penalty=0.25 means 1/2 point
18
+ (0.25 * 2) deducted for WRONG answer. Default is 0. Not all
19
+ output formats are able to do something useful with this.
20
+
21
+ The EdXML renderer supports these options:
22
+ -n <name>, --name=<name>
23
+ Only render the question(s) that have :name => 'name'.
24
+ NOTE: Some markup that is legal in RuQL questions will break the EdX parser.
25
+ Manually check your questions as you enter them into EdX. Code seems to
26
+ be particularly troublesome.
27
+ NOTE: The 'points' and 'randomize' attributes of questions are not honored by
28
+ some systems.
29
+
30
+ The HTML5 renderer supports these options:
31
+ -c <href>, --css=<href>
32
+ embed <href> for stylesheet into generated HTML5
33
+ -t <file.html.erb>, --template=<file.html.erb>
34
+ Use file.html.erb as HTML template rather than generating our own file.
35
+ file.html.erb should have <%= yield %> where questions should go.
36
+ An example is in the templates/ directory of RuQL.
37
+ The following local variables will be replaced with their values in
38
+ the template:
39
+ <%= quiz.title %> - the quiz title
40
+ <%= quiz.num_questions %> - total number of questions
41
+ <%= quiz.points %> - total number of points for whole quiz
42
+ -s, --solutions
43
+ generate solutions (showing correct answers and explanations)
44
+ NOTE: If there is more than one quiz (collection of questions) in the file,
45
+ a complete <html>...</html> block is produced in the output for EACH quiz.
46
+
47
+ The AutoQCM renderer supports these options:
48
+ -t <file.tex.erb>, --template=<file.tex.erb>
49
+ MANDATORY: Use file.tex.erb as LaTeX/AutoQCM template.
50
+ The file should have <%= yield %> where questions should go.
51
+ See the description of template under HTML5 renderer for variable
52
+ substitutions that can occur in the quiz body.
53
+
54
+ The JSON renderer currently supports no options
55
+
@@ -0,0 +1,32 @@
1
+ // question: 0 name: Switch category to $course$/Por defecto en Página Principal
2
+ $CATEGORY: $course$/Por defecto en Página Principal
3
+
4
+
5
+ // question: 2 name: Opción múltiple
6
+ ::Opción múltiple::[html]<p>What is the largest US state?</p>{
7
+ =<p>Alaska</p>
8
+ ~<p>Hawaii</p>
9
+ ~<p>Texas</p>
10
+ }
11
+
12
+
13
+ // question: 3 name: Opción múltiple (Multirespuesta)
14
+ ::Opción múltiple (Multirespuesta)::[html]<p>Which are American political parties?</p>{
15
+ ~%33.33333%<p>Democrats</p>
16
+ ~%33.33333%<p>Republicans</p>
17
+ ~%33.33333%<p>Greens</p>
18
+ ~<p>Tories</p>
19
+ ~<p>Social Democrats</p>
20
+ }
21
+
22
+
23
+ // question: 1 name: Respuesta corta
24
+ ::Respuesta corta::[html]<p>The capital of California is...</p>{
25
+ =%100%Sacramento#
26
+ }
27
+
28
+
29
+ // question: 4 name: Verdadero/Falso
30
+ ::Verdadero/Falso::[html]<p>The week has 7 days.</p>{TRUE}
31
+
32
+
@@ -0,0 +1,168 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <quiz>
3
+ <!-- question: 0 -->
4
+ <question type="category">
5
+ <category>
6
+ <text>$course$/Por defecto en Página Principal</text>
7
+
8
+ </category>
9
+ </question>
10
+
11
+ <!-- question: 2 -->
12
+ <question type="multichoice">
13
+ <name>
14
+ <text>Opción múltiple</text>
15
+ </name>
16
+ <questiontext format="html">
17
+ <text><![CDATA[<p>What is the largest US state?</p>]]></text>
18
+ </questiontext>
19
+ <generalfeedback format="html">
20
+ <text></text>
21
+ </generalfeedback>
22
+ <defaultgrade>1.0000000</defaultgrade>
23
+ <penalty>0.3333333</penalty>
24
+ <hidden>0</hidden>
25
+ <single>true</single>
26
+ <shuffleanswers>true</shuffleanswers>
27
+ <answernumbering>abc</answernumbering>
28
+ <correctfeedback format="html">
29
+ <text><![CDATA[<p>Respuesta correcta</p>]]></text>
30
+ </correctfeedback>
31
+ <partiallycorrectfeedback format="html">
32
+ <text><![CDATA[<p>Respuesta parcialmente correcta.</p>]]></text>
33
+ </partiallycorrectfeedback>
34
+ <incorrectfeedback format="html">
35
+ <text><![CDATA[<p>Respuesta incorrecta.</p>]]></text>
36
+ </incorrectfeedback>
37
+ <shownumcorrect/>
38
+ <answer fraction="100" format="html">
39
+ <text><![CDATA[<p>Alaska</p>]]></text>
40
+ <feedback format="html">
41
+ <text></text>
42
+ </feedback>
43
+ </answer>
44
+ <answer fraction="0" format="html">
45
+ <text><![CDATA[<p>Hawaii</p>]]></text>
46
+ <feedback format="html">
47
+ <text></text>
48
+ </feedback>
49
+ </answer>
50
+ <answer fraction="0" format="html">
51
+ <text><![CDATA[<p>Texas</p>]]></text>
52
+ <feedback format="html">
53
+ <text></text>
54
+ </feedback>
55
+ </answer>
56
+ </question>
57
+
58
+ <!-- question: 3 -->
59
+ <question type="multichoice">
60
+ <name>
61
+ <text>Opción múltiple (Multirespuesta)</text>
62
+ </name>
63
+ <questiontext format="html">
64
+ <text><![CDATA[<p>Which are American political parties?</p>]]></text>
65
+ </questiontext>
66
+ <generalfeedback format="html">
67
+ <text></text>
68
+ </generalfeedback>
69
+ <defaultgrade>1.0000000</defaultgrade>
70
+ <penalty>0.3333333</penalty>
71
+ <hidden>0</hidden>
72
+ <single>false</single>
73
+ <shuffleanswers>true</shuffleanswers>
74
+ <answernumbering>abc</answernumbering>
75
+ <correctfeedback format="html">
76
+ <text><![CDATA[<p>Respuesta correcta</p>]]></text>
77
+ </correctfeedback>
78
+ <partiallycorrectfeedback format="html">
79
+ <text><![CDATA[<p>Respuesta parcialmente correcta.</p>]]></text>
80
+ </partiallycorrectfeedback>
81
+ <incorrectfeedback format="html">
82
+ <text><![CDATA[<p>Respuesta incorrecta.</p>]]></text>
83
+ </incorrectfeedback>
84
+ <shownumcorrect/>
85
+ <answer fraction="33.33333" format="html">
86
+ <text><![CDATA[<p>Democrats</p>]]></text>
87
+ <feedback format="html">
88
+ <text></text>
89
+ </feedback>
90
+ </answer>
91
+ <answer fraction="33.33333" format="html">
92
+ <text><![CDATA[<p>Republicans</p>]]></text>
93
+ <feedback format="html">
94
+ <text></text>
95
+ </feedback>
96
+ </answer>
97
+ <answer fraction="33.33333" format="html">
98
+ <text><![CDATA[<p>Greens</p>]]></text>
99
+ <feedback format="html">
100
+ <text></text>
101
+ </feedback>
102
+ </answer>
103
+ <answer fraction="0" format="html">
104
+ <text><![CDATA[<p>Tories</p>]]></text>
105
+ <feedback format="html">
106
+ <text></text>
107
+ </feedback>
108
+ </answer>
109
+ <answer fraction="0" format="html">
110
+ <text><![CDATA[<p>Social Democrats</p>]]></text>
111
+ <feedback format="html">
112
+ <text></text>
113
+ </feedback>
114
+ </answer>
115
+ </question>
116
+
117
+ <!-- question: 1 -->
118
+ <question type="shortanswer">
119
+ <name>
120
+ <text>Respuesta corta</text>
121
+ </name>
122
+ <questiontext format="html">
123
+ <text><![CDATA[<p>The capital of California is...</p>]]></text>
124
+ </questiontext>
125
+ <generalfeedback format="html">
126
+ <text></text>
127
+ </generalfeedback>
128
+ <defaultgrade>1.0000000</defaultgrade>
129
+ <penalty>0.3333333</penalty>
130
+ <hidden>0</hidden>
131
+ <usecase>0</usecase>
132
+ <answer fraction="100" format="moodle_auto_format">
133
+ <text>Sacramento</text>
134
+ <feedback format="html">
135
+ <text></text>
136
+ </feedback>
137
+ </answer>
138
+ </question>
139
+
140
+ <!-- question: 4 -->
141
+ <question type="truefalse">
142
+ <name>
143
+ <text>Verdadero/Falso</text>
144
+ </name>
145
+ <questiontext format="html">
146
+ <text><![CDATA[<p>The week has 7 days.</p>]]></text>
147
+ </questiontext>
148
+ <generalfeedback format="html">
149
+ <text></text>
150
+ </generalfeedback>
151
+ <defaultgrade>1.0000000</defaultgrade>
152
+ <penalty>1.0000000</penalty>
153
+ <hidden>0</hidden>
154
+ <answer fraction="100" format="moodle_auto_format">
155
+ <text>true</text>
156
+ <feedback format="html">
157
+ <text></text>
158
+ </feedback>
159
+ </answer>
160
+ <answer fraction="0" format="moodle_auto_format">
161
+ <text>false</text>
162
+ <feedback format="html">
163
+ <text></text>
164
+ </feedback>
165
+ </answer>
166
+ </question>
167
+
168
+ </quiz>
@@ -0,0 +1,3 @@
1
+ document.addEventListener('DOMContentLoaded', function () {
2
+ alert('Page loaded');
3
+ });
@@ -1,12 +1,15 @@
1
1
  # basic gems/libs we rely on
2
- require 'builder'
3
2
  require 'logger'
4
3
  require 'date'
5
4
 
5
+ require 'ruql/version'
6
+
6
7
  $LOAD_PATH.unshift File.expand_path(File.join(File.dirname(__FILE__)))
7
8
 
8
- # renderers
9
- Dir[File.join(File.dirname(__FILE__),'ruql/renderers/*.rb')].each { |file| require file }
9
+ module Ruql
10
+ class OptionsError < StandardError ; end
11
+ class QuizContentError < StandardError ; end
12
+ end
10
13
 
11
14
  # question types
12
15
  require 'ruql/quiz'
@@ -22,3 +25,4 @@ require 'ruql/open_assessment/criterion'
22
25
  require 'ruql/open_assessment/option'
23
26
  require 'ruql/open_assessment/training'
24
27
  require 'ruql/open_assessment/training_criterion'
28
+ require 'ruql/stats'
@@ -1,29 +1,16 @@
1
1
  class Answer
2
2
  include Comparable
3
- attr_accessor :answer_text, :explanation, :correct
3
+ attr_accessor :answer_text, :explanation
4
4
  attr_reader :correct
5
5
  attr_reader :builder
6
6
  attr_reader :question
7
7
 
8
8
  def <=>(other) ; self.answer_text <=> other.answer_text ; end
9
9
  def correct? ; !!correct ; end
10
- def has_explanation? ; @explanation.to_s != '' ; end
11
- def initialize(answer_text = '', correct = false, explanation=nil, question=nil)
10
+ def has_explanation? ; !!explanation ; end
11
+ def initialize(answer_text, correct, explanation=nil)
12
12
  @answer_text = answer_text
13
13
  @correct = !!correct # ensure boolean
14
14
  @explanation = explanation
15
- @question = question
16
- end
17
-
18
- def to_JSON
19
- Hash[instance_variables.collect { |var| [var.to_s.delete('@'), instance_variable_get(var)] }]
20
- end
21
-
22
- def self.from_JSON(hash)
23
- answer = Answer.new
24
- hash.each do |key, value|
25
- answer.send((key + '=').to_sym, value)
26
- end
27
- answer
28
15
  end
29
16
  end