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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e121df522dfdc1e21c2944bfa04334fdb4226c8a288356ff4ad1ef84e7354a86
4
- data.tar.gz: 01cea5632a13762bc2929b4f61cafbc47893c38fda88c1d14a5d51a5eb1b73aa
3
+ metadata.gz: d2dc18241493cc73026c3aa2c51534c22d8b880b4e5405659b875e03354c4164
4
+ data.tar.gz: 19381b84fe5cff67721722d8329ad82399a7cd75bd1ae6a972b566b594b9ec97
5
5
  SHA512:
6
- metadata.gz: 43eb6eee2a5e6073750023429875e267565ab4ff2a23a6bcf292231ccf95f5a09da886208d12ad1fc4db7c339616801e908b0c0a4e3aee0c72f4e651065eaec3
7
- data.tar.gz: cfea73f7c7d3a86f41de834205c634a5f0789ea57519eb180491a8411c55e292c4648673ca76d5aa1b04653ee7e704de50a422b3399780f3f428301a897d2968
6
+ metadata.gz: cbe4b4ea5336f9f76e219c5045f3182f9fa1ea18372dd796cb7ecb43bf4787633d1692e28d505c35231c62d6432c9691826fdda1cabdb3543afb991731dc8ebf
7
+ data.tar.gz: 18c96ba1be32ba9fdbdc90dc8678668395ac723f26c76283182f2e597318ab8844071c5908d5ea0638ad61e02362e8079a6da7d51c0c527abc283cdb0a2e4732
@@ -1,6 +1,8 @@
1
1
  module Qti
2
2
  module ContentPackaging
3
3
  class AssessmentItem < Dry::Struct
4
+ constructor_type :schema
5
+
4
6
  attribute :identifier, Types::Strict::String
5
7
  attribute :title, Types::Strict::String
6
8
  attribute :interaction, ContentPackaging::ChoiceInteraction
@@ -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::Int
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::Int | Types::Coercible::Float
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, canvas_blank_id(stem_item[1..-2]))
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').first[:linkrefid]
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.text
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
@@ -1,3 +1,3 @@
1
1
  module Qti
2
- VERSION = '2.8.0'.freeze
2
+ VERSION = '2.9.2'.freeze
3
3
  end
@@ -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">&lt;div&gt;&lt;p&gt;Feedback Check&lt;/p&gt;&lt;/div&gt;</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">&lt;p&gt;General Feedback&lt;/p&gt;</mattext>
113
+ </material>
114
+ </flow_mat>
115
+ </itemfeedback>
116
+ <itemfeedback ident="correct_fb">
117
+ <flow_mat>
118
+ <material>
119
+ <mattext texttype="text/html">&lt;p&gt;General Correct Feedback&lt;/p&gt;</mattext>
120
+ </material>
121
+ </flow_mat>
122
+ </itemfeedback>
123
+ <itemfeedback ident="general_incorrect_fb">
124
+ <flow_mat>
125
+ <material>
126
+ <mattext texttype="text/html">&lt;p&gt;General Incorrect Feedback&lt;/p&gt;</mattext>
127
+ </material>
128
+ </flow_mat>
129
+ </itemfeedback>
130
+ <itemfeedback ident="5706_fb">
131
+ <flow_mat>
132
+ <material>
133
+ <mattext texttype="text/html">&lt;p&gt;Answer A Feedback&lt;/p&gt;</mattext>
134
+ </material>
135
+ </flow_mat>
136
+ </itemfeedback>
137
+ <itemfeedback ident="2408_fb">
138
+ <flow_mat>
139
+ <material>
140
+ <mattext texttype="text/html">&lt;p&gt;Answer B Feedback&lt;/p&gt;</mattext>
141
+ </material>
142
+ </flow_mat>
143
+ </itemfeedback>
144
+ <itemfeedback ident="621_fb">
145
+ <flow_mat>
146
+ <material>
147
+ <mattext texttype="text/html">&lt;p&gt;Answer C Feedback&lt;/p&gt;</mattext>
148
+ </material>
149
+ </flow_mat>
150
+ </itemfeedback>
151
+ <itemfeedback ident="7011_fb">
152
+ <flow_mat>
153
+ <material>
154
+ <mattext texttype="text/html">&lt;p&gt;Answer D Feedback&lt;/p&gt;</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.8.0
4
+ version: 2.9.2
5
5
  platform: ruby
6
6
  authors:
7
- - Hannah Bottalla
8
- - Robinson Rodríguez
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-01-18 00:00:00.000000000 Z
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.12.3
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.12.3
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.0.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