qti 2.23.0 → 2.23.1

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: e31df9f591cac79f5ac4c2d6ac0901757151e68532ee60cd94599bfd028fd114
4
- data.tar.gz: 29eebbef83f5cbd6e08ba3e556e2fb390995f3794a218d7529c1b27e7b6b2c99
3
+ metadata.gz: bd8303859118b11ead1859869efcadb1345b74da5c0d03099d961ed8ed33439d
4
+ data.tar.gz: 5f7e10b30898792b696d61cb14bc9a117c027462df0da9b5c35a347f98df62b6
5
5
  SHA512:
6
- metadata.gz: '0983e7070edb2d6d6bea9efa4fa7e3daff11a77fdddb9230a13dc71fa7191ca69deba037443fb8a57fb6737c5e609ab383568d07d89f39c1907aa779c2505faa'
7
- data.tar.gz: d3e1041c1ff761a9db545fbe0bca3170d6247cbcb73070c42160c5444e095a7d3f9453bf4da2a9c60ffdeb71fc6f755ce5af7cec4aa4857c551fe78ea0b38ee3
6
+ metadata.gz: faf84243d53822d2bb64712f5ea2215377199e956bec31e11d55a6d361b8f4c5509a2c7516c04b33141509877b2ad7f2c17b116b8bfbb9377f896212190ff298
7
+ data.tar.gz: 854b534ca6c5b4d30f6bca3287144fdfc884e7a977ea2d875d226da0ddeb41d0da5b5294c0371444da630f049209259ff222cf986b998b45cebec5279938edf3
@@ -83,7 +83,7 @@ module Qti
83
83
  # rubocop:enable Metrics/AbcSize
84
84
  def setvar_nodes(choice_nodes)
85
85
  choice_nodes.select do |choice_node|
86
- choice_node.at_xpath('.//xmlns:setvar')&.content&.to_f&.positive?
86
+ choice_node.at_xpath('.//xmlns:setvar')&.content&.present?
87
87
  end
88
88
  end
89
89
  end
data/lib/qti/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Qti
2
- VERSION = '2.23.0'.freeze
2
+ VERSION = '2.23.1'.freeze
3
3
  end
@@ -0,0 +1,69 @@
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 title="1.2 Import Quiz" ident="A1001">
4
+ <section title="Main" ident="S1002">
5
+ <item ident="d74b47a4abeeed159e030bfecbcecea2" title="My question title">
6
+ <itemmetadata>
7
+ <qtimetadata>
8
+ <qtimetadatafield>
9
+ <fieldlabel>question_type</fieldlabel>
10
+ <fieldentry>multiple_choice_question</fieldentry>
11
+ </qtimetadatafield>
12
+ <qtimetadatafield>
13
+ <fieldlabel>points_possible</fieldlabel>
14
+ <fieldentry>10.0</fieldentry>
15
+ </qtimetadatafield>
16
+ <qtimetadatafield>
17
+ <fieldlabel>original_answer_ids</fieldlabel>
18
+ <fieldentry>93bbcb84-3281-4d99-b243-79ba4051e654,3cd6d311-07cd-4ec0-b2db-3048e6cf1128</fieldentry>
19
+ </qtimetadatafield>
20
+ <qtimetadatafield>
21
+ <fieldlabel>assessment_question_identifierref</fieldlabel>
22
+ <fieldentry>9f47365e112840d80a79a960b1b0b6a7</fieldentry>
23
+ </qtimetadatafield>
24
+ <qtimetadatafield>
25
+ <fieldlabel>calculator_type</fieldlabel>
26
+ <fieldentry>none</fieldentry>
27
+ </qtimetadatafield>
28
+ </qtimetadata>
29
+ </itemmetadata>
30
+ <presentation>
31
+ <material>
32
+ <mattext texttype="text/html">&lt;p&gt;the correct answer is letter A&lt;/p&gt;</mattext>
33
+ </material>
34
+ <response_lid ident="response1" rcardinality="Single">
35
+ <render_choice>
36
+ <response_label ident="93bbcb84-3281-4d99-b243-79ba4051e654">
37
+ <material>
38
+ <mattext texttype="text/html">A</mattext>
39
+ </material>
40
+ </response_label>
41
+ <response_label ident="3cd6d311-07cd-4ec0-b2db-3048e6cf1128">
42
+ <material>
43
+ <mattext texttype="text/html">B</mattext>
44
+ </material>
45
+ </response_label>
46
+ </render_choice>
47
+ </response_lid>
48
+ </presentation>
49
+ <resprocessing>
50
+ <outcomes>
51
+ <decvar maxvalue="100" minvalue="0" varname="SCORE" vartype="Decimal"/>
52
+ </outcomes>
53
+ <respcondition>
54
+ <conditionvar>
55
+ <varequal respident="response1">93bbcb84-3281-4d99-b243-79ba4051e654</varequal>
56
+ </conditionvar>
57
+ <setvar action="Set" varname="SCORE">0.0</setvar>
58
+ </respcondition>
59
+ <respcondition correctanswer="Yes">
60
+ <conditionvar>
61
+ <varequal respident="response1">3cd6d311-07cd-4ec0-b2db-3048e6cf1128</varequal>
62
+ </conditionvar>
63
+ <setvar action="Set" varname="SCORE">0.0</setvar>
64
+ </respcondition>
65
+ </resprocessing>
66
+ </item>
67
+ </section>
68
+ </assessment>
69
+ </questestinterop>
@@ -138,7 +138,7 @@ describe Qti::V1::Models::AssessmentItem do
138
138
  describe '#scoring_data_structs' do
139
139
  it 'grabs the rcardinality and scoring data value' do
140
140
  struct = loaded_class.send(:scoring_data_structs)
141
- expect(struct.first.values).to eq 'QUE_1006_A2'
141
+ expect(struct.first.values).to eq 'QUE_1005_A1'
142
142
  expect(struct.first.rcardinality).to eq 'Single'
143
143
  end
144
144
  end
@@ -266,4 +266,26 @@ describe Qti::V1::Models::AssessmentItem do
266
266
  end
267
267
  end
268
268
  end
269
+
270
+ context 'multiple choice with "vary points by answer" and answers with zero points' do
271
+ let(:file_path) { File.join('spec', 'fixtures', 'items_1.2', 'choice_vary_points_by_answer_zero_points.xml') }
272
+ let(:test_object) { Qti::V1::Models::Assessment.from_path!(file_path) }
273
+ let(:assessment_item_refs) { test_object.assessment_items }
274
+ let(:loaded_class) { described_class.new(assessment_item_refs.first) }
275
+
276
+ describe '#scoring_data_structs' do
277
+ it 'collects all the correct answers' do
278
+ struct = loaded_class.scoring_data_structs
279
+ expect(struct.size).to eq 2
280
+ expect(struct.map(&:values)).to eq %w[93bbcb84-3281-4d99-b243-79ba4051e654 3cd6d311-07cd-4ec0-b2db-3048e6cf1128]
281
+ end
282
+
283
+ it 'collect all the points answer points' do
284
+ struct = loaded_class.scoring_data_structs
285
+ expect(struct.size).to eq 2
286
+ expect(struct.map(&:scoring_options)).to eq([{ 'points' => 0.0 },
287
+ { 'points' => 0.0, 'correct_answer' => true }])
288
+ end
289
+ end
290
+ end
269
291
  end
data/spec/lib/qti_spec.rb CHANGED
@@ -35,7 +35,7 @@ describe Qti::Importer do
35
35
  assessment_items = importer.assessment_item_refs.map { |item| importer.create_assessment_item(item) }
36
36
  expect(assessment_items.count).to eq 5
37
37
  answer_arity = assessment_items.map { |item| item.scoring_data_structs.count }
38
- expect(answer_arity).to eq [1, 1, 4, 1, 1]
38
+ expect(answer_arity).to eq [2, 5, 7, 1, 1]
39
39
  end
40
40
 
41
41
  it 'sets the path and package root properly' do
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.23.0
4
+ version: 2.23.1
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: 2024-05-23 00:00:00.000000000 Z
15
+ date: 2024-06-25 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: actionview
@@ -403,6 +403,7 @@ files:
403
403
  - spec/fixtures/items_1.2/categorization.xml
404
404
  - spec/fixtures/items_1.2/choice.xml
405
405
  - spec/fixtures/items_1.2/choice_vary_points_by_answer.xml
406
+ - spec/fixtures/items_1.2/choice_vary_points_by_answer_zero_points.xml
406
407
  - spec/fixtures/items_1.2/essay.xml
407
408
  - spec/fixtures/items_1.2/essay_custom_settings.xml
408
409
  - spec/fixtures/items_1.2/fib.xml
@@ -783,6 +784,7 @@ test_files:
783
784
  - spec/fixtures/items_1.2/categorization.xml
784
785
  - spec/fixtures/items_1.2/choice.xml
785
786
  - spec/fixtures/items_1.2/choice_vary_points_by_answer.xml
787
+ - spec/fixtures/items_1.2/choice_vary_points_by_answer_zero_points.xml
786
788
  - spec/fixtures/items_1.2/essay.xml
787
789
  - spec/fixtures/items_1.2/essay_custom_settings.xml
788
790
  - spec/fixtures/items_1.2/fib.xml