qti 2.8.0 → 2.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/qti/content_packaging/assessment_item.rb +2 -0
- data/lib/qti/content_packaging/assessment_test.rb +2 -0
- data/lib/qti/content_packaging/choice_interaction.rb +1 -1
- data/lib/qti/content_packaging/outcome_declaration.rb +3 -1
- data/lib/qti/v1/models/interactions/base_fill_blank_interaction.rb +12 -2
- data/lib/qti/v1/models/interactions/base_interaction.rb +11 -4
- data/lib/qti/v1/models/object_bank.rb +6 -0
- data/lib/qti/version.rb +1 -1
- data/spec/fixtures/items_1.2/mc_feedback.xml +161 -0
- data/spec/lib/qti/v1/models/interactions/base_interaction_spec.rb +22 -0
- data/spec/lib/qti/v1/models/interactions/canvas_multiple_dropdown_spec.rb +2 -2
- data/spec/lib/qti/v1/models/interactions/fill_blank_interaction_spec.rb +10 -10
- data/spec/lib/qti/v1/models/object_bank_spec.rb +12 -0
- metadata +12 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d2dc18241493cc73026c3aa2c51534c22d8b880b4e5405659b875e03354c4164
|
4
|
+
data.tar.gz: 19381b84fe5cff67721722d8329ad82399a7cd75bd1ae6a972b566b594b9ec97
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cbe4b4ea5336f9f76e219c5045f3182f9fa1ea18372dd796cb7ecb43bf4787633d1692e28d505c35231c62d6432c9691826fdda1cabdb3543afb991731dc8ebf
|
7
|
+
data.tar.gz: 18c96ba1be32ba9fdbdc90dc8678668395ac723f26c76283182f2e597318ab8844071c5908d5ea0638ad61e02362e8079a6da7d51c0c527abc283cdb0a2e4732
|
@@ -1,6 +1,8 @@
|
|
1
1
|
module Qti
|
2
2
|
module ContentPackaging
|
3
3
|
class AssessmentTest < Dry::Struct
|
4
|
+
constructor_type :schema
|
5
|
+
|
4
6
|
attribute :identifier, Types::Strict::String
|
5
7
|
attribute :title, Types::Strict::String
|
6
8
|
attribute :items, Types::Strict::Array.of(ContentPackaging::AssessmentItem)
|
@@ -5,7 +5,7 @@ module Qti
|
|
5
5
|
|
6
6
|
attribute :prompt, Types::Strict::String
|
7
7
|
attribute :shuffle, Types::Strict::Bool.default(false)
|
8
|
-
attribute :maxChoices, Types::Coercible::
|
8
|
+
attribute :maxChoices, Types::Coercible::Integer
|
9
9
|
attribute :choices, Types::Strict::Array.of(ContentPackaging::SimpleChoice)
|
10
10
|
end
|
11
11
|
end
|
@@ -1,10 +1,12 @@
|
|
1
1
|
module Qti
|
2
2
|
module ContentPackaging
|
3
3
|
class OutcomeDeclaration < Dry::Struct
|
4
|
+
constructor_type :schema
|
5
|
+
|
4
6
|
attribute :identifier, Types::Strict::String
|
5
7
|
attribute :baseType, Types::Strict::String
|
6
8
|
attribute :cardinality, Types::Strict::String
|
7
|
-
attribute :defaultValue, Types::Strict::String | Types::Coercible::
|
9
|
+
attribute :defaultValue, Types::Strict::String | Types::Coercible::Integer | Types::Coercible::Float
|
8
10
|
end
|
9
11
|
end
|
10
12
|
end
|
@@ -9,7 +9,7 @@ module Qti
|
|
9
9
|
item_prompt.split(CANVAS_REGEX).map.with_index do |stem_item, index|
|
10
10
|
if canvas_fib_response_ids.include?(stem_item)
|
11
11
|
# Strip the brackets before searching
|
12
|
-
stem_blank(index,
|
12
|
+
stem_blank(index, stem_item[1..-2])
|
13
13
|
else
|
14
14
|
stem_text(index, stem_item)
|
15
15
|
end
|
@@ -21,7 +21,8 @@ module Qti
|
|
21
21
|
id: "stem_#{index}",
|
22
22
|
position: index + 1,
|
23
23
|
type: 'blank',
|
24
|
-
blank_id: value
|
24
|
+
blank_id: blank_id(value),
|
25
|
+
blank_name: value
|
25
26
|
}
|
26
27
|
end
|
27
28
|
|
@@ -34,6 +35,15 @@ module Qti
|
|
34
35
|
}
|
35
36
|
end
|
36
37
|
|
38
|
+
def blank_id(stem_item)
|
39
|
+
return stem_item unless canvas_custom_fitb?
|
40
|
+
canvas_blank_id(stem_item)
|
41
|
+
end
|
42
|
+
|
43
|
+
def canvas_custom_fitb?
|
44
|
+
@canvas_custom_fitb ||= BaseInteraction.canvas_custom_fitb?(@node)
|
45
|
+
end
|
46
|
+
|
37
47
|
def canvas_blank_id(stem_item)
|
38
48
|
blank_id = nil
|
39
49
|
node.xpath('.//xmlns:response_lid/xmlns:material').children.map do |response_lid_node|
|
@@ -9,6 +9,11 @@ module Qti
|
|
9
9
|
false
|
10
10
|
end
|
11
11
|
|
12
|
+
def self.canvas_custom_fitb?(node)
|
13
|
+
qtype = question_type(node)
|
14
|
+
%w[fill_in_multiple_blanks_question multiple_dropdowns_question].include? qtype
|
15
|
+
end
|
16
|
+
|
12
17
|
def self.canvas_multiple_fib?(node)
|
13
18
|
matches = node.xpath('.//xmlns:response_lid')
|
14
19
|
return false if matches.count < 1
|
@@ -57,7 +62,7 @@ module Qti
|
|
57
62
|
'xmlns:displayfeedback/..'
|
58
63
|
answers = node.xpath(path).map do |entry|
|
59
64
|
answer_feedback_entry(entry)
|
60
|
-
end
|
65
|
+
end.compact
|
61
66
|
answers unless answers.empty?
|
62
67
|
end
|
63
68
|
|
@@ -65,13 +70,15 @@ module Qti
|
|
65
70
|
|
66
71
|
def answer_feedback_entry(entry)
|
67
72
|
ve = entry.xpath('.//xmlns:varequal').first
|
68
|
-
refid = entry.xpath('./xmlns:displayfeedback
|
73
|
+
refid = entry.xpath('./xmlns:displayfeedback[not (@linkrefid="correct_fb" or ' \
|
74
|
+
'@linkrefid="general_incorrect_fb" or @linkrefid="general_fb")]').first&.[](:linkrefid)
|
69
75
|
feedback = get_feedback(refid)
|
76
|
+
return nil unless feedback
|
70
77
|
{
|
71
78
|
response_id: ve[:respident],
|
72
79
|
response_value: ve.text,
|
73
|
-
texttype: feedback[:texttype
|
74
|
-
feedback: feedback
|
80
|
+
texttype: feedback&.[](:texttype),
|
81
|
+
feedback: feedback&.text
|
75
82
|
}
|
76
83
|
end
|
77
84
|
|
@@ -19,6 +19,12 @@ module Qti
|
|
19
19
|
'.//xmlns:qtimetadatafield/xmlns:fieldlabel[text()="bank_type"]/../xmlns:fieldentry'
|
20
20
|
)&.content
|
21
21
|
end
|
22
|
+
|
23
|
+
def bank_context_uuid
|
24
|
+
@bank_context_uuid ||= xpath_with_single_check(
|
25
|
+
'.//xmlns:qtimetadatafield/xmlns:fieldlabel[text()="bank_context_uuid"]/../xmlns:fieldentry'
|
26
|
+
)&.content
|
27
|
+
end
|
22
28
|
end
|
23
29
|
end
|
24
30
|
end
|
data/lib/qti/version.rb
CHANGED
@@ -0,0 +1,161 @@
|
|
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
|
+
<assessment ident="gb343914ff50ec732bd9d38b16688e302" title="Feedback Check">
|
4
|
+
<qtimetadata>
|
5
|
+
<qtimetadatafield>
|
6
|
+
<fieldlabel>cc_maxattempts</fieldlabel>
|
7
|
+
<fieldentry>1</fieldentry>
|
8
|
+
</qtimetadatafield>
|
9
|
+
</qtimetadata>
|
10
|
+
<section ident="root_section">
|
11
|
+
<item ident="g5a997009fe86a353f1616f0c81746649" title="Question">
|
12
|
+
<itemmetadata>
|
13
|
+
<qtimetadata>
|
14
|
+
<qtimetadatafield>
|
15
|
+
<fieldlabel>question_type</fieldlabel>
|
16
|
+
<fieldentry>multiple_choice_question</fieldentry>
|
17
|
+
</qtimetadatafield>
|
18
|
+
<qtimetadatafield>
|
19
|
+
<fieldlabel>points_possible</fieldlabel>
|
20
|
+
<fieldentry>1.0</fieldentry>
|
21
|
+
</qtimetadatafield>
|
22
|
+
<qtimetadatafield>
|
23
|
+
<fieldlabel>original_answer_ids</fieldlabel>
|
24
|
+
<fieldentry>5706,2408,621,7011</fieldentry>
|
25
|
+
</qtimetadatafield>
|
26
|
+
<qtimetadatafield>
|
27
|
+
<fieldlabel>assessment_question_identifierref</fieldlabel>
|
28
|
+
<fieldentry>g71ef6570433d355e50f9dfc92e1268ff</fieldentry>
|
29
|
+
</qtimetadatafield>
|
30
|
+
</qtimetadata>
|
31
|
+
</itemmetadata>
|
32
|
+
<presentation>
|
33
|
+
<material>
|
34
|
+
<mattext texttype="text/html"><div><p>Feedback Check</p></div></mattext>
|
35
|
+
</material>
|
36
|
+
<response_lid ident="response1" rcardinality="Single">
|
37
|
+
<render_choice>
|
38
|
+
<response_label ident="5706">
|
39
|
+
<material>
|
40
|
+
<mattext texttype="text/plain">A</mattext>
|
41
|
+
</material>
|
42
|
+
</response_label>
|
43
|
+
<response_label ident="2408">
|
44
|
+
<material>
|
45
|
+
<mattext texttype="text/plain">B</mattext>
|
46
|
+
</material>
|
47
|
+
</response_label>
|
48
|
+
<response_label ident="621">
|
49
|
+
<material>
|
50
|
+
<mattext texttype="text/plain">C</mattext>
|
51
|
+
</material>
|
52
|
+
</response_label>
|
53
|
+
<response_label ident="7011">
|
54
|
+
<material>
|
55
|
+
<mattext texttype="text/plain">D</mattext>
|
56
|
+
</material>
|
57
|
+
</response_label>
|
58
|
+
</render_choice>
|
59
|
+
</response_lid>
|
60
|
+
</presentation>
|
61
|
+
<resprocessing>
|
62
|
+
<outcomes>
|
63
|
+
<decvar maxvalue="100" minvalue="0" varname="SCORE" vartype="Decimal"/>
|
64
|
+
</outcomes>
|
65
|
+
<respcondition continue="Yes">
|
66
|
+
<conditionvar>
|
67
|
+
<other/>
|
68
|
+
</conditionvar>
|
69
|
+
<displayfeedback feedbacktype="Response" linkrefid="general_fb"/>
|
70
|
+
</respcondition>
|
71
|
+
<respcondition continue="Yes">
|
72
|
+
<conditionvar>
|
73
|
+
<varequal respident="response1">5706</varequal>
|
74
|
+
</conditionvar>
|
75
|
+
<displayfeedback feedbacktype="Response" linkrefid="5706_fb"/>
|
76
|
+
</respcondition>
|
77
|
+
<respcondition continue="Yes">
|
78
|
+
<conditionvar>
|
79
|
+
<varequal respident="response1">2408</varequal>
|
80
|
+
</conditionvar>
|
81
|
+
<displayfeedback feedbacktype="Response" linkrefid="2408_fb"/>
|
82
|
+
</respcondition>
|
83
|
+
<respcondition continue="Yes">
|
84
|
+
<conditionvar>
|
85
|
+
<varequal respident="response1">621</varequal>
|
86
|
+
</conditionvar>
|
87
|
+
<displayfeedback feedbacktype="Response" linkrefid="621_fb"/>
|
88
|
+
</respcondition>
|
89
|
+
<respcondition continue="Yes">
|
90
|
+
<conditionvar>
|
91
|
+
<varequal respident="response1">7011</varequal>
|
92
|
+
</conditionvar>
|
93
|
+
<displayfeedback feedbacktype="Response" linkrefid="7011_fb"/>
|
94
|
+
</respcondition>
|
95
|
+
<respcondition continue="No">
|
96
|
+
<conditionvar>
|
97
|
+
<varequal respident="response1">5706</varequal>
|
98
|
+
</conditionvar>
|
99
|
+
<setvar action="Set" varname="SCORE">100</setvar>
|
100
|
+
<displayfeedback feedbacktype="Response" linkrefid="correct_fb"/>
|
101
|
+
</respcondition>
|
102
|
+
<respcondition continue="Yes">
|
103
|
+
<conditionvar>
|
104
|
+
<other/>
|
105
|
+
</conditionvar>
|
106
|
+
<displayfeedback feedbacktype="Response" linkrefid="general_incorrect_fb"/>
|
107
|
+
</respcondition>
|
108
|
+
</resprocessing>
|
109
|
+
<itemfeedback ident="general_fb">
|
110
|
+
<flow_mat>
|
111
|
+
<material>
|
112
|
+
<mattext texttype="text/html"><p>General Feedback</p></mattext>
|
113
|
+
</material>
|
114
|
+
</flow_mat>
|
115
|
+
</itemfeedback>
|
116
|
+
<itemfeedback ident="correct_fb">
|
117
|
+
<flow_mat>
|
118
|
+
<material>
|
119
|
+
<mattext texttype="text/html"><p>General Correct Feedback</p></mattext>
|
120
|
+
</material>
|
121
|
+
</flow_mat>
|
122
|
+
</itemfeedback>
|
123
|
+
<itemfeedback ident="general_incorrect_fb">
|
124
|
+
<flow_mat>
|
125
|
+
<material>
|
126
|
+
<mattext texttype="text/html"><p>General Incorrect Feedback</p></mattext>
|
127
|
+
</material>
|
128
|
+
</flow_mat>
|
129
|
+
</itemfeedback>
|
130
|
+
<itemfeedback ident="5706_fb">
|
131
|
+
<flow_mat>
|
132
|
+
<material>
|
133
|
+
<mattext texttype="text/html"><p>Answer A Feedback</p></mattext>
|
134
|
+
</material>
|
135
|
+
</flow_mat>
|
136
|
+
</itemfeedback>
|
137
|
+
<itemfeedback ident="2408_fb">
|
138
|
+
<flow_mat>
|
139
|
+
<material>
|
140
|
+
<mattext texttype="text/html"><p>Answer B Feedback</p></mattext>
|
141
|
+
</material>
|
142
|
+
</flow_mat>
|
143
|
+
</itemfeedback>
|
144
|
+
<itemfeedback ident="621_fb">
|
145
|
+
<flow_mat>
|
146
|
+
<material>
|
147
|
+
<mattext texttype="text/html"><p>Answer C Feedback</p></mattext>
|
148
|
+
</material>
|
149
|
+
</flow_mat>
|
150
|
+
</itemfeedback>
|
151
|
+
<itemfeedback ident="7011_fb">
|
152
|
+
<flow_mat>
|
153
|
+
<material>
|
154
|
+
<mattext texttype="text/html"><p>Answer D Feedback</p></mattext>
|
155
|
+
</material>
|
156
|
+
</flow_mat>
|
157
|
+
</itemfeedback>
|
158
|
+
</item>
|
159
|
+
</section>
|
160
|
+
</assessment>
|
161
|
+
</questestinterop>
|
@@ -72,4 +72,26 @@ describe Qti::V1::Models::Interactions::BaseInteraction do
|
|
72
72
|
include_examples('item_level_feedback')
|
73
73
|
include_examples('answer_feedback')
|
74
74
|
end
|
75
|
+
|
76
|
+
context 'mc_feedback.xml' do
|
77
|
+
let(:file_path) { File.join(fixtures_path, 'mc_feedback.xml') }
|
78
|
+
let(:general_fb) { '<p>General Feedback</p>' }
|
79
|
+
let(:correct_fb) { '<p>General Correct Feedback</p>' }
|
80
|
+
let(:incorrect_fb) { '<p>General Incorrect Feedback</p>' }
|
81
|
+
let(:answer_fb) do
|
82
|
+
[
|
83
|
+
{ response_id: 'response1', response_value: '5706',
|
84
|
+
texttype: 'text/html', feedback: '<p>Answer A Feedback</p>' },
|
85
|
+
{ response_id: 'response1', response_value: '2408',
|
86
|
+
texttype: 'text/html', feedback: '<p>Answer B Feedback</p>' },
|
87
|
+
{ response_id: 'response1', response_value: '621',
|
88
|
+
texttype: 'text/html', feedback: '<p>Answer C Feedback</p>' },
|
89
|
+
{ response_id: 'response1', response_value: '7011',
|
90
|
+
texttype: 'text/html', feedback: '<p>Answer D Feedback</p>' }
|
91
|
+
]
|
92
|
+
end
|
93
|
+
|
94
|
+
include_examples('item_level_feedback')
|
95
|
+
include_examples('answer_feedback')
|
96
|
+
end
|
75
97
|
end
|
@@ -44,9 +44,9 @@ describe Qti::V1::Models::Interactions::CanvasMultipleDropdownInteraction do
|
|
44
44
|
let(:expected_stem_items) do
|
45
45
|
[
|
46
46
|
{ id: 'stem_0', position: 1, type: 'text', value: '<div><p>Roses are ' },
|
47
|
-
{ id: 'stem_1', position: 2, type: 'blank', blank_id: 'response_color1' },
|
47
|
+
{ id: 'stem_1', position: 2, type: 'blank', blank_id: 'response_color1', blank_name: 'color1' },
|
48
48
|
{ id: 'stem_2', position: 3, type: 'text', value: ', violets are ' },
|
49
|
-
{ id: 'stem_3', position: 4, type: 'blank', blank_id: 'response_color2' },
|
49
|
+
{ id: 'stem_3', position: 4, type: 'blank', blank_id: 'response_color2', blank_name: 'color2' },
|
50
50
|
{ id: 'stem_4', position: 5, type: 'text', value: '.</p></div>' }
|
51
51
|
]
|
52
52
|
end
|
@@ -47,7 +47,7 @@ describe Qti::V1::Models::Interactions::FillBlankInteraction do
|
|
47
47
|
let(:expected_stem_items) do
|
48
48
|
[
|
49
49
|
{ id: 'stem_0', position: 1, type: 'text', value: '<div><p>Chicago is in what state?</p></div>' },
|
50
|
-
{ id: 'stem_1', position: 2, type: 'blank', blank_id: 'response1' }
|
50
|
+
{ id: 'stem_1', position: 2, type: 'blank', blank_id: 'response1', blank_name: 'response1' }
|
51
51
|
]
|
52
52
|
end
|
53
53
|
|
@@ -72,9 +72,9 @@ describe Qti::V1::Models::Interactions::FillBlankInteraction do
|
|
72
72
|
let(:expected_stem_items) do
|
73
73
|
[
|
74
74
|
{ id: 'stem_0', position: 1, type: 'text', value: '<div><p><span>Roses are ' },
|
75
|
-
{ id: 'stem_1', position: 2, type: 'blank', blank_id: 'response_color1' },
|
75
|
+
{ id: 'stem_1', position: 2, type: 'blank', blank_id: 'response_color1', blank_name: 'color1' },
|
76
76
|
{ id: 'stem_2', position: 3, type: 'text', value: ', violets are ' },
|
77
|
-
{ id: 'stem_3', position: 4, type: 'blank', blank_id: 'response_color2' },
|
77
|
+
{ id: 'stem_3', position: 4, type: 'blank', blank_id: 'response_color2', blank_name: 'color2' },
|
78
78
|
{ id: 'stem_4', position: 5, type: 'text', value: '</span></p></div>' }
|
79
79
|
]
|
80
80
|
end
|
@@ -102,11 +102,11 @@ describe Qti::V1::Models::Interactions::FillBlankInteraction do
|
|
102
102
|
[
|
103
103
|
{ id: 'stem_0', position: 1, type: 'text', value: 'Fill-in-the blanks in this text from Richard III: ' },
|
104
104
|
{ id: 'stem_1', position: 2, type: 'text', value: 'Now is the ' },
|
105
|
-
{ id: 'stem_2', position: 3, type: 'blank', blank_id: 'FIB01' },
|
105
|
+
{ id: 'stem_2', position: 3, type: 'blank', blank_id: 'FIB01', blank_name: 'FIB01' },
|
106
106
|
{ id: 'stem_3', position: 4, type: 'text', value: ' of our discontent made glorious ' },
|
107
|
-
{ id: 'stem_4', position: 5, type: 'blank', blank_id: 'FIB02' },
|
107
|
+
{ id: 'stem_4', position: 5, type: 'blank', blank_id: 'FIB02', blank_name: 'FIB02' },
|
108
108
|
{ id: 'stem_5', position: 6, type: 'text', value: ' by these sons of ' },
|
109
|
-
{ id: 'stem_6', position: 7, type: 'blank', blank_id: 'FIB03' }
|
109
|
+
{ id: 'stem_6', position: 7, type: 'blank', blank_id: 'FIB03', blank_name: 'FIB03' }
|
110
110
|
]
|
111
111
|
end
|
112
112
|
|
@@ -165,11 +165,11 @@ describe Qti::V1::Models::Interactions::FillBlankInteraction do
|
|
165
165
|
[
|
166
166
|
{ id: 'stem_0', position: 1, type: 'text', value: 'Fill-in-the blanks in this text from Richard III: ' },
|
167
167
|
{ id: 'stem_1', position: 2, type: 'text', value: 'Now is the ' },
|
168
|
-
{ id: 'stem_2', position: 3, type: 'blank', blank_id: 'FIB01' },
|
168
|
+
{ id: 'stem_2', position: 3, type: 'blank', blank_id: 'FIB01', blank_name: 'FIB01' },
|
169
169
|
{ id: 'stem_3', position: 4, type: 'text', value: ' of our discontent made glorious ' },
|
170
|
-
{ id: 'stem_4', position: 5, type: 'blank', blank_id: 'FIB02' },
|
170
|
+
{ id: 'stem_4', position: 5, type: 'blank', blank_id: 'FIB02', blank_name: 'FIB02' },
|
171
171
|
{ id: 'stem_5', position: 6, type: 'text', value: ' by these sons of ' },
|
172
|
-
{ id: 'stem_6', position: 7, type: 'blank', blank_id: 'FIB03' }
|
172
|
+
{ id: 'stem_6', position: 7, type: 'blank', blank_id: 'FIB03', blank_name: 'FIB03' }
|
173
173
|
]
|
174
174
|
end
|
175
175
|
|
@@ -195,7 +195,7 @@ describe Qti::V1::Models::Interactions::FillBlankInteraction do
|
|
195
195
|
let(:expected_stem_items) do
|
196
196
|
[
|
197
197
|
{ id: 'stem_0', position: 1, type: 'text', value: '<div><p>Bird, bird, bird, bird is the ' },
|
198
|
-
{ id: 'stem_1', position: 2, type: 'blank', blank_id: 'response_word' },
|
198
|
+
{ id: 'stem_1', position: 2, type: 'blank', blank_id: 'response_word', blank_name: 'word' },
|
199
199
|
{ id: 'stem_2', position: 3, type: 'text', value: '</p></div>' }
|
200
200
|
]
|
201
201
|
end
|
@@ -13,6 +13,10 @@ describe Qti::V1::Models::ObjectBank do
|
|
13
13
|
<fieldlabel>bank_type</fieldlabel>
|
14
14
|
<fieldentry>account</fieldentry>
|
15
15
|
</qtimetadatafield>
|
16
|
+
<qtimetadatafield>
|
17
|
+
<fieldlabel>bank_context_uuid</fieldlabel>
|
18
|
+
<fieldentry>oAORQgMEvQquzZyKIW6Usg6CFveihQH5pOqHadsb</fieldentry>
|
19
|
+
</qtimetadatafield>
|
16
20
|
</qtimetadata>
|
17
21
|
</objectbank>
|
18
22
|
</questestinterop>
|
@@ -60,4 +64,12 @@ describe Qti::V1::Models::ObjectBank do
|
|
60
64
|
expect(objectbank.bank_type).to eq 'account'
|
61
65
|
end
|
62
66
|
end
|
67
|
+
|
68
|
+
describe '#bank_context_uuid' do
|
69
|
+
it 'has the bank_context_uuid attribute' do
|
70
|
+
allow(File).to receive(:read).and_return(doc)
|
71
|
+
objectbank = described_class.new path: '/etc/FakeBank008.xml'
|
72
|
+
expect(objectbank.bank_context_uuid).to eq 'oAORQgMEvQquzZyKIW6Usg6CFveihQH5pOqHadsb'
|
73
|
+
end
|
74
|
+
end
|
63
75
|
end
|
metadata
CHANGED
@@ -1,15 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: qti
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.9.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
8
|
-
-
|
7
|
+
- Adrian Diaz
|
8
|
+
- Alex Slaughter
|
9
|
+
- James Logan
|
10
|
+
- Jorge Arteaga
|
11
|
+
- Stephen Kacsmark
|
9
12
|
autorequire:
|
10
13
|
bindir: bin
|
11
14
|
cert_chain: []
|
12
|
-
date: 2022-
|
15
|
+
date: 2022-05-09 00:00:00.000000000 Z
|
13
16
|
dependencies:
|
14
17
|
- !ruby/object:Gem::Dependency
|
15
18
|
name: actionview
|
@@ -71,14 +74,14 @@ dependencies:
|
|
71
74
|
requirements:
|
72
75
|
- - "~>"
|
73
76
|
- !ruby/object:Gem::Version
|
74
|
-
version: 0.
|
77
|
+
version: 0.14.0
|
75
78
|
type: :runtime
|
76
79
|
prerelease: false
|
77
80
|
version_requirements: !ruby/object:Gem::Requirement
|
78
81
|
requirements:
|
79
82
|
- - "~>"
|
80
83
|
- !ruby/object:Gem::Version
|
81
|
-
version: 0.
|
84
|
+
version: 0.14.0
|
82
85
|
- !ruby/object:Gem::Dependency
|
83
86
|
name: mathml2latex
|
84
87
|
requirement: !ruby/object:Gem::Requirement
|
@@ -277,8 +280,6 @@ dependencies:
|
|
277
280
|
version: '1.4'
|
278
281
|
description:
|
279
282
|
email:
|
280
|
-
- hannah@instructure.com
|
281
|
-
- rrodriguez-bd@instructure.com
|
282
283
|
- quizzes@instructure.com
|
283
284
|
executables: []
|
284
285
|
extensions: []
|
@@ -382,6 +383,7 @@ files:
|
|
382
383
|
- spec/fixtures/items_1.2/item_no_title.xml
|
383
384
|
- spec/fixtures/items_1.2/matching.xml
|
384
385
|
- spec/fixtures/items_1.2/matching_feedback.xml
|
386
|
+
- spec/fixtures/items_1.2/mc_feedback.xml
|
385
387
|
- spec/fixtures/items_1.2/multiple_answer.xml
|
386
388
|
- spec/fixtures/items_1.2/multiple_answer_canvas.xml
|
387
389
|
- spec/fixtures/items_1.2/multiple_choice.xml
|
@@ -699,7 +701,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
699
701
|
- !ruby/object:Gem::Version
|
700
702
|
version: '0'
|
701
703
|
requirements: []
|
702
|
-
rubygems_version: 3.
|
704
|
+
rubygems_version: 3.1.6
|
703
705
|
signing_key:
|
704
706
|
specification_version: 4
|
705
707
|
summary: QTI 1.2 and 2.1 import and export models
|
@@ -734,6 +736,7 @@ test_files:
|
|
734
736
|
- spec/fixtures/items_1.2/item_no_title.xml
|
735
737
|
- spec/fixtures/items_1.2/matching.xml
|
736
738
|
- spec/fixtures/items_1.2/matching_feedback.xml
|
739
|
+
- spec/fixtures/items_1.2/mc_feedback.xml
|
737
740
|
- spec/fixtures/items_1.2/multiple_answer.xml
|
738
741
|
- spec/fixtures/items_1.2/multiple_answer_canvas.xml
|
739
742
|
- spec/fixtures/items_1.2/multiple_choice.xml
|