qti 2.26.1 → 2.28.0

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: d185ca9468c4d41b04a10ffc8fdddc3b443ecd632de1f5b64c68dde754da375e
4
- data.tar.gz: 5d47f324498c8c1d0bbb42eea2dbc08976aa7836c0cd6c386456f0e2bd5b86b5
3
+ metadata.gz: e41a3a5f23ea40d864c780f298babfa504ff43ec2db3b45b2601ab52233745b0
4
+ data.tar.gz: 4258a94f2294a5d54a4e5fbe91b52b53d2942baaea5496d6cf989e3f5c87cffe
5
5
  SHA512:
6
- metadata.gz: c61f7ecb24c47c98892d9edf31f1d145d7f3acddd9fab59c22dc15d0559a3e1c531046f33bee05790aff8db27b1d785d38554ac15eb994025b2dc0713e8e2586
7
- data.tar.gz: e2fc18ee5e506a6db953868dd5e90e69e418f04054be671250c6fa55fa375cd8ba9954e7f3d90ec6f4b819abad673eef8344723671cd45b7c11d3e0972d4e50d
6
+ metadata.gz: 9430cbbbec8edd4361403e47f35dfea883431a9edd3519bc56b361f211af0ae3c0a8e51bc32bba4ee40360b725d354c7faa3517d50ffecb51b33970691ee065e
7
+ data.tar.gz: 8ba772bb5cbbc3d492c37bd015052dd70e5c0ddbd01923a51959067a67ea407db8e91b14b3bd9c83452678e05ff80626a53f3750384d37d77ae680b7dbc60635
@@ -331,6 +331,14 @@ module Qti
331
331
  tag_under_quiz('hide_item_response_correctness_at')
332
332
  end
333
333
 
334
+ def disable_document_access
335
+ tag_under_quiz('disable_document_access')
336
+ end
337
+
338
+ def disable_document_access?
339
+ string_true?(disable_document_access)
340
+ end
341
+
334
342
  private
335
343
 
336
344
  def tag_under_quiz(tag)
@@ -367,6 +375,7 @@ module Qti
367
375
  :display_item_response_qualifier, :show_item_responses_at,
368
376
  :hide_item_responses_at, :display_item_response_correctness_qualifier,
369
377
  :show_item_response_correctness_at, :hide_item_response_correctness_at,
378
+ :disable_document_access?,
370
379
  to: :@canvas_meta_data, prefix: :canvas, allow_nil: true
371
380
 
372
381
  alias canvas_instructions canvas_description
@@ -54,13 +54,30 @@ module Qti
54
54
  end
55
55
  end
56
56
 
57
+ def default_orientation
58
+ passage == 'true' ? 'top' : 'left'
59
+ end
60
+
57
61
  def orientation
58
62
  @orientation ||= begin
59
63
  presentation = @node.at_xpath('.//xmlns:presentation')
60
- return 'left' if presentation.blank?
61
- presentation.at_xpath('.//xmlns:material')&.attributes&.[]('orientation')&.value || 'left'
64
+ return default_orientation if presentation.blank?
65
+
66
+ orientation_value = presentation.at_xpath('.//xmlns:material')&.attributes&.[]('orientation')&.value
67
+ orientation_value.presence || default_orientation
62
68
  end
63
69
  end
70
+
71
+ def passage_qti_metadata?
72
+ qti_metadata_children.children.any? { |node| node.text == 'passage' }
73
+ end
74
+
75
+ def passage
76
+ return false unless passage_qti_metadata?
77
+
78
+ passage_label = qti_metadata_children.children.find { |node| node.text == 'passage' }
79
+ passage_label&.next&.text.presence || false
80
+ end
64
81
  end
65
82
  end
66
83
  end
@@ -37,6 +37,10 @@ module Qti
37
37
  def orientation
38
38
  'left'
39
39
  end
40
+
41
+ def passage
42
+ false
43
+ end
40
44
  end
41
45
  end
42
46
  end
data/lib/qti/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Qti
2
- VERSION = '2.26.1'.freeze
2
+ VERSION = '2.28.0'.freeze
3
3
  end
@@ -31,6 +31,10 @@
31
31
  <fieldlabel>source_url</fieldlabel>
32
32
  <fieldentry>https://sourceurl.com</fieldentry>
33
33
  </qtimetadatafield>
34
+ <qtimetadatafield>
35
+ <fieldlabel>passage</fieldlabel>
36
+ <fieldentry>false</fieldentry>
37
+ </qtimetadatafield>
34
38
  </qtimetadata>
35
39
  </itemmetadata>
36
40
  <presentation>
@@ -0,0 +1,48 @@
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="i1e5e0d6fba7342e63ae43afe9863070d" title="Quiz.text">
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="d74b47a4abeeed159e030bfecbcecea2" title="some title" instructions="some instructions">
12
+ <itemmetadata>
13
+ <qtimetadata>
14
+ <qtimetadatafield>
15
+ <fieldlabel>question_type</fieldlabel>
16
+ <fieldentry>text_only_question</fieldentry>
17
+ </qtimetadatafield>
18
+ <qtimetadatafield>
19
+ <fieldlabel>points_possible</fieldlabel>
20
+ <fieldentry>0.0</fieldentry>
21
+ </qtimetadatafield>
22
+ <qtimetadatafield>
23
+ <fieldlabel>original_answer_ids</fieldlabel>
24
+ <fieldentry/>
25
+ </qtimetadatafield>
26
+ <qtimetadatafield>
27
+ <fieldlabel>assessment_question_identifierref</fieldlabel>
28
+ <fieldentry>9f47365e112840d80a79a960b1b0b6a7</fieldentry>
29
+ </qtimetadatafield>
30
+ <qtimetadatafield>
31
+ <fieldlabel>source_url</fieldlabel>
32
+ <fieldentry>https://sourceurl.com</fieldentry>
33
+ </qtimetadatafield>
34
+ <qtimetadatafield>
35
+ <fieldlabel>passage</fieldlabel>
36
+ <fieldentry>true</fieldentry>
37
+ </qtimetadatafield>
38
+ </qtimetadata>
39
+ </itemmetadata>
40
+ <presentation>
41
+ <material orientation="top">
42
+ <mattext texttype="text/html">&lt;p&gt;passage content&lt;/p&gt;</mattext>
43
+ </material>
44
+ </presentation>
45
+ </item>
46
+ </section>
47
+ </assessment>
48
+ </questestinterop>
@@ -33,6 +33,7 @@
33
33
  <one_time_results>false</one_time_results>
34
34
  <show_correct_answers_last_attempt>false</show_correct_answers_last_attempt>
35
35
  <allow_clear_mc_selection>true</allow_clear_mc_selection>
36
+ <disable_document_access>true</disable_document_access>
36
37
  <only_visible_to_overrides>false</only_visible_to_overrides>
37
38
  <module_locked>false</module_locked>
38
39
  <nq_ip_filter from="255.255.0.0" to="255.255.0.255"/>
@@ -57,6 +57,7 @@ context 'Canvas Assessment Meta Data' do
57
57
  .to eq(display_item_response_correctness_qualifier)
58
58
  expect(assessment.canvas_show_item_response_correctness_at).to eq(show_item_response_correctness_at)
59
59
  expect(assessment.canvas_hide_item_response_correctness_at).to eq(hide_item_response_correctness_at)
60
+ expect(assessment.canvas_disable_document_access?).to eq(disable_document_access)
60
61
  end
61
62
  end
62
63
 
@@ -112,6 +113,7 @@ context 'Canvas Assessment Meta Data' do
112
113
  let(:hide_item_responses_at) { nil }
113
114
  let(:show_item_response_correctness_at) { nil }
114
115
  let(:hide_item_response_correctness_at) { nil }
116
+ let(:disable_document_access) { false }
115
117
 
116
118
  include_examples('loads canvas meta data')
117
119
  end
@@ -173,6 +175,7 @@ context 'Canvas Assessment Meta Data' do
173
175
  let(:hide_item_responses_at) { '2024-07-21 11:59:00 UTC' }
174
176
  let(:show_item_response_correctness_at) { '2024-07-19 06:00:00 UTC' }
175
177
  let(:hide_item_response_correctness_at) { '2024-07-22 11:59:00 UTC' }
178
+ let(:disable_document_access) { true }
176
179
 
177
180
  include_examples('loads canvas meta data')
178
181
  end
@@ -229,6 +232,7 @@ context 'Canvas Assessment Meta Data' do
229
232
  let(:hide_item_responses_at) { nil }
230
233
  let(:show_item_response_correctness_at) { nil }
231
234
  let(:hide_item_response_correctness_at) { nil }
235
+ let(:disable_document_access) { false }
232
236
 
233
237
  include_examples('loads canvas meta data')
234
238
  end
@@ -285,6 +289,7 @@ context 'Canvas Assessment Meta Data' do
285
289
  let(:hide_item_responses_at) { nil }
286
290
  let(:show_item_response_correctness_at) { nil }
287
291
  let(:hide_item_response_correctness_at) { nil }
292
+ let(:disable_document_access) { false }
288
293
 
289
294
  include_examples('loads canvas meta data')
290
295
  end
@@ -59,7 +59,24 @@ describe Qti::V1::Models::StimulusItem do
59
59
  {
60
60
  source_url: 'https://sourceurl.com',
61
61
  instructions: 'some instructions',
62
- orientation: 'top'
62
+ orientation: 'top',
63
+ passage: 'false'
64
+ }.each do |key, value|
65
+ it "returns the correct #{key}" do
66
+ expect(stimulus_item.send(key)).to eq(value)
67
+ end
68
+ end
69
+ end
70
+
71
+ context 'when the passage item was generated by New Quizzes' do
72
+ let(:file_path) { File.join('spec', 'fixtures', 'items_1.2', 'stimulus_passage.xml') }
73
+ let(:test_object) { Qti::V1::Models::Assessment.from_path!(file_path) }
74
+ let(:stimulus_item) { test_object.create_stimulus(test_object.assessment_items.first) }
75
+ {
76
+ source_url: 'https://sourceurl.com',
77
+ instructions: 'some instructions',
78
+ orientation: 'top',
79
+ passage: 'true'
63
80
  }.each do |key, value|
64
81
  it "returns the correct #{key}" do
65
82
  expect(stimulus_item.send(key)).to eq(value)
@@ -75,7 +92,8 @@ describe Qti::V1::Models::StimulusItem do
75
92
  {
76
93
  source_url: nil,
77
94
  instructions: nil,
78
- orientation: 'left'
95
+ orientation: 'left',
96
+ passage: false
79
97
  }.each do |key, value|
80
98
  it "returns the correct #{key}" do
81
99
  expect(stimulus_item.send(key)).to eq(value)
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.26.1
4
+ version: 2.28.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: 2025-03-31 00:00:00.000000000 Z
15
+ date: 2025-05-12 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: actionview
@@ -423,6 +423,7 @@ files:
423
423
  - spec/fixtures/items_1.2/question_group.xml
424
424
  - spec/fixtures/items_1.2/single_fib.xml
425
425
  - spec/fixtures/items_1.2/stimulus.xml
426
+ - spec/fixtures/items_1.2/stimulus_passage.xml
426
427
  - spec/fixtures/items_1.2/stimulus_with_child_item.xml
427
428
  - spec/fixtures/items_1.2/text.no.question.xml
428
429
  - spec/fixtures/items_1.2/true_false.xml
@@ -806,6 +807,7 @@ test_files:
806
807
  - spec/fixtures/items_1.2/question_group.xml
807
808
  - spec/fixtures/items_1.2/single_fib.xml
808
809
  - spec/fixtures/items_1.2/stimulus.xml
810
+ - spec/fixtures/items_1.2/stimulus_passage.xml
809
811
  - spec/fixtures/items_1.2/stimulus_with_child_item.xml
810
812
  - spec/fixtures/items_1.2/text.no.question.xml
811
813
  - spec/fixtures/items_1.2/true_false.xml