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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 8ecbdc7735cca56f8fca34b0386b39f8ec46df19
4
- data.tar.gz: 34b4ca1b2a5ab79a9e6db3beb95b7dc40e9fe37c
2
+ SHA256:
3
+ metadata.gz: e2bee92dd9195efe9dc1090f31feddbdd5855bcc568d12fa96295ed76170a35b
4
+ data.tar.gz: c8425f330cd1064c9f6bed05b0d8b9b320c0459ed500effbbe68401763a8700b
5
5
  SHA512:
6
- metadata.gz: 290799f4ae385f3002f2d8211290b82c431c129a563799c4bf7dcaad47e66602d1a079197ba04f054dbf8310a3ede21f70fae9a656d0834d7bb3758473e20ad0
7
- data.tar.gz: 1b6887a2f923544fbeef2b28facdeb7550210007f9c178802c6d677852a8da9016abd7ad80bd18c688e2ce49cc21fd20e3326b19cf4e105a77ff27f077d37eed
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.match CANVAS_REGEX
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
- blanks
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
- blanks
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
@@ -1,3 +1,3 @@
1
1
  module Qti
2
- VERSION = '2.4.0'.freeze
2
+ VERSION = '2.4.1'.freeze
3
3
  end
@@ -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">&lt;div&gt;
27
+ &lt;p&gt;&lt;strong&gt;&lt;span data-contrast="none"&gt;LOREM &lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
28
+ &lt;p&gt;&lt;strong&gt;&lt;span data-contrast="none"&gt;Lorem ipsum dolor sit amet consecteur&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span data-contrast="none"&gt;to&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span data-contrast="none"&gt;? Write the letter of the correct paragraph&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
29
+ &lt;p&gt; &lt;/p&gt;
30
+ &lt;p&gt;&lt;span data-contrast="none"&gt;&lt;strong&gt;A.&lt;/strong&gt; 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. &lt;/span&gt;&lt;/p&gt;
31
+ &lt;p&gt;&lt;span data-contrast="none"&gt;&lt;strong&gt;B&lt;/strong&gt;. 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. &lt;/span&gt;&lt;/p&gt;
32
+ &lt;p&gt;&lt;span data-contrast="none"&gt;&lt;strong&gt;C&lt;/strong&gt;. 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. &lt;/span&gt;&lt;/p&gt;
33
+ &lt;p&gt;&lt;span data-contrast="none"&gt;&lt;strong&gt;D&lt;/strong&gt;. 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. &lt;/span&gt;&lt;/p&gt;
34
+ &lt;p&gt;&lt;span data-contrast="none"&gt;&lt;strong&gt;E&lt;/strong&gt;. 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. &lt;/span&gt;&lt;/p&gt;
35
+ &lt;p&gt;&lt;span data-ccp-props='{"201341983":0,"335559739":160,"335559740":240}'&gt; &lt;/span&gt;&lt;span data-contrast="none"&gt;1&lt;/span&gt;&lt;span data-contrast="none"&gt;. L&lt;/span&gt;&lt;i&gt;&lt;span data-contrast="none"&gt;orem&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span data-contrast="none"&gt; impsum dolor / &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span data-contrast="none"&gt;ppl&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span data-contrast="none"&gt; sit amet consectetur &lt;/span&gt;&lt;/i&gt;&lt;span data-contrast="auto"&gt; &lt;/span&gt;&lt;span data-ccp-props='{"134233117":true,"134233118":true,"201341983":0,"335559685":1080,"335559739":160,"335559740":240,"335559991":1080}'&gt; &lt;/span&gt;&lt;/p&gt;
36
+ &lt;p&gt;&lt;span data-contrast="auto"&gt; &lt;/span&gt;&lt;span data-contrast="none"&gt;This note refers to paragraph &lt;/span&gt;&lt;strong&gt;&lt;span data-contrast="none"&gt;[1]&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span data-contrast="auto"&gt; &lt;/span&gt;&lt;/strong&gt;&lt;span data-ccp-props='{"134233117":true,"134233118":true,"201341983":0,"335559685":1080,"335559739":160,"335559740":240}'&gt; &lt;/span&gt;&lt;/p&gt;
37
+ &lt;p&gt;&lt;span data-contrast="none"&gt;2&lt;/span&gt;&lt;span data-contrast="none"&gt;. L&lt;/span&gt;&lt;i&gt;&lt;span data-contrast="none"&gt;orem&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span data-contrast="none"&gt; ipsum dolor sit amet / &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span data-contrast="none"&gt;ppl&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span data-contrast="none"&gt; consectetur adipiscing&lt;/span&gt;&lt;/i&gt;&lt;span data-contrast="auto"&gt; &lt;/span&gt;&lt;span data-ccp-props='{"134233117":true,"134233118":true,"201341983":0,"335559739":160,"335559740":240}'&gt; &lt;/span&gt;&lt;/p&gt;
38
+ &lt;p&gt;&lt;span data-contrast="auto"&gt; &lt;/span&gt;&lt;span data-contrast="none"&gt;This note refers to paragraph &lt;/span&gt; &lt;strong&gt;&lt;span data-contrast="none"&gt;[2]&lt;/span&gt;&lt;/strong&gt;&lt;span data-ccp-props='{"134233117":true,"134233118":true,"201341983":0,"335559685":1080,"335559739":160,"335559740":240}'&gt; &lt;/span&gt;&lt;/p&gt;
39
+ &lt;p&gt;&lt;span data-contrast="none"&gt;3&lt;/span&gt;&lt;span data-contrast="none"&gt;. &lt;/span&gt;&lt;i&gt;&lt;span data-contrast="none"&gt;Lorem&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span data-contrast="none"&gt; ipsum dolor sit amet&lt;/span&gt;&lt;/i&gt;&lt;span data-contrast="auto"&gt; &lt;/span&gt;&lt;span data-ccp-props='{"134233117":true,"134233118":true,"201341983":0,"335559685":1080,"335559739":160,"335559740":240,"335559991":1080}'&gt; &lt;/span&gt;&lt;/p&gt;
40
+ &lt;p&gt;&lt;span data-contrast="auto"&gt; &lt;/span&gt;&lt;span data-contrast="none"&gt;This note refers to paragraph &lt;/span&gt;&lt;strong&gt;&lt;span data-contrast="none"&gt;[3]&lt;/span&gt;&lt;/strong&gt;&lt;span data-contrast="auto"&gt; &lt;/span&gt;&lt;span data-ccp-props='{"134233117":true,"134233118":true,"201341983":0,"335559685":1080,"335559739":160,"335559740":240}'&gt; &lt;/span&gt;&lt;/p&gt;
41
+ &lt;p&gt;&lt;span data-contrast="none"&gt;4&lt;/span&gt;&lt;span data-contrast="none"&gt;. L&lt;/span&gt;&lt;i&gt;&lt;span data-contrast="none"&gt;orem&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span data-contrast="none"&gt; ipsum dolor sit amet consectetur&lt;/span&gt;&lt;/i&gt;&lt;span data-contrast="auto"&gt; &lt;/span&gt;&lt;span data-ccp-props='{"134233117":true,"134233118":true,"201341983":0,"335559739":160,"335559740":240}'&gt; &lt;/span&gt;&lt;/p&gt;
42
+ &lt;p&gt;&lt;span data-contrast="auto"&gt; &lt;/span&gt;&lt;span data-contrast="none"&gt;This note refers to paragraph  &lt;/span&gt;&lt;strong&gt;&lt;span data-contrast="none"&gt;[4]&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
43
+ &lt;p&gt;&lt;span data-contrast="none"&gt;5&lt;/span&gt;&lt;span data-contrast="none"&gt;. L&lt;/span&gt;&lt;i&gt;&lt;span data-contrast="none"&gt;irst&lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span data-contrast="none"&gt; orem ipsum dolor sit &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span data-contrast="none"&gt;ppl&lt;/span&gt;&lt;/i&gt;&lt;span data-contrast="auto"&gt; &lt;/span&gt;&lt;span data-ccp-props='{"134233117":true,"134233118":true,"201341983":0,"335559739":160,"335559740":240}'&gt; &lt;/span&gt;&lt;/p&gt;
44
+ &lt;p&gt;&lt;span data-contrast="auto"&gt; &lt;/span&gt;&lt;span data-contrast="none"&gt;This note refers to paragraph &lt;/span&gt;&lt;strong&gt;&lt;span data-contrast="none"&gt;[5]&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
45
+ &lt;/div&gt;</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.0
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-05-21 00:00:00.000000000 Z
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
- rubyforge_project:
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