ruql 0.1.4 → 0.1.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/ruql +1 -0
- data/lib/ruql/answer.rb +3 -2
- data/lib/ruql/question.rb +14 -7
- data/lib/ruql/renderers/html5_renderer.rb +7 -3
- metadata +21 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1a384710404460b95c945d6a1fb850c88531db8a
|
4
|
+
data.tar.gz: 5c6af8b878133a20c3f7b0e4e38a184b4b0b7400
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: feb04ca43e5e83c6e6a97f042ab03b3692663a23f835783121edd68bc3ebba1b3ffe728ab682edf053055ef64222625cf8f056a93112ebc287314f475edb0f4a
|
7
|
+
data.tar.gz: 0414a7abbd51a50703b290c2a912575b6fbaead7330cfbcede247950dd67e0e4d84a6f6e6d35120d26e8fdbcb37a6b103c75d512211e16b9db8eb2fcdc2b5736
|
data/bin/ruql
CHANGED
@@ -98,6 +98,7 @@ def main
|
|
98
98
|
raise "Unknown renderer '#{renderer}'" unless Quiz.get_renderer(renderer)
|
99
99
|
|
100
100
|
opts = Getopt::Long.getopts(
|
101
|
+
['-v', '--version', Getopt::BOOLEAN],
|
101
102
|
['-o', '--list-type', Getopt::REQUIRED],
|
102
103
|
['-r', '--report', Getopt::REQUIRED],
|
103
104
|
['-a', '--start', Getopt::REQUIRED],
|
data/lib/ruql/answer.rb
CHANGED
@@ -7,11 +7,12 @@ class Answer
|
|
7
7
|
|
8
8
|
def <=>(other) ; self.answer_text <=> other.answer_text ; end
|
9
9
|
def correct? ; !!correct ; end
|
10
|
-
def has_explanation? ;
|
11
|
-
def initialize(answer_text = '', correct = false, explanation=nil)
|
10
|
+
def has_explanation? ; @explanation.to_s != '' ; end
|
11
|
+
def initialize(answer_text = '', correct = false, explanation=nil, question=nil)
|
12
12
|
@answer_text = answer_text
|
13
13
|
@correct = !!correct # ensure boolean
|
14
14
|
@explanation = explanation
|
15
|
+
@question = question
|
15
16
|
end
|
16
17
|
|
17
18
|
def to_JSON
|
data/lib/ruql/question.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
class Question
|
2
2
|
attr_accessor :question_text,
|
3
|
-
:answers,
|
3
|
+
:answers,
|
4
4
|
:question_image,
|
5
5
|
:randomize,
|
6
6
|
:points,
|
@@ -19,28 +19,35 @@ class Question
|
|
19
19
|
@question_image = options[:image]
|
20
20
|
@question_tags = []
|
21
21
|
@question_uid = (options.delete(:uid) || SecureRandom.uuid).to_s
|
22
|
+
@explanation = nil
|
22
23
|
@question_comment = ''
|
23
24
|
end
|
24
25
|
def raw? ; !!@raw ; end
|
25
26
|
|
27
|
+
def has_explanation? ; @explanation.to_s != '' ; end
|
28
|
+
|
29
|
+
def explanation(text=nil)
|
30
|
+
if text
|
31
|
+
@explanation = text
|
32
|
+
else
|
33
|
+
@explanation
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
26
37
|
def uid(u) ; @question_uid = u ; end
|
27
38
|
|
28
39
|
def text(s) ; @question_text = s ; end
|
29
40
|
|
30
|
-
def explanation(text)
|
31
|
-
@answers.each { |answer| answer.explanation ||= text }
|
32
|
-
end
|
33
|
-
|
34
41
|
def image(url)
|
35
42
|
@question_image = url
|
36
43
|
end
|
37
44
|
|
38
45
|
def answer(text, opts={})
|
39
|
-
@answers << Answer.new(text, correct=true, opts[:explanation])
|
46
|
+
@answers << Answer.new(text, correct=true, opts[:explanation], self)
|
40
47
|
end
|
41
48
|
|
42
49
|
def distractor(text, opts={})
|
43
|
-
@answers << Answer.new(text, correct=false, opts[:explanation])
|
50
|
+
@answers << Answer.new(text, correct=false, opts[:explanation], self)
|
44
51
|
end
|
45
52
|
|
46
53
|
# these are ignored but legal for now:
|
@@ -62,6 +62,10 @@ class Html5Renderer
|
|
62
62
|
if q.raw? then @h.li { |l| l << answer.answer_text } else @h.li answer.answer_text end
|
63
63
|
end
|
64
64
|
end
|
65
|
+
if @show_solutions && ((exp = q.explanation.to_s) != '')
|
66
|
+
@h.br
|
67
|
+
if q.raw? then @h.span(:class => 'explanation') { |p| p << exp } else @h.span(exp, :class => 'explanation') end
|
68
|
+
end
|
65
69
|
end
|
66
70
|
end
|
67
71
|
self
|
@@ -100,10 +104,10 @@ class Html5Renderer
|
|
100
104
|
answer.correct? ? "CORRECT: " : "INCORRECT: ")
|
101
105
|
end
|
102
106
|
@h.li(args) do
|
103
|
-
if raw then @h.
|
107
|
+
if raw then @h.span { |p| p << answer.answer_text } else @h.span answer.answer_text end
|
104
108
|
if answer.has_explanation?
|
105
|
-
|
106
|
-
else @h.
|
109
|
+
@h.br
|
110
|
+
if raw then @h.span(:class => 'explanation') { |p| p << answer.explanation } else @h.span(answer.explanation, :class => 'explanation') end
|
107
111
|
end
|
108
112
|
end
|
109
113
|
end
|
metadata
CHANGED
@@ -1,71 +1,71 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruql
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Armando Fox
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-11-
|
11
|
+
date: 2016-11-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name: builder
|
15
14
|
requirement: !ruby/object:Gem::Requirement
|
16
15
|
requirements:
|
17
|
-
- -
|
16
|
+
- - '>='
|
18
17
|
- !ruby/object:Gem::Version
|
19
18
|
version: '3.0'
|
20
|
-
type: :runtime
|
21
19
|
prerelease: false
|
20
|
+
name: builder
|
22
21
|
version_requirements: !ruby/object:Gem::Requirement
|
23
22
|
requirements:
|
24
|
-
- -
|
23
|
+
- - '>='
|
25
24
|
- !ruby/object:Gem::Version
|
26
25
|
version: '3.0'
|
26
|
+
type: :runtime
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name: getopt
|
29
28
|
requirement: !ruby/object:Gem::Requirement
|
30
29
|
requirements:
|
31
|
-
- -
|
30
|
+
- - '>='
|
32
31
|
- !ruby/object:Gem::Version
|
33
32
|
version: '1.0'
|
34
|
-
type: :runtime
|
35
33
|
prerelease: false
|
34
|
+
name: getopt
|
36
35
|
version_requirements: !ruby/object:Gem::Requirement
|
37
36
|
requirements:
|
38
|
-
- -
|
37
|
+
- - '>='
|
39
38
|
- !ruby/object:Gem::Version
|
40
39
|
version: '1.0'
|
40
|
+
type: :runtime
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name: rspec
|
43
42
|
requirement: !ruby/object:Gem::Requirement
|
44
43
|
requirements:
|
45
|
-
- -
|
44
|
+
- - '>='
|
46
45
|
- !ruby/object:Gem::Version
|
47
46
|
version: '2.0'
|
48
|
-
type: :development
|
49
47
|
prerelease: false
|
48
|
+
name: rspec
|
50
49
|
version_requirements: !ruby/object:Gem::Requirement
|
51
50
|
requirements:
|
52
|
-
- -
|
51
|
+
- - '>='
|
53
52
|
- !ruby/object:Gem::Version
|
54
53
|
version: '2.0'
|
54
|
+
type: :development
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name: activesupport
|
57
56
|
requirement: !ruby/object:Gem::Requirement
|
58
57
|
requirements:
|
59
|
-
- -
|
58
|
+
- - ~>
|
60
59
|
- !ruby/object:Gem::Version
|
61
60
|
version: '4.0'
|
62
|
-
type: :development
|
63
61
|
prerelease: false
|
62
|
+
name: activesupport
|
64
63
|
version_requirements: !ruby/object:Gem::Requirement
|
65
64
|
requirements:
|
66
|
-
- -
|
65
|
+
- - ~>
|
67
66
|
- !ruby/object:Gem::Version
|
68
67
|
version: '4.0'
|
68
|
+
type: :development
|
69
69
|
description: Ruby-embedded DSL for creating short-answer quiz questions
|
70
70
|
email: fox@cs.berkeley.edu
|
71
71
|
executables:
|
@@ -109,17 +109,17 @@ require_paths:
|
|
109
109
|
- lib
|
110
110
|
required_ruby_version: !ruby/object:Gem::Requirement
|
111
111
|
requirements:
|
112
|
-
- -
|
112
|
+
- - '>='
|
113
113
|
- !ruby/object:Gem::Version
|
114
114
|
version: '0'
|
115
115
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
116
116
|
requirements:
|
117
|
-
- -
|
117
|
+
- - '>='
|
118
118
|
- !ruby/object:Gem::Version
|
119
119
|
version: '0'
|
120
120
|
requirements: []
|
121
121
|
rubyforge_project:
|
122
|
-
rubygems_version: 2.5
|
122
|
+
rubygems_version: 2.2.5
|
123
123
|
signing_key:
|
124
124
|
specification_version: 4
|
125
125
|
summary: Ruby question language
|