qti 2.17.0 → 2.19.0

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
2
  SHA256:
3
- metadata.gz: 8ecae7fca00b12644bc2942b43f7fe47c6b959823c6b4b3a92e70193529b064f
4
- data.tar.gz: b9c35c2873033a84e0b673b58e4859d434de0ea0052a4891b38e448de034759d
3
+ metadata.gz: 59b8ff402b8251fba645448e0c6159d73cbfbaa383d7a796c379136ba5b957bc
4
+ data.tar.gz: 9b3d848749f95e31dc095c0b3d8b6eddafdc4eb2eed7fc775b5c3d34a696e56e
5
5
  SHA512:
6
- metadata.gz: c7ec25c08693f1b467121f8d528859c99ff58d57ad9eb55d44fb31871210a6d04f0184517db425ce62509ab3ea00700ea6203e1d4ae3323de4b4eaad3577f0a1
7
- data.tar.gz: aa5a807baa86a4554c52a83c0d2c16c7421c82ef1bb5a4c680cfc1e2f4cb9c5bbcea79936d1bc02984fb0bb74d6c4b6d44a8d1bdc0b8d7f4272f49fc27249018
6
+ metadata.gz: 9487c787ace952ccb0771573bf7293c3797982c411f3c21af35bd57fca53b1a956cf593650aff155af2ea29471e59efa7586bf89a39cf9485396790d62ecc37e
7
+ data.tar.gz: c23ecddd40c5dc43e7078b66e569658fa34e25e5511d4999252b9e81cd0bc72ddb098fa64c1f99b6dcf5056ed38b40150b385e6ac6cfad8ca3a77081e9899490
@@ -15,11 +15,12 @@ module Qti
15
15
  end
16
16
 
17
17
  def assessment_items
18
- @doc.xpath("//*[self::#{GROUP_ID} or self::xmlns:item[not(ancestor::#{GROUP_ID})]]")
18
+ @doc.xpath("//*[self::#{GROUP_ID} or self::xmlns:item[not(ancestor::#{GROUP_ID})]" \
19
+ ' or self::xmlns:bankentry_item]')
19
20
  end
20
21
 
21
22
  def create_assessment_item(assessment_item)
22
- return nil if sub_section?(assessment_item)
23
+ return nil if sub_section?(assessment_item) || bank_entry_item?(assessment_item)
23
24
  item = Qti::V1::Models::AssessmentItem.new(assessment_item, @package_root, self)
24
25
  item.manifest = manifest
25
26
  item
@@ -39,6 +40,11 @@ module Qti
39
40
  Qti::V1::Models::QuestionGroup.new(group_ref)
40
41
  end
41
42
 
43
+ def create_bank_entry_item(bank_entry_item_ref)
44
+ return nil unless bank_entry_item?(bank_entry_item_ref)
45
+ Qti::V1::Models::BankEntryItem.new(bank_entry_item_ref)
46
+ end
47
+
42
48
  private
43
49
 
44
50
  def sub_section?(ref_node)
@@ -57,6 +63,10 @@ module Qti
57
63
  def question_group?(ref_node)
58
64
  ref_node.xpath("self::#{GROUP_ID}").present?
59
65
  end
66
+
67
+ def bank_entry_item?(ref_node)
68
+ ref_node.xpath('self::xmlns:bankentry_item').present?
69
+ end
60
70
  end
61
71
  end
62
72
  end
@@ -84,6 +84,27 @@ module Qti
84
84
  end
85
85
  end
86
86
 
87
+ def calculator_type
88
+ @calculator_type ||= begin
89
+ if calculator_type_metadata?
90
+ calculator_type_metadata_label = qti_metadata_children.children.find do |node|
91
+ node.text == 'calculator_type'
92
+ end
93
+ calculator_type_metadata_label.next.text
94
+ end
95
+ end
96
+ end
97
+
98
+ def calculator_type_metadata?
99
+ if @doc.at_xpath('.//xmlns:qtimetadata').present?
100
+ qti_metadata_children.children.find do |node|
101
+ node.text == 'calculator_type'
102
+ end.present?
103
+ else
104
+ false
105
+ end
106
+ end
107
+
87
108
  def decvar_maxvalue
88
109
  @doc.at_xpath('.//xmlns:decvar/@maxvalue')&.value&.to_i ||
89
110
  @doc.at_xpath('.//xmlns:decvar/@defaultval')&.value&.to_i || 0
@@ -0,0 +1,27 @@
1
+ module Qti
2
+ module V1
3
+ module Models
4
+ class BankEntryItem < Qti::V1::Models::Base
5
+ attr_reader :doc
6
+
7
+ def initialize(item, package_root = nil)
8
+ @doc = item
9
+ @path = item.document.url
10
+ self.package_root = package_root
11
+ end
12
+
13
+ def sourcebank_ref
14
+ @sourcebank_ref ||= @doc.attribute('sourcebank_ref').value
15
+ end
16
+
17
+ def item_ref
18
+ @item_ref ||= @doc.attribute('item_ref').value
19
+ end
20
+
21
+ def points_possible
22
+ @points_possible ||= @doc.attribute('points_possible')&.value || 1
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -40,6 +40,16 @@ module Qti
40
40
  @node.at_xpath('.//xmlns:render_choice/@shuffle')&.value.try(:downcase) == 'yes'
41
41
  end
42
42
 
43
+ def locked_choices
44
+ return [] unless shuffled?
45
+
46
+ @node.xpath('.//xmlns:response_label').filter_map.with_index do |answer_node, index|
47
+ is_locked = answer_node.attributes['lock']&.value&.downcase == 'yes'
48
+
49
+ is_locked ? index : nil
50
+ end
51
+ end
52
+
43
53
  def scoring_data_structs
44
54
  raise NotImplementedError
45
55
  end
@@ -44,6 +44,10 @@ module Qti
44
44
  def create_stimulus(stimulus_ref)
45
45
  Qti::V2::Models::StimulusItem.new(path: stimulus_ref, package_root: @package_root, html: true)
46
46
  end
47
+
48
+ def create_bank_entry_item(_bank_entry_item_ref = nil)
49
+ nil # we don't support this in QTI V2 yet
50
+ end
47
51
  end
48
52
  end
49
53
  end
data/lib/qti/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Qti
2
- VERSION = '2.17.0'.freeze
2
+ VERSION = '2.19.0'.freeze
3
3
  end
data/lib/qti.rb CHANGED
@@ -68,6 +68,10 @@ module Qti
68
68
  def create_question_group(question_group_ref)
69
69
  @import.create_question_group(question_group_ref)
70
70
  end
71
+
72
+ def create_bank_entry_item(bank_entry_item_ref)
73
+ @import.create_bank_entry_item(bank_entry_item_ref)
74
+ end
71
75
  end
72
76
 
73
77
  def self.configuration
@@ -117,6 +121,7 @@ require 'qti/v1/models/object_bank'
117
121
  require 'qti/v1/models/scoring_data'
118
122
  require 'qti/v1/models/stimulus_item'
119
123
  require 'qti/v1/models/question_group'
124
+ require 'qti/v1/models/bank_entry_item'
120
125
 
121
126
  require 'qti/v1/models/interactions/base_interaction'
122
127
  require 'qti/v1/models/interactions/choice_interaction'
@@ -0,0 +1,14 @@
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="i1211c711ada74a559ee1b6c122358695" title="Question Groups">
4
+ <qtimetadata>
5
+ <qtimetadatafield>
6
+ <fieldlabel>cc_maxattempts</fieldlabel>
7
+ <fieldentry>1</fieldentry>
8
+ </qtimetadatafield>
9
+ </qtimetadata>
10
+ <section ident="root_section">
11
+ <bankentry_item sourcebank_ref="gafe7177102bee6759845b002c5de397c" item_ref="ge0c6b84f2afc834ec575718bbc1451ff" points_possible="2.0"/>
12
+ </section>
13
+ </assessment>
14
+ </questestinterop>
@@ -21,7 +21,7 @@
21
21
  </material>
22
22
  <response_lid ident="QUE_1004_RL" rcardinality="Single" rtiming="No">
23
23
  <render_choice shuffle="Yes">
24
- <response_label ident="QUE_1005_A1">
24
+ <response_label ident="QUE_1005_A1" lock="Yes">
25
25
  <material>
26
26
  <mattext texttype="text/html"><![CDATA[True]]></mattext>
27
27
  </material>
@@ -0,0 +1,90 @@
1
+ <?xml version="1.0" encoding="ISO-8859-1"?>
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 title="1.2 Import Quiz" ident="A1001">
4
+ <section title="Main" ident="S1002">
5
+ <item title="Grading - specific - 3 pt score" ident="QUE_1003">
6
+ <itemmetadata>
7
+ <qtimetadata>
8
+ <qtimetadatafield>
9
+ <fieldlabel>question_type</fieldlabel>
10
+ <fieldentry>true_false_question</fieldentry>
11
+ </qtimetadatafield>
12
+ <qtimetadatafield>
13
+ <fieldlabel>assessment_question_identifierref</fieldlabel>
14
+ <fieldentry>iff205c7405d3b36bdca9b75b51198932</fieldentry>
15
+ </qtimetadatafield>
16
+ <qtimetadatafield>
17
+ <fieldlabel>calculator_type</fieldlabel>
18
+ <fieldentry>basic</fieldentry>
19
+ </qtimetadatafield>
20
+ </qtimetadata>
21
+ </itemmetadata>
22
+ <presentation>
23
+ <material>
24
+ <mattext texttype="text/html"><![CDATA[If I get a 3, I must have done something wrong. <img data-equation-content="sample equation" script="alert('bad')" align="bottom" alt="image.png" src="org0/images/image.png" border="0"/> <img script="alert('bad')" align="bottom" alt="image.png" src="org0/images/image.png" border="0"/>]]></mattext>
25
+ </material>
26
+ <response_lid ident="QUE_1004_RL" rcardinality="Single" rtiming="No">
27
+ <render_choice shuffle="Yes">
28
+ <response_label ident="QUE_1005_A1">
29
+ <material>
30
+ <mattext texttype="text/html"><![CDATA[True]]></mattext>
31
+ </material>
32
+ </response_label>
33
+ <response_label ident="QUE_1006_A2">
34
+ <material>
35
+ <mattext texttype="text/html"><![CDATA[False]]></mattext>
36
+ </material>
37
+ </response_label>
38
+ </render_choice>
39
+ </response_lid>
40
+ </presentation>
41
+ <resprocessing>
42
+ <outcomes>
43
+ <decvar vartype="Decimal" defaultval="0" varname="que_score"/>
44
+ </outcomes>
45
+ <respcondition>
46
+ <conditionvar>
47
+ <varequal respident="QUE_1004_RL">QUE_1005_A1</varequal>
48
+ </conditionvar>
49
+ <setvar varname="que_score" action="Add">0</setvar>
50
+ </respcondition>
51
+ <respcondition>
52
+ <conditionvar>
53
+ <varequal respident="QUE_1004_RL">QUE_1006_A2</varequal>
54
+ </conditionvar>
55
+ <setvar varname="que_score" action="Set">10.00</setvar>
56
+ <displayfeedback feedbacktype="Response" linkrefid="fb_QUE_1006_A2"/>
57
+ </respcondition>
58
+ </resprocessing>
59
+ <itemfeedback ident="general_fb">
60
+ <flow_mat>
61
+ <material>
62
+ <mattext texttype="text/html">&lt;p&gt;Neutral&lt;/p&gt;&lt;img script="alert('bad')" alt="image.png" src="org0/images/image.png"/&gt;</mattext>
63
+ </material>
64
+ </flow_mat>
65
+ </itemfeedback>
66
+ <itemfeedback ident="correct_fb">
67
+ <flow_mat>
68
+ <material>
69
+ <mattext texttype="text/html">&lt;p&gt;Correct&lt;/p&gt;&lt;img script="alert('bad')" alt="image.png" src="org0/images/image.png"/&gt;</mattext>
70
+ </material>
71
+ </flow_mat>
72
+ </itemfeedback>
73
+ <itemfeedback ident="general_incorrect_fb">
74
+ <flow_mat>
75
+ <material>
76
+ <mattext texttype="text/html">&lt;p&gt;Incorrect&lt;/p&gt;&lt;img script="alert('bad')" alt="image.png" src="org0/images/image.png"/&gt;</mattext>
77
+ </material>
78
+ </flow_mat>
79
+ </itemfeedback>
80
+ <itemfeedback ident="fb_QUE_1006_A2">
81
+ <flow_mat>
82
+ <material>
83
+ <mattext texttype="text/html">&lt;p&gt;Answer was Correct&lt;/p&gt;&lt;img script="alert('bad')" alt="image.png" src="org0/images/image.png"/&gt;</mattext>
84
+ </material>
85
+ </flow_mat>
86
+ </itemfeedback>
87
+ </item>
88
+ </section>
89
+ </assessment>
90
+ </questestinterop>
@@ -0,0 +1,33 @@
1
+ <?xml version="1.0"?>
2
+ <manifest identifier="MANIFEST1" xmlns="http://www.imsglobal.org/xsd/imscp_v1p1"
3
+ xmlns:imsmd="http://www.imsglobal.org/xsd/imsmd_v1p2"
4
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5
+ xsi:schemaLocation="http://www.imsglobal.org/xsd/imscp_v1p1 imscp_v1p1.xsd http://www.imsglobal.org/xsd/imsmd_v1p2 imsmd_v1p2p2.xsd">
6
+ <metadata>
7
+ <schema>IMS Content</schema>
8
+ <schemaversion>1.1.3</schemaversion>
9
+ <imsmd:lom>
10
+ <imsmd:general>
11
+ <imsmd:identifier>
12
+ <imsmd:langstring xml:lang="en-US">52BF3E44F087427782489C7DC5CAB5FD</imsmd:langstring>
13
+ </imsmd:identifier>
14
+ <imsmd:title>
15
+ <imsmd:langstring xml:lang="en-US">Quiz (Respondus IMS QTI export)</imsmd:langstring>
16
+ </imsmd:title>
17
+ </imsmd:general>
18
+ </imsmd:lom>
19
+ </metadata>
20
+ <organizations default="EXAM1">
21
+ <organization identifier="EXAM1" structure="hierarchical">
22
+ <title>default</title>
23
+ <item identifier="ITEM1" identifierref="RESOURCE1">
24
+ <title>Exam 1</title>
25
+ </item>
26
+ </organization>
27
+ </organizations>
28
+ <resources>
29
+ <resource identifier="RESOURCE1" type="imsqti_xmlv1p2" href="quiz.xml">
30
+ <file href="quiz.xml" />
31
+ </resource>
32
+ </resources>
33
+ </manifest>
@@ -0,0 +1,14 @@
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="i1211c711ada74a559ee1b6c122358695" title="Question Groups">
4
+ <qtimetadata>
5
+ <qtimetadatafield>
6
+ <fieldlabel>cc_maxattempts</fieldlabel>
7
+ <fieldentry>1</fieldentry>
8
+ </qtimetadatafield>
9
+ </qtimetadata>
10
+ <section ident="root_section">
11
+ <bankentry_item sourcebank_ref="gafe7177102bee6759845b002c5de397c" item_ref="ge0c6b84f2afc834ec575718bbc1451ff"/>
12
+ </section>
13
+ </assessment>
14
+ </questestinterop>
@@ -115,6 +115,26 @@ describe Qti::V1::Models::AssessmentItem do
115
115
  end
116
116
  end
117
117
 
118
+ describe '#calculator_type' do
119
+ let(:test_object) { Qti::V1::Models::Assessment.from_path!(file_path) }
120
+ let(:assessment_item_refs) { test_object.assessment_items }
121
+ let(:loaded_class) { described_class.new(assessment_item_refs) }
122
+
123
+ context 'when it does not contain calculator_type metadata' do
124
+ let(:file_path) { File.join('spec', 'fixtures', 'items_1.2', 'true_false.xml') }
125
+ it 'returns nil' do
126
+ expect(loaded_class.calculator_type).to be_nil
127
+ end
128
+ end
129
+
130
+ context 'when it contains calculator_type metadata' do
131
+ let(:file_path) { File.join('spec', 'fixtures', 'items_1.2', 'true_false_with_calculator.xml') }
132
+ it 'returns the calculator_type value' do
133
+ expect(loaded_class.calculator_type).to eq 'basic'
134
+ end
135
+ end
136
+ end
137
+
118
138
  describe '#scoring_data_structs' do
119
139
  it 'grabs the rcardinality and scoring data value' do
120
140
  struct = loaded_class.send(:scoring_data_structs)
@@ -228,4 +228,22 @@ describe Qti::V1::Models::Assessment do
228
228
  ).to eq(nil)
229
229
  end
230
230
  end
231
+
232
+ describe 'bank entry items' do
233
+ let(:fixtures_path) { File.join('spec', 'fixtures', 'items_1.2') }
234
+ let(:test_object) { described_class.from_path!(file_path) }
235
+ let(:assessment_item_refs) { test_object.assessment_items }
236
+ let(:assessment_item_ref) { assessment_item_refs.first }
237
+ let(:file_path) { File.join(fixtures_path, 'bank_entry_item.xml') }
238
+
239
+ it 'methods behave as expected' do
240
+ expect(
241
+ test_object.create_assessment_item(assessment_item_ref)
242
+ ).to eq(nil)
243
+
244
+ expect(
245
+ test_object.create_bank_entry_item(assessment_item_ref).class
246
+ ).to be(Qti::V1::Models::BankEntryItem)
247
+ end
248
+ end
231
249
  end
@@ -0,0 +1,12 @@
1
+ describe Qti::V1::Models::BankEntryItem do
2
+ let(:file_path) { File.join('spec', 'fixtures', 'items_1.2', 'bank_entry_item.xml') }
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) }
6
+
7
+ it 'configures a bank entry item correctly' do
8
+ expect(loaded_class.sourcebank_ref).to eq('gafe7177102bee6759845b002c5de397c')
9
+ expect(loaded_class.item_ref).to eq('ge0c6b84f2afc834ec575718bbc1451ff')
10
+ expect(loaded_class.points_possible).to eq('2.0')
11
+ end
12
+ end
@@ -10,6 +10,12 @@ describe Qti::V1::Models::Interactions::ChoiceInteraction do
10
10
  end
11
11
  end
12
12
 
13
+ shared_examples_for 'locked_choices' do
14
+ it 'returns locked choices setting' do
15
+ expect(loaded_class.locked_choices).to eq locked_choices_value
16
+ end
17
+ end
18
+
13
19
  shared_examples_for 'answers' do
14
20
  it 'returns the answers' do
15
21
  expect(loaded_class.answers.count).to eq answer_choices_count
@@ -27,10 +33,12 @@ describe Qti::V1::Models::Interactions::ChoiceInteraction do
27
33
  context 'multiple_choice.xml' do
28
34
  let(:file_path) { File.join(fixtures_path, 'multiple_choice.xml') }
29
35
  let(:shuffle_value) { false }
36
+ let(:locked_choices_value) { [] }
30
37
  let(:answer_choices_count) { 5 }
31
38
  let(:meta_type) { nil }
32
39
 
33
40
  include_examples 'shuffled?'
41
+ include_examples 'locked_choices'
34
42
  include_examples 'answers'
35
43
  include_examples 'meta_type'
36
44
  end
@@ -38,10 +46,12 @@ describe Qti::V1::Models::Interactions::ChoiceInteraction do
38
46
  context 'true_false.xml' do
39
47
  let(:file_path) { File.join(fixtures_path, 'true_false.xml') }
40
48
  let(:shuffle_value) { true }
49
+ let(:locked_choices_value) { [0] }
41
50
  let(:answer_choices_count) { 2 }
42
51
  let(:meta_type) { 'true_false_question' }
43
52
 
44
53
  include_examples 'shuffled?'
54
+ include_examples 'locked_choices'
45
55
  include_examples 'answers'
46
56
  include_examples 'meta_type'
47
57
  end
@@ -49,17 +59,21 @@ describe Qti::V1::Models::Interactions::ChoiceInteraction do
49
59
  context 'multiple_answer.xml' do
50
60
  let(:file_path) { File.join(fixtures_path, 'multiple_answer.xml') }
51
61
  let(:shuffle_value) { false }
62
+ let(:locked_choices_value) { [] }
52
63
 
53
64
  include_examples 'shuffled?'
65
+ include_examples 'locked_choices'
54
66
  end
55
67
 
56
68
  context 'multiple_answer_canvas.xml' do
57
69
  let(:file_path) { File.join(fixtures_path, 'multiple_answer_canvas.xml') }
58
70
  let(:shuffle_value) { false }
71
+ let(:locked_choices_value) { [] }
59
72
  let(:answer_choices_count) { 4 }
60
73
  let(:meta_type) { 'multiple_answers_question' }
61
74
 
62
75
  include_examples 'shuffled?'
76
+ include_examples 'locked_choices'
63
77
  include_examples 'meta_type'
64
78
  end
65
79
 
@@ -77,6 +77,15 @@ describe Qti::V2::Models::AssessmentTest do
77
77
  end
78
78
  end
79
79
 
80
+ describe '#create_bank_entry_item' do
81
+ let(:path) { File.join(fixtures_path, 'test_qti_2.2', 'assessment.xml') }
82
+ let(:loaded_class) { described_class.from_path!(path) }
83
+
84
+ it 'returns nil' do
85
+ expect(loaded_class.create_bank_entry_item).to be_nil
86
+ end
87
+ end
88
+
80
89
  # describe '#create_stimulus' do
81
90
  # let(:path) { File.join(fixtures_path, 'test_qti_2.2', 'assessment.xml') }
82
91
  # let(:loaded_class) { described_class.from_path!(path) }
data/spec/lib/qti_spec.rb CHANGED
@@ -45,6 +45,26 @@ describe Qti::Importer do
45
45
  end
46
46
  end
47
47
 
48
+ describe '#create_bank_entry_item' do
49
+ context 'when given a bankentry_item object' do
50
+ let(:file_path) { File.join(fixtures_path, 'test_qti_1.2_bank_entry_item') }
51
+
52
+ it 'creates a bankentry_item instance' do
53
+ bank_entry_item = importer.create_bank_entry_item(importer.assessment_item_refs.first)
54
+ expect(bank_entry_item).to be_a(Qti::V1::Models::BankEntryItem)
55
+ end
56
+ end
57
+
58
+ context 'when given an object other than a bankentry_item' do
59
+ let(:file_path) { File.join(fixtures_path, 'test_qti_1.2') }
60
+
61
+ it 'returns nil' do
62
+ bank_entry_item = importer.create_bank_entry_item(importer.assessment_item_refs.first)
63
+ expect(bank_entry_item).to be_nil
64
+ end
65
+ end
66
+ end
67
+
48
68
  context 'canvas generated' do
49
69
  let(:file_path) { File.join(fixtures_path, 'test_qti_1.2_canvas') }
50
70
 
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.17.0
4
+ version: 2.19.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adrian Diaz
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2023-07-10 00:00:00.000000000 Z
15
+ date: 2023-08-01 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: actionview
@@ -325,6 +325,7 @@ files:
325
325
  - lib/qti/sanitizer.rb
326
326
  - lib/qti/v1/models/assessment.rb
327
327
  - lib/qti/v1/models/assessment_item.rb
328
+ - lib/qti/v1/models/bank_entry_item.rb
328
329
  - lib/qti/v1/models/base.rb
329
330
  - lib/qti/v1/models/choices/fill_blank_choice.rb
330
331
  - lib/qti/v1/models/choices/logical_identifier_choice.rb
@@ -392,6 +393,7 @@ files:
392
393
  - spec/fixtures/imsqti_2.2_package/images/sign.png
393
394
  - spec/fixtures/imsqti_2.2_package/imsmanifest.xml
394
395
  - spec/fixtures/interaction_checks_1.2.xml
396
+ - spec/fixtures/items_1.2/bank_entry_item.xml
395
397
  - spec/fixtures/items_1.2/canvas_multiple_dropdown.xml
396
398
  - spec/fixtures/items_1.2/canvas_multiple_dropdowns.xml
397
399
  - spec/fixtures/items_1.2/canvas_multiple_dropdowns_correct_choice_is_not_the_first.xml
@@ -428,6 +430,7 @@ files:
428
430
  - spec/fixtures/items_1.2/stimulus_with_child_item.xml
429
431
  - spec/fixtures/items_1.2/text.no.question.xml
430
432
  - spec/fixtures/items_1.2/true_false.xml
433
+ - spec/fixtures/items_1.2/true_false_with_calculator.xml
431
434
  - spec/fixtures/items_1.2/upload.xml
432
435
  - spec/fixtures/items_2.1/Example02-feedbackInline.xml
433
436
  - spec/fixtures/items_2.1/categorization.xml
@@ -557,6 +560,8 @@ files:
557
560
  - spec/fixtures/test_qti_1.2/image.png
558
561
  - spec/fixtures/test_qti_1.2/imsmanifest.xml
559
562
  - spec/fixtures/test_qti_1.2/quiz.xml
563
+ - spec/fixtures/test_qti_1.2_bank_entry_item/imsmanifest.xml
564
+ - spec/fixtures/test_qti_1.2_bank_entry_item/quiz.xml
560
565
  - spec/fixtures/test_qti_1.2_canvas/i00f37ac2af026e5a607e4a5d9a70b1d5/assessment_meta.xml
561
566
  - spec/fixtures/test_qti_1.2_canvas/i00f37ac2af026e5a607e4a5d9a70b1d5/i00f37ac2af026e5a607e4a5d9a70b1d5.xml
562
567
  - spec/fixtures/test_qti_1.2_canvas/imsmanifest.xml
@@ -674,6 +679,7 @@ files:
674
679
  - spec/lib/qti/sanitizer_spec.rb
675
680
  - spec/lib/qti/v1/models/assessment_item_spec.rb
676
681
  - spec/lib/qti/v1/models/assessment_spec.rb
682
+ - spec/lib/qti/v1/models/bank_entry_item_spec.rb
677
683
  - spec/lib/qti/v1/models/base_spec.rb
678
684
  - spec/lib/qti/v1/models/choices/fill_blank_choice_spec.rb
679
685
  - spec/lib/qti/v1/models/choices/logical_identifier_choice_spec.rb
@@ -759,6 +765,7 @@ test_files:
759
765
  - spec/fixtures/imsqti_2.2_package/images/sign.png
760
766
  - spec/fixtures/imsqti_2.2_package/imsmanifest.xml
761
767
  - spec/fixtures/interaction_checks_1.2.xml
768
+ - spec/fixtures/items_1.2/bank_entry_item.xml
762
769
  - spec/fixtures/items_1.2/canvas_multiple_dropdown.xml
763
770
  - spec/fixtures/items_1.2/canvas_multiple_dropdowns.xml
764
771
  - spec/fixtures/items_1.2/canvas_multiple_dropdowns_correct_choice_is_not_the_first.xml
@@ -795,6 +802,7 @@ test_files:
795
802
  - spec/fixtures/items_1.2/stimulus_with_child_item.xml
796
803
  - spec/fixtures/items_1.2/text.no.question.xml
797
804
  - spec/fixtures/items_1.2/true_false.xml
805
+ - spec/fixtures/items_1.2/true_false_with_calculator.xml
798
806
  - spec/fixtures/items_1.2/upload.xml
799
807
  - spec/fixtures/items_2.1/Example02-feedbackInline.xml
800
808
  - spec/fixtures/items_2.1/categorization.xml
@@ -924,6 +932,8 @@ test_files:
924
932
  - spec/fixtures/test_qti_1.2/image.png
925
933
  - spec/fixtures/test_qti_1.2/imsmanifest.xml
926
934
  - spec/fixtures/test_qti_1.2/quiz.xml
935
+ - spec/fixtures/test_qti_1.2_bank_entry_item/imsmanifest.xml
936
+ - spec/fixtures/test_qti_1.2_bank_entry_item/quiz.xml
927
937
  - spec/fixtures/test_qti_1.2_canvas/i00f37ac2af026e5a607e4a5d9a70b1d5/assessment_meta.xml
928
938
  - spec/fixtures/test_qti_1.2_canvas/i00f37ac2af026e5a607e4a5d9a70b1d5/i00f37ac2af026e5a607e4a5d9a70b1d5.xml
929
939
  - spec/fixtures/test_qti_1.2_canvas/imsmanifest.xml
@@ -1041,6 +1051,7 @@ test_files:
1041
1051
  - spec/lib/qti/sanitizer_spec.rb
1042
1052
  - spec/lib/qti/v1/models/assessment_item_spec.rb
1043
1053
  - spec/lib/qti/v1/models/assessment_spec.rb
1054
+ - spec/lib/qti/v1/models/bank_entry_item_spec.rb
1044
1055
  - spec/lib/qti/v1/models/base_spec.rb
1045
1056
  - spec/lib/qti/v1/models/choices/fill_blank_choice_spec.rb
1046
1057
  - spec/lib/qti/v1/models/choices/logical_identifier_choice_spec.rb