qti 0.9.0 → 0.9.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|