qti 2.4.0 → 2.4.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/lib/qti/v1/models/interactions/base_fill_blank_interaction.rb +33 -1
- data/lib/qti/v1/models/interactions/canvas_multiple_dropdown.rb +2 -29
- data/lib/qti/version.rb +1 -1
- data/spec/fixtures/items_1.2/canvas_multiple_fib_extra_brackets.xml +244 -0
- data/spec/lib/qti/v1/models/interactions/base_fill_blank_interaction_spec.rb +146 -0
- data/spec/lib/qti/v1/models/interactions/canvas_multiple_dropdown_spec.rb +0 -27
- metadata +7 -10
- data/spec/gemfiles/rails-5.1.gemfile.lock +0 -212
- data/spec/gemfiles/rails-5.2.gemfile.lock +0 -220
- data/spec/gemfiles/rails-6.0.gemfile.lock +0 -236
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: e2bee92dd9195efe9dc1090f31feddbdd5855bcc568d12fa96295ed76170a35b
|
4
|
+
data.tar.gz: c8425f330cd1064c9f6bed05b0d8b9b320c0459ed500effbbe68401763a8700b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a2f27410ea9b343e14556b8974acd7d5b6ab6221f1648bb83d5f59f1dd8959f7113f2c8994f1238b705e4031dafd1b985d0e665587f1606339c492d0f458fea4
|
7
|
+
data.tar.gz: c21efb6d52ff0d4651ba245f95d5c993cc500e9c9ff147fd866d811b0e2e6ba712fbc41dd0337b7dfc347da409985d13a05f68c81357c76f9c0ffde0b9f972e3
|
@@ -7,7 +7,7 @@ module Qti
|
|
7
7
|
|
8
8
|
def canvas_stem_items(item_prompt)
|
9
9
|
item_prompt.split(CANVAS_REGEX).map.with_index do |stem_item, index|
|
10
|
-
if stem_item
|
10
|
+
if canvas_fib_response_ids.include?(stem_item)
|
11
11
|
# Strip the brackets before searching
|
12
12
|
stem_blank(index, canvas_blank_id(stem_item[1..-2]))
|
13
13
|
else
|
@@ -43,6 +43,38 @@ module Qti
|
|
43
43
|
end
|
44
44
|
blank_id
|
45
45
|
end
|
46
|
+
|
47
|
+
def canvas_fib_responses
|
48
|
+
@base_canvas_blanks ||= node.xpath('.//xmlns:response_lid').map do |resp|
|
49
|
+
index = 0
|
50
|
+
{
|
51
|
+
id: resp[:ident],
|
52
|
+
choices:
|
53
|
+
resp.xpath('.//xmlns:response_label').map do |bnode|
|
54
|
+
canvas_blank_choice(bnode, index += 1)
|
55
|
+
end
|
56
|
+
}
|
57
|
+
end
|
58
|
+
@base_canvas_blanks
|
59
|
+
end
|
60
|
+
|
61
|
+
def canvas_fib_response_ids
|
62
|
+
@canvas_fib_response_ids ||= canvas_fib_responses.map { |b| "[#{b[:id].sub(/^response_/, '')}]" }
|
63
|
+
end
|
64
|
+
|
65
|
+
private
|
66
|
+
|
67
|
+
def canvas_blank_choice(bnode, index)
|
68
|
+
bnode_id = bnode[:ident]
|
69
|
+
choice = {
|
70
|
+
id: bnode_id,
|
71
|
+
position: index + 1,
|
72
|
+
item_body: bnode.at_xpath('.//xmlns:mattext').text
|
73
|
+
}
|
74
|
+
@blank_choices ||= {}
|
75
|
+
@blank_choices[bnode_id] = choice
|
76
|
+
choice
|
77
|
+
end
|
46
78
|
end
|
47
79
|
end
|
48
80
|
end
|
@@ -14,19 +14,6 @@ module Qti
|
|
14
14
|
canvas_stem_items(node.at_xpath('.//xmlns:presentation/xmlns:material/xmlns:mattext').text)
|
15
15
|
end
|
16
16
|
|
17
|
-
def blanks
|
18
|
-
@blanks = node.xpath('.//xmlns:response_lid').map do |resp|
|
19
|
-
index = 0
|
20
|
-
{
|
21
|
-
id: resp[:ident],
|
22
|
-
choices:
|
23
|
-
resp.xpath('.//xmlns:response_label').map do |bnode|
|
24
|
-
blank_choice(bnode, index += 1)
|
25
|
-
end
|
26
|
-
}
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
17
|
def scoring_data_structs
|
31
18
|
answers.map do |answer|
|
32
19
|
ScoringData.new(
|
@@ -42,12 +29,12 @@ module Qti
|
|
42
29
|
end
|
43
30
|
|
44
31
|
def text_for_entry(entry_id)
|
45
|
-
|
32
|
+
canvas_fib_responses
|
46
33
|
@blank_choices[entry_id][:item_body]
|
47
34
|
end
|
48
35
|
|
49
36
|
def position_for_entry(entry_id)
|
50
|
-
|
37
|
+
canvas_fib_responses
|
51
38
|
@blank_choices[entry_id][:position]
|
52
39
|
end
|
53
40
|
|
@@ -63,20 +50,6 @@ module Qti
|
|
63
50
|
}
|
64
51
|
end
|
65
52
|
end
|
66
|
-
|
67
|
-
private
|
68
|
-
|
69
|
-
def blank_choice(bnode, index)
|
70
|
-
bnode_id = bnode[:ident]
|
71
|
-
choice = {
|
72
|
-
id: bnode_id,
|
73
|
-
position: index + 1,
|
74
|
-
item_body: bnode.at_xpath('.//xmlns:mattext').text
|
75
|
-
}
|
76
|
-
@blank_choices ||= {}
|
77
|
-
@blank_choices[bnode_id] = choice
|
78
|
-
choice
|
79
|
-
end
|
80
53
|
end
|
81
54
|
end
|
82
55
|
end
|
data/lib/qti/version.rb
CHANGED
@@ -0,0 +1,244 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<questestinterop xmlns="http://www.imsglobal.org/xsd/ims_qtiasiv1p2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.imsglobal.org/xsd/ims_qtiasiv1p2 http://www.imsglobal.org/xsd/ims_qtiasiv1p2p1.xsd">
|
3
|
+
<item ident="gdc445634f8b3e063eb009700326194e9" title="L2Q2RUnit8q1">
|
4
|
+
<itemmetadata>
|
5
|
+
<qtimetadata>
|
6
|
+
<qtimetadatafield>
|
7
|
+
<fieldlabel>question_type</fieldlabel>
|
8
|
+
<fieldentry>multiple_dropdowns_question</fieldentry>
|
9
|
+
</qtimetadatafield>
|
10
|
+
<qtimetadatafield>
|
11
|
+
<fieldlabel>points_possible</fieldlabel>
|
12
|
+
<fieldentry>7.0</fieldentry>
|
13
|
+
</qtimetadatafield>
|
14
|
+
<qtimetadatafield>
|
15
|
+
<fieldlabel>original_answer_ids</fieldlabel>
|
16
|
+
<fieldentry>8464,265,3002,1356,5614,4002,8630,7844,3602,9525,8390,8745,3760,7542,1523,3317,6768,5823,2492,4494,6742,794,4259,4851,8574</fieldentry>
|
17
|
+
</qtimetadatafield>
|
18
|
+
<qtimetadatafield>
|
19
|
+
<fieldlabel>assessment_question_identifierref</fieldlabel>
|
20
|
+
<fieldentry>gf47b767d37e06559ff801f2d253307ba</fieldentry>
|
21
|
+
</qtimetadatafield>
|
22
|
+
</qtimetadata>
|
23
|
+
</itemmetadata>
|
24
|
+
<presentation>
|
25
|
+
<material>
|
26
|
+
<mattext texttype="text/html"><div>
|
27
|
+
<p><strong><span data-contrast="none">LOREM </span></strong></p>
|
28
|
+
<p><strong><span data-contrast="none">Lorem ipsum dolor sit amet consecteur</span></strong><strong><span data-contrast="none">to</span></strong><strong><span data-contrast="none">? Write the letter of the correct paragraph</span></strong></p>
|
29
|
+
<p> </p>
|
30
|
+
<p><span data-contrast="none"><strong>A.</strong> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in. </span></p>
|
31
|
+
<p><span data-contrast="none"><strong>B</strong>. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in. </span></p>
|
32
|
+
<p><span data-contrast="none"><strong>C</strong>. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. </span></p>
|
33
|
+
<p><span data-contrast="none"><strong>D</strong>. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt. </span></p>
|
34
|
+
<p><span data-contrast="none"><strong>E</strong>. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in. </span></p>
|
35
|
+
<p><span data-ccp-props='{"201341983":0,"335559739":160,"335559740":240}'> </span><span data-contrast="none">1</span><span data-contrast="none">. L</span><i><span data-contrast="none">orem</span></i><i><span data-contrast="none"> impsum dolor / </span></i><i><span data-contrast="none">ppl</span></i><i><span data-contrast="none"> sit amet consectetur </span></i><span data-contrast="auto"> </span><span data-ccp-props='{"134233117":true,"134233118":true,"201341983":0,"335559685":1080,"335559739":160,"335559740":240,"335559991":1080}'> </span></p>
|
36
|
+
<p><span data-contrast="auto"> </span><span data-contrast="none">This note refers to paragraph </span><strong><span data-contrast="none">[1]</span></strong><strong><span data-contrast="auto"> </span></strong><span data-ccp-props='{"134233117":true,"134233118":true,"201341983":0,"335559685":1080,"335559739":160,"335559740":240}'> </span></p>
|
37
|
+
<p><span data-contrast="none">2</span><span data-contrast="none">. L</span><i><span data-contrast="none">orem</span></i><i><span data-contrast="none"> ipsum dolor sit amet / </span></i><i><span data-contrast="none">ppl</span></i><i><span data-contrast="none"> consectetur adipiscing</span></i><span data-contrast="auto"> </span><span data-ccp-props='{"134233117":true,"134233118":true,"201341983":0,"335559739":160,"335559740":240}'> </span></p>
|
38
|
+
<p><span data-contrast="auto"> </span><span data-contrast="none">This note refers to paragraph </span> <strong><span data-contrast="none">[2]</span></strong><span data-ccp-props='{"134233117":true,"134233118":true,"201341983":0,"335559685":1080,"335559739":160,"335559740":240}'> </span></p>
|
39
|
+
<p><span data-contrast="none">3</span><span data-contrast="none">. </span><i><span data-contrast="none">Lorem</span></i><i><span data-contrast="none"> ipsum dolor sit amet</span></i><span data-contrast="auto"> </span><span data-ccp-props='{"134233117":true,"134233118":true,"201341983":0,"335559685":1080,"335559739":160,"335559740":240,"335559991":1080}'> </span></p>
|
40
|
+
<p><span data-contrast="auto"> </span><span data-contrast="none">This note refers to paragraph </span><strong><span data-contrast="none">[3]</span></strong><span data-contrast="auto"> </span><span data-ccp-props='{"134233117":true,"134233118":true,"201341983":0,"335559685":1080,"335559739":160,"335559740":240}'> </span></p>
|
41
|
+
<p><span data-contrast="none">4</span><span data-contrast="none">. L</span><i><span data-contrast="none">orem</span></i><i><span data-contrast="none"> ipsum dolor sit amet consectetur</span></i><span data-contrast="auto"> </span><span data-ccp-props='{"134233117":true,"134233118":true,"201341983":0,"335559739":160,"335559740":240}'> </span></p>
|
42
|
+
<p><span data-contrast="auto"> </span><span data-contrast="none">This note refers to paragraph </span><strong><span data-contrast="none">[4]</span></strong></p>
|
43
|
+
<p><span data-contrast="none">5</span><span data-contrast="none">. L</span><i><span data-contrast="none">irst</span></i><i><span data-contrast="none"> orem ipsum dolor sit </span></i><i><span data-contrast="none">ppl</span></i><span data-contrast="auto"> </span><span data-ccp-props='{"134233117":true,"134233118":true,"201341983":0,"335559739":160,"335559740":240}'> </span></p>
|
44
|
+
<p><span data-contrast="auto"> </span><span data-contrast="none">This note refers to paragraph </span><strong><span data-contrast="none">[5]</span></strong></p>
|
45
|
+
</div></mattext>
|
46
|
+
</material>
|
47
|
+
<response_lid ident="response_1">
|
48
|
+
<material>
|
49
|
+
<mattext>1</mattext>
|
50
|
+
</material>
|
51
|
+
<render_choice>
|
52
|
+
<response_label ident="8464">
|
53
|
+
<material>
|
54
|
+
<mattext texttype="text/plain">A</mattext>
|
55
|
+
</material>
|
56
|
+
</response_label>
|
57
|
+
<response_label ident="265">
|
58
|
+
<material>
|
59
|
+
<mattext texttype="text/plain">B</mattext>
|
60
|
+
</material>
|
61
|
+
</response_label>
|
62
|
+
<response_label ident="3002">
|
63
|
+
<material>
|
64
|
+
<mattext texttype="text/plain">C</mattext>
|
65
|
+
</material>
|
66
|
+
</response_label>
|
67
|
+
<response_label ident="1356">
|
68
|
+
<material>
|
69
|
+
<mattext texttype="text/plain">D</mattext>
|
70
|
+
</material>
|
71
|
+
</response_label>
|
72
|
+
<response_label ident="5614">
|
73
|
+
<material>
|
74
|
+
<mattext texttype="text/plain">E</mattext>
|
75
|
+
</material>
|
76
|
+
</response_label>
|
77
|
+
</render_choice>
|
78
|
+
</response_lid>
|
79
|
+
<response_lid ident="response_2">
|
80
|
+
<material>
|
81
|
+
<mattext>2</mattext>
|
82
|
+
</material>
|
83
|
+
<render_choice>
|
84
|
+
<response_label ident="4002">
|
85
|
+
<material>
|
86
|
+
<mattext texttype="text/plain">A</mattext>
|
87
|
+
</material>
|
88
|
+
</response_label>
|
89
|
+
<response_label ident="8630">
|
90
|
+
<material>
|
91
|
+
<mattext texttype="text/plain">B</mattext>
|
92
|
+
</material>
|
93
|
+
</response_label>
|
94
|
+
<response_label ident="7844">
|
95
|
+
<material>
|
96
|
+
<mattext texttype="text/plain">C</mattext>
|
97
|
+
</material>
|
98
|
+
</response_label>
|
99
|
+
<response_label ident="3602">
|
100
|
+
<material>
|
101
|
+
<mattext texttype="text/plain">D</mattext>
|
102
|
+
</material>
|
103
|
+
</response_label>
|
104
|
+
<response_label ident="9525">
|
105
|
+
<material>
|
106
|
+
<mattext texttype="text/plain">E</mattext>
|
107
|
+
</material>
|
108
|
+
</response_label>
|
109
|
+
</render_choice>
|
110
|
+
</response_lid>
|
111
|
+
<response_lid ident="response_3">
|
112
|
+
<material>
|
113
|
+
<mattext>3</mattext>
|
114
|
+
</material>
|
115
|
+
<render_choice>
|
116
|
+
<response_label ident="8390">
|
117
|
+
<material>
|
118
|
+
<mattext texttype="text/plain">A</mattext>
|
119
|
+
</material>
|
120
|
+
</response_label>
|
121
|
+
<response_label ident="8745">
|
122
|
+
<material>
|
123
|
+
<mattext texttype="text/plain">B</mattext>
|
124
|
+
</material>
|
125
|
+
</response_label>
|
126
|
+
<response_label ident="3760">
|
127
|
+
<material>
|
128
|
+
<mattext texttype="text/plain">C</mattext>
|
129
|
+
</material>
|
130
|
+
</response_label>
|
131
|
+
<response_label ident="7542">
|
132
|
+
<material>
|
133
|
+
<mattext texttype="text/plain">D</mattext>
|
134
|
+
</material>
|
135
|
+
</response_label>
|
136
|
+
<response_label ident="1523">
|
137
|
+
<material>
|
138
|
+
<mattext texttype="text/plain">E</mattext>
|
139
|
+
</material>
|
140
|
+
</response_label>
|
141
|
+
</render_choice>
|
142
|
+
</response_lid>
|
143
|
+
<response_lid ident="response_4">
|
144
|
+
<material>
|
145
|
+
<mattext>4</mattext>
|
146
|
+
</material>
|
147
|
+
<render_choice>
|
148
|
+
<response_label ident="3317">
|
149
|
+
<material>
|
150
|
+
<mattext texttype="text/plain">A</mattext>
|
151
|
+
</material>
|
152
|
+
</response_label>
|
153
|
+
<response_label ident="6768">
|
154
|
+
<material>
|
155
|
+
<mattext texttype="text/plain">B</mattext>
|
156
|
+
</material>
|
157
|
+
</response_label>
|
158
|
+
<response_label ident="5823">
|
159
|
+
<material>
|
160
|
+
<mattext texttype="text/plain">C</mattext>
|
161
|
+
</material>
|
162
|
+
</response_label>
|
163
|
+
<response_label ident="2492">
|
164
|
+
<material>
|
165
|
+
<mattext texttype="text/plain">D</mattext>
|
166
|
+
</material>
|
167
|
+
</response_label>
|
168
|
+
<response_label ident="4494">
|
169
|
+
<material>
|
170
|
+
<mattext texttype="text/plain">E</mattext>
|
171
|
+
</material>
|
172
|
+
</response_label>
|
173
|
+
</render_choice>
|
174
|
+
</response_lid>
|
175
|
+
<response_lid ident="response_5">
|
176
|
+
<material>
|
177
|
+
<mattext>5</mattext>
|
178
|
+
</material>
|
179
|
+
<render_choice>
|
180
|
+
<response_label ident="6742">
|
181
|
+
<material>
|
182
|
+
<mattext texttype="text/plain">A</mattext>
|
183
|
+
</material>
|
184
|
+
</response_label>
|
185
|
+
<response_label ident="794">
|
186
|
+
<material>
|
187
|
+
<mattext texttype="text/plain">B</mattext>
|
188
|
+
</material>
|
189
|
+
</response_label>
|
190
|
+
<response_label ident="4259">
|
191
|
+
<material>
|
192
|
+
<mattext texttype="text/plain">C</mattext>
|
193
|
+
</material>
|
194
|
+
</response_label>
|
195
|
+
<response_label ident="4851">
|
196
|
+
<material>
|
197
|
+
<mattext texttype="text/plain">D</mattext>
|
198
|
+
</material>
|
199
|
+
</response_label>
|
200
|
+
<response_label ident="8574">
|
201
|
+
<material>
|
202
|
+
<mattext texttype="text/plain">E</mattext>
|
203
|
+
</material>
|
204
|
+
</response_label>
|
205
|
+
</render_choice>
|
206
|
+
</response_lid>
|
207
|
+
</presentation>
|
208
|
+
<resprocessing>
|
209
|
+
<outcomes>
|
210
|
+
<decvar maxvalue="100" minvalue="0" varname="SCORE" vartype="Decimal"/>
|
211
|
+
</outcomes>
|
212
|
+
<respcondition>
|
213
|
+
<conditionvar>
|
214
|
+
<varequal respident="response_1">1356</varequal>
|
215
|
+
</conditionvar>
|
216
|
+
<setvar varname="SCORE" action="Add">20.00</setvar>
|
217
|
+
</respcondition>
|
218
|
+
<respcondition>
|
219
|
+
<conditionvar>
|
220
|
+
<varequal respident="response_2">9525</varequal>
|
221
|
+
</conditionvar>
|
222
|
+
<setvar varname="SCORE" action="Add">20.00</setvar>
|
223
|
+
</respcondition>
|
224
|
+
<respcondition>
|
225
|
+
<conditionvar>
|
226
|
+
<varequal respident="response_3">8745</varequal>
|
227
|
+
</conditionvar>
|
228
|
+
<setvar varname="SCORE" action="Add">20.00</setvar>
|
229
|
+
</respcondition>
|
230
|
+
<respcondition>
|
231
|
+
<conditionvar>
|
232
|
+
<varequal respident="response_4">5823</varequal>
|
233
|
+
</conditionvar>
|
234
|
+
<setvar varname="SCORE" action="Add">20.00</setvar>
|
235
|
+
</respcondition>
|
236
|
+
<respcondition>
|
237
|
+
<conditionvar>
|
238
|
+
<varequal respident="response_5">6742</varequal>
|
239
|
+
</conditionvar>
|
240
|
+
<setvar varname="SCORE" action="Add">20.00</setvar>
|
241
|
+
</respcondition>
|
242
|
+
</resprocessing>
|
243
|
+
</item>
|
244
|
+
</questestinterop>
|
@@ -0,0 +1,146 @@
|
|
1
|
+
describe Qti::V1::Models::Interactions::BaseFillBlankInteraction do
|
2
|
+
let(:fixtures_path) { File.join('spec', 'fixtures', 'items_1.2') }
|
3
|
+
let(:test_object) { Qti::V1::Models::Assessment.from_path!(file_path) }
|
4
|
+
let(:assessment_item_refs) { test_object.assessment_items }
|
5
|
+
let(:loaded_class) { described_class.new(assessment_item_refs.first, test_object) }
|
6
|
+
|
7
|
+
shared_examples_for 'canvas_fib_responses' do
|
8
|
+
it 'returns the canvas_fib_responses' do
|
9
|
+
expect(loaded_class.canvas_fib_responses).to eq(expected_blanks)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
context 'canvas_multiple_dropdowns.xml' do
|
14
|
+
let(:file_path) { File.join(fixtures_path, 'canvas_multiple_dropdowns.xml') }
|
15
|
+
let(:expected_blanks) do
|
16
|
+
[
|
17
|
+
{
|
18
|
+
id: 'response_color1',
|
19
|
+
choices:
|
20
|
+
[
|
21
|
+
{ id: '6548', position: 2, item_body: 'red' },
|
22
|
+
{ id: '5550', position: 3, item_body: 'plaid' }
|
23
|
+
]
|
24
|
+
},
|
25
|
+
{
|
26
|
+
id: 'response_color2',
|
27
|
+
choices:
|
28
|
+
[
|
29
|
+
{ id: '6951', position: 2, item_body: 'blue' },
|
30
|
+
{ id: '4500', position: 3, item_body: 'paisely' }
|
31
|
+
]
|
32
|
+
}
|
33
|
+
]
|
34
|
+
end
|
35
|
+
|
36
|
+
include_examples 'canvas_fib_responses'
|
37
|
+
end
|
38
|
+
|
39
|
+
context 'canvas_multiple_fib.xml' do
|
40
|
+
let(:file_path) { File.join(fixtures_path, 'canvas_multiple_fib.xml') }
|
41
|
+
let(:expected_blanks) do
|
42
|
+
[
|
43
|
+
{
|
44
|
+
id: 'response_color1',
|
45
|
+
choices:
|
46
|
+
[
|
47
|
+
{ id: '9799', item_body: 'red', position: 2 },
|
48
|
+
{ id: '5231', item_body: 'Red', position: 3 }
|
49
|
+
]
|
50
|
+
},
|
51
|
+
{
|
52
|
+
id: 'response_color2',
|
53
|
+
choices:
|
54
|
+
[
|
55
|
+
{ id: '5939', item_body: 'blue', position: 2 },
|
56
|
+
{ id: '6364', item_body: 'Blue', position: 3 }
|
57
|
+
]
|
58
|
+
}
|
59
|
+
]
|
60
|
+
end
|
61
|
+
|
62
|
+
include_examples 'canvas_fib_responses'
|
63
|
+
end
|
64
|
+
|
65
|
+
context 'canvas multiple fill in the blank questions with a single blank' do
|
66
|
+
let(:file_path) { File.join(fixtures_path, 'canvas_multiple_fib_as_single.xml') }
|
67
|
+
let(:expected_blanks) do
|
68
|
+
[
|
69
|
+
{
|
70
|
+
id: 'response_word',
|
71
|
+
choices:
|
72
|
+
[
|
73
|
+
{ id: '3537', item_body: 'word', position: 2 }
|
74
|
+
]
|
75
|
+
}
|
76
|
+
]
|
77
|
+
end
|
78
|
+
|
79
|
+
include_examples 'canvas_fib_responses'
|
80
|
+
end
|
81
|
+
|
82
|
+
context 'canvas multiple fill in the blank questions with a single blank' do
|
83
|
+
let(:file_path) { File.join(fixtures_path, 'canvas_multiple_fib_extra_brackets.xml') }
|
84
|
+
let(:expected_blanks) do
|
85
|
+
[
|
86
|
+
{
|
87
|
+
id: 'response_1',
|
88
|
+
choices:
|
89
|
+
[
|
90
|
+
{ id: '8464', item_body: 'A', position: 2 },
|
91
|
+
{ id: '265', item_body: 'B', position: 3 },
|
92
|
+
{ id: '3002', item_body: 'C', position: 4 },
|
93
|
+
{ id: '1356', item_body: 'D', position: 5 },
|
94
|
+
{ id: '5614', item_body: 'E', position: 6 }
|
95
|
+
]
|
96
|
+
},
|
97
|
+
{
|
98
|
+
id: 'response_2',
|
99
|
+
choices:
|
100
|
+
[
|
101
|
+
{ id: '4002', item_body: 'A', position: 2 },
|
102
|
+
{ id: '8630', item_body: 'B', position: 3 },
|
103
|
+
{ id: '7844', item_body: 'C', position: 4 },
|
104
|
+
{ id: '3602', item_body: 'D', position: 5 },
|
105
|
+
{ id: '9525', item_body: 'E', position: 6 }
|
106
|
+
]
|
107
|
+
},
|
108
|
+
{
|
109
|
+
id: 'response_3',
|
110
|
+
choices:
|
111
|
+
[
|
112
|
+
{ id: '8390', item_body: 'A', position: 2 },
|
113
|
+
{ id: '8745', item_body: 'B', position: 3 },
|
114
|
+
{ id: '3760', item_body: 'C', position: 4 },
|
115
|
+
{ id: '7542', item_body: 'D', position: 5 },
|
116
|
+
{ id: '1523', item_body: 'E', position: 6 }
|
117
|
+
]
|
118
|
+
},
|
119
|
+
{
|
120
|
+
id: 'response_4',
|
121
|
+
choices:
|
122
|
+
[
|
123
|
+
{ id: '3317', item_body: 'A', position: 2 },
|
124
|
+
{ id: '6768', item_body: 'B', position: 3 },
|
125
|
+
{ id: '5823', item_body: 'C', position: 4 },
|
126
|
+
{ id: '2492', item_body: 'D', position: 5 },
|
127
|
+
{ id: '4494', item_body: 'E', position: 6 }
|
128
|
+
]
|
129
|
+
},
|
130
|
+
{
|
131
|
+
id: 'response_5',
|
132
|
+
choices:
|
133
|
+
[
|
134
|
+
{ id: '6742', item_body: 'A', position: 2 },
|
135
|
+
{ id: '794', item_body: 'B', position: 3 },
|
136
|
+
{ id: '4259', item_body: 'C', position: 4 },
|
137
|
+
{ id: '4851', item_body: 'D', position: 5 },
|
138
|
+
{ id: '8574', item_body: 'E', position: 6 }
|
139
|
+
]
|
140
|
+
}
|
141
|
+
]
|
142
|
+
end
|
143
|
+
|
144
|
+
include_examples 'canvas_fib_responses'
|
145
|
+
end
|
146
|
+
end
|
@@ -10,12 +10,6 @@ describe Qti::V1::Models::Interactions::CanvasMultipleDropdownInteraction do
|
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
|
-
shared_examples_for 'blanks' do
|
14
|
-
it 'returns the blanks' do
|
15
|
-
expect(loaded_class.blanks).to eq(expected_blanks)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
13
|
shared_examples_for 'answers' do
|
20
14
|
it 'returns the answers' do
|
21
15
|
expect(loaded_class.answers.count).to eq answer_count
|
@@ -47,26 +41,6 @@ describe Qti::V1::Models::Interactions::CanvasMultipleDropdownInteraction do
|
|
47
41
|
{ id: '6951', position: 2, item_body: 'blue' }
|
48
42
|
]
|
49
43
|
end
|
50
|
-
let(:expected_blanks) do
|
51
|
-
[
|
52
|
-
{
|
53
|
-
id: 'response_color1',
|
54
|
-
choices:
|
55
|
-
[
|
56
|
-
{ id: '6548', position: 2, item_body: 'red' },
|
57
|
-
{ id: '5550', position: 3, item_body: 'plaid' }
|
58
|
-
]
|
59
|
-
},
|
60
|
-
{
|
61
|
-
id: 'response_color2',
|
62
|
-
choices:
|
63
|
-
[
|
64
|
-
{ id: '6951', position: 2, item_body: 'blue' },
|
65
|
-
{ id: '4500', position: 3, item_body: 'paisely' }
|
66
|
-
]
|
67
|
-
}
|
68
|
-
]
|
69
|
-
end
|
70
44
|
let(:expected_stem_items) do
|
71
45
|
[
|
72
46
|
{ id: 'stem_0', position: 1, type: 'text', value: '<div><p>Roses are ' },
|
@@ -97,7 +71,6 @@ describe Qti::V1::Models::Interactions::CanvasMultipleDropdownInteraction do
|
|
97
71
|
|
98
72
|
include_examples 'shuffled?'
|
99
73
|
include_examples 'answers'
|
100
|
-
include_examples 'blanks'
|
101
74
|
include_examples 'stem_items'
|
102
75
|
include_examples 'scoring_data_structs'
|
103
76
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: qti
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.4.
|
4
|
+
version: 2.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hannah Bottalla
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2020-
|
12
|
+
date: 2020-10-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: actionview
|
@@ -356,6 +356,7 @@ files:
|
|
356
356
|
- spec/fixtures/items_1.2/canvas_multiple_dropdowns.xml
|
357
357
|
- spec/fixtures/items_1.2/canvas_multiple_fib.xml
|
358
358
|
- spec/fixtures/items_1.2/canvas_multiple_fib_as_single.xml
|
359
|
+
- spec/fixtures/items_1.2/canvas_multiple_fib_extra_brackets.xml
|
359
360
|
- spec/fixtures/items_1.2/choice.xml
|
360
361
|
- spec/fixtures/items_1.2/essay.xml
|
361
362
|
- spec/fixtures/items_1.2/fib.xml
|
@@ -613,11 +614,8 @@ files:
|
|
613
614
|
- spec/fixtures/with_banks/non_cc_assessments/gab22de457404cb5cf022078f1e4da75e.xml.qti
|
614
615
|
- spec/fixtures/with_banks/non_cc_assessments/gf3edf8167be16b3a65a00ca923132b07.xml.qti
|
615
616
|
- spec/gemfiles/rails-5.1.gemfile
|
616
|
-
- spec/gemfiles/rails-5.1.gemfile.lock
|
617
617
|
- spec/gemfiles/rails-5.2.gemfile
|
618
|
-
- spec/gemfiles/rails-5.2.gemfile.lock
|
619
618
|
- spec/gemfiles/rails-6.0.gemfile
|
620
|
-
- spec/gemfiles/rails-6.0.gemfile.lock
|
621
619
|
- spec/lib/qti/assessment_item_exporter_spec.rb
|
622
620
|
- spec/lib/qti/exporter_spec.rb
|
623
621
|
- spec/lib/qti/models/assessment_meta_spec.rb
|
@@ -629,6 +627,7 @@ files:
|
|
629
627
|
- spec/lib/qti/v1/models/assessment_spec.rb
|
630
628
|
- spec/lib/qti/v1/models/choices/fill_blank_choice_spec.rb
|
631
629
|
- spec/lib/qti/v1/models/choices/logical_identifier_choice_spec.rb
|
630
|
+
- spec/lib/qti/v1/models/interactions/base_fill_blank_interaction_spec.rb
|
632
631
|
- spec/lib/qti/v1/models/interactions/base_interaction_spec.rb
|
633
632
|
- spec/lib/qti/v1/models/interactions/canvas_multiple_dropdown_spec.rb
|
634
633
|
- spec/lib/qti/v1/models/interactions/choice_interaction_spec.rb
|
@@ -686,8 +685,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
686
685
|
- !ruby/object:Gem::Version
|
687
686
|
version: '0'
|
688
687
|
requirements: []
|
689
|
-
|
690
|
-
rubygems_version: 2.6.13
|
688
|
+
rubygems_version: 3.0.3
|
691
689
|
signing_key:
|
692
690
|
specification_version: 4
|
693
691
|
summary: QTI 1.2 and 2.1 import and export models
|
@@ -710,6 +708,7 @@ test_files:
|
|
710
708
|
- spec/fixtures/items_1.2/canvas_multiple_dropdowns.xml
|
711
709
|
- spec/fixtures/items_1.2/canvas_multiple_fib.xml
|
712
710
|
- spec/fixtures/items_1.2/canvas_multiple_fib_as_single.xml
|
711
|
+
- spec/fixtures/items_1.2/canvas_multiple_fib_extra_brackets.xml
|
713
712
|
- spec/fixtures/items_1.2/choice.xml
|
714
713
|
- spec/fixtures/items_1.2/essay.xml
|
715
714
|
- spec/fixtures/items_1.2/fib.xml
|
@@ -967,11 +966,8 @@ test_files:
|
|
967
966
|
- spec/fixtures/with_banks/non_cc_assessments/gab22de457404cb5cf022078f1e4da75e.xml.qti
|
968
967
|
- spec/fixtures/with_banks/non_cc_assessments/gf3edf8167be16b3a65a00ca923132b07.xml.qti
|
969
968
|
- spec/gemfiles/rails-5.1.gemfile
|
970
|
-
- spec/gemfiles/rails-5.1.gemfile.lock
|
971
969
|
- spec/gemfiles/rails-5.2.gemfile
|
972
|
-
- spec/gemfiles/rails-5.2.gemfile.lock
|
973
970
|
- spec/gemfiles/rails-6.0.gemfile
|
974
|
-
- spec/gemfiles/rails-6.0.gemfile.lock
|
975
971
|
- spec/lib/qti/assessment_item_exporter_spec.rb
|
976
972
|
- spec/lib/qti/exporter_spec.rb
|
977
973
|
- spec/lib/qti/models/assessment_meta_spec.rb
|
@@ -983,6 +979,7 @@ test_files:
|
|
983
979
|
- spec/lib/qti/v1/models/assessment_spec.rb
|
984
980
|
- spec/lib/qti/v1/models/choices/fill_blank_choice_spec.rb
|
985
981
|
- spec/lib/qti/v1/models/choices/logical_identifier_choice_spec.rb
|
982
|
+
- spec/lib/qti/v1/models/interactions/base_fill_blank_interaction_spec.rb
|
986
983
|
- spec/lib/qti/v1/models/interactions/base_interaction_spec.rb
|
987
984
|
- spec/lib/qti/v1/models/interactions/canvas_multiple_dropdown_spec.rb
|
988
985
|
- spec/lib/qti/v1/models/interactions/choice_interaction_spec.rb
|
@@ -1,212 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: ../..
|
3
|
-
specs:
|
4
|
-
qti (2.1.0)
|
5
|
-
actionview (>= 5.1.7, < 6.1)
|
6
|
-
activesupport (>= 5.1.7, < 6.1)
|
7
|
-
dry-struct (~> 0.4.0)
|
8
|
-
dry-types (~> 0.12.3)
|
9
|
-
mathml2latex (~> 2.0)
|
10
|
-
nokogiri (~> 1.10)
|
11
|
-
rubyzip (~> 2.0)
|
12
|
-
sanitize (~> 5.1)
|
13
|
-
|
14
|
-
GEM
|
15
|
-
remote: https://rubygems.org/
|
16
|
-
specs:
|
17
|
-
actioncable (5.1.7)
|
18
|
-
actionpack (= 5.1.7)
|
19
|
-
nio4r (~> 2.0)
|
20
|
-
websocket-driver (~> 0.6.1)
|
21
|
-
actionmailer (5.1.7)
|
22
|
-
actionpack (= 5.1.7)
|
23
|
-
actionview (= 5.1.7)
|
24
|
-
activejob (= 5.1.7)
|
25
|
-
mail (~> 2.5, >= 2.5.4)
|
26
|
-
rails-dom-testing (~> 2.0)
|
27
|
-
actionpack (5.1.7)
|
28
|
-
actionview (= 5.1.7)
|
29
|
-
activesupport (= 5.1.7)
|
30
|
-
rack (~> 2.0)
|
31
|
-
rack-test (>= 0.6.3)
|
32
|
-
rails-dom-testing (~> 2.0)
|
33
|
-
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
34
|
-
actionview (5.1.7)
|
35
|
-
activesupport (= 5.1.7)
|
36
|
-
builder (~> 3.1)
|
37
|
-
erubi (~> 1.4)
|
38
|
-
rails-dom-testing (~> 2.0)
|
39
|
-
rails-html-sanitizer (~> 1.0, >= 1.0.3)
|
40
|
-
activejob (5.1.7)
|
41
|
-
activesupport (= 5.1.7)
|
42
|
-
globalid (>= 0.3.6)
|
43
|
-
activemodel (5.1.7)
|
44
|
-
activesupport (= 5.1.7)
|
45
|
-
activerecord (5.1.7)
|
46
|
-
activemodel (= 5.1.7)
|
47
|
-
activesupport (= 5.1.7)
|
48
|
-
arel (~> 8.0)
|
49
|
-
activesupport (5.1.7)
|
50
|
-
concurrent-ruby (~> 1.0, >= 1.0.2)
|
51
|
-
i18n (>= 0.7, < 2)
|
52
|
-
minitest (~> 5.1)
|
53
|
-
tzinfo (~> 1.1)
|
54
|
-
arel (8.0.0)
|
55
|
-
ast (2.4.0)
|
56
|
-
builder (3.2.4)
|
57
|
-
byebug (11.1.3)
|
58
|
-
coderay (1.1.2)
|
59
|
-
concurrent-ruby (1.1.6)
|
60
|
-
crass (1.0.6)
|
61
|
-
diff-lcs (1.3)
|
62
|
-
docile (1.3.2)
|
63
|
-
dry-configurable (0.11.5)
|
64
|
-
concurrent-ruby (~> 1.0)
|
65
|
-
dry-core (~> 0.4, >= 0.4.7)
|
66
|
-
dry-equalizer (~> 0.2)
|
67
|
-
dry-container (0.7.2)
|
68
|
-
concurrent-ruby (~> 1.0)
|
69
|
-
dry-configurable (~> 0.1, >= 0.1.3)
|
70
|
-
dry-core (0.4.9)
|
71
|
-
concurrent-ruby (~> 1.0)
|
72
|
-
dry-equalizer (0.3.0)
|
73
|
-
dry-logic (0.6.1)
|
74
|
-
concurrent-ruby (~> 1.0)
|
75
|
-
dry-core (~> 0.2)
|
76
|
-
dry-equalizer (~> 0.2)
|
77
|
-
dry-struct (0.4.0)
|
78
|
-
dry-core (~> 0.4, >= 0.4.1)
|
79
|
-
dry-equalizer (~> 0.2)
|
80
|
-
dry-types (~> 0.12, >= 0.12.2)
|
81
|
-
ice_nine (~> 0.11)
|
82
|
-
dry-types (0.12.3)
|
83
|
-
concurrent-ruby (~> 1.0)
|
84
|
-
dry-configurable (~> 0.1)
|
85
|
-
dry-container (~> 0.3)
|
86
|
-
dry-core (~> 0.2, >= 0.2.1)
|
87
|
-
dry-equalizer (~> 0.2)
|
88
|
-
dry-logic (~> 0.4, >= 0.4.2)
|
89
|
-
inflecto (~> 0.0.0, >= 0.0.2)
|
90
|
-
erubi (1.9.0)
|
91
|
-
globalid (0.4.2)
|
92
|
-
activesupport (>= 4.2.0)
|
93
|
-
i18n (1.8.2)
|
94
|
-
concurrent-ruby (~> 1.0)
|
95
|
-
ice_nine (0.11.2)
|
96
|
-
inflecto (0.0.2)
|
97
|
-
jaro_winkler (1.5.4)
|
98
|
-
loofah (2.5.0)
|
99
|
-
crass (~> 1.0.2)
|
100
|
-
nokogiri (>= 1.5.9)
|
101
|
-
mail (2.7.1)
|
102
|
-
mini_mime (>= 0.1.1)
|
103
|
-
mathml2latex (2.0.0)
|
104
|
-
nokogiri (~> 1.10)
|
105
|
-
method_source (1.0.0)
|
106
|
-
mini_mime (1.0.2)
|
107
|
-
mini_portile2 (2.4.0)
|
108
|
-
minitest (5.14.0)
|
109
|
-
nio4r (2.5.2)
|
110
|
-
nokogiri (1.10.9)
|
111
|
-
mini_portile2 (~> 2.4.0)
|
112
|
-
nokogumbo (2.0.2)
|
113
|
-
nokogiri (~> 1.8, >= 1.8.4)
|
114
|
-
parallel (1.19.1)
|
115
|
-
parser (2.7.1.2)
|
116
|
-
ast (~> 2.4.0)
|
117
|
-
pry (0.13.1)
|
118
|
-
coderay (~> 1.1)
|
119
|
-
method_source (~> 1.0)
|
120
|
-
rack (2.2.2)
|
121
|
-
rack-test (1.1.0)
|
122
|
-
rack (>= 1.0, < 3)
|
123
|
-
rails (5.1.7)
|
124
|
-
actioncable (= 5.1.7)
|
125
|
-
actionmailer (= 5.1.7)
|
126
|
-
actionpack (= 5.1.7)
|
127
|
-
actionview (= 5.1.7)
|
128
|
-
activejob (= 5.1.7)
|
129
|
-
activemodel (= 5.1.7)
|
130
|
-
activerecord (= 5.1.7)
|
131
|
-
activesupport (= 5.1.7)
|
132
|
-
bundler (>= 1.3.0)
|
133
|
-
railties (= 5.1.7)
|
134
|
-
sprockets-rails (>= 2.0.0)
|
135
|
-
rails-dom-testing (2.0.3)
|
136
|
-
activesupport (>= 4.2.0)
|
137
|
-
nokogiri (>= 1.6)
|
138
|
-
rails-html-sanitizer (1.3.0)
|
139
|
-
loofah (~> 2.3)
|
140
|
-
railties (5.1.7)
|
141
|
-
actionpack (= 5.1.7)
|
142
|
-
activesupport (= 5.1.7)
|
143
|
-
method_source
|
144
|
-
rake (>= 0.8.7)
|
145
|
-
thor (>= 0.18.1, < 2.0)
|
146
|
-
rainbow (3.0.0)
|
147
|
-
rake (12.3.3)
|
148
|
-
rspec (3.9.0)
|
149
|
-
rspec-core (~> 3.9.0)
|
150
|
-
rspec-expectations (~> 3.9.0)
|
151
|
-
rspec-mocks (~> 3.9.0)
|
152
|
-
rspec-core (3.9.2)
|
153
|
-
rspec-support (~> 3.9.3)
|
154
|
-
rspec-expectations (3.9.2)
|
155
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
156
|
-
rspec-support (~> 3.9.0)
|
157
|
-
rspec-mocks (3.9.1)
|
158
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
159
|
-
rspec-support (~> 3.9.0)
|
160
|
-
rspec-support (3.9.3)
|
161
|
-
rubocop (0.74.0)
|
162
|
-
jaro_winkler (~> 1.5.1)
|
163
|
-
parallel (~> 1.10)
|
164
|
-
parser (>= 2.6)
|
165
|
-
rainbow (>= 2.2.2, < 4.0)
|
166
|
-
ruby-progressbar (~> 1.7)
|
167
|
-
unicode-display_width (>= 1.4.0, < 1.7)
|
168
|
-
ruby-progressbar (1.10.1)
|
169
|
-
rubyzip (2.3.0)
|
170
|
-
sanitize (5.1.0)
|
171
|
-
crass (~> 1.0.2)
|
172
|
-
nokogiri (>= 1.8.0)
|
173
|
-
nokogumbo (~> 2.0)
|
174
|
-
simplecov (0.18.5)
|
175
|
-
docile (~> 1.1)
|
176
|
-
simplecov-html (~> 0.11)
|
177
|
-
simplecov-html (0.12.2)
|
178
|
-
sprockets (3.7.2)
|
179
|
-
concurrent-ruby (~> 1.0)
|
180
|
-
rack (> 1, < 3)
|
181
|
-
sprockets-rails (3.2.1)
|
182
|
-
actionpack (>= 4.0)
|
183
|
-
activesupport (>= 4.0)
|
184
|
-
sprockets (>= 3.0.0)
|
185
|
-
thor (1.0.1)
|
186
|
-
thread_safe (0.3.6)
|
187
|
-
tzinfo (1.2.7)
|
188
|
-
thread_safe (~> 0.1)
|
189
|
-
unicode-display_width (1.6.1)
|
190
|
-
websocket-driver (0.6.5)
|
191
|
-
websocket-extensions (>= 0.1.0)
|
192
|
-
websocket-extensions (0.1.4)
|
193
|
-
wwtd (1.4.1)
|
194
|
-
|
195
|
-
PLATFORMS
|
196
|
-
ruby
|
197
|
-
|
198
|
-
DEPENDENCIES
|
199
|
-
bundler (~> 1.17)
|
200
|
-
byebug (~> 11.0)
|
201
|
-
pry
|
202
|
-
qti!
|
203
|
-
rails (~> 5.1.4)
|
204
|
-
rake (~> 12.3)
|
205
|
-
rspec (~> 3.8)
|
206
|
-
rspec-mocks (~> 3.8)
|
207
|
-
rubocop (~> 0.74.0)
|
208
|
-
simplecov
|
209
|
-
wwtd (~> 1.4)
|
210
|
-
|
211
|
-
BUNDLED WITH
|
212
|
-
1.17.3
|
@@ -1,220 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: ../..
|
3
|
-
specs:
|
4
|
-
qti (2.1.0)
|
5
|
-
actionview (>= 5.1.7, < 6.1)
|
6
|
-
activesupport (>= 5.1.7, < 6.1)
|
7
|
-
dry-struct (~> 0.4.0)
|
8
|
-
dry-types (~> 0.12.3)
|
9
|
-
mathml2latex (~> 2.0)
|
10
|
-
nokogiri (~> 1.10)
|
11
|
-
rubyzip (~> 2.0)
|
12
|
-
sanitize (~> 5.1)
|
13
|
-
|
14
|
-
GEM
|
15
|
-
remote: https://rubygems.org/
|
16
|
-
specs:
|
17
|
-
actioncable (5.2.4.2)
|
18
|
-
actionpack (= 5.2.4.2)
|
19
|
-
nio4r (~> 2.0)
|
20
|
-
websocket-driver (>= 0.6.1)
|
21
|
-
actionmailer (5.2.4.2)
|
22
|
-
actionpack (= 5.2.4.2)
|
23
|
-
actionview (= 5.2.4.2)
|
24
|
-
activejob (= 5.2.4.2)
|
25
|
-
mail (~> 2.5, >= 2.5.4)
|
26
|
-
rails-dom-testing (~> 2.0)
|
27
|
-
actionpack (5.2.4.2)
|
28
|
-
actionview (= 5.2.4.2)
|
29
|
-
activesupport (= 5.2.4.2)
|
30
|
-
rack (~> 2.0, >= 2.0.8)
|
31
|
-
rack-test (>= 0.6.3)
|
32
|
-
rails-dom-testing (~> 2.0)
|
33
|
-
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
34
|
-
actionview (5.2.4.2)
|
35
|
-
activesupport (= 5.2.4.2)
|
36
|
-
builder (~> 3.1)
|
37
|
-
erubi (~> 1.4)
|
38
|
-
rails-dom-testing (~> 2.0)
|
39
|
-
rails-html-sanitizer (~> 1.0, >= 1.0.3)
|
40
|
-
activejob (5.2.4.2)
|
41
|
-
activesupport (= 5.2.4.2)
|
42
|
-
globalid (>= 0.3.6)
|
43
|
-
activemodel (5.2.4.2)
|
44
|
-
activesupport (= 5.2.4.2)
|
45
|
-
activerecord (5.2.4.2)
|
46
|
-
activemodel (= 5.2.4.2)
|
47
|
-
activesupport (= 5.2.4.2)
|
48
|
-
arel (>= 9.0)
|
49
|
-
activestorage (5.2.4.2)
|
50
|
-
actionpack (= 5.2.4.2)
|
51
|
-
activerecord (= 5.2.4.2)
|
52
|
-
marcel (~> 0.3.1)
|
53
|
-
activesupport (5.2.4.2)
|
54
|
-
concurrent-ruby (~> 1.0, >= 1.0.2)
|
55
|
-
i18n (>= 0.7, < 2)
|
56
|
-
minitest (~> 5.1)
|
57
|
-
tzinfo (~> 1.1)
|
58
|
-
arel (9.0.0)
|
59
|
-
ast (2.4.0)
|
60
|
-
builder (3.2.4)
|
61
|
-
byebug (11.1.3)
|
62
|
-
coderay (1.1.2)
|
63
|
-
concurrent-ruby (1.1.6)
|
64
|
-
crass (1.0.6)
|
65
|
-
diff-lcs (1.3)
|
66
|
-
docile (1.3.2)
|
67
|
-
dry-configurable (0.11.5)
|
68
|
-
concurrent-ruby (~> 1.0)
|
69
|
-
dry-core (~> 0.4, >= 0.4.7)
|
70
|
-
dry-equalizer (~> 0.2)
|
71
|
-
dry-container (0.7.2)
|
72
|
-
concurrent-ruby (~> 1.0)
|
73
|
-
dry-configurable (~> 0.1, >= 0.1.3)
|
74
|
-
dry-core (0.4.9)
|
75
|
-
concurrent-ruby (~> 1.0)
|
76
|
-
dry-equalizer (0.3.0)
|
77
|
-
dry-logic (0.6.1)
|
78
|
-
concurrent-ruby (~> 1.0)
|
79
|
-
dry-core (~> 0.2)
|
80
|
-
dry-equalizer (~> 0.2)
|
81
|
-
dry-struct (0.4.0)
|
82
|
-
dry-core (~> 0.4, >= 0.4.1)
|
83
|
-
dry-equalizer (~> 0.2)
|
84
|
-
dry-types (~> 0.12, >= 0.12.2)
|
85
|
-
ice_nine (~> 0.11)
|
86
|
-
dry-types (0.12.3)
|
87
|
-
concurrent-ruby (~> 1.0)
|
88
|
-
dry-configurable (~> 0.1)
|
89
|
-
dry-container (~> 0.3)
|
90
|
-
dry-core (~> 0.2, >= 0.2.1)
|
91
|
-
dry-equalizer (~> 0.2)
|
92
|
-
dry-logic (~> 0.4, >= 0.4.2)
|
93
|
-
inflecto (~> 0.0.0, >= 0.0.2)
|
94
|
-
erubi (1.9.0)
|
95
|
-
globalid (0.4.2)
|
96
|
-
activesupport (>= 4.2.0)
|
97
|
-
i18n (1.8.2)
|
98
|
-
concurrent-ruby (~> 1.0)
|
99
|
-
ice_nine (0.11.2)
|
100
|
-
inflecto (0.0.2)
|
101
|
-
jaro_winkler (1.5.4)
|
102
|
-
loofah (2.5.0)
|
103
|
-
crass (~> 1.0.2)
|
104
|
-
nokogiri (>= 1.5.9)
|
105
|
-
mail (2.7.1)
|
106
|
-
mini_mime (>= 0.1.1)
|
107
|
-
marcel (0.3.3)
|
108
|
-
mimemagic (~> 0.3.2)
|
109
|
-
mathml2latex (2.0.0)
|
110
|
-
nokogiri (~> 1.10)
|
111
|
-
method_source (1.0.0)
|
112
|
-
mimemagic (0.3.5)
|
113
|
-
mini_mime (1.0.2)
|
114
|
-
mini_portile2 (2.4.0)
|
115
|
-
minitest (5.14.0)
|
116
|
-
nio4r (2.5.2)
|
117
|
-
nokogiri (1.10.9)
|
118
|
-
mini_portile2 (~> 2.4.0)
|
119
|
-
nokogumbo (2.0.2)
|
120
|
-
nokogiri (~> 1.8, >= 1.8.4)
|
121
|
-
parallel (1.19.1)
|
122
|
-
parser (2.7.1.2)
|
123
|
-
ast (~> 2.4.0)
|
124
|
-
pry (0.13.1)
|
125
|
-
coderay (~> 1.1)
|
126
|
-
method_source (~> 1.0)
|
127
|
-
rack (2.2.2)
|
128
|
-
rack-test (1.1.0)
|
129
|
-
rack (>= 1.0, < 3)
|
130
|
-
rails (5.2.4.2)
|
131
|
-
actioncable (= 5.2.4.2)
|
132
|
-
actionmailer (= 5.2.4.2)
|
133
|
-
actionpack (= 5.2.4.2)
|
134
|
-
actionview (= 5.2.4.2)
|
135
|
-
activejob (= 5.2.4.2)
|
136
|
-
activemodel (= 5.2.4.2)
|
137
|
-
activerecord (= 5.2.4.2)
|
138
|
-
activestorage (= 5.2.4.2)
|
139
|
-
activesupport (= 5.2.4.2)
|
140
|
-
bundler (>= 1.3.0)
|
141
|
-
railties (= 5.2.4.2)
|
142
|
-
sprockets-rails (>= 2.0.0)
|
143
|
-
rails-dom-testing (2.0.3)
|
144
|
-
activesupport (>= 4.2.0)
|
145
|
-
nokogiri (>= 1.6)
|
146
|
-
rails-html-sanitizer (1.3.0)
|
147
|
-
loofah (~> 2.3)
|
148
|
-
railties (5.2.4.2)
|
149
|
-
actionpack (= 5.2.4.2)
|
150
|
-
activesupport (= 5.2.4.2)
|
151
|
-
method_source
|
152
|
-
rake (>= 0.8.7)
|
153
|
-
thor (>= 0.19.0, < 2.0)
|
154
|
-
rainbow (3.0.0)
|
155
|
-
rake (12.3.3)
|
156
|
-
rspec (3.9.0)
|
157
|
-
rspec-core (~> 3.9.0)
|
158
|
-
rspec-expectations (~> 3.9.0)
|
159
|
-
rspec-mocks (~> 3.9.0)
|
160
|
-
rspec-core (3.9.2)
|
161
|
-
rspec-support (~> 3.9.3)
|
162
|
-
rspec-expectations (3.9.2)
|
163
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
164
|
-
rspec-support (~> 3.9.0)
|
165
|
-
rspec-mocks (3.9.1)
|
166
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
167
|
-
rspec-support (~> 3.9.0)
|
168
|
-
rspec-support (3.9.3)
|
169
|
-
rubocop (0.74.0)
|
170
|
-
jaro_winkler (~> 1.5.1)
|
171
|
-
parallel (~> 1.10)
|
172
|
-
parser (>= 2.6)
|
173
|
-
rainbow (>= 2.2.2, < 4.0)
|
174
|
-
ruby-progressbar (~> 1.7)
|
175
|
-
unicode-display_width (>= 1.4.0, < 1.7)
|
176
|
-
ruby-progressbar (1.10.1)
|
177
|
-
rubyzip (2.3.0)
|
178
|
-
sanitize (5.1.0)
|
179
|
-
crass (~> 1.0.2)
|
180
|
-
nokogiri (>= 1.8.0)
|
181
|
-
nokogumbo (~> 2.0)
|
182
|
-
simplecov (0.18.5)
|
183
|
-
docile (~> 1.1)
|
184
|
-
simplecov-html (~> 0.11)
|
185
|
-
simplecov-html (0.12.2)
|
186
|
-
sprockets (3.7.2)
|
187
|
-
concurrent-ruby (~> 1.0)
|
188
|
-
rack (> 1, < 3)
|
189
|
-
sprockets-rails (3.2.1)
|
190
|
-
actionpack (>= 4.0)
|
191
|
-
activesupport (>= 4.0)
|
192
|
-
sprockets (>= 3.0.0)
|
193
|
-
thor (1.0.1)
|
194
|
-
thread_safe (0.3.6)
|
195
|
-
tzinfo (1.2.7)
|
196
|
-
thread_safe (~> 0.1)
|
197
|
-
unicode-display_width (1.6.1)
|
198
|
-
websocket-driver (0.7.1)
|
199
|
-
websocket-extensions (>= 0.1.0)
|
200
|
-
websocket-extensions (0.1.4)
|
201
|
-
wwtd (1.4.1)
|
202
|
-
|
203
|
-
PLATFORMS
|
204
|
-
ruby
|
205
|
-
|
206
|
-
DEPENDENCIES
|
207
|
-
bundler (~> 1.17)
|
208
|
-
byebug (~> 11.0)
|
209
|
-
pry
|
210
|
-
qti!
|
211
|
-
rails (~> 5.2.0)
|
212
|
-
rake (~> 12.3)
|
213
|
-
rspec (~> 3.8)
|
214
|
-
rspec-mocks (~> 3.8)
|
215
|
-
rubocop (~> 0.74.0)
|
216
|
-
simplecov
|
217
|
-
wwtd (~> 1.4)
|
218
|
-
|
219
|
-
BUNDLED WITH
|
220
|
-
1.17.3
|
@@ -1,236 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: ../..
|
3
|
-
specs:
|
4
|
-
qti (2.2.0)
|
5
|
-
actionview (>= 5.1.7, < 6.1)
|
6
|
-
activesupport (>= 5.1.7, < 6.1)
|
7
|
-
dry-struct (~> 0.4.0)
|
8
|
-
dry-types (~> 0.12.3)
|
9
|
-
mathml2latex (~> 2.0)
|
10
|
-
nokogiri (~> 1.10)
|
11
|
-
rubyzip (~> 2.0)
|
12
|
-
sanitize (~> 5.1)
|
13
|
-
|
14
|
-
GEM
|
15
|
-
remote: https://rubygems.org/
|
16
|
-
specs:
|
17
|
-
actioncable (6.0.3)
|
18
|
-
actionpack (= 6.0.3)
|
19
|
-
nio4r (~> 2.0)
|
20
|
-
websocket-driver (>= 0.6.1)
|
21
|
-
actionmailbox (6.0.3)
|
22
|
-
actionpack (= 6.0.3)
|
23
|
-
activejob (= 6.0.3)
|
24
|
-
activerecord (= 6.0.3)
|
25
|
-
activestorage (= 6.0.3)
|
26
|
-
activesupport (= 6.0.3)
|
27
|
-
mail (>= 2.7.1)
|
28
|
-
actionmailer (6.0.3)
|
29
|
-
actionpack (= 6.0.3)
|
30
|
-
actionview (= 6.0.3)
|
31
|
-
activejob (= 6.0.3)
|
32
|
-
mail (~> 2.5, >= 2.5.4)
|
33
|
-
rails-dom-testing (~> 2.0)
|
34
|
-
actionpack (6.0.3)
|
35
|
-
actionview (= 6.0.3)
|
36
|
-
activesupport (= 6.0.3)
|
37
|
-
rack (~> 2.0, >= 2.0.8)
|
38
|
-
rack-test (>= 0.6.3)
|
39
|
-
rails-dom-testing (~> 2.0)
|
40
|
-
rails-html-sanitizer (~> 1.0, >= 1.2.0)
|
41
|
-
actiontext (6.0.3)
|
42
|
-
actionpack (= 6.0.3)
|
43
|
-
activerecord (= 6.0.3)
|
44
|
-
activestorage (= 6.0.3)
|
45
|
-
activesupport (= 6.0.3)
|
46
|
-
nokogiri (>= 1.8.5)
|
47
|
-
actionview (6.0.3)
|
48
|
-
activesupport (= 6.0.3)
|
49
|
-
builder (~> 3.1)
|
50
|
-
erubi (~> 1.4)
|
51
|
-
rails-dom-testing (~> 2.0)
|
52
|
-
rails-html-sanitizer (~> 1.1, >= 1.2.0)
|
53
|
-
activejob (6.0.3)
|
54
|
-
activesupport (= 6.0.3)
|
55
|
-
globalid (>= 0.3.6)
|
56
|
-
activemodel (6.0.3)
|
57
|
-
activesupport (= 6.0.3)
|
58
|
-
activerecord (6.0.3)
|
59
|
-
activemodel (= 6.0.3)
|
60
|
-
activesupport (= 6.0.3)
|
61
|
-
activestorage (6.0.3)
|
62
|
-
actionpack (= 6.0.3)
|
63
|
-
activejob (= 6.0.3)
|
64
|
-
activerecord (= 6.0.3)
|
65
|
-
marcel (~> 0.3.1)
|
66
|
-
activesupport (6.0.3)
|
67
|
-
concurrent-ruby (~> 1.0, >= 1.0.2)
|
68
|
-
i18n (>= 0.7, < 2)
|
69
|
-
minitest (~> 5.1)
|
70
|
-
tzinfo (~> 1.1)
|
71
|
-
zeitwerk (~> 2.2, >= 2.2.2)
|
72
|
-
ast (2.4.0)
|
73
|
-
builder (3.2.4)
|
74
|
-
byebug (11.1.3)
|
75
|
-
coderay (1.1.2)
|
76
|
-
concurrent-ruby (1.1.6)
|
77
|
-
crass (1.0.6)
|
78
|
-
diff-lcs (1.3)
|
79
|
-
docile (1.3.2)
|
80
|
-
dry-configurable (0.11.5)
|
81
|
-
concurrent-ruby (~> 1.0)
|
82
|
-
dry-core (~> 0.4, >= 0.4.7)
|
83
|
-
dry-equalizer (~> 0.2)
|
84
|
-
dry-container (0.7.2)
|
85
|
-
concurrent-ruby (~> 1.0)
|
86
|
-
dry-configurable (~> 0.1, >= 0.1.3)
|
87
|
-
dry-core (0.4.9)
|
88
|
-
concurrent-ruby (~> 1.0)
|
89
|
-
dry-equalizer (0.3.0)
|
90
|
-
dry-logic (0.6.1)
|
91
|
-
concurrent-ruby (~> 1.0)
|
92
|
-
dry-core (~> 0.2)
|
93
|
-
dry-equalizer (~> 0.2)
|
94
|
-
dry-struct (0.4.0)
|
95
|
-
dry-core (~> 0.4, >= 0.4.1)
|
96
|
-
dry-equalizer (~> 0.2)
|
97
|
-
dry-types (~> 0.12, >= 0.12.2)
|
98
|
-
ice_nine (~> 0.11)
|
99
|
-
dry-types (0.12.3)
|
100
|
-
concurrent-ruby (~> 1.0)
|
101
|
-
dry-configurable (~> 0.1)
|
102
|
-
dry-container (~> 0.3)
|
103
|
-
dry-core (~> 0.2, >= 0.2.1)
|
104
|
-
dry-equalizer (~> 0.2)
|
105
|
-
dry-logic (~> 0.4, >= 0.4.2)
|
106
|
-
inflecto (~> 0.0.0, >= 0.0.2)
|
107
|
-
erubi (1.9.0)
|
108
|
-
globalid (0.4.2)
|
109
|
-
activesupport (>= 4.2.0)
|
110
|
-
i18n (1.8.2)
|
111
|
-
concurrent-ruby (~> 1.0)
|
112
|
-
ice_nine (0.11.2)
|
113
|
-
inflecto (0.0.2)
|
114
|
-
jaro_winkler (1.5.4)
|
115
|
-
loofah (2.5.0)
|
116
|
-
crass (~> 1.0.2)
|
117
|
-
nokogiri (>= 1.5.9)
|
118
|
-
mail (2.7.1)
|
119
|
-
mini_mime (>= 0.1.1)
|
120
|
-
marcel (0.3.3)
|
121
|
-
mimemagic (~> 0.3.2)
|
122
|
-
mathml2latex (2.0.0)
|
123
|
-
nokogiri (~> 1.10)
|
124
|
-
method_source (1.0.0)
|
125
|
-
mimemagic (0.3.5)
|
126
|
-
mini_mime (1.0.2)
|
127
|
-
mini_portile2 (2.4.0)
|
128
|
-
minitest (5.14.0)
|
129
|
-
nio4r (2.5.2)
|
130
|
-
nokogiri (1.10.9)
|
131
|
-
mini_portile2 (~> 2.4.0)
|
132
|
-
nokogumbo (2.0.2)
|
133
|
-
nokogiri (~> 1.8, >= 1.8.4)
|
134
|
-
parallel (1.19.1)
|
135
|
-
parser (2.7.1.2)
|
136
|
-
ast (~> 2.4.0)
|
137
|
-
pry (0.13.1)
|
138
|
-
coderay (~> 1.1)
|
139
|
-
method_source (~> 1.0)
|
140
|
-
rack (2.2.2)
|
141
|
-
rack-test (1.1.0)
|
142
|
-
rack (>= 1.0, < 3)
|
143
|
-
rails (6.0.3)
|
144
|
-
actioncable (= 6.0.3)
|
145
|
-
actionmailbox (= 6.0.3)
|
146
|
-
actionmailer (= 6.0.3)
|
147
|
-
actionpack (= 6.0.3)
|
148
|
-
actiontext (= 6.0.3)
|
149
|
-
actionview (= 6.0.3)
|
150
|
-
activejob (= 6.0.3)
|
151
|
-
activemodel (= 6.0.3)
|
152
|
-
activerecord (= 6.0.3)
|
153
|
-
activestorage (= 6.0.3)
|
154
|
-
activesupport (= 6.0.3)
|
155
|
-
bundler (>= 1.3.0)
|
156
|
-
railties (= 6.0.3)
|
157
|
-
sprockets-rails (>= 2.0.0)
|
158
|
-
rails-dom-testing (2.0.3)
|
159
|
-
activesupport (>= 4.2.0)
|
160
|
-
nokogiri (>= 1.6)
|
161
|
-
rails-html-sanitizer (1.3.0)
|
162
|
-
loofah (~> 2.3)
|
163
|
-
railties (6.0.3)
|
164
|
-
actionpack (= 6.0.3)
|
165
|
-
activesupport (= 6.0.3)
|
166
|
-
method_source
|
167
|
-
rake (>= 0.8.7)
|
168
|
-
thor (>= 0.20.3, < 2.0)
|
169
|
-
rainbow (3.0.0)
|
170
|
-
rake (12.3.3)
|
171
|
-
rspec (3.9.0)
|
172
|
-
rspec-core (~> 3.9.0)
|
173
|
-
rspec-expectations (~> 3.9.0)
|
174
|
-
rspec-mocks (~> 3.9.0)
|
175
|
-
rspec-core (3.9.2)
|
176
|
-
rspec-support (~> 3.9.3)
|
177
|
-
rspec-expectations (3.9.2)
|
178
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
179
|
-
rspec-support (~> 3.9.0)
|
180
|
-
rspec-mocks (3.9.1)
|
181
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
182
|
-
rspec-support (~> 3.9.0)
|
183
|
-
rspec-support (3.9.3)
|
184
|
-
rubocop (0.74.0)
|
185
|
-
jaro_winkler (~> 1.5.1)
|
186
|
-
parallel (~> 1.10)
|
187
|
-
parser (>= 2.6)
|
188
|
-
rainbow (>= 2.2.2, < 4.0)
|
189
|
-
ruby-progressbar (~> 1.7)
|
190
|
-
unicode-display_width (>= 1.4.0, < 1.7)
|
191
|
-
ruby-progressbar (1.10.1)
|
192
|
-
rubyzip (2.3.0)
|
193
|
-
sanitize (5.1.0)
|
194
|
-
crass (~> 1.0.2)
|
195
|
-
nokogiri (>= 1.8.0)
|
196
|
-
nokogumbo (~> 2.0)
|
197
|
-
simplecov (0.18.5)
|
198
|
-
docile (~> 1.1)
|
199
|
-
simplecov-html (~> 0.11)
|
200
|
-
simplecov-html (0.12.2)
|
201
|
-
sprockets (4.0.0)
|
202
|
-
concurrent-ruby (~> 1.0)
|
203
|
-
rack (> 1, < 3)
|
204
|
-
sprockets-rails (3.2.1)
|
205
|
-
actionpack (>= 4.0)
|
206
|
-
activesupport (>= 4.0)
|
207
|
-
sprockets (>= 3.0.0)
|
208
|
-
thor (1.0.1)
|
209
|
-
thread_safe (0.3.6)
|
210
|
-
tzinfo (1.2.7)
|
211
|
-
thread_safe (~> 0.1)
|
212
|
-
unicode-display_width (1.6.1)
|
213
|
-
websocket-driver (0.7.1)
|
214
|
-
websocket-extensions (>= 0.1.0)
|
215
|
-
websocket-extensions (0.1.4)
|
216
|
-
wwtd (1.4.1)
|
217
|
-
zeitwerk (2.3.0)
|
218
|
-
|
219
|
-
PLATFORMS
|
220
|
-
ruby
|
221
|
-
|
222
|
-
DEPENDENCIES
|
223
|
-
bundler (~> 1.17)
|
224
|
-
byebug (~> 11.0)
|
225
|
-
pry
|
226
|
-
qti!
|
227
|
-
rails (~> 6.0.0)
|
228
|
-
rake (~> 12.3)
|
229
|
-
rspec (~> 3.8)
|
230
|
-
rspec-mocks (~> 3.8)
|
231
|
-
rubocop (~> 0.74.0)
|
232
|
-
simplecov
|
233
|
-
wwtd (~> 1.4)
|
234
|
-
|
235
|
-
BUNDLED WITH
|
236
|
-
1.17.3
|