qti 0.9.9 → 0.9.10
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 +4 -4
- data/lib/qti/models/manifest.rb +7 -3
- data/lib/qti/v1/models/interactions/formula_interaction.rb +87 -0
- data/lib/qti/v2/models/non_assessment_test.rb +3 -5
- data/lib/qti/version.rb +1 -1
- data/spec/fixtures/items_1.2/formula.xml +86 -0
- data/spec/fixtures/items_1.2/formula_mform.xml +115 -0
- data/spec/fixtures/items_1.2/formula_mvar.xml +120 -0
- data/spec/fixtures/package_shared/example/graphicOrder.xml +32 -0
- data/spec/fixtures/package_shared/example/hotspot.xml +26 -0
- data/spec/fixtures/package_shared/example/ukair.png +0 -0
- data/spec/fixtures/package_shared/imsmanifest.xml +159 -0
- data/spec/lib/qti/v1/models/interactions/formula_interaction_spec.rb +114 -0
- data/spec/lib/qti/v2/models/non_assessment_test_spec.rb +22 -5
- metadata +20 -5
- data/spec/gemfiles/nokogiri-1.8.gemfile.lock +0 -145
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 543877ad6fc3d81d89acb84d3c65396ad46fb958
|
4
|
+
data.tar.gz: 778581e580f51411a495de65fa0495398726addb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fb44dd009750099a8e01f9cd902a49b79f2cf68d046d2d9bdb82f551c38da6cfc03ec64f2a4f1fcc083b3d6c266ad1caec00307eaf076e1a09d71ca35c601055
|
7
|
+
data.tar.gz: a8ce44c0bf8982ab70e3b00868f58ee0ef46e766744d36b91805585ad13310765d07b283a966cef9d287c29dd50a1adae0c5b74a5b8164554be75c1ec841d489
|
data/lib/qti/models/manifest.rb
CHANGED
@@ -28,9 +28,9 @@ module Qti
|
|
28
28
|
end
|
29
29
|
|
30
30
|
def qti_2_non_assessment_href
|
31
|
-
|
32
|
-
|
33
|
-
|
31
|
+
Qti::V2::Models::NonAssessmentTest.from_path!(@path, @package_root) if
|
32
|
+
xmlns_resource_count("[@type='imsqti_item_xmlv2p1']/@href") > 0 ||
|
33
|
+
xmlns_resource_count("[@type='imsqti_item_xmlv2p2']/@href") > 0
|
34
34
|
end
|
35
35
|
|
36
36
|
def unknown_type
|
@@ -42,6 +42,10 @@ module Qti
|
|
42
42
|
def xmlns_resource(type)
|
43
43
|
xpath_with_single_check("//xmlns:resources/xmlns:resource#{type}")&.content
|
44
44
|
end
|
45
|
+
|
46
|
+
def xmlns_resource_count(type)
|
47
|
+
@doc.xpath("//xmlns:resources/xmlns:resource#{type}").count
|
48
|
+
end
|
45
49
|
end
|
46
50
|
end
|
47
51
|
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
module Qti
|
2
|
+
module V1
|
3
|
+
module Models
|
4
|
+
module Interactions
|
5
|
+
class FormulaInteraction < BaseInteraction
|
6
|
+
# This will know if a class matches
|
7
|
+
|
8
|
+
def self.matches(node, parent)
|
9
|
+
return false unless node.at_xpath('.//xmlns:calculated').present?
|
10
|
+
new(node, parent)
|
11
|
+
end
|
12
|
+
|
13
|
+
def item_body
|
14
|
+
presentation = @node.at_xpath('.//xmlns:presentation')
|
15
|
+
mattext = presentation.at_xpath('.//xmlns:mattext')
|
16
|
+
inner_content = return_inner_content!(mattext)
|
17
|
+
sanitize_content!(inner_content)
|
18
|
+
end
|
19
|
+
|
20
|
+
def scoring_data_structs
|
21
|
+
solutions.map do |answer|
|
22
|
+
ScoringData.new(
|
23
|
+
answer[:output],
|
24
|
+
rcardinality,
|
25
|
+
{id: answer[:id]}
|
26
|
+
)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def solutions
|
31
|
+
node.xpath('.//xmlns:var_set').map do |anode|
|
32
|
+
{
|
33
|
+
id: anode.attributes['ident']&.value,
|
34
|
+
input: vars_at_node(anode),
|
35
|
+
output: anode.at_xpath('.//xmlns:answer').text
|
36
|
+
}
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def variables
|
41
|
+
varlist = @node.at_xpath('.//xmlns:vars')
|
42
|
+
varlist.xpath('.//xmlns:var').map do |vnode|
|
43
|
+
{
|
44
|
+
name: vnode.attributes['name']&.value,
|
45
|
+
min: vnode.at_xpath('.//xmlns:min').text,
|
46
|
+
max: vnode.at_xpath('.//xmlns:max').text,
|
47
|
+
precision: vnode.attributes['scale']&.value
|
48
|
+
}
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def answer_tolerance
|
53
|
+
@answer_tolernance ||= @node.at_xpath('.//xmlns:answer_tolerance').text
|
54
|
+
end
|
55
|
+
|
56
|
+
def margin_of_error
|
57
|
+
if answer_tolerance.ends_with? "%"
|
58
|
+
return {margin: answer_tolerance[0..-2], margin_type:'percent'}
|
59
|
+
end
|
60
|
+
{margin: answer_tolerance, margin_type:'absolute'}
|
61
|
+
end
|
62
|
+
|
63
|
+
def formula_decimal_places
|
64
|
+
@node.at_xpath('.//xmlns:formulas/@decimal_places')&.value
|
65
|
+
end
|
66
|
+
|
67
|
+
def formulas
|
68
|
+
node.xpath('.//xmlns:formula').map do |fnode|
|
69
|
+
fnode.text
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
private
|
74
|
+
|
75
|
+
def vars_at_node(parent_node)
|
76
|
+
parent_node.xpath('.//xmlns:var').map do |vnode|
|
77
|
+
{
|
78
|
+
name: vnode.attributes['name']&.value,
|
79
|
+
value: vnode.text
|
80
|
+
}
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
@@ -22,11 +22,9 @@ module Qti
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def hrefs
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
@doc.xpath("//xmlns:resource[@type='imsqti_item_xmlv2p2']/@href")
|
29
|
-
end
|
25
|
+
nodes = @doc.xpath("//xmlns:resource[@type='imsqti_item_xmlv2p2']/@href")
|
26
|
+
return nodes if nodes.count >= 1
|
27
|
+
@doc.xpath("//xmlns:resource[@type='imsqti_item_xmlv2p1']/@href")
|
30
28
|
end
|
31
29
|
end
|
32
30
|
end
|
data/lib/qti/version.rb
CHANGED
@@ -0,0 +1,86 @@
|
|
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
|
+
<item ident="id39adb107fd2d03971a2d4206c6550dc" title="Formula">
|
4
|
+
<itemmetadata>
|
5
|
+
<qtimetadata>
|
6
|
+
<qtimetadatafield>
|
7
|
+
<fieldlabel>question_type</fieldlabel>
|
8
|
+
<fieldentry>calculated_question</fieldentry>
|
9
|
+
</qtimetadatafield>
|
10
|
+
<qtimetadatafield>
|
11
|
+
<fieldlabel>points_possible</fieldlabel>
|
12
|
+
<fieldentry>1.0</fieldentry>
|
13
|
+
</qtimetadatafield>
|
14
|
+
<qtimetadatafield>
|
15
|
+
<fieldlabel>assessment_question_identifierref</fieldlabel>
|
16
|
+
<fieldentry>i2c64259a331bc821bdcb2f326cf36631</fieldentry>
|
17
|
+
</qtimetadatafield>
|
18
|
+
</qtimetadata>
|
19
|
+
</itemmetadata>
|
20
|
+
<presentation>
|
21
|
+
<material>
|
22
|
+
<mattext texttype="text/html"><div><p>What number is [x]</p></div></mattext>
|
23
|
+
</material>
|
24
|
+
<response_str ident="response1" rcardinality="Single">
|
25
|
+
<render_fib fibtype="Decimal">
|
26
|
+
<response_label ident="answer1"/>
|
27
|
+
</render_fib>
|
28
|
+
</response_str>
|
29
|
+
</presentation>
|
30
|
+
<resprocessing>
|
31
|
+
<outcomes>
|
32
|
+
<decvar maxvalue="100" minvalue="0" varname="SCORE" vartype="Decimal"/>
|
33
|
+
</outcomes>
|
34
|
+
<respcondition title="correct">
|
35
|
+
<conditionvar>
|
36
|
+
<other/>
|
37
|
+
</conditionvar>
|
38
|
+
<setvar varname="SCORE" action="Set">100</setvar>
|
39
|
+
</respcondition>
|
40
|
+
<respcondition title="incorrect">
|
41
|
+
<conditionvar>
|
42
|
+
<not>
|
43
|
+
<other/>
|
44
|
+
</not>
|
45
|
+
</conditionvar>
|
46
|
+
<setvar varname="SCORE" action="Set">0</setvar>
|
47
|
+
</respcondition>
|
48
|
+
</resprocessing>
|
49
|
+
<itemproc_extension>
|
50
|
+
<calculated>
|
51
|
+
<answer_tolerance>0</answer_tolerance>
|
52
|
+
<formulas decimal_places="0">
|
53
|
+
<formula>x</formula>
|
54
|
+
</formulas>
|
55
|
+
<vars>
|
56
|
+
<var name="x" scale="0">
|
57
|
+
<min>1.0</min>
|
58
|
+
<max>10.0</max>
|
59
|
+
</var>
|
60
|
+
</vars>
|
61
|
+
<var_sets>
|
62
|
+
<var_set ident="3322">
|
63
|
+
<var name="x">9</var>
|
64
|
+
<answer>9.0</answer>
|
65
|
+
</var_set>
|
66
|
+
<var_set ident="415">
|
67
|
+
<var name="x">9</var>
|
68
|
+
<answer>9.0</answer>
|
69
|
+
</var_set>
|
70
|
+
<var_set ident="3782">
|
71
|
+
<var name="x">6</var>
|
72
|
+
<answer>6.0</answer>
|
73
|
+
</var_set>
|
74
|
+
<var_set ident="1100">
|
75
|
+
<var name="x">2</var>
|
76
|
+
<answer>2.0</answer>
|
77
|
+
</var_set>
|
78
|
+
<var_set ident="858">
|
79
|
+
<var name="x">3</var>
|
80
|
+
<answer>3.0</answer>
|
81
|
+
</var_set>
|
82
|
+
</var_sets>
|
83
|
+
</calculated>
|
84
|
+
</itemproc_extension>
|
85
|
+
</item>
|
86
|
+
</questestinterop>
|
@@ -0,0 +1,115 @@
|
|
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
|
+
<item ident="id39adb107fd2d03971a2d4206c6550dc" title="Question">
|
4
|
+
<itemmetadata>
|
5
|
+
<qtimetadata>
|
6
|
+
<qtimetadatafield>
|
7
|
+
<fieldlabel>question_type</fieldlabel>
|
8
|
+
<fieldentry>calculated_question</fieldentry>
|
9
|
+
</qtimetadatafield>
|
10
|
+
<qtimetadatafield>
|
11
|
+
<fieldlabel>points_possible</fieldlabel>
|
12
|
+
<fieldentry>1.0</fieldentry>
|
13
|
+
</qtimetadatafield>
|
14
|
+
<qtimetadatafield>
|
15
|
+
<fieldlabel>assessment_question_identifierref</fieldlabel>
|
16
|
+
<fieldentry>i2c64259a331bc821bdcb2f326cf36631</fieldentry>
|
17
|
+
</qtimetadatafield>
|
18
|
+
</qtimetadata>
|
19
|
+
</itemmetadata>
|
20
|
+
<presentation>
|
21
|
+
<material>
|
22
|
+
<mattext texttype="text/html"><div><p>[n][x] + [m][y]</p></div></mattext>
|
23
|
+
</material>
|
24
|
+
<response_str ident="response1" rcardinality="Single">
|
25
|
+
<render_fib fibtype="Decimal">
|
26
|
+
<response_label ident="answer1"/>
|
27
|
+
</render_fib>
|
28
|
+
</response_str>
|
29
|
+
</presentation>
|
30
|
+
<resprocessing>
|
31
|
+
<outcomes>
|
32
|
+
<decvar maxvalue="100" minvalue="0" varname="SCORE" vartype="Decimal"/>
|
33
|
+
</outcomes>
|
34
|
+
<respcondition title="correct">
|
35
|
+
<conditionvar>
|
36
|
+
<other/>
|
37
|
+
</conditionvar>
|
38
|
+
<setvar varname="SCORE" action="Set">100</setvar>
|
39
|
+
</respcondition>
|
40
|
+
<respcondition title="incorrect">
|
41
|
+
<conditionvar>
|
42
|
+
<not>
|
43
|
+
<other/>
|
44
|
+
</not>
|
45
|
+
</conditionvar>
|
46
|
+
<setvar varname="SCORE" action="Set">0</setvar>
|
47
|
+
</respcondition>
|
48
|
+
</resprocessing>
|
49
|
+
<itemproc_extension>
|
50
|
+
<calculated>
|
51
|
+
<answer_tolerance>10%</answer_tolerance>
|
52
|
+
<formulas decimal_places="2">
|
53
|
+
<formula>x=n*x</formula>
|
54
|
+
<formula>y=m*y</formula>
|
55
|
+
<formula>x+y</formula>
|
56
|
+
</formulas>
|
57
|
+
<vars>
|
58
|
+
<var name="y" scale="2">
|
59
|
+
<min>1.0</min>
|
60
|
+
<max>10.0</max>
|
61
|
+
</var>
|
62
|
+
<var name="x" scale="2">
|
63
|
+
<min>1.0</min>
|
64
|
+
<max>10.0</max>
|
65
|
+
</var>
|
66
|
+
<var name="n" scale="2">
|
67
|
+
<min>1.0</min>
|
68
|
+
<max>10.0</max>
|
69
|
+
</var>
|
70
|
+
<var name="m" scale="2">
|
71
|
+
<min>1.0</min>
|
72
|
+
<max>10.0</max>
|
73
|
+
</var>
|
74
|
+
</vars>
|
75
|
+
<var_sets>
|
76
|
+
<var_set ident="8965">
|
77
|
+
<var name="y">4.70</var>
|
78
|
+
<var name="x">4.70</var>
|
79
|
+
<var name="n">8.94</var>
|
80
|
+
<var name="m">8.63</var>
|
81
|
+
<answer>82.58</answer>
|
82
|
+
</var_set>
|
83
|
+
<var_set ident="2716">
|
84
|
+
<var name="y">3.60</var>
|
85
|
+
<var name="x">1.84</var>
|
86
|
+
<var name="n">1.31</var>
|
87
|
+
<var name="m">5.92</var>
|
88
|
+
<answer>23.72</answer>
|
89
|
+
</var_set>
|
90
|
+
<var_set ident="549">
|
91
|
+
<var name="y">7.33</var>
|
92
|
+
<var name="x">4.30</var>
|
93
|
+
<var name="n">3.67</var>
|
94
|
+
<var name="m">3.27</var>
|
95
|
+
<answer>39.75</answer>
|
96
|
+
</var_set>
|
97
|
+
<var_set ident="3413">
|
98
|
+
<var name="y">6.95</var>
|
99
|
+
<var name="x">3.28</var>
|
100
|
+
<var name="n">3.42</var>
|
101
|
+
<var name="m">5.04</var>
|
102
|
+
<answer>46.25</answer>
|
103
|
+
</var_set>
|
104
|
+
<var_set ident="5">
|
105
|
+
<var name="y">8.88</var>
|
106
|
+
<var name="x">4.53</var>
|
107
|
+
<var name="n">4.04</var>
|
108
|
+
<var name="m">2.56</var>
|
109
|
+
<answer>41.03</answer>
|
110
|
+
</var_set>
|
111
|
+
</var_sets>
|
112
|
+
</calculated>
|
113
|
+
</itemproc_extension>
|
114
|
+
</item>
|
115
|
+
</questestinterop>
|
@@ -0,0 +1,120 @@
|
|
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
|
+
<item ident="ifc0ea9e9754f1393a4b8d2979a4a2ae7" title="Question">
|
4
|
+
<itemmetadata>
|
5
|
+
<qtimetadata>
|
6
|
+
<qtimetadatafield>
|
7
|
+
<fieldlabel>question_type</fieldlabel>
|
8
|
+
<fieldentry>calculated_question</fieldentry>
|
9
|
+
</qtimetadatafield>
|
10
|
+
<qtimetadatafield>
|
11
|
+
<fieldlabel>points_possible</fieldlabel>
|
12
|
+
<fieldentry>1.0</fieldentry>
|
13
|
+
</qtimetadatafield>
|
14
|
+
<qtimetadatafield>
|
15
|
+
<fieldlabel>assessment_question_identifierref</fieldlabel>
|
16
|
+
<fieldentry>i6fc721d91a4fc5f997666939c90ae683</fieldentry>
|
17
|
+
</qtimetadatafield>
|
18
|
+
</qtimetadata>
|
19
|
+
</itemmetadata>
|
20
|
+
<presentation>
|
21
|
+
<material>
|
22
|
+
<mattext texttype="text/html"><div><p>[x] + [y]</p></div></mattext>
|
23
|
+
</material>
|
24
|
+
<response_str ident="response1" rcardinality="Single">
|
25
|
+
<render_fib fibtype="Decimal">
|
26
|
+
<response_label ident="answer1"/>
|
27
|
+
</render_fib>
|
28
|
+
</response_str>
|
29
|
+
</presentation>
|
30
|
+
<resprocessing>
|
31
|
+
<outcomes>
|
32
|
+
<decvar maxvalue="100" minvalue="0" varname="SCORE" vartype="Decimal"/>
|
33
|
+
</outcomes>
|
34
|
+
<respcondition title="correct">
|
35
|
+
<conditionvar>
|
36
|
+
<other/>
|
37
|
+
</conditionvar>
|
38
|
+
<setvar varname="SCORE" action="Set">100</setvar>
|
39
|
+
</respcondition>
|
40
|
+
<respcondition title="incorrect">
|
41
|
+
<conditionvar>
|
42
|
+
<not>
|
43
|
+
<other/>
|
44
|
+
</not>
|
45
|
+
</conditionvar>
|
46
|
+
<setvar varname="SCORE" action="Set">0</setvar>
|
47
|
+
</respcondition>
|
48
|
+
</resprocessing>
|
49
|
+
<itemproc_extension>
|
50
|
+
<calculated>
|
51
|
+
<answer_tolerance>0</answer_tolerance>
|
52
|
+
<formulas decimal_places="0">
|
53
|
+
<formula>x+y</formula>
|
54
|
+
</formulas>
|
55
|
+
<vars>
|
56
|
+
<var name="x" scale="0">
|
57
|
+
<min>1.0</min>
|
58
|
+
<max>10.0</max>
|
59
|
+
</var>
|
60
|
+
<var name="y" scale="0">
|
61
|
+
<min>1.0</min>
|
62
|
+
<max>10.0</max>
|
63
|
+
</var>
|
64
|
+
</vars>
|
65
|
+
<var_sets>
|
66
|
+
<var_set ident="163">
|
67
|
+
<var name="x">9</var>
|
68
|
+
<var name="y">7</var>
|
69
|
+
<answer>16.0</answer>
|
70
|
+
</var_set>
|
71
|
+
<var_set ident="965">
|
72
|
+
<var name="x">5</var>
|
73
|
+
<var name="y">2</var>
|
74
|
+
<answer>7.0</answer>
|
75
|
+
</var_set>
|
76
|
+
<var_set ident="8589">
|
77
|
+
<var name="x">5</var>
|
78
|
+
<var name="y">9</var>
|
79
|
+
<answer>14.0</answer>
|
80
|
+
</var_set>
|
81
|
+
<var_set ident="6087">
|
82
|
+
<var name="x">3</var>
|
83
|
+
<var name="y">2</var>
|
84
|
+
<answer>5.0</answer>
|
85
|
+
</var_set>
|
86
|
+
<var_set ident="8894">
|
87
|
+
<var name="x">2</var>
|
88
|
+
<var name="y">5</var>
|
89
|
+
<answer>7.0</answer>
|
90
|
+
</var_set>
|
91
|
+
<var_set ident="5184">
|
92
|
+
<var name="x">6</var>
|
93
|
+
<var name="y">8</var>
|
94
|
+
<answer>14.0</answer>
|
95
|
+
</var_set>
|
96
|
+
<var_set ident="8918">
|
97
|
+
<var name="x">3</var>
|
98
|
+
<var name="y">8</var>
|
99
|
+
<answer>11.0</answer>
|
100
|
+
</var_set>
|
101
|
+
<var_set ident="3332">
|
102
|
+
<var name="x">4</var>
|
103
|
+
<var name="y">3</var>
|
104
|
+
<answer>7.0</answer>
|
105
|
+
</var_set>
|
106
|
+
<var_set ident="7495">
|
107
|
+
<var name="x">10</var>
|
108
|
+
<var name="y">10</var>
|
109
|
+
<answer>20.0</answer>
|
110
|
+
</var_set>
|
111
|
+
<var_set ident="6307">
|
112
|
+
<var name="x">9</var>
|
113
|
+
<var name="y">4</var>
|
114
|
+
<answer>13.0</answer>
|
115
|
+
</var_set>
|
116
|
+
</var_sets>
|
117
|
+
</calculated>
|
118
|
+
</itemproc_extension>
|
119
|
+
</item>
|
120
|
+
</questestinterop>
|
@@ -0,0 +1,32 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<assessmentItem xmlns="http://www.imsglobal.org/xsd/imsqti_v2p1"
|
3
|
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
4
|
+
xsi:schemaLocation="http://www.imsglobal.org/xsd/imsqti_v2p1 http://www.imsglobal.org/xsd/qti/qtiv2p1/imsqti_v2p1.xsd"
|
5
|
+
identifier="graphicOrder" title="Flying Home" adaptive="false" timeDependent="false">
|
6
|
+
<responseDeclaration identifier="RESPONSE" cardinality="ordered" baseType="identifier">
|
7
|
+
<correctResponse>
|
8
|
+
<value>A</value>
|
9
|
+
<value>D</value>
|
10
|
+
<value>C</value>
|
11
|
+
<value>B</value>
|
12
|
+
</correctResponse>
|
13
|
+
</responseDeclaration>
|
14
|
+
<outcomeDeclaration identifier="SCORE" cardinality="single" baseType="float"/>
|
15
|
+
<itemBody>
|
16
|
+
<p>Lorna is flying back home to the UK. Ideally, she would like to fly in directly to her
|
17
|
+
home town of Glasgow. Edinburgh is her second choice and, if necessary, she could fly
|
18
|
+
into London and pick up an internal connecting flight. Although she has been offered a
|
19
|
+
cheap flight to Manchester it remains her least favourite option as connecting flights
|
20
|
+
to Glasgow are not very reliable from there.</p>
|
21
|
+
<graphicOrderInteraction responseIdentifier="RESPONSE">
|
22
|
+
<prompt>Mark the airports shown on the map according to Lorna's preferences.</prompt>
|
23
|
+
<object type="image/png" width="206" height="280" data="ukair.png">UK Map</object>
|
24
|
+
<hotspotChoice shape="circle" coords="77,115,8" identifier="A"/>
|
25
|
+
<hotspotChoice shape="circle" coords="118,184,8" identifier="B"/>
|
26
|
+
<hotspotChoice shape="circle" coords="150,235,8" identifier="C"/>
|
27
|
+
<hotspotChoice shape="circle" coords="96,114,8" identifier="D"/>
|
28
|
+
</graphicOrderInteraction>
|
29
|
+
</itemBody>
|
30
|
+
<responseProcessing
|
31
|
+
template="http://www.imsglobal.org/question/qti_v2p1/rptemplates/match_correct"/>
|
32
|
+
</assessmentItem>
|
@@ -0,0 +1,26 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<assessmentItem xmlns="http://www.imsglobal.org/xsd/imsqti_v2p1"
|
3
|
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
4
|
+
xsi:schemaLocation="http://www.imsglobal.org/xsd/imsqti_v2p1 http://www.imsglobal.org/xsd/qti/qtiv2p1/imsqti_v2p1.xsd"
|
5
|
+
identifier="hotspot" title="UK Airports (Take 1)" adaptive="false" timeDependent="false">
|
6
|
+
<responseDeclaration identifier="RESPONSE" cardinality="single" baseType="identifier">
|
7
|
+
<correctResponse>
|
8
|
+
<value>A</value>
|
9
|
+
</correctResponse>
|
10
|
+
</responseDeclaration>
|
11
|
+
<outcomeDeclaration identifier="SCORE" cardinality="single" baseType="float"/>
|
12
|
+
<itemBody>
|
13
|
+
<p>The picture illustrates four of the most popular destinations for air travellers arriving
|
14
|
+
in the United Kingdom: London, Manchester, Edinburgh and Glasgow.</p>
|
15
|
+
<hotspotInteraction responseIdentifier="RESPONSE" maxChoices="1">
|
16
|
+
<prompt>Which one is Glasgow?</prompt>
|
17
|
+
<object type="image/png" width="206" height="280" data="ukair.png">UK Map</object>
|
18
|
+
<hotspotChoice shape="circle" coords="77,115,8" identifier="A"/>
|
19
|
+
<hotspotChoice shape="circle" coords="118,184,8" identifier="B"/>
|
20
|
+
<hotspotChoice shape="circle" coords="150,235,8" identifier="C"/>
|
21
|
+
<hotspotChoice shape="circle" coords="96,114,8" identifier="D"/>
|
22
|
+
</hotspotInteraction>
|
23
|
+
</itemBody>
|
24
|
+
<responseProcessing
|
25
|
+
template="http://www.imsglobal.org/question/qti_v2p1/rptemplates/match_correct"/>
|
26
|
+
</assessmentItem>
|
Binary file
|
@@ -0,0 +1,159 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<manifest 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
|
+
xmlns:imsqti="http://www.imsglobal.org/xsd/imsqti_metadata_v2p1"
|
6
|
+
identifier="MANIFEST-85D76736-6D19-9DC0-7C0B-57C31A9FD391"
|
7
|
+
xsi:schemaLocation="http://www.imsglobal.org/xsd/imscp_v1p1 http://www.imsglobal.org/xsd/imscp_v1p1.xsd http://www.imsglobal.org/xsd/imsmd_v1p2 http://www.imsglobal.org/xsd/imsmd_v1p2p4.xsd http://www.imsglobal.org/xsd/imsqti_metadata_v2p1 http://www.imsglobal.org/xsd/qti/qtiv2p1/imsqti_metadata_v2p1.xsd">
|
8
|
+
<metadata>
|
9
|
+
<schema>IMS Content</schema>
|
10
|
+
<schemaversion>1.1</schemaversion>
|
11
|
+
<imsmd:lom>
|
12
|
+
<imsmd:general>
|
13
|
+
<imsmd:identifier>package_shared</imsmd:identifier>
|
14
|
+
<imsmd:title>
|
15
|
+
<imsmd:langstring xml:lang="en">Shared Image Example</imsmd:langstring>
|
16
|
+
</imsmd:title>
|
17
|
+
<imsmd:language>en</imsmd:language>
|
18
|
+
<imsmd:description>
|
19
|
+
<imsmd:langstring xml:lang="en">This is an example Contentpackage containing a
|
20
|
+
number of QTI v2.1 items, it also demonstrates the use of a shared media
|
21
|
+
object</imsmd:langstring>
|
22
|
+
</imsmd:description>
|
23
|
+
</imsmd:general>
|
24
|
+
<imsmd:lifecycle>
|
25
|
+
<imsmd:version>
|
26
|
+
<imsmd:langstring xml:lang="en">1.0</imsmd:langstring>
|
27
|
+
</imsmd:version>
|
28
|
+
<imsmd:status>
|
29
|
+
<imsmd:source>
|
30
|
+
<imsmd:langstring xml:lang="en">LOMv1.0</imsmd:langstring>
|
31
|
+
</imsmd:source>
|
32
|
+
<imsmd:value>
|
33
|
+
<imsmd:langstring xml:lang="x-none">Final</imsmd:langstring>
|
34
|
+
</imsmd:value>
|
35
|
+
</imsmd:status>
|
36
|
+
</imsmd:lifecycle>
|
37
|
+
<imsmd:metametadata>
|
38
|
+
<imsmd:metadatascheme>LOMv1.0</imsmd:metadatascheme>
|
39
|
+
<imsmd:metadatascheme>QTIv2.1</imsmd:metadatascheme>
|
40
|
+
<imsmd:language>en</imsmd:language>
|
41
|
+
</imsmd:metametadata>
|
42
|
+
<imsmd:technical>
|
43
|
+
<imsmd:format>text/x-imsqti-item-xml</imsmd:format>
|
44
|
+
<imsmd:format>image/png</imsmd:format>
|
45
|
+
</imsmd:technical>
|
46
|
+
<imsmd:rights>
|
47
|
+
<imsmd:description>
|
48
|
+
<imsmd:langstring xml:lang="en">(c) 2004, IMS Global Learning Consortium;
|
49
|
+
individual questions may have their own copyright
|
50
|
+
statements.</imsmd:langstring>
|
51
|
+
</imsmd:description>
|
52
|
+
</imsmd:rights>
|
53
|
+
</imsmd:lom>
|
54
|
+
</metadata>
|
55
|
+
<organizations/>
|
56
|
+
<resources>
|
57
|
+
<resource identifier="RES-BCA84FC0-53F9-ABBD-C3FE-BDB5B825CA9E" type="imsqti_item_xmlv2p1"
|
58
|
+
href="example/graphic_order.xml">
|
59
|
+
<metadata>
|
60
|
+
<imsmd:lom>
|
61
|
+
<imsmd:general>
|
62
|
+
<imsmd:identifier>graphicOrder</imsmd:identifier>
|
63
|
+
<imsmd:title>
|
64
|
+
<imsmd:langstring xml:lang="en">Flying Home</imsmd:langstring>
|
65
|
+
</imsmd:title>
|
66
|
+
<imsmd:description>
|
67
|
+
<imsmd:langstring xml:lang="en">This example illustrates the
|
68
|
+
graphicOrderInteraction. The task is similar to Grand Prix of
|
69
|
+
Bahrain except that the choices are presented as hotspots on a
|
70
|
+
graphic image.</imsmd:langstring>
|
71
|
+
</imsmd:description>
|
72
|
+
</imsmd:general>
|
73
|
+
<imsmd:lifecycle>
|
74
|
+
<imsmd:version>
|
75
|
+
<imsmd:langstring xml:lang="en">1.0</imsmd:langstring>
|
76
|
+
</imsmd:version>
|
77
|
+
<imsmd:status>
|
78
|
+
<imsmd:source>
|
79
|
+
<imsmd:langstring xml:lang="x-none">LOMv1.0</imsmd:langstring>
|
80
|
+
</imsmd:source>
|
81
|
+
<imsmd:value>
|
82
|
+
<imsmd:langstring xml:lang="x-none">Draft</imsmd:langstring>
|
83
|
+
</imsmd:value>
|
84
|
+
</imsmd:status>
|
85
|
+
</imsmd:lifecycle>
|
86
|
+
<imsmd:technical>
|
87
|
+
<imsmd:format>text/x-imsqti-item-xml</imsmd:format>
|
88
|
+
</imsmd:technical>
|
89
|
+
</imsmd:lom>
|
90
|
+
<imsqti:qtiMetadata>
|
91
|
+
<imsqti:timeDependent>false</imsqti:timeDependent>
|
92
|
+
<imsqti:interactionType>graphicOrderInteraction</imsqti:interactionType>
|
93
|
+
<imsqti:feedbackType>none</imsqti:feedbackType>
|
94
|
+
<imsqti:solutionAvailable>true</imsqti:solutionAvailable>
|
95
|
+
</imsqti:qtiMetadata>
|
96
|
+
</metadata>
|
97
|
+
<file href="example/graphic_order.xml"/>
|
98
|
+
<dependency identifierref="images01"/>
|
99
|
+
</resource>
|
100
|
+
<resource identifier="RES-1CDACE46-DD7B-719F-0D4D-BDA579A862AB" type="imsqti_item_xmlv2p1"
|
101
|
+
href="example/hotspot.xml">
|
102
|
+
<metadata>
|
103
|
+
<imsmd:lom>
|
104
|
+
<imsmd:general>
|
105
|
+
<imsmd:identifier>hotspot</imsmd:identifier>
|
106
|
+
<imsmd:title>
|
107
|
+
<imsmd:langstring xml:lang="en">UK Airports (Take 1)</imsmd:langstring>
|
108
|
+
</imsmd:title>
|
109
|
+
<imsmd:description>
|
110
|
+
<imsmd:langstring xml:lang="en">This example illustrates the
|
111
|
+
hotspotInteraction.</imsmd:langstring>
|
112
|
+
</imsmd:description>
|
113
|
+
</imsmd:general>
|
114
|
+
<imsmd:lifecycle>
|
115
|
+
<imsmd:version>
|
116
|
+
<imsmd:langstring xml:lang="en">1.0</imsmd:langstring>
|
117
|
+
</imsmd:version>
|
118
|
+
<imsmd:status>
|
119
|
+
<imsmd:source>
|
120
|
+
<imsmd:langstring xml:lang="x-none">LOMv1.0</imsmd:langstring>
|
121
|
+
</imsmd:source>
|
122
|
+
<imsmd:value>
|
123
|
+
<imsmd:langstring xml:lang="x-none">Draft</imsmd:langstring>
|
124
|
+
</imsmd:value>
|
125
|
+
</imsmd:status>
|
126
|
+
</imsmd:lifecycle>
|
127
|
+
<imsmd:technical>
|
128
|
+
<imsmd:format>text/x-imsqti-item-xml</imsmd:format>
|
129
|
+
</imsmd:technical>
|
130
|
+
</imsmd:lom>
|
131
|
+
<imsqti:qtiMetadata>
|
132
|
+
<imsqti:timeDependent>false</imsqti:timeDependent>
|
133
|
+
<imsqti:interactionType>hotspotInteraction</imsqti:interactionType>
|
134
|
+
<imsqti:feedbackType>none</imsqti:feedbackType>
|
135
|
+
<imsqti:solutionAvailable>true</imsqti:solutionAvailable>
|
136
|
+
</imsqti:qtiMetadata>
|
137
|
+
</metadata>
|
138
|
+
<file href="example/hotspot.xml"/>
|
139
|
+
<dependency identifierref="images01"/>
|
140
|
+
</resource>
|
141
|
+
<resource identifier="images01" type="webcontent">
|
142
|
+
<metadata>
|
143
|
+
<imsmd:lom>
|
144
|
+
<imsmd:general>
|
145
|
+
<imsmd:description>
|
146
|
+
<imsmd:langstring xml:lang="en">Image of the United Kingdom with the
|
147
|
+
marked locations of Edinburgh, Glasgow, Heathrow and Manchester
|
148
|
+
airports.</imsmd:langstring>
|
149
|
+
</imsmd:description>
|
150
|
+
</imsmd:general>
|
151
|
+
<imsmd:technical>
|
152
|
+
<imsmd:format>image/png</imsmd:format>
|
153
|
+
</imsmd:technical>
|
154
|
+
</imsmd:lom>
|
155
|
+
</metadata>
|
156
|
+
<file href="examples/ukair.png"/>
|
157
|
+
</resource>
|
158
|
+
</resources>
|
159
|
+
</manifest>
|
@@ -0,0 +1,114 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Qti::V1::Models::Interactions::FormulaInteraction do
|
4
|
+
let(:fixtures_path) { File.join('spec', 'fixtures', 'items_1.2') }
|
5
|
+
let(:test_object) { Qti::V1::Models::Assessment.from_path!(file_path) }
|
6
|
+
let(:assessment_item_refs) { test_object.assessment_items }
|
7
|
+
let(:loaded_class) { described_class.new(assessment_item_refs.first, test_object) }
|
8
|
+
|
9
|
+
shared_examples_for 'scoring_data_structs' do
|
10
|
+
it 'reads scoring_data_structs' do
|
11
|
+
expect(loaded_class.scoring_data_structs.map(&:id)).to eq(scoring_data_ids)
|
12
|
+
expect(loaded_class.scoring_data_structs.map(&:values)).to eq(scoring_data_values)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
shared_examples_for 'reading_formulas' do
|
17
|
+
it 'reads formulas correctly' do
|
18
|
+
expect(loaded_class.formula_decimal_places).to eq(formula_decimal_places)
|
19
|
+
expect(loaded_class.formulas).to eq(formula_formulas)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
shared_examples_for 'answer_tolerance' do
|
24
|
+
it 'reads answer_tolernace correctly' do
|
25
|
+
expect(loaded_class.answer_tolerance).to eq(answer_tolerance)
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'generates do margin_of_error' do
|
29
|
+
expect(loaded_class.margin_of_error).to eq(margin_of_error)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
shared_examples_for 'item_body' do
|
34
|
+
it 'returns correct title' do
|
35
|
+
expect(loaded_class.item_body).to eq(item_title)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
shared_examples_for 'variables' do
|
40
|
+
it('returns the correct variable definitions') do
|
41
|
+
expect(loaded_class.variables).to eq(variables)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
context 'Simple Formula' do
|
46
|
+
let(:file_path) { File.join(fixtures_path, 'formula.xml') }
|
47
|
+
|
48
|
+
let(:scoring_data_ids) { %w[3322 415 3782 1100 858] }
|
49
|
+
let(:scoring_data_values) { %w[9.0 9.0 6.0 2.0 3.0] }
|
50
|
+
|
51
|
+
let(:answer_tolerance) { '0' }
|
52
|
+
let(:margin_of_error) { { margin: '0', margin_type: 'absolute' } }
|
53
|
+
let(:formula_decimal_places) { '0' }
|
54
|
+
let(:formula_formulas) { ['x'] }
|
55
|
+
|
56
|
+
let(:item_title) {'<div><p>What number is [x]</p></div>'}
|
57
|
+
|
58
|
+
let(:variables) { [ { name: 'x', min: '1.0', max: '10.0', precision: '0' } ] }
|
59
|
+
|
60
|
+
include_examples 'scoring_data_structs'
|
61
|
+
include_examples 'reading_formulas'
|
62
|
+
include_examples 'answer_tolerance'
|
63
|
+
include_examples 'item_body'
|
64
|
+
include_examples 'variables'
|
65
|
+
end
|
66
|
+
|
67
|
+
context 'Multiple variable formula' do
|
68
|
+
let(:file_path) { File.join(fixtures_path, 'formula_mvar.xml') }
|
69
|
+
|
70
|
+
let(:scoring_data_ids) { %w[163 965 8589 6087 8894 5184 8918 3332 7495 6307] }
|
71
|
+
let(:scoring_data_values) { %w[16.0 7.0 14.0 5.0 7.0 14.0 11.0 7.0 20.0 13.0] }
|
72
|
+
|
73
|
+
let(:answer_tolerance) { '0' }
|
74
|
+
let(:margin_of_error) { { margin: '0', margin_type: 'absolute' } }
|
75
|
+
let(:formula_decimal_places) { '0' }
|
76
|
+
let(:formula_formulas) { ['x+y'] }
|
77
|
+
|
78
|
+
let(:item_title) {'<div><p>[x] + [y]</p></div>'}
|
79
|
+
|
80
|
+
let(:variables) { [ { name: 'x', min: '1.0', max: '10.0', precision: '0' },
|
81
|
+
{ name: 'y', min: '1.0', max: '10.0', precision: '0' } ] }
|
82
|
+
|
83
|
+
include_examples 'scoring_data_structs'
|
84
|
+
include_examples 'answer_tolerance'
|
85
|
+
include_examples 'reading_formulas'
|
86
|
+
include_examples 'item_body'
|
87
|
+
include_examples 'variables'
|
88
|
+
end
|
89
|
+
|
90
|
+
context 'Multiple Formula Steps' do
|
91
|
+
let(:file_path) { File.join(fixtures_path, 'formula_mform.xml') }
|
92
|
+
|
93
|
+
let(:scoring_data_ids) { %w[8965 2716 549 3413 5] }
|
94
|
+
let(:scoring_data_values) { %w[82.58 23.72 39.75 46.25 41.03] }
|
95
|
+
|
96
|
+
let(:answer_tolerance) { '10%' }
|
97
|
+
let(:margin_of_error) { { margin: '10', margin_type: 'percent' } }
|
98
|
+
let(:formula_decimal_places) { '2' }
|
99
|
+
let(:formula_formulas) { ['x=n*x', 'y=m*y', 'x+y'] }
|
100
|
+
|
101
|
+
let(:item_title) {'<div><p>[n][x] + [m][y]</p></div>'}
|
102
|
+
|
103
|
+
let(:variables) { [ { name: 'y', min: '1.0', max: '10.0', precision: '2' },
|
104
|
+
{ name: 'x', min: '1.0', max: '10.0', precision: '2' },
|
105
|
+
{ name: 'n', min: '1.0', max: '10.0', precision: '2' },
|
106
|
+
{ name: 'm', min: '1.0', max: '10.0', precision: '2' } ] }
|
107
|
+
|
108
|
+
include_examples 'scoring_data_structs'
|
109
|
+
include_examples 'answer_tolerance'
|
110
|
+
include_examples 'reading_formulas'
|
111
|
+
include_examples 'item_body'
|
112
|
+
include_examples 'variables'
|
113
|
+
end
|
114
|
+
end
|
@@ -2,16 +2,33 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
fixtures_path = File.join('spec', 'fixtures')
|
4
4
|
|
5
|
-
describe Qti::V2::Models::NonAssessmentTest do
|
6
|
-
let(:path) { File.join(fixtures_path, 'no_assessment_xml', 'imsmanifest.xml') }
|
7
|
-
let(:loaded_class) { described_class.from_path!(path) }
|
8
5
|
|
9
|
-
|
10
|
-
|
6
|
+
|
7
|
+
describe Qti::V2::Models::NonAssessmentTest do
|
8
|
+
shared_examples_for 'loading_a_non-assessment' do
|
9
|
+
it 'loads an Non-AssessmentTest XML file' do
|
11
10
|
expect do
|
12
11
|
described_class.from_path!(path)
|
13
12
|
end.to_not raise_error
|
14
13
|
end
|
14
|
+
|
15
|
+
it 'expects at least one assement item' do
|
16
|
+
expect(loaded_class.assessment_items.count)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe '2.2' do
|
21
|
+
let(:path) { File.join(fixtures_path, 'no_assessment_xml', 'imsmanifest.xml') }
|
22
|
+
let(:loaded_class) { described_class.from_path!(path) }
|
23
|
+
|
24
|
+
include_examples 'loading_a_non-assessment'
|
25
|
+
end
|
26
|
+
|
27
|
+
describe 'package_shared' do
|
28
|
+
let(:path) { File.join(fixtures_path, 'package_shared', 'imsmanifest.xml') }
|
29
|
+
let(:loaded_class) { described_class.from_path!(path) }
|
30
|
+
|
31
|
+
include_examples 'loading_a_non-assessment'
|
15
32
|
end
|
16
33
|
|
17
34
|
# describe '#stimulus_ref' 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: 0.9.
|
4
|
+
version: 0.9.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hannah Bottalla
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2018-
|
12
|
+
date: 2018-03-16 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
@@ -285,6 +285,7 @@ files:
|
|
285
285
|
- lib/qti/v1/models/interactions/base_interaction.rb
|
286
286
|
- lib/qti/v1/models/interactions/choice_interaction.rb
|
287
287
|
- lib/qti/v1/models/interactions/fill_blank_interaction.rb
|
288
|
+
- lib/qti/v1/models/interactions/formula_interaction.rb
|
288
289
|
- lib/qti/v1/models/interactions/match_interaction.rb
|
289
290
|
- lib/qti/v1/models/interactions/numeric_interaction.rb
|
290
291
|
- lib/qti/v1/models/interactions/ordering_interaction.rb
|
@@ -323,6 +324,9 @@ files:
|
|
323
324
|
- spec/fixtures/items_1.2/essay.xml
|
324
325
|
- spec/fixtures/items_1.2/fib.xml
|
325
326
|
- spec/fixtures/items_1.2/fib_str.xml
|
327
|
+
- spec/fixtures/items_1.2/formula.xml
|
328
|
+
- spec/fixtures/items_1.2/formula_mform.xml
|
329
|
+
- spec/fixtures/items_1.2/formula_mvar.xml
|
326
330
|
- spec/fixtures/items_1.2/matching.xml
|
327
331
|
- spec/fixtures/items_1.2/multiple_answer.xml
|
328
332
|
- spec/fixtures/items_1.2/multiple_answer_canvas.xml
|
@@ -437,6 +441,10 @@ files:
|
|
437
441
|
- spec/fixtures/items_2.2/upload_composite.xml
|
438
442
|
- spec/fixtures/no_assessment_xml/choice.xml
|
439
443
|
- spec/fixtures/no_assessment_xml/imsmanifest.xml
|
444
|
+
- spec/fixtures/package_shared/example/graphicOrder.xml
|
445
|
+
- spec/fixtures/package_shared/example/hotspot.xml
|
446
|
+
- spec/fixtures/package_shared/example/ukair.png
|
447
|
+
- spec/fixtures/package_shared/imsmanifest.xml
|
440
448
|
- spec/fixtures/test_qti_1.2.zip
|
441
449
|
- spec/fixtures/test_qti_1.2/contact info.png
|
442
450
|
- spec/fixtures/test_qti_1.2/exam1/my_files/org0/images/image.png
|
@@ -531,7 +539,6 @@ files:
|
|
531
539
|
- spec/fixtures/unsupported_version/imsmanifest.xml
|
532
540
|
- spec/gemfiles/nokogiri-1.6.gemfile
|
533
541
|
- spec/gemfiles/nokogiri-1.8.gemfile
|
534
|
-
- spec/gemfiles/nokogiri-1.8.gemfile.lock
|
535
542
|
- spec/gemfiles/rails-4.2.gemfile
|
536
543
|
- spec/gemfiles/rails-5.0.gemfile
|
537
544
|
- spec/gemfiles/rails-5.1.gemfile
|
@@ -548,6 +555,7 @@ files:
|
|
548
555
|
- spec/lib/qti/v1/models/interactions/base_interaction_spec.rb
|
549
556
|
- spec/lib/qti/v1/models/interactions/choice_interaction_spec.rb
|
550
557
|
- spec/lib/qti/v1/models/interactions/fill_blank_interaction_spec.rb
|
558
|
+
- spec/lib/qti/v1/models/interactions/formula_interaction_spec.rb
|
551
559
|
- spec/lib/qti/v1/models/interactions/match_interaction_spec.rb
|
552
560
|
- spec/lib/qti/v1/models/interactions/numeric_interaction_spec.rb
|
553
561
|
- spec/lib/qti/v1/models/interactions/ordering_interaction_spec.rb
|
@@ -596,7 +604,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
596
604
|
version: '0'
|
597
605
|
requirements: []
|
598
606
|
rubyforge_project:
|
599
|
-
rubygems_version: 2.
|
607
|
+
rubygems_version: 2.5.2.1
|
600
608
|
signing_key:
|
601
609
|
specification_version: 4
|
602
610
|
summary: QTI 1.2 and 2.1 import and export models
|
@@ -606,6 +614,9 @@ test_files:
|
|
606
614
|
- spec/fixtures/items_1.2/essay.xml
|
607
615
|
- spec/fixtures/items_1.2/fib.xml
|
608
616
|
- spec/fixtures/items_1.2/fib_str.xml
|
617
|
+
- spec/fixtures/items_1.2/formula.xml
|
618
|
+
- spec/fixtures/items_1.2/formula_mform.xml
|
619
|
+
- spec/fixtures/items_1.2/formula_mvar.xml
|
609
620
|
- spec/fixtures/items_1.2/matching.xml
|
610
621
|
- spec/fixtures/items_1.2/multiple_answer.xml
|
611
622
|
- spec/fixtures/items_1.2/multiple_answer_canvas.xml
|
@@ -720,6 +731,10 @@ test_files:
|
|
720
731
|
- spec/fixtures/items_2.2/upload_composite.xml
|
721
732
|
- spec/fixtures/no_assessment_xml/choice.xml
|
722
733
|
- spec/fixtures/no_assessment_xml/imsmanifest.xml
|
734
|
+
- spec/fixtures/package_shared/example/graphicOrder.xml
|
735
|
+
- spec/fixtures/package_shared/example/hotspot.xml
|
736
|
+
- spec/fixtures/package_shared/example/ukair.png
|
737
|
+
- spec/fixtures/package_shared/imsmanifest.xml
|
723
738
|
- spec/fixtures/test_qti_1.2.zip
|
724
739
|
- spec/fixtures/test_qti_1.2/contact info.png
|
725
740
|
- spec/fixtures/test_qti_1.2/exam1/my_files/org0/images/image.png
|
@@ -814,7 +829,6 @@ test_files:
|
|
814
829
|
- spec/fixtures/unsupported_version/imsmanifest.xml
|
815
830
|
- spec/gemfiles/nokogiri-1.6.gemfile
|
816
831
|
- spec/gemfiles/nokogiri-1.8.gemfile
|
817
|
-
- spec/gemfiles/nokogiri-1.8.gemfile.lock
|
818
832
|
- spec/gemfiles/rails-4.2.gemfile
|
819
833
|
- spec/gemfiles/rails-5.0.gemfile
|
820
834
|
- spec/gemfiles/rails-5.1.gemfile
|
@@ -831,6 +845,7 @@ test_files:
|
|
831
845
|
- spec/lib/qti/v1/models/interactions/base_interaction_spec.rb
|
832
846
|
- spec/lib/qti/v1/models/interactions/choice_interaction_spec.rb
|
833
847
|
- spec/lib/qti/v1/models/interactions/fill_blank_interaction_spec.rb
|
848
|
+
- spec/lib/qti/v1/models/interactions/formula_interaction_spec.rb
|
834
849
|
- spec/lib/qti/v1/models/interactions/match_interaction_spec.rb
|
835
850
|
- spec/lib/qti/v1/models/interactions/numeric_interaction_spec.rb
|
836
851
|
- spec/lib/qti/v1/models/interactions/ordering_interaction_spec.rb
|
@@ -1,145 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: ../..
|
3
|
-
specs:
|
4
|
-
qti (0.9.9)
|
5
|
-
actionview (>= 4.2.0)
|
6
|
-
activesupport (>= 4.2.9, < 5.2)
|
7
|
-
dry-struct (~> 0.2.1)
|
8
|
-
dry-types (~> 0.12.0)
|
9
|
-
nokogiri (>= 1.6.8, < 1.9)
|
10
|
-
rubyzip (~> 1.2)
|
11
|
-
sanitize (>= 4.2.0, < 5.0)
|
12
|
-
|
13
|
-
GEM
|
14
|
-
remote: https://rubygems.org/
|
15
|
-
specs:
|
16
|
-
actionview (5.1.4)
|
17
|
-
activesupport (= 5.1.4)
|
18
|
-
builder (~> 3.1)
|
19
|
-
erubi (~> 1.4)
|
20
|
-
rails-dom-testing (~> 2.0)
|
21
|
-
rails-html-sanitizer (~> 1.0, >= 1.0.3)
|
22
|
-
activesupport (5.1.4)
|
23
|
-
concurrent-ruby (~> 1.0, >= 1.0.2)
|
24
|
-
i18n (~> 0.7)
|
25
|
-
minitest (~> 5.1)
|
26
|
-
tzinfo (~> 1.1)
|
27
|
-
ast (2.3.0)
|
28
|
-
builder (3.2.3)
|
29
|
-
byebug (9.1.0)
|
30
|
-
coderay (1.1.2)
|
31
|
-
concurrent-ruby (1.0.5)
|
32
|
-
crass (1.0.3)
|
33
|
-
diff-lcs (1.3)
|
34
|
-
docile (1.1.5)
|
35
|
-
dry-configurable (0.7.0)
|
36
|
-
concurrent-ruby (~> 1.0)
|
37
|
-
dry-container (0.6.0)
|
38
|
-
concurrent-ruby (~> 1.0)
|
39
|
-
dry-configurable (~> 0.1, >= 0.1.3)
|
40
|
-
dry-core (0.4.2)
|
41
|
-
concurrent-ruby (~> 1.0)
|
42
|
-
dry-equalizer (0.2.0)
|
43
|
-
dry-logic (0.4.2)
|
44
|
-
dry-container (~> 0.2, >= 0.2.6)
|
45
|
-
dry-core (~> 0.2)
|
46
|
-
dry-equalizer (~> 0.2)
|
47
|
-
dry-struct (0.2.1)
|
48
|
-
dry-configurable (~> 0.1)
|
49
|
-
dry-equalizer (~> 0.2)
|
50
|
-
dry-types (~> 0.9, >= 0.9.0)
|
51
|
-
ice_nine (~> 0.11)
|
52
|
-
dry-types (0.12.2)
|
53
|
-
concurrent-ruby (~> 1.0)
|
54
|
-
dry-configurable (~> 0.1)
|
55
|
-
dry-container (~> 0.3)
|
56
|
-
dry-core (~> 0.2, >= 0.2.1)
|
57
|
-
dry-equalizer (~> 0.2)
|
58
|
-
dry-logic (~> 0.4, >= 0.4.2)
|
59
|
-
inflecto (~> 0.0.0, >= 0.0.2)
|
60
|
-
erubi (1.7.0)
|
61
|
-
i18n (0.9.1)
|
62
|
-
concurrent-ruby (~> 1.0)
|
63
|
-
ice_nine (0.11.2)
|
64
|
-
inflecto (0.0.2)
|
65
|
-
json (2.1.0)
|
66
|
-
loofah (2.1.1)
|
67
|
-
crass (~> 1.0.2)
|
68
|
-
nokogiri (>= 1.5.9)
|
69
|
-
method_source (0.9.0)
|
70
|
-
mini_portile2 (2.3.0)
|
71
|
-
minitest (5.10.3)
|
72
|
-
nokogiri (1.8.1)
|
73
|
-
mini_portile2 (~> 2.3.0)
|
74
|
-
nokogumbo (1.4.13)
|
75
|
-
nokogiri
|
76
|
-
parallel (1.12.1)
|
77
|
-
parser (2.4.0.2)
|
78
|
-
ast (~> 2.3)
|
79
|
-
powerpack (0.1.1)
|
80
|
-
pry (0.11.3)
|
81
|
-
coderay (~> 1.1.0)
|
82
|
-
method_source (~> 0.9.0)
|
83
|
-
rails-dom-testing (2.0.3)
|
84
|
-
activesupport (>= 4.2.0)
|
85
|
-
nokogiri (>= 1.6)
|
86
|
-
rails-html-sanitizer (1.0.3)
|
87
|
-
loofah (~> 2.0)
|
88
|
-
rainbow (2.2.2)
|
89
|
-
rake
|
90
|
-
rake (0.9.6)
|
91
|
-
rspec (3.7.0)
|
92
|
-
rspec-core (~> 3.7.0)
|
93
|
-
rspec-expectations (~> 3.7.0)
|
94
|
-
rspec-mocks (~> 3.7.0)
|
95
|
-
rspec-core (3.7.0)
|
96
|
-
rspec-support (~> 3.7.0)
|
97
|
-
rspec-expectations (3.7.0)
|
98
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
99
|
-
rspec-support (~> 3.7.0)
|
100
|
-
rspec-mocks (3.7.0)
|
101
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
102
|
-
rspec-support (~> 3.7.0)
|
103
|
-
rspec-support (3.7.0)
|
104
|
-
rubocop (0.50.0)
|
105
|
-
parallel (~> 1.10)
|
106
|
-
parser (>= 2.3.3.1, < 3.0)
|
107
|
-
powerpack (~> 0.1)
|
108
|
-
rainbow (>= 2.2.2, < 3.0)
|
109
|
-
ruby-progressbar (~> 1.7)
|
110
|
-
unicode-display_width (~> 1.0, >= 1.0.1)
|
111
|
-
ruby-progressbar (1.9.0)
|
112
|
-
rubyzip (1.2.1)
|
113
|
-
sanitize (4.5.0)
|
114
|
-
crass (~> 1.0.2)
|
115
|
-
nokogiri (>= 1.4.4)
|
116
|
-
nokogumbo (~> 1.4.1)
|
117
|
-
simplecov (0.15.1)
|
118
|
-
docile (~> 1.1.0)
|
119
|
-
json (>= 1.8, < 3)
|
120
|
-
simplecov-html (~> 0.10.0)
|
121
|
-
simplecov-html (0.10.2)
|
122
|
-
thread_safe (0.3.6)
|
123
|
-
tzinfo (1.2.4)
|
124
|
-
thread_safe (~> 0.1)
|
125
|
-
unicode-display_width (1.3.0)
|
126
|
-
wwtd (1.3.0)
|
127
|
-
|
128
|
-
PLATFORMS
|
129
|
-
ruby
|
130
|
-
|
131
|
-
DEPENDENCIES
|
132
|
-
bundler (~> 1.15)
|
133
|
-
byebug (~> 9.0)
|
134
|
-
nokogiri (~> 1.8.1)
|
135
|
-
pry (~> 0)
|
136
|
-
qti!
|
137
|
-
rake (~> 0)
|
138
|
-
rspec (~> 3.6)
|
139
|
-
rspec-mocks (~> 3.6)
|
140
|
-
rubocop (~> 0.50.0)
|
141
|
-
simplecov (~> 0)
|
142
|
-
wwtd (~> 1.3)
|
143
|
-
|
144
|
-
BUNDLED WITH
|
145
|
-
1.16.0
|