qti 0.9.8 → 0.9.9

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 (32) hide show
  1. checksums.yaml +4 -4
  2. data/lib/qti.rb +7 -0
  3. data/lib/qti/v1/models/interactions.rb +0 -1
  4. data/lib/qti/v1/models/interactions/numeric_interaction.rb +4 -14
  5. data/lib/qti/v1/models/numerics/exact_match.rb +43 -0
  6. data/lib/qti/v1/models/numerics/margin_error.rb +51 -0
  7. data/lib/qti/v1/models/numerics/precision.rb +65 -0
  8. data/lib/qti/v1/models/numerics/scoring_base.rb +29 -0
  9. data/lib/qti/v1/models/numerics/scoring_data.rb +26 -0
  10. data/lib/qti/v1/models/numerics/scoring_node.rb +29 -0
  11. data/lib/qti/v1/models/numerics/within_range.rb +36 -0
  12. data/lib/qti/version.rb +1 -1
  13. data/spec/fixtures/items_1.2/{numeric.xml → numeric_exact_match.xml} +0 -0
  14. data/spec/fixtures/items_1.2/numeric_margin_error.xml +58 -0
  15. data/spec/fixtures/items_1.2/numeric_precision.xml +58 -0
  16. data/spec/fixtures/items_1.2/numeric_within_range.xml +53 -0
  17. data/spec/gemfiles/nokogiri-1.8.gemfile.lock +35 -18
  18. data/spec/lib/qti/v1/models/interactions/numeric_interaction_spec.rb +92 -27
  19. data/spec/lib/qti/v1/models/numerics/exact_match_spec.rb +84 -0
  20. data/spec/lib/qti/v1/models/numerics/margin_error_spec.rb +80 -0
  21. data/spec/lib/qti/v1/models/numerics/precision_spec.rb +88 -0
  22. data/spec/lib/qti/v1/models/numerics/scoring_base_spec.rb +35 -0
  23. data/spec/lib/qti/v1/models/numerics/scoring_node_spec.rb +29 -0
  24. data/spec/lib/qti/v1/models/numerics/within_range_spec.rb +64 -0
  25. data/spec/spec_helper.rb +1 -0
  26. metadata +44 -17
  27. data/spec/gemfiles/nokogiri-1.6.gemfile.lock +0 -127
  28. data/spec/gemfiles/rails-4.2.gemfile.lock +0 -204
  29. data/spec/gemfiles/rails-5.0.gemfile.lock +0 -210
  30. data/spec/gemfiles/rails-5.1.gemfile.lock +0 -210
  31. data/spec/gemfiles/sanitize-4.2.gemfile.lock +0 -127
  32. data/spec/gemfiles/sanitize-4.5.gemfile.lock +0 -127
@@ -0,0 +1,88 @@
1
+ require 'spec_helper'
2
+
3
+ describe Qti::V1::Models::Numerics::Precision do
4
+ context '#scoring_data' do
5
+ # test case: 0.0123450 with 6 significant digits
6
+ let(:equal_node) do
7
+ double(
8
+ attributes: { 'respident' => double(value: 'response1') },
9
+ content: '0.012345'
10
+ )
11
+ end
12
+
13
+ let(:gt_node_value) { '0.01234495' }
14
+ let(:gt_node) do
15
+ double(
16
+ attributes: { 'respident' => double(value: 'response1') },
17
+ content: gt_node_value
18
+ )
19
+ end
20
+
21
+ let(:lte_node_value) { '0.01234505' }
22
+ let(:lte_node) do
23
+ double(
24
+ attributes: { 'respident' => double(value: 'response1') },
25
+ content: lte_node_value
26
+ )
27
+ end
28
+
29
+ let(:scoring_node) do
30
+ double(
31
+ equal_node: equal_node,
32
+ gt_node: gt_node,
33
+ lte_node: lte_node
34
+ )
35
+ end
36
+
37
+ subject { described_class.new(scoring_node) }
38
+
39
+ context 'missing node' do
40
+ context 'equal_node is missing' do
41
+ let(:equal_node) { nil }
42
+ it 'returns nil' do
43
+ expect(subject.scoring_data).to be_nil
44
+ end
45
+ end
46
+
47
+ context 'gt_node is missing' do
48
+ let(:gt_node) { nil }
49
+ it 'returns nil' do
50
+ expect(subject.scoring_data).to be_nil
51
+ end
52
+ end
53
+
54
+ context 'lte_node is missing' do
55
+ let(:lte_node) { nil }
56
+ it 'returns nil' do
57
+ expect(subject.scoring_data).to be_nil
58
+ end
59
+ end
60
+ end
61
+
62
+ it 'returns correct attributes' do
63
+ ret_val = subject.scoring_data
64
+ expect(ret_val.id).to eq('response1')
65
+ expect(ret_val.type).to eq('preciseResponse')
66
+ expect(ret_val.value).to eq('0.0123450')
67
+ expect(ret_val.precision).to eq('6')
68
+ expect(ret_val.precision_type).to eq('significantDigits')
69
+ end
70
+ end
71
+
72
+ context '#significant_digits' do
73
+ it 'returns correct number for leading zeros' do
74
+ expect(described_class.significant_digits('0.0000123')).
75
+ to eq(3)
76
+ end
77
+ it 'returns correct number for trailing zeros' do
78
+ expect(described_class.significant_digits('0.0000123000')).
79
+ to eq(3)
80
+ end
81
+ it 'returns correct number for zeros in the middle' do
82
+ expect(described_class.significant_digits('0.000012003')).
83
+ to eq(5)
84
+ expect(described_class.significant_digits('15.000012003')).
85
+ to eq(11)
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,35 @@
1
+ require 'spec_helper'
2
+
3
+ describe Qti::V1::Models::Numerics::ScoringBase do
4
+ let(:scoring_node) { double }
5
+
6
+ subject { described_class.new(scoring_node) }
7
+
8
+ describe '#equal_node' do
9
+ it 'fetches equal_node' do
10
+ expect(scoring_node).to receive(:equal_node)
11
+ subject.equal_node
12
+ end
13
+ end
14
+
15
+ describe '#gte_node' do
16
+ it 'fetches gte_node' do
17
+ expect(scoring_node).to receive(:gte_node)
18
+ subject.gte_node
19
+ end
20
+ end
21
+
22
+ describe '#lte_node' do
23
+ it 'fetches lte_node' do
24
+ expect(scoring_node).to receive(:lte_node)
25
+ subject.lte_node
26
+ end
27
+ end
28
+
29
+ describe '#gt_node' do
30
+ it 'fetches gt_node' do
31
+ expect(scoring_node).to receive(:gt_node)
32
+ subject.gt_node
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+
3
+ describe Qti::V1::Models::Numerics::ScoringNode do
4
+ context '#scoring_data' do
5
+ let(:node) { double }
6
+
7
+ subject { described_class.new(node) }
8
+
9
+ it 'expects node is queried with varequal' do
10
+ expect(node).to receive(:at_xpath).with('.//xmlns:varequal')
11
+ subject.equal_node
12
+ end
13
+
14
+ it 'expects node is queried with varequal' do
15
+ expect(node).to receive(:at_xpath).with('.//xmlns:vargte')
16
+ subject.gte_node
17
+ end
18
+
19
+ it 'expects node is queried with varequal' do
20
+ expect(node).to receive(:at_xpath).with('.//xmlns:varlte')
21
+ subject.lte_node
22
+ end
23
+
24
+ it 'expects node is queried with varequal' do
25
+ expect(node).to receive(:at_xpath).with('.//xmlns:vargt')
26
+ subject.gt_node
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,64 @@
1
+ require 'spec_helper'
2
+
3
+ describe Qti::V1::Models::Numerics::WithinRange do
4
+ context '#scoring_data' do
5
+ let(:equal_node) { nil }
6
+
7
+ let(:gte_node_value) { '1.0' }
8
+ let(:gte_node) do
9
+ double(
10
+ attributes: { 'respident' => double(value: 'response1') },
11
+ content: gte_node_value
12
+ )
13
+ end
14
+
15
+ let(:lte_node_value) { '100.0' }
16
+ let(:lte_node) do
17
+ double(
18
+ attributes: { 'respident' => double(value: 'response1') },
19
+ content: lte_node_value
20
+ )
21
+ end
22
+
23
+ let(:scoring_node) do
24
+ double(
25
+ equal_node: equal_node,
26
+ gte_node: gte_node,
27
+ lte_node: lte_node
28
+ )
29
+ end
30
+
31
+ subject { described_class.new(scoring_node) }
32
+
33
+ context 'incompatible nodes' do
34
+ context 'equal_node presents' do
35
+ let(:equal_node) { double(content: '1234') }
36
+ it 'returns nil' do
37
+ expect(subject.scoring_data).to be_nil
38
+ end
39
+ end
40
+
41
+ context 'gte_node is missing' do
42
+ let(:gte_node) { nil }
43
+ it 'returns nil' do
44
+ expect(subject.scoring_data).to be_nil
45
+ end
46
+ end
47
+
48
+ context 'lte_node is missing' do
49
+ let(:lte_node) { nil }
50
+ it 'returns nil' do
51
+ expect(subject.scoring_data).to be_nil
52
+ end
53
+ end
54
+ end
55
+
56
+ it 'returns correct attributes' do
57
+ ret_val = subject.scoring_data
58
+ expect(ret_val.id).to eq('response1')
59
+ expect(ret_val.type).to eq('withinARange')
60
+ expect(ret_val.start).to eq('1.0')
61
+ expect(ret_val.end).to eq('100.0')
62
+ end
63
+ end
64
+ end
@@ -16,6 +16,7 @@ require 'byebug'
16
16
  require 'securerandom'
17
17
 
18
18
  Dir['./spec/support/**/*.rb'].each { |f| require f }
19
+ require 'action_view'
19
20
 
20
21
  RSpec.configure do |config|
21
22
  config.expect_with :rspec do |expectations|
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.8
4
+ version: 0.9.9
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-01-03 00:00:00.000000000 Z
12
+ date: 2018-01-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -113,6 +113,20 @@ dependencies:
113
113
  - - "<"
114
114
  - !ruby/object:Gem::Version
115
115
  version: '5.0'
116
+ - !ruby/object:Gem::Dependency
117
+ name: actionview
118
+ requirement: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ version: 4.2.0
123
+ type: :runtime
124
+ prerelease: false
125
+ version_requirements: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - ">="
128
+ - !ruby/object:Gem::Version
129
+ version: 4.2.0
116
130
  - !ruby/object:Gem::Dependency
117
131
  name: bundler
118
132
  requirement: !ruby/object:Gem::Requirement
@@ -275,6 +289,13 @@ files:
275
289
  - lib/qti/v1/models/interactions/numeric_interaction.rb
276
290
  - lib/qti/v1/models/interactions/ordering_interaction.rb
277
291
  - lib/qti/v1/models/interactions/string_interaction.rb
292
+ - lib/qti/v1/models/numerics/exact_match.rb
293
+ - lib/qti/v1/models/numerics/margin_error.rb
294
+ - lib/qti/v1/models/numerics/precision.rb
295
+ - lib/qti/v1/models/numerics/scoring_base.rb
296
+ - lib/qti/v1/models/numerics/scoring_data.rb
297
+ - lib/qti/v1/models/numerics/scoring_node.rb
298
+ - lib/qti/v1/models/numerics/within_range.rb
278
299
  - lib/qti/v1/models/scoring_data.rb
279
300
  - lib/qti/v2/models/assessment_item.rb
280
301
  - lib/qti/v2/models/assessment_test.rb
@@ -306,7 +327,10 @@ files:
306
327
  - spec/fixtures/items_1.2/multiple_answer.xml
307
328
  - spec/fixtures/items_1.2/multiple_answer_canvas.xml
308
329
  - spec/fixtures/items_1.2/multiple_choice.xml
309
- - spec/fixtures/items_1.2/numeric.xml
330
+ - spec/fixtures/items_1.2/numeric_exact_match.xml
331
+ - spec/fixtures/items_1.2/numeric_margin_error.xml
332
+ - spec/fixtures/items_1.2/numeric_precision.xml
333
+ - spec/fixtures/items_1.2/numeric_within_range.xml
310
334
  - spec/fixtures/items_1.2/ordering.xml
311
335
  - spec/fixtures/items_1.2/single_fib.xml
312
336
  - spec/fixtures/items_1.2/true_false.xml
@@ -506,19 +530,13 @@ files:
506
530
  - spec/fixtures/tests/tests/rtest27.xml
507
531
  - spec/fixtures/unsupported_version/imsmanifest.xml
508
532
  - spec/gemfiles/nokogiri-1.6.gemfile
509
- - spec/gemfiles/nokogiri-1.6.gemfile.lock
510
533
  - spec/gemfiles/nokogiri-1.8.gemfile
511
534
  - spec/gemfiles/nokogiri-1.8.gemfile.lock
512
535
  - spec/gemfiles/rails-4.2.gemfile
513
- - spec/gemfiles/rails-4.2.gemfile.lock
514
536
  - spec/gemfiles/rails-5.0.gemfile
515
- - spec/gemfiles/rails-5.0.gemfile.lock
516
537
  - spec/gemfiles/rails-5.1.gemfile
517
- - spec/gemfiles/rails-5.1.gemfile.lock
518
538
  - spec/gemfiles/sanitize-4.2.gemfile
519
- - spec/gemfiles/sanitize-4.2.gemfile.lock
520
539
  - spec/gemfiles/sanitize-4.5.gemfile
521
- - spec/gemfiles/sanitize-4.5.gemfile.lock
522
540
  - spec/lib/qti/assessment_item_exporter_spec.rb
523
541
  - spec/lib/qti/exporter_spec.rb
524
542
  - spec/lib/qti/models/base_spec.rb
@@ -534,6 +552,12 @@ files:
534
552
  - spec/lib/qti/v1/models/interactions/numeric_interaction_spec.rb
535
553
  - spec/lib/qti/v1/models/interactions/ordering_interaction_spec.rb
536
554
  - spec/lib/qti/v1/models/interactions/string_interaction_spec.rb
555
+ - spec/lib/qti/v1/models/numerics/exact_match_spec.rb
556
+ - spec/lib/qti/v1/models/numerics/margin_error_spec.rb
557
+ - spec/lib/qti/v1/models/numerics/precision_spec.rb
558
+ - spec/lib/qti/v1/models/numerics/scoring_base_spec.rb
559
+ - spec/lib/qti/v1/models/numerics/scoring_node_spec.rb
560
+ - spec/lib/qti/v1/models/numerics/within_range_spec.rb
537
561
  - spec/lib/qti/v2/models/assessment_item_spec.rb
538
562
  - spec/lib/qti/v2/models/assessment_test_spec.rb
539
563
  - spec/lib/qti/v2/models/choices/gap_match_choice_spec.rb
@@ -572,7 +596,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
572
596
  version: '0'
573
597
  requirements: []
574
598
  rubyforge_project:
575
- rubygems_version: 2.6.8
599
+ rubygems_version: 2.6.13
576
600
  signing_key:
577
601
  specification_version: 4
578
602
  summary: QTI 1.2 and 2.1 import and export models
@@ -586,7 +610,10 @@ test_files:
586
610
  - spec/fixtures/items_1.2/multiple_answer.xml
587
611
  - spec/fixtures/items_1.2/multiple_answer_canvas.xml
588
612
  - spec/fixtures/items_1.2/multiple_choice.xml
589
- - spec/fixtures/items_1.2/numeric.xml
613
+ - spec/fixtures/items_1.2/numeric_exact_match.xml
614
+ - spec/fixtures/items_1.2/numeric_margin_error.xml
615
+ - spec/fixtures/items_1.2/numeric_precision.xml
616
+ - spec/fixtures/items_1.2/numeric_within_range.xml
590
617
  - spec/fixtures/items_1.2/ordering.xml
591
618
  - spec/fixtures/items_1.2/single_fib.xml
592
619
  - spec/fixtures/items_1.2/true_false.xml
@@ -786,19 +813,13 @@ test_files:
786
813
  - spec/fixtures/tests/tests/rtest27.xml
787
814
  - spec/fixtures/unsupported_version/imsmanifest.xml
788
815
  - spec/gemfiles/nokogiri-1.6.gemfile
789
- - spec/gemfiles/nokogiri-1.6.gemfile.lock
790
816
  - spec/gemfiles/nokogiri-1.8.gemfile
791
817
  - spec/gemfiles/nokogiri-1.8.gemfile.lock
792
818
  - spec/gemfiles/rails-4.2.gemfile
793
- - spec/gemfiles/rails-4.2.gemfile.lock
794
819
  - spec/gemfiles/rails-5.0.gemfile
795
- - spec/gemfiles/rails-5.0.gemfile.lock
796
820
  - spec/gemfiles/rails-5.1.gemfile
797
- - spec/gemfiles/rails-5.1.gemfile.lock
798
821
  - spec/gemfiles/sanitize-4.2.gemfile
799
- - spec/gemfiles/sanitize-4.2.gemfile.lock
800
822
  - spec/gemfiles/sanitize-4.5.gemfile
801
- - spec/gemfiles/sanitize-4.5.gemfile.lock
802
823
  - spec/lib/qti/assessment_item_exporter_spec.rb
803
824
  - spec/lib/qti/exporter_spec.rb
804
825
  - spec/lib/qti/models/base_spec.rb
@@ -814,6 +835,12 @@ test_files:
814
835
  - spec/lib/qti/v1/models/interactions/numeric_interaction_spec.rb
815
836
  - spec/lib/qti/v1/models/interactions/ordering_interaction_spec.rb
816
837
  - spec/lib/qti/v1/models/interactions/string_interaction_spec.rb
838
+ - spec/lib/qti/v1/models/numerics/exact_match_spec.rb
839
+ - spec/lib/qti/v1/models/numerics/margin_error_spec.rb
840
+ - spec/lib/qti/v1/models/numerics/precision_spec.rb
841
+ - spec/lib/qti/v1/models/numerics/scoring_base_spec.rb
842
+ - spec/lib/qti/v1/models/numerics/scoring_node_spec.rb
843
+ - spec/lib/qti/v1/models/numerics/within_range_spec.rb
817
844
  - spec/lib/qti/v2/models/assessment_item_spec.rb
818
845
  - spec/lib/qti/v2/models/assessment_test_spec.rb
819
846
  - spec/lib/qti/v2/models/choices/gap_match_choice_spec.rb
@@ -1,127 +0,0 @@
1
- PATH
2
- remote: ../..
3
- specs:
4
- qti (0.9.3)
5
- activesupport (>= 4.2.9, < 5.2)
6
- dry-struct (~> 0.2.1)
7
- dry-types (~> 0.12.0)
8
- nokogiri (>= 1.6.8, < 1.9)
9
- rubyzip (~> 1.2)
10
- sanitize (>= 4.2.0, < 5.0)
11
-
12
- GEM
13
- remote: https://rubygems.org/
14
- specs:
15
- activesupport (5.1.4)
16
- concurrent-ruby (~> 1.0, >= 1.0.2)
17
- i18n (~> 0.7)
18
- minitest (~> 5.1)
19
- tzinfo (~> 1.1)
20
- ast (2.3.0)
21
- byebug (9.1.0)
22
- coderay (1.1.2)
23
- concurrent-ruby (1.0.5)
24
- crass (1.0.2)
25
- diff-lcs (1.3)
26
- docile (1.1.5)
27
- dry-configurable (0.7.0)
28
- concurrent-ruby (~> 1.0)
29
- dry-container (0.6.0)
30
- concurrent-ruby (~> 1.0)
31
- dry-configurable (~> 0.1, >= 0.1.3)
32
- dry-core (0.3.4)
33
- concurrent-ruby (~> 1.0)
34
- dry-equalizer (0.2.0)
35
- dry-logic (0.4.2)
36
- dry-container (~> 0.2, >= 0.2.6)
37
- dry-core (~> 0.2)
38
- dry-equalizer (~> 0.2)
39
- dry-struct (0.2.1)
40
- dry-configurable (~> 0.1)
41
- dry-equalizer (~> 0.2)
42
- dry-types (~> 0.9, >= 0.9.0)
43
- ice_nine (~> 0.11)
44
- dry-types (0.12.0)
45
- concurrent-ruby (~> 1.0)
46
- dry-configurable (~> 0.1)
47
- dry-container (~> 0.3)
48
- dry-core (~> 0.2, >= 0.2.1)
49
- dry-equalizer (~> 0.2)
50
- dry-logic (~> 0.4, >= 0.4.2)
51
- inflecto (~> 0.0.0, >= 0.0.2)
52
- i18n (0.8.6)
53
- ice_nine (0.11.2)
54
- inflecto (0.0.2)
55
- json (2.1.0)
56
- method_source (0.9.0)
57
- mini_portile2 (2.1.0)
58
- minitest (5.10.3)
59
- nokogiri (1.6.8.1)
60
- mini_portile2 (~> 2.1.0)
61
- nokogumbo (1.4.13)
62
- nokogiri
63
- parallel (1.12.0)
64
- parser (2.4.0.0)
65
- ast (~> 2.2)
66
- powerpack (0.1.1)
67
- pry (0.11.1)
68
- coderay (~> 1.1.0)
69
- method_source (~> 0.9.0)
70
- rainbow (2.2.2)
71
- rake
72
- rake (0.9.6)
73
- rspec (3.6.0)
74
- rspec-core (~> 3.6.0)
75
- rspec-expectations (~> 3.6.0)
76
- rspec-mocks (~> 3.6.0)
77
- rspec-core (3.6.0)
78
- rspec-support (~> 3.6.0)
79
- rspec-expectations (3.6.0)
80
- diff-lcs (>= 1.2.0, < 2.0)
81
- rspec-support (~> 3.6.0)
82
- rspec-mocks (3.6.0)
83
- diff-lcs (>= 1.2.0, < 2.0)
84
- rspec-support (~> 3.6.0)
85
- rspec-support (3.6.0)
86
- rubocop (0.50.0)
87
- parallel (~> 1.10)
88
- parser (>= 2.3.3.1, < 3.0)
89
- powerpack (~> 0.1)
90
- rainbow (>= 2.2.2, < 3.0)
91
- ruby-progressbar (~> 1.7)
92
- unicode-display_width (~> 1.0, >= 1.0.1)
93
- ruby-progressbar (1.8.3)
94
- rubyzip (1.2.1)
95
- sanitize (4.5.0)
96
- crass (~> 1.0.2)
97
- nokogiri (>= 1.4.4)
98
- nokogumbo (~> 1.4.1)
99
- simplecov (0.15.1)
100
- docile (~> 1.1.0)
101
- json (>= 1.8, < 3)
102
- simplecov-html (~> 0.10.0)
103
- simplecov-html (0.10.2)
104
- thread_safe (0.3.6)
105
- tzinfo (1.2.3)
106
- thread_safe (~> 0.1)
107
- unicode-display_width (1.3.0)
108
- wwtd (1.3.0)
109
-
110
- PLATFORMS
111
- ruby
112
-
113
- DEPENDENCIES
114
- bundler (~> 1.15)
115
- byebug (~> 9.0)
116
- nokogiri (~> 1.6.8)
117
- pry (~> 0)
118
- qti!
119
- rake (~> 0)
120
- rspec (~> 3.6)
121
- rspec-mocks (~> 3.6)
122
- rubocop (~> 0.50.0)
123
- simplecov (~> 0)
124
- wwtd (~> 1.3)
125
-
126
- BUNDLED WITH
127
- 1.15.4