qti 0.9.0 → 0.9.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 +4 -4
- data/lib/null_logger.rb +2 -4
- data/lib/qti/models/base.rb +8 -10
- data/lib/qti/models/manifest.rb +4 -8
- data/lib/qti/v1/models/assessment.rb +4 -4
- data/lib/qti/v1/models/assessment_item.rb +2 -2
- data/lib/qti/v1/models/choices/fill_blank_choice.rb +1 -1
- data/lib/qti/v1/models/interactions/base_interaction.rb +1 -1
- data/lib/qti/v1/models/interactions/choice_interaction.rb +1 -1
- data/lib/qti/v1/models/interactions/fill_blank_interaction.rb +6 -7
- data/lib/qti/v1/models/interactions/ordering_interaction.rb +1 -1
- data/lib/qti/v1/models/scoring_data.rb +1 -1
- data/lib/qti/v2/models/assessment_item.rb +1 -1
- data/lib/qti/v2/models/assessment_test.rb +3 -3
- data/lib/qti/v2/models/base.rb +6 -6
- data/lib/qti/v2/models/choices/simple_choice.rb +1 -1
- data/lib/qti/v2/models/interactions/base_interaction.rb +1 -1
- data/lib/qti/v2/models/interactions/categorization_interaction.rb +1 -1
- data/lib/qti/v2/models/interactions/gap_match_interaction.rb +8 -12
- data/lib/qti/v2/models/interactions/match_interaction.rb +2 -2
- data/lib/qti/v2/models/non_assessment_test.rb +2 -2
- data/lib/qti/v2/models/scoring_data.rb +1 -1
- data/lib/qti/v2/models/stimulus_item.rb +0 -1
- data/lib/qti/version.rb +1 -1
- data/spec/gemfiles/nokogiri-1.6.gemfile.lock +126 -0
- data/spec/gemfiles/nokogiri-1.8.gemfile.lock +126 -0
- data/spec/gemfiles/rails-4.2.gemfile.lock +203 -0
- data/spec/gemfiles/rails-5.0.gemfile.lock +209 -0
- data/spec/gemfiles/rails-5.1.gemfile.lock +209 -0
- data/spec/gemfiles/sanitize-4.2.gemfile.lock +126 -0
- data/spec/gemfiles/sanitize-4.5.gemfile.lock +126 -0
- data/spec/lib/qti/models/base_spec.rb +10 -10
- data/spec/lib/qti/models/manifest_spec.rb +0 -1
- data/spec/lib/qti/v1/models/assessment_spec.rb +7 -8
- data/spec/lib/qti/v1/models/choices/fill_blank_choice_spec.rb +1 -1
- data/spec/lib/qti/v1/models/choices/logical_identifier_choice_spec.rb +1 -1
- data/spec/lib/qti/v1/models/interactions/fill_blank_interaction_spec.rb +15 -13
- data/spec/lib/qti/v1/models/interactions/ordering_interaction_spec.rb +1 -1
- data/spec/lib/qti/v2/models/assessment_item_spec.rb +3 -3
- data/spec/lib/qti/v2/models/assessment_test_spec.rb +6 -7
- data/spec/lib/qti/v2/models/choices/gap_match_choice_spec.rb +1 -1
- data/spec/lib/qti/v2/models/choices/simple_associable_choice_spec.rb +8 -8
- data/spec/lib/qti/v2/models/choices/simple_choice_spec.rb +1 -1
- data/spec/lib/qti/v2/models/interactions/categorization_interaction_spec.rb +3 -3
- data/spec/lib/qti/v2/models/interactions/gap_match_interaction_spec.rb +24 -23
- data/spec/lib/qti/v2/models/interactions/ordering_interaction_spec.rb +1 -1
- data/spec/lib/qti/v2/models/interactions/short_text_interaction_spec.rb +1 -1
- data/spec/lib/qti/v2/models/non_assessment_test_spec.rb +1 -1
- data/spec/lib/qti/v2/models/object_element_spec.rb +1 -1
- metadata +17 -3
@@ -54,37 +54,37 @@ describe Qti::Models::Base do
|
|
54
54
|
end
|
55
55
|
|
56
56
|
it 'uses an implicit package root' do
|
57
|
-
expect
|
57
|
+
expect do
|
58
58
|
loaded_class.remap_href_path('../sneaky.txt')
|
59
|
-
|
59
|
+
end.to raise_error(Qti::ParseError)
|
60
60
|
end
|
61
61
|
|
62
|
-
context
|
62
|
+
context 'with explicit package root' do
|
63
63
|
let(:package_root) { File.join('spec', 'fixtures', 'test_qti_2.2') }
|
64
64
|
let(:item_path) { File.join(package_root, 'true-false', 'true-false.xml') }
|
65
65
|
let(:item) { described_class.from_path!(item_path, package_root) }
|
66
66
|
|
67
67
|
it 'allows safe .. hrefs' do
|
68
|
-
expect
|
68
|
+
expect do
|
69
69
|
item.remap_href_path('../okay.txt')
|
70
|
-
|
70
|
+
end.not_to raise_error
|
71
71
|
end
|
72
72
|
|
73
73
|
it 'rejects attempts to escape the package' do
|
74
|
-
expect
|
74
|
+
expect do
|
75
75
|
item.remap_href_path('../../bad.txt')
|
76
|
-
|
76
|
+
end.to raise_error(Qti::ParseError)
|
77
77
|
end
|
78
78
|
end
|
79
79
|
|
80
|
-
context
|
80
|
+
context 'with nil package root' do
|
81
81
|
let(:item_path) { File.join('spec', 'fixtures', 'test_qti_2.2', 'true-false', 'true-false.xml') }
|
82
82
|
let(:item) { described_class.from_path!(item_path, nil) }
|
83
83
|
|
84
84
|
it 'rejects .. hrefs' do
|
85
|
-
expect
|
85
|
+
expect do
|
86
86
|
item.remap_href_path('../no_longer_okay.txt')
|
87
|
-
|
87
|
+
end.to raise_error(Qti::ParseError)
|
88
88
|
end
|
89
89
|
end
|
90
90
|
end
|
@@ -21,14 +21,13 @@ describe Qti::V1::Models::Assessment do
|
|
21
21
|
|
22
22
|
context '<assessmentTest> has no title property' do
|
23
23
|
it 'sets the title to the filename by default' do
|
24
|
-
empty_test_string =
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
XML
|
24
|
+
empty_test_string = <<~XML.strip_heredoc
|
25
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
26
|
+
<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">
|
27
|
+
<assessment ident="A1001">
|
28
|
+
</assessment>
|
29
|
+
</questestinterop>
|
30
|
+
XML
|
32
31
|
allow(File).to receive(:read).and_return(empty_test_string)
|
33
32
|
assessment_test = described_class.new path: '/a/b/c/Test123.xml'
|
34
33
|
expect(assessment_test.title).to eq 'Test123'
|
@@ -9,7 +9,7 @@ describe Qti::V1::Models::Choices::FillBlankChoice do
|
|
9
9
|
let(:choices) { nodes.map { |node| described_class.new(node, test_object) } }
|
10
10
|
|
11
11
|
it 'returns the right identifier' do
|
12
|
-
expect(choices.map(&:identifier)).to eq %w
|
12
|
+
expect(choices.map(&:identifier)).to eq %w[FIB_STR]
|
13
13
|
end
|
14
14
|
|
15
15
|
it 'returns the item body text' do
|
@@ -9,7 +9,7 @@ describe Qti::V1::Models::Choices::LogicalIdentifierChoice do
|
|
9
9
|
let(:choices) { nodes.map { |node| described_class.new(node, test_object) } }
|
10
10
|
|
11
11
|
it 'returns the right identifier' do
|
12
|
-
expect(choices.map(&:identifier)).to eq %w
|
12
|
+
expect(choices.map(&:identifier)).to eq %w[QUE_1003 QUE_1007 QUE_1022]
|
13
13
|
end
|
14
14
|
|
15
15
|
it 'returns the item body text' do
|
@@ -14,7 +14,7 @@ describe Qti::V1::Models::Interactions::FillBlankInteraction do
|
|
14
14
|
|
15
15
|
shared_examples_for 'blanks' do
|
16
16
|
it 'returns the blanks' do
|
17
|
-
expect(loaded_class.blanks).to eq [{ id:
|
17
|
+
expect(loaded_class.blanks).to eq [{ id: 'FIB01' }, { id: 'FIB02' }, { id: 'FIB03' }]
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
@@ -42,19 +42,21 @@ describe Qti::V1::Models::Interactions::FillBlankInteraction do
|
|
42
42
|
context 'fib_str.xml' do
|
43
43
|
let(:file_path) { File.join(fixtures_path, 'fib_str.xml') }
|
44
44
|
let(:shuffle_value) { false }
|
45
|
-
let(:scoring_data_ids) { %w
|
46
|
-
let(:scoring_data_values) { %w
|
47
|
-
let(:scoring_data_case) { %w
|
45
|
+
let(:scoring_data_ids) { %w[FIB01 FIB02 FIB03] }
|
46
|
+
let(:scoring_data_values) { %w[Winter Summer York] }
|
47
|
+
let(:scoring_data_case) { %w[Yes Yes Yes] }
|
48
48
|
let(:answer_count) { 3 }
|
49
|
-
let(:expected_stem_items)
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
49
|
+
let(:expected_stem_items) do
|
50
|
+
[
|
51
|
+
{ id: 'stem_0', position: 1, type: 'text', value: 'Fill-in-the blanks in this text from Richard III: ' },
|
52
|
+
{ id: 'stem_1', position: 2, type: 'text', value: 'Now is the ' },
|
53
|
+
{ id: 'stem_2', position: 3, type: 'blank', blank_id: 'FIB01' },
|
54
|
+
{ id: 'stem_3', position: 4, type: 'text', value: ' of our discontent made glorious ' },
|
55
|
+
{ id: 'stem_4', position: 5, type: 'blank', blank_id: 'FIB02' },
|
56
|
+
{ id: 'stem_5', position: 6, type: 'text', value: ' by these sons of ' },
|
57
|
+
{ id: 'stem_6', position: 7, type: 'blank', blank_id: 'FIB03' }
|
58
|
+
]
|
59
|
+
end
|
58
60
|
|
59
61
|
include_examples 'shuffled?'
|
60
62
|
include_examples 'answers'
|
@@ -15,7 +15,7 @@ describe Qti::V1::Models::Interactions::OrderingInteraction do
|
|
15
15
|
describe '#scoring_data_structs' do
|
16
16
|
it 'grabs scoring data value for ordering questions' do
|
17
17
|
assessment_item = described_class.new(assessment.assessment_items.first, assessment)
|
18
|
-
expect(assessment_item.scoring_data_structs.map(&:values)).to eq %w
|
18
|
+
expect(assessment_item.scoring_data_structs.map(&:values)).to eq %w[A B E D C]
|
19
19
|
end
|
20
20
|
end
|
21
21
|
end
|
@@ -67,9 +67,9 @@ describe Qti::V2::Models::AssessmentItem do
|
|
67
67
|
|
68
68
|
context 'rubrics' do
|
69
69
|
describe 'with a rubric' do
|
70
|
-
|
71
|
-
|
72
|
-
|
70
|
+
let(:fixtures_path) { File.join('spec', 'fixtures') }
|
71
|
+
let(:file_path) { File.join(fixtures_path, 'items_2.1', 'extended_text_rubric.xml') }
|
72
|
+
let(:loaded_class) { described_class.from_path!(file_path) }
|
73
73
|
|
74
74
|
it 'removes the rubric from the item_body' do
|
75
75
|
expect(loaded_class.item_body).to include 'Read this postcard'
|
@@ -60,13 +60,12 @@ describe Qti::V2::Models::AssessmentTest do
|
|
60
60
|
|
61
61
|
describe '#title' do
|
62
62
|
it 'sets the title to the filename by default' do
|
63
|
-
empty_test_string =
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
XML
|
63
|
+
empty_test_string = <<~XML.strip_heredoc
|
64
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
65
|
+
<assessmentTest xmlns="http://www.imsglobal.org/xsd/imsqti_v2p2p1" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.imsglobal.org/xsd/imsqti_v2p2 http://www.imsglobal.org/xsd/qti/qtiv2p2/imsqti_v2p2.xsd">
|
66
|
+
<testPart identifier="Main" navigationMode="linear" submissionMode="individual"/>
|
67
|
+
</assessmentTest>
|
68
|
+
XML
|
70
69
|
allow(File).to receive(:read).and_return(empty_test_string)
|
71
70
|
assessment_test = described_class.new path: '/a/b/c/Test123.xml'
|
72
71
|
expect(assessment_test.title).to eq 'Test123'
|
@@ -9,7 +9,7 @@ describe Qti::V2::Models::Choices::GapMatchChoice do
|
|
9
9
|
let(:choices) { nodes.map { |node| described_class.new(node, item) } }
|
10
10
|
|
11
11
|
it 'returns the right identifier' do
|
12
|
-
expect(choices.map(&:identifier)).to eq %w
|
12
|
+
expect(choices.map(&:identifier)).to eq %w[W Sp Su A]
|
13
13
|
end
|
14
14
|
|
15
15
|
it 'returns the item body text' do
|
@@ -8,14 +8,14 @@ describe Qti::V2::Models::Choices::SimpleAssociableChoice do
|
|
8
8
|
|
9
9
|
it 'returns the expected attributes' do
|
10
10
|
expected_attrs = [
|
11
|
-
%w
|
12
|
-
%w
|
13
|
-
%w
|
14
|
-
%w
|
15
|
-
%w
|
16
|
-
%w
|
17
|
-
%w
|
18
|
-
%w
|
11
|
+
%w[Match28433682 1 1 Weißeritz],
|
12
|
+
%w[Match7191791 1 1 Mulde],
|
13
|
+
%w[Match20473010 1 1 Saale],
|
14
|
+
%w[Match6429655 1 1 Spree],
|
15
|
+
%w[Match2675678 1 1 Dresden],
|
16
|
+
%w[Match9372581 1 1 Leipzig],
|
17
|
+
%w[Match22744006 1 1 Halle],
|
18
|
+
%w[Match17943221 1 1 Bautzen]
|
19
19
|
]
|
20
20
|
expect(choices.map { |c| [c.identifier, c.match_min, c.match_max, c.item_body] }).to eq expected_attrs
|
21
21
|
end
|
@@ -9,7 +9,7 @@ describe Qti::V2::Models::Choices::SimpleChoice do
|
|
9
9
|
let(:choices) { nodes.map { |node| described_class.new(node, item) } }
|
10
10
|
|
11
11
|
it 'returns the right identifier' do
|
12
|
-
expect(choices.map(&:identifier)).to eq %w
|
12
|
+
expect(choices.map(&:identifier)).to eq %w[true false]
|
13
13
|
end
|
14
14
|
|
15
15
|
it 'returns the item body text' do
|
@@ -13,9 +13,9 @@ describe Qti::V2::Models::Interactions::CategorizationInteraction do
|
|
13
13
|
describe '#scoring_data_structs' do
|
14
14
|
it 'returns the scoring data for categorization questions' do
|
15
15
|
expected_scoring_data_structs = [
|
16
|
-
Qti::V2::Models::ScoringData.new("A Midsummer-Night's Dream",
|
17
|
-
Qti::V2::Models::ScoringData.new('Romeo and Juliet',
|
18
|
-
Qti::V2::Models::ScoringData.new('The Tempest',
|
16
|
+
Qti::V2::Models::ScoringData.new("A Midsummer-Night's Dream", 'directedPair', id: 'M', questions_ids: %w[D L]),
|
17
|
+
Qti::V2::Models::ScoringData.new('Romeo and Juliet', 'directedPair', id: 'R', questions_ids: ['C']),
|
18
|
+
Qti::V2::Models::ScoringData.new('The Tempest', 'directedPair', id: 'T', questions_ids: ['P'])
|
19
19
|
]
|
20
20
|
expect(subject.scoring_data_structs).to eq expected_scoring_data_structs
|
21
21
|
end
|
@@ -7,34 +7,36 @@ describe Qti::V2::Models::Interactions::GapMatchInteraction do
|
|
7
7
|
let(:node) { Nokogiri::XML(io) }
|
8
8
|
let(:loaded_class) { described_class.new(node, item) }
|
9
9
|
|
10
|
-
let(:expected_stem_items)
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
10
|
+
let(:expected_stem_items) do
|
11
|
+
[
|
12
|
+
{ type: 'text',
|
13
|
+
value: "Identify the missing words in this famous quote from Shakespeare's Richard III.",
|
14
|
+
id: 'stem_0', position: 1 },
|
15
|
+
{ type: 'text', value: 'Now is the ', id: 'stem_1', position: 2 },
|
16
|
+
{ type: 'blank', blank_id: 'G1', id: 'stem_2', position: 3 },
|
17
|
+
{ type: 'text', value: ' of our discontent', id: 'stem_3', position: 4 },
|
18
|
+
{ type: 'text', value: ' ', id: 'stem_4', position: 5 },
|
19
|
+
{ type: 'text', value: ' Made glorious ', id: 'stem_5', position: 6 },
|
20
|
+
{ type: 'blank', blank_id: 'G2', id: 'stem_6', position: 7 },
|
21
|
+
{ type: 'text', value: ' by this sun of York;', id: 'stem_7', position: 8 },
|
22
|
+
{ type: 'text', value: ' ', id: 'stem_8', position: 9 },
|
23
|
+
{ type: 'text', value: " And all the clouds that lour'd\n upon our house",
|
24
|
+
id: 'stem_9', position: 10 },
|
25
|
+
{ type: 'text', value: ' ', id: 'stem_10', position: 11 },
|
26
|
+
{ type: 'text', value: ' In the deep bosom of the ocean buried.',
|
27
|
+
id: 'stem_11', position: 12 }
|
28
|
+
]
|
29
|
+
end
|
30
|
+
|
31
|
+
let(:scoring_data_ids) { %w[G1 G2] }
|
32
|
+
let(:scoring_data_values) { %w[winter summer] }
|
31
33
|
|
32
34
|
it 'returns shuffle setting' do
|
33
35
|
expect(loaded_class.shuffled?).to eq false
|
34
36
|
end
|
35
37
|
|
36
38
|
it 'returns the blanks' do
|
37
|
-
expect(loaded_class.blanks).to eq [{ id:
|
39
|
+
expect(loaded_class.blanks).to eq [{ id: 'W' }, { id: 'Sp' }, { id: 'Su' }, { id: 'A' }]
|
38
40
|
end
|
39
41
|
|
40
42
|
it 'returns the stem_items' do
|
@@ -46,7 +48,6 @@ describe Qti::V2::Models::Interactions::GapMatchInteraction do
|
|
46
48
|
expect(loaded_class.answers.first).to be_an_instance_of(Qti::V2::Models::Choices::GapMatchChoice)
|
47
49
|
end
|
48
50
|
|
49
|
-
|
50
51
|
it 'returns the choices' do
|
51
52
|
expect(loaded_class.choices.count).to eq 4
|
52
53
|
end
|
@@ -13,7 +13,7 @@ describe Qti::V2::Models::Interactions::OrderingInteraction do
|
|
13
13
|
|
14
14
|
describe '#scoring_data_structs' do
|
15
15
|
it 'grabs scoring data value for ordering questions' do
|
16
|
-
expect(subject.scoring_data_structs.map(&:values)).to eq [
|
16
|
+
expect(subject.scoring_data_structs.map(&:values)).to eq %w[DriverC DriverA DriverB]
|
17
17
|
end
|
18
18
|
end
|
19
19
|
end
|
@@ -16,7 +16,7 @@ describe Qti::V2::Models::Interactions::ShortTextInteraction do
|
|
16
16
|
node = double('Nokogiri::XML::Document')
|
17
17
|
matches = [double('Nokogiri::XML::Element'), double('Nokogiri::XML::Element')]
|
18
18
|
allow(node).to receive(:xpath).with('.//xmlns:textEntryInteraction').and_return(matches)
|
19
|
-
expect{described_class.matches(node, assessment_item)}.to raise_error(Qti::UnsupportedSchema)
|
19
|
+
expect { described_class.matches(node, assessment_item) }.to raise_error(Qti::UnsupportedSchema)
|
20
20
|
end
|
21
21
|
end
|
22
22
|
end
|
@@ -16,7 +16,7 @@ describe Qti::V2::Models::NonAssessmentTest do
|
|
16
16
|
it 'should return the stimulus ref if it exists' do
|
17
17
|
item = loaded_class.assessment_items[1]
|
18
18
|
stimulus_ref = loaded_class.stimulus_ref(item)
|
19
|
-
expect(stimulus_ref).to eq File.join(File.dirname(path),
|
19
|
+
expect(stimulus_ref).to eq File.join(File.dirname(path), 'passages/0cfd5cf7-2c91-4b35-a57a-9f5d1709f68f.html')
|
20
20
|
end
|
21
21
|
|
22
22
|
it 'should return nil if no stimulus ref' do
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Qti::V2::Models::AssessmentItem do
|
4
|
-
context
|
4
|
+
context 'object element' do
|
5
5
|
let(:path) { File.join('spec', 'fixtures', 'no_assessment_XML', '59ee7c9d-e6cc-4d0c-b545-258e20b1a244.xml') }
|
6
6
|
let(:loaded_class) { described_class.from_path!(path) }
|
7
7
|
|
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.1
|
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: 2017-09-
|
12
|
+
date: 2017-09-28 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
@@ -494,12 +494,19 @@ files:
|
|
494
494
|
- spec/fixtures/tests/tests/rtest26.xml
|
495
495
|
- spec/fixtures/tests/tests/rtest27.xml
|
496
496
|
- spec/gemfiles/nokogiri-1.6.gemfile
|
497
|
+
- spec/gemfiles/nokogiri-1.6.gemfile.lock
|
497
498
|
- spec/gemfiles/nokogiri-1.8.gemfile
|
499
|
+
- spec/gemfiles/nokogiri-1.8.gemfile.lock
|
498
500
|
- spec/gemfiles/rails-4.2.gemfile
|
501
|
+
- spec/gemfiles/rails-4.2.gemfile.lock
|
499
502
|
- spec/gemfiles/rails-5.0.gemfile
|
503
|
+
- spec/gemfiles/rails-5.0.gemfile.lock
|
500
504
|
- spec/gemfiles/rails-5.1.gemfile
|
505
|
+
- spec/gemfiles/rails-5.1.gemfile.lock
|
501
506
|
- spec/gemfiles/sanitize-4.2.gemfile
|
507
|
+
- spec/gemfiles/sanitize-4.2.gemfile.lock
|
502
508
|
- spec/gemfiles/sanitize-4.5.gemfile
|
509
|
+
- spec/gemfiles/sanitize-4.5.gemfile.lock
|
503
510
|
- spec/lib/qti/assessment_item_exporter_spec.rb
|
504
511
|
- spec/lib/qti/exporter_spec.rb
|
505
512
|
- spec/lib/qti/models/base_spec.rb
|
@@ -552,7 +559,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
552
559
|
version: '0'
|
553
560
|
requirements: []
|
554
561
|
rubyforge_project:
|
555
|
-
rubygems_version: 2.
|
562
|
+
rubygems_version: 2.6.8
|
556
563
|
signing_key:
|
557
564
|
specification_version: 4
|
558
565
|
summary: QTI 1.2 and 2.1 import and export models
|
@@ -769,12 +776,19 @@ test_files:
|
|
769
776
|
- spec/fixtures/tests/tests/rtest26.xml
|
770
777
|
- spec/fixtures/tests/tests/rtest27.xml
|
771
778
|
- spec/gemfiles/nokogiri-1.6.gemfile
|
779
|
+
- spec/gemfiles/nokogiri-1.6.gemfile.lock
|
772
780
|
- spec/gemfiles/nokogiri-1.8.gemfile
|
781
|
+
- spec/gemfiles/nokogiri-1.8.gemfile.lock
|
773
782
|
- spec/gemfiles/rails-4.2.gemfile
|
783
|
+
- spec/gemfiles/rails-4.2.gemfile.lock
|
774
784
|
- spec/gemfiles/rails-5.0.gemfile
|
785
|
+
- spec/gemfiles/rails-5.0.gemfile.lock
|
775
786
|
- spec/gemfiles/rails-5.1.gemfile
|
787
|
+
- spec/gemfiles/rails-5.1.gemfile.lock
|
776
788
|
- spec/gemfiles/sanitize-4.2.gemfile
|
789
|
+
- spec/gemfiles/sanitize-4.2.gemfile.lock
|
777
790
|
- spec/gemfiles/sanitize-4.5.gemfile
|
791
|
+
- spec/gemfiles/sanitize-4.5.gemfile.lock
|
778
792
|
- spec/lib/qti/assessment_item_exporter_spec.rb
|
779
793
|
- spec/lib/qti/exporter_spec.rb
|
780
794
|
- spec/lib/qti/models/base_spec.rb
|