qti 0.9.0 → 0.9.1

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