qti 2.15.2 → 2.15.3

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: 8cf47da54509068528926ad9f4ef3275d70206130a19e13cd5f28f113a5f0f8c
4
- data.tar.gz: 9b61ac2909cbf749e759c85f83fc340c51342caddceece2f806b3316f661845c
3
+ metadata.gz: f4d749cfb13026e00cdeabff06146d77241250a608825bff4b289ea632f24561
4
+ data.tar.gz: caa73136c519b5534c2309d73e5af6e5e4fdee04e7b22fb5065c5913abdc90d5
5
5
  SHA512:
6
- metadata.gz: 23ad71858fb02cc517255ae56613d606c8385a1b057b9fdac99381ac767ef8ca883e65a3d12a1d3e61b12289499addd91edd366b7364778cfe9b8914615475f5
7
- data.tar.gz: 97b98fc845357d06405d8882140e59c79cd18e58522bfa11411b78649577e808620b693118dd91cfec141371525000a9fbf16a7aa4765309034a9cf116bce594
6
+ metadata.gz: 01adeaad50a2f1247b5e5ced354a23db01781892b638bf4644df44facd17cd02853be8b5a96d55fcd911dcb9b98519937c628f9733373e331eaeb2dc6c774dae
7
+ data.tar.gz: 8ce6a9332d85cae1a0174b64c799c447a99f18a3096d8f0d0c7d507ebec1bc57708c20d25be6a4d3db0b0f2eaf2786ca628d2bf368d5812151c0c2568bad8243
@@ -16,14 +16,19 @@ module Qti
16
16
  'marginOfError',
17
17
  equal_node.content.to_f.to_s,
18
18
  margin,
19
- 'absolute'
19
+ margin_type
20
20
  )
21
21
  end
22
22
 
23
23
  private
24
24
 
25
25
  def margin
26
- (equal_node.content.to_f - gte_node.content.to_f).to_s
26
+ equal_node.attributes['margin']&.value ||
27
+ (equal_node.content.to_f - gte_node.content.to_f).to_s
28
+ end
29
+
30
+ def margin_type
31
+ equal_node.attributes['margintype']&.value || 'absolute'
27
32
  end
28
33
 
29
34
  def valid?
@@ -18,16 +18,20 @@ module Qti
18
18
  'preciseResponse',
19
19
  value,
20
20
  precision.to_s,
21
- 'significantDigits'
21
+ precision_type
22
22
  )
23
23
  end
24
24
 
25
25
  def value
26
26
  fval = equal_node.content.to_f
27
- number_with_precision(fval, precision: precision, significant: true)
27
+ number_with_precision(fval, precision: precision, significant: precision_type == 'significantDigits')
28
28
  end
29
29
 
30
30
  def precision
31
+ overridden_precision = equal_node.attributes['precision']&.value
32
+
33
+ return overridden_precision.to_i if overridden_precision.present?
34
+
31
35
  sig = [
32
36
  Precision.significant_digits(gt_node.content),
33
37
  Precision.significant_digits(lte_node.content)
@@ -35,6 +39,10 @@ module Qti
35
39
  sig - 1
36
40
  end
37
41
 
42
+ def precision_type
43
+ equal_node.attributes['precisiontype']&.value || 'significantDigits'
44
+ end
45
+
38
46
  def self.significant_digits(number_s)
39
47
  sig = 0
40
48
  zeros = 0
data/lib/qti/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Qti
2
- VERSION = '2.15.2'.freeze
2
+ VERSION = '2.15.3'.freeze
3
3
  end
@@ -0,0 +1,58 @@
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="i3c06f375b6b24a39925dc6a213421021" title="Quiz1.Margin.Error">
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="i028a5c60d8ce9dc63df3afefa2e9d01e" title="Question">
12
+ <itemmetadata>
13
+ <qtimetadata>
14
+ <qtimetadatafield>
15
+ <fieldlabel>question_type</fieldlabel>
16
+ <fieldentry>numerical_question</fieldentry>
17
+ </qtimetadatafield>
18
+ <qtimetadatafield>
19
+ <fieldlabel>points_possible</fieldlabel>
20
+ <fieldentry>1.0</fieldentry>
21
+ </qtimetadatafield>
22
+ <qtimetadatafield>
23
+ <fieldlabel>assessment_question_identifierref</fieldlabel>
24
+ <fieldentry>i874908082e9dce80647f2771296ca69c</fieldentry>
25
+ </qtimetadatafield>
26
+ </qtimetadata>
27
+ </itemmetadata>
28
+ <presentation>
29
+ <material>
30
+ <mattext texttype="text/html">&lt;div&gt;&lt;p&gt;QQ1.margin error&lt;/p&gt;&lt;/div&gt;</mattext>
31
+ </material>
32
+ <response_str ident="response1" rcardinality="Single">
33
+ <render_fib fibtype="Decimal">
34
+ <response_label ident="answer1"/>
35
+ </render_fib>
36
+ </response_str>
37
+ </presentation>
38
+ <resprocessing>
39
+ <outcomes>
40
+ <decvar maxvalue="100" minvalue="0" varname="SCORE" vartype="Decimal"/>
41
+ </outcomes>
42
+ <respcondition continue="No">
43
+ <conditionvar>
44
+ <or>
45
+ <varequal respident="response1" margintype="percent" margin="20.0">200.0</varequal>
46
+ <and>
47
+ <vargte respident="response1">160.0</vargte>
48
+ <varlte respident="response1">240.0</varlte>
49
+ </and>
50
+ </or>
51
+ </conditionvar>
52
+ <setvar action="Set" varname="SCORE">100</setvar>
53
+ </respcondition>
54
+ </resprocessing>
55
+ </item>
56
+ </section>
57
+ </assessment>
58
+ </questestinterop>
@@ -0,0 +1,58 @@
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="id2b817165c302c0c57416146dc94ce47" title="Quiz1.precision">
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="i3ac3c6ccf4dd3dce4d5b5a5721edd5d5" title="Question">
12
+ <itemmetadata>
13
+ <qtimetadata>
14
+ <qtimetadatafield>
15
+ <fieldlabel>question_type</fieldlabel>
16
+ <fieldentry>numerical_question</fieldentry>
17
+ </qtimetadatafield>
18
+ <qtimetadatafield>
19
+ <fieldlabel>points_possible</fieldlabel>
20
+ <fieldentry>1.0</fieldentry>
21
+ </qtimetadatafield>
22
+ <qtimetadatafield>
23
+ <fieldlabel>assessment_question_identifierref</fieldlabel>
24
+ <fieldentry>i792f29a40533189006a3bd7ffee3c857</fieldentry>
25
+ </qtimetadatafield>
26
+ </qtimetadata>
27
+ </itemmetadata>
28
+ <presentation>
29
+ <material>
30
+ <mattext texttype="text/html">&lt;div&gt;&lt;p&gt;QQ1.presision ss&lt;/p&gt;&lt;/div&gt;</mattext>
31
+ </material>
32
+ <response_str ident="response1" rcardinality="Single">
33
+ <render_fib fibtype="Decimal">
34
+ <response_label ident="answer1"/>
35
+ </render_fib>
36
+ </response_str>
37
+ </presentation>
38
+ <resprocessing>
39
+ <outcomes>
40
+ <decvar maxvalue="100" minvalue="0" varname="SCORE" vartype="Decimal"/>
41
+ </outcomes>
42
+ <respcondition continue="No">
43
+ <conditionvar>
44
+ <or>
45
+ <varequal respident="response1" precisiontype="decimals" precision="4">100.1234</varequal>
46
+ <and>
47
+ <vargt respident="response1">999.995</vargt>
48
+ <varlte respident="response1">1000.005</varlte>
49
+ </and>
50
+ </or>
51
+ </conditionvar>
52
+ <setvar action="Set" varname="SCORE">100</setvar>
53
+ </respcondition>
54
+ </resprocessing>
55
+ </item>
56
+ </section>
57
+ </assessment>
58
+ </questestinterop>
@@ -65,6 +65,21 @@ describe Qti::V1::Models::Interactions::NumericInteraction do
65
65
  expect(loaded_class.item_body).to eq '<div><p>QQ1.margin error</p></div>'
66
66
  end
67
67
  end
68
+
69
+ context 'with explicit margin and margin_type' do
70
+ let(:xml_file_name) { 'numeric_margin_error_percent.xml' }
71
+ context 'the first item in numeric_margin_error.xml' do
72
+ let(:loaded_class) { described_class.new(assessment_item_refs.first, test_object) }
73
+ let(:answer_count) { 1 }
74
+
75
+ include_examples 'scoring_data_structs',
76
+ id: %w[response1],
77
+ type: %w[marginOfError],
78
+ value: %w[200.0],
79
+ margin: %w[20.0],
80
+ margin_type: %w[percent]
81
+ end
82
+ end
68
83
  end
69
84
 
70
85
  context 'precision' do
@@ -87,6 +102,22 @@ describe Qti::V1::Models::Interactions::NumericInteraction do
87
102
  expect(loaded_class.item_body).to eq '<div><p>QQ1.presision ss</p></div>'
88
103
  end
89
104
  end
105
+
106
+ context 'with explicit precision and precision_type' do
107
+ let(:xml_file_name) { 'numeric_precision_decimals.xml' }
108
+
109
+ context 'the first item in numeric_precision_decimals.xml' do
110
+ let(:loaded_class) { described_class.new(assessment_item_refs.first, test_object) }
111
+ let(:answer_count) { 1 }
112
+
113
+ include_examples 'scoring_data_structs',
114
+ id: %w[response1],
115
+ type: %w[preciseResponse],
116
+ value: %w[100.1234],
117
+ precision: %w[4],
118
+ precision_type: %w[decimals]
119
+ end
120
+ end
90
121
  end
91
122
 
92
123
  context 'wthin range' 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.15.2
4
+ version: 2.15.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adrian Diaz
@@ -412,7 +412,9 @@ files:
412
412
  - spec/fixtures/items_1.2/multiple_choice.xml
413
413
  - spec/fixtures/items_1.2/numeric_exact_match.xml
414
414
  - spec/fixtures/items_1.2/numeric_margin_error.xml
415
+ - spec/fixtures/items_1.2/numeric_margin_error_percent.xml
415
416
  - spec/fixtures/items_1.2/numeric_precision.xml
417
+ - spec/fixtures/items_1.2/numeric_precision_decimals.xml
416
418
  - spec/fixtures/items_1.2/numeric_within_range.xml
417
419
  - spec/fixtures/items_1.2/ordering.xml
418
420
  - spec/fixtures/items_1.2/question_group.xml
@@ -772,7 +774,9 @@ test_files:
772
774
  - spec/fixtures/items_1.2/multiple_choice.xml
773
775
  - spec/fixtures/items_1.2/numeric_exact_match.xml
774
776
  - spec/fixtures/items_1.2/numeric_margin_error.xml
777
+ - spec/fixtures/items_1.2/numeric_margin_error_percent.xml
775
778
  - spec/fixtures/items_1.2/numeric_precision.xml
779
+ - spec/fixtures/items_1.2/numeric_precision_decimals.xml
776
780
  - spec/fixtures/items_1.2/numeric_within_range.xml
777
781
  - spec/fixtures/items_1.2/ordering.xml
778
782
  - spec/fixtures/items_1.2/question_group.xml