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.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/lib/null_logger.rb +2 -4
  3. data/lib/qti/models/base.rb +8 -10
  4. data/lib/qti/models/manifest.rb +4 -8
  5. data/lib/qti/v1/models/assessment.rb +4 -4
  6. data/lib/qti/v1/models/assessment_item.rb +2 -2
  7. data/lib/qti/v1/models/choices/fill_blank_choice.rb +1 -1
  8. data/lib/qti/v1/models/interactions/base_interaction.rb +1 -1
  9. data/lib/qti/v1/models/interactions/choice_interaction.rb +1 -1
  10. data/lib/qti/v1/models/interactions/fill_blank_interaction.rb +6 -7
  11. data/lib/qti/v1/models/interactions/ordering_interaction.rb +1 -1
  12. data/lib/qti/v1/models/scoring_data.rb +1 -1
  13. data/lib/qti/v2/models/assessment_item.rb +1 -1
  14. data/lib/qti/v2/models/assessment_test.rb +3 -3
  15. data/lib/qti/v2/models/base.rb +6 -6
  16. data/lib/qti/v2/models/choices/simple_choice.rb +1 -1
  17. data/lib/qti/v2/models/interactions/base_interaction.rb +1 -1
  18. data/lib/qti/v2/models/interactions/categorization_interaction.rb +1 -1
  19. data/lib/qti/v2/models/interactions/gap_match_interaction.rb +8 -12
  20. data/lib/qti/v2/models/interactions/match_interaction.rb +2 -2
  21. data/lib/qti/v2/models/non_assessment_test.rb +2 -2
  22. data/lib/qti/v2/models/scoring_data.rb +1 -1
  23. data/lib/qti/v2/models/stimulus_item.rb +0 -1
  24. data/lib/qti/version.rb +1 -1
  25. data/spec/gemfiles/nokogiri-1.6.gemfile.lock +126 -0
  26. data/spec/gemfiles/nokogiri-1.8.gemfile.lock +126 -0
  27. data/spec/gemfiles/rails-4.2.gemfile.lock +203 -0
  28. data/spec/gemfiles/rails-5.0.gemfile.lock +209 -0
  29. data/spec/gemfiles/rails-5.1.gemfile.lock +209 -0
  30. data/spec/gemfiles/sanitize-4.2.gemfile.lock +126 -0
  31. data/spec/gemfiles/sanitize-4.5.gemfile.lock +126 -0
  32. data/spec/lib/qti/models/base_spec.rb +10 -10
  33. data/spec/lib/qti/models/manifest_spec.rb +0 -1
  34. data/spec/lib/qti/v1/models/assessment_spec.rb +7 -8
  35. data/spec/lib/qti/v1/models/choices/fill_blank_choice_spec.rb +1 -1
  36. data/spec/lib/qti/v1/models/choices/logical_identifier_choice_spec.rb +1 -1
  37. data/spec/lib/qti/v1/models/interactions/fill_blank_interaction_spec.rb +15 -13
  38. data/spec/lib/qti/v1/models/interactions/ordering_interaction_spec.rb +1 -1
  39. data/spec/lib/qti/v2/models/assessment_item_spec.rb +3 -3
  40. data/spec/lib/qti/v2/models/assessment_test_spec.rb +6 -7
  41. data/spec/lib/qti/v2/models/choices/gap_match_choice_spec.rb +1 -1
  42. data/spec/lib/qti/v2/models/choices/simple_associable_choice_spec.rb +8 -8
  43. data/spec/lib/qti/v2/models/choices/simple_choice_spec.rb +1 -1
  44. data/spec/lib/qti/v2/models/interactions/categorization_interaction_spec.rb +3 -3
  45. data/spec/lib/qti/v2/models/interactions/gap_match_interaction_spec.rb +24 -23
  46. data/spec/lib/qti/v2/models/interactions/ordering_interaction_spec.rb +1 -1
  47. data/spec/lib/qti/v2/models/interactions/short_text_interaction_spec.rb +1 -1
  48. data/spec/lib/qti/v2/models/non_assessment_test_spec.rb +1 -1
  49. data/spec/lib/qti/v2/models/object_element_spec.rb +1 -1
  50. 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
- }.to raise_error(Qti::ParseError)
59
+ end.to raise_error(Qti::ParseError)
60
60
  end
61
61
 
62
- context "with explicit package root" do
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
- }.not_to raise_error
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
- }.to raise_error(Qti::ParseError)
76
+ end.to raise_error(Qti::ParseError)
77
77
  end
78
78
  end
79
79
 
80
- context "with nil package root" do
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
- }.to raise_error(Qti::ParseError)
87
+ end.to raise_error(Qti::ParseError)
88
88
  end
89
89
  end
90
90
  end
@@ -41,5 +41,4 @@ describe Qti::Models::Manifest do
41
41
  file = File.join(fixtures_path, 'items_2.1/imsmanifest.xml')
42
42
  expect { described_class.from_path!(file).assessment_test }.to raise_error('Unsupported QTI version')
43
43
  end
44
-
45
44
  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
- <<-XML.strip_heredoc
26
- <?xml version="1.0" encoding="UTF-8"?>
27
- <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">
28
- <assessment ident="A1001">
29
- </assessment>
30
- </questestinterop>
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(FIB_STR)
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(QUE_1003 QUE_1007 QUE_1022)
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: "FIB01" }, { id: "FIB02" }, { id: "FIB03" }]
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(FIB01 FIB02 FIB03) }
46
- let(:scoring_data_values) { %w(Winter Summer York) }
47
- let(:scoring_data_case) { %w(Yes Yes Yes) }
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
- { id: "stem_0", position: 1, type: "text", value: "Fill-in-the blanks in this text from Richard III: " },
51
- { id: "stem_1", position: 2, type: "text", value: "Now is the " },
52
- { id: "stem_2", position: 3, type: "blank", blank_id: "FIB01" },
53
- { id: "stem_3", position: 4, type: "text", value: " of our discontent made glorious " },
54
- { id: "stem_4", position: 5, type: "blank", blank_id: "FIB02" },
55
- { id: "stem_5", position: 6, type: "text", value: " by these sons of " },
56
- { id: "stem_6", position: 7, type: "blank", blank_id: "FIB03" }
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(A B E D C)
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
- 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) }
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
- <<-XML.strip_heredoc
65
- <?xml version="1.0" encoding="UTF-8"?>
66
- <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">
67
- <testPart identifier="Main" navigationMode="linear" submissionMode="individual"/>
68
- </assessmentTest>
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(W Sp Su A)
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(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)
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(true false)
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", "directedPair", id: "M", questions_ids: ["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']),
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
- {type: "text",
12
- value: "Identify the missing words in this famous quote from Shakespeare's Richard III.",
13
- id: "stem_0", position: 1},
14
- {type: 'text', value: 'Now is the ', id: 'stem_1', position: 2},
15
- {type: 'blank', :blank_id=>'G1', id: 'stem_2', position: 3},
16
- {type: 'text', value: ' of our discontent', id: 'stem_3', position: 4},
17
- {type: 'text', value: ' ', id: 'stem_4', position: 5},
18
- {type: 'text', value: ' Made glorious ', id: 'stem_5', position: 6},
19
- {type: 'blank', :blank_id=>'G2', id: 'stem_6', position: 7},
20
- {type: 'text', value: ' by this sun of York;', id: 'stem_7', position: 8},
21
- {type: 'text', value: ' ', id: 'stem_8', position: 9},
22
- {type: 'text', value: " And all the clouds that lour'd\n upon our house",
23
- id: 'stem_9', position: 10},
24
- {type: 'text', value: ' ', id: 'stem_10', position: 11},
25
- {type: 'text', value: ' In the deep bosom of the ocean buried.',
26
- id: 'stem_11', position: 12}
27
- ]}
28
-
29
- let(:scoring_data_ids) { %w(G1 G2) }
30
- let(:scoring_data_values) { %w(winter summer) }
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: "W" }, { id: "Sp" }, { id: "Su" }, { id: "A" }]
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 ['DriverC', 'DriverA', 'DriverB']
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), "passages/0cfd5cf7-2c91-4b35-a57a-9f5d1709f68f.html")
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 "object element" do
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.0
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-25 00:00:00.000000000 Z
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.5.1
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