qti 2.6.2 → 2.7.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1efc6d4685a9ee4de6bd99f210c19cc58d192b62eb7a826625cd73c982d5d72f
4
- data.tar.gz: 36be4ac43a818860c0d76f22f233d8ece3d27bb4d2add350535892452426da46
3
+ metadata.gz: 01dd841b1a9215aeaddf4e9211f7e2327544067afa5fb2e24a58186f7c035115
4
+ data.tar.gz: b4d688f36fb284da0ba8168463b667eb59bf612b2750ef50650230dcc129e2bb
5
5
  SHA512:
6
- metadata.gz: eff97a9889ad795c323771b45358bd76561329ea12788813dbe833934354ba5c79e09fb5f1bbb0b02eb5b694d3ba8131af2ea20d8a426a624a38954daa13a29a
7
- data.tar.gz: 7a9258aa3bf9c5707e15df8fe8d5e59e805e4545218f351464a181177b973cfba2808d9bcd8549ab046da08f7ce0c75fb5b42a9193f37e109bd5d05a6e6cdb2f
6
+ metadata.gz: 301bfa283539d68e2feca734a9aa97046c2604c5eedc8f656e217cdbd90949d3ddf88dcdda39ecbb1c19dde68d0b51c5f582aa9b33c3f79995109e921126dbe2
7
+ data.tar.gz: 880e9ce56fe47276d833ab1b19d1f6b30646cf5a641ddce0f7e6468bb9922b05ccfd5ff140b413f7e8698c532798ade8fa50262a37e93231cfef5af5b3417ae8
data/README.md CHANGED
@@ -80,8 +80,8 @@ cached, making additional runs significantly faster.
80
80
  Individual spec runs can be started like so:
81
81
 
82
82
  ```bash
83
- docker-compose run --rm app /bin/bash -l -c \
84
- "BUNDLE_GEMFILE=spec/gemfiles/rails-6.0.gemfile rvm-exec 2.5 rspec"
83
+ docker-compose run --rm app bash -lc \
84
+ "BUNDLE_GEMFILE=spec/gemfiles/rails-6.1.gemfile rvm-exec 2.7 rspec"
85
85
  ```
86
86
 
87
87
  If you'd like to mount your git checkout within the docker container running
data/lib/qti/exporter.rb CHANGED
@@ -7,7 +7,7 @@ module Qti
7
7
  @assessment_test = assessment_test
8
8
  @package_root_path = args[:package_root_path] || '.'
9
9
  @exported_file_path =
10
- File.join(File.expand_path('..', package_root_path), File.basename(export_file_name)) + '.zip'
10
+ "#{File.join(File.expand_path('..', package_root_path), File.basename(export_file_name))}.zip"
11
11
  end
12
12
 
13
13
  def export
@@ -167,12 +167,10 @@ module Qti
167
167
 
168
168
  def add_all_files(zipfile, package_root_path)
169
169
  Dir["#{package_root_path}/**/**"].each do |file|
170
- begin
171
- entry = file.sub(package_root_path + '/', '')
172
- zipfile.add(entry, file)
173
- rescue Zip::EntryExistsError
174
- logger.info("#{file} already exists")
175
- end
170
+ entry = file.sub("#{package_root_path}/", '')
171
+ zipfile.add(entry, file)
172
+ rescue Zip::EntryExistsError
173
+ logger.info("#{file} already exists")
176
174
  end
177
175
  end
178
176
  end
@@ -1,19 +1,22 @@
1
1
  module Qti
2
2
  class ParseError < StandardError; end
3
+
3
4
  class SpecificationViolation < StandardError; end
5
+
4
6
  class UnsupportedSchema < StandardError; end
5
7
 
6
8
  module Models
7
9
  class Base
8
10
  attr_reader :doc, :path, :package_root, :resource
9
11
  attr_accessor :manifest
12
+
10
13
  delegate :metadata, to: :@resource, allow_nil: true
11
14
 
12
15
  def sanitize_content!(html)
13
16
  sanitizer.clean(html)
14
17
  end
15
18
 
16
- def self.from_path!(path, package_root = nil, resource = nil)
19
+ def self.from_path!(path, package_root: nil, resource: nil)
17
20
  new(path: path, package_root: package_root, resource: resource)
18
21
  end
19
22
 
@@ -82,7 +85,8 @@ module Qti
82
85
  def package_root=(package_root)
83
86
  @package_root = package_root
84
87
  return unless @package_root
85
- @package_root = Pathname.new(@package_root).cleanpath.to_s + '/'
88
+
89
+ @package_root = "#{Pathname.new(@package_root).cleanpath}/"
86
90
  end
87
91
 
88
92
  def relative_path
@@ -24,7 +24,8 @@ module Qti
24
24
  builder = ASSESSMENT_CLASSES[version.split('/').first]
25
25
  raise_unsupported unless builder
26
26
  rsc = resource_for(identifier, version)
27
- assessment = builder.from_path!(remap_href_path(asset_resource_for(rsc)), @package_root, rsc)
27
+ assessment = builder.from_path!(remap_href_path(asset_resource_for(rsc)), package_root: @package_root,
28
+ resource: rsc)
28
29
  assessment.canvas_meta_data(rsc.canvas_metadata)
29
30
  assessment
30
31
  end
@@ -46,7 +47,7 @@ module Qti
46
47
  end
47
48
 
48
49
  def embedded_non_assessment
49
- Qti::V2::Models::NonAssessmentTest.from_path!(@path, @package_root)
50
+ Qti::V2::Models::NonAssessmentTest.from_path!(@path, package_root: @package_root)
50
51
  end
51
52
  end
52
53
  end
@@ -91,7 +91,7 @@ module Qti
91
91
  Resource.new(resource_node(base_xpath), self)
92
92
  end
93
93
 
94
- def assessment_identifiers(embedded_as_assessment = true)
94
+ def assessment_identifiers(embedded_as_assessment: true)
95
95
  id_list = identifier_list('/assessment')
96
96
  return id_list + [EMBEDDED_NON_ASSESSMENT_ID] if embedded_as_assessment && embedded_non_assessment?
97
97
  id_list
@@ -109,13 +109,16 @@ module Qti
109
109
  doc = load_asset_resource(rsc_path)
110
110
 
111
111
  # There are other types, but all we support right now are object banks...
112
- Qti::V1::Models::ObjectBank.from_path!(rsc_path, @package_root, rsc) unless doc.search('objectbank').empty?
112
+ unless doc.search('objectbank').empty?
113
+ Qti::V1::Models::ObjectBank.from_path!(rsc_path, package_root: @package_root,
114
+ resource: rsc)
115
+ end
113
116
  end.reject(&:nil?)
114
117
  end
115
118
 
116
119
  def objectbanks
117
120
  load_associated_content.select do |c|
118
- c.class == Qti::V1::Models::ObjectBank
121
+ c.instance_of?(Qti::V1::Models::ObjectBank)
119
122
  end
120
123
  end
121
124
 
data/lib/qti/sanitizer.rb CHANGED
@@ -93,7 +93,7 @@ module Qti
93
93
  path = remap_href_path(node[:data])
94
94
  if path
95
95
  case node[:type]
96
- when %r{^image\/}
96
+ when %r{^image/}
97
97
  return replace_with_image(node, node[:data])
98
98
  when 'text/html'
99
99
  return replace_with_html(node, path)
@@ -2,8 +2,8 @@ module Qti
2
2
  module V1
3
3
  module Models
4
4
  class AssessmentItem < Qti::V1::Models::Base
5
- attr_reader :doc
6
- attr_reader :resource
5
+ attr_reader :doc, :resource
6
+
7
7
  delegate :metadata, to: :@resource
8
8
 
9
9
  def initialize(item, package_root = nil, resource = nil)
@@ -56,11 +56,10 @@ module Qti
56
56
  end
57
57
 
58
58
  def self.get_matches(node, parent, classlist)
59
- matches = classlist.each_with_object([]) do |interaction_class, result|
59
+ classlist.each_with_object([]) do |interaction_class, result|
60
60
  match = interaction_class.matches(node, parent)
61
61
  result << match if match
62
62
  end
63
- matches
64
63
  end
65
64
  end
66
65
  end
@@ -3,10 +3,6 @@ module Qti
3
3
  module Models
4
4
  module Numerics
5
5
  class ExactMatch < ScoringBase
6
- def initialize(scoring_node)
7
- super(scoring_node)
8
- end
9
-
10
6
  def scoring_data
11
7
  return unless valid?
12
8
  Struct.new(
@@ -3,10 +3,6 @@ module Qti
3
3
  module Models
4
4
  module Numerics
5
5
  class MarginError < ScoringBase
6
- def initialize(scoring_node)
7
- super(scoring_node)
8
- end
9
-
10
6
  def scoring_data
11
7
  return unless valid?
12
8
  Struct.new(
@@ -5,10 +5,6 @@ module Qti
5
5
  class Precision < ScoringBase
6
6
  include ActionView::Helpers::NumberHelper
7
7
 
8
- def initialize(scoring_node)
9
- super(scoring_node)
10
- end
11
-
12
8
  def scoring_data
13
9
  return unless equal_node && gt_node && lte_node
14
10
  Struct.new(
@@ -4,6 +4,7 @@ module Qti
4
4
  module Numerics
5
5
  class ScoringData
6
6
  class UnsupportedNumreicType < StandardError; end
7
+
7
8
  def initialize(node)
8
9
  @scoring_node = ScoringNode.new(node)
9
10
  end
@@ -3,10 +3,6 @@ module Qti
3
3
  module Models
4
4
  module Numerics
5
5
  class WithinRange < ScoringBase
6
- def initialize(scoring_node)
7
- super(scoring_node)
8
- end
9
-
10
6
  def scoring_data
11
7
  return unless valid?
12
8
  Struct.new(
@@ -38,6 +38,10 @@ module Qti
38
38
  selection&.xpath('xmlns:sourcebank_ref')&.text
39
39
  end
40
40
 
41
+ def sourcebank_export_id
42
+ selection&.xpath('xmlns:sourcebank_export_id')&.text
43
+ end
44
+
41
45
  def points_per_item
42
46
  selection.xpath('xmlns:selection_extension/xmlns:points_per_item')&.text&.to_f
43
47
  end
@@ -31,7 +31,8 @@ module Qti
31
31
  end
32
32
 
33
33
  def create_assessment_item(ref)
34
- item = Qti::V2::Models::AssessmentItem.from_path!(ref[:path], @package_root, ref[:resource])
34
+ item = Qti::V2::Models::AssessmentItem.from_path!(ref[:path], package_root: @package_root,
35
+ resource: ref[:resource])
35
36
  item.manifest = manifest
36
37
  item
37
38
  end
@@ -6,7 +6,7 @@ module Qti
6
6
  module Models
7
7
  module Interactions
8
8
  class MatchInteraction < BaseInteraction
9
- extend Forwardable
9
+ extend ::Forwardable
10
10
 
11
11
  attr_reader :implementation
12
12
 
data/lib/qti/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Qti
2
- VERSION = '2.6.2'.freeze
2
+ VERSION = '2.7.1'.freeze
3
3
  end
data/lib/qti.rb CHANGED
@@ -5,6 +5,7 @@ require 'active_support/core_ext/hash/except'
5
5
  require 'active_support/core_ext/module/delegation'
6
6
  require 'dry-struct'
7
7
  require 'find'
8
+ require 'forwardable'
8
9
  require 'mathml2latex'
9
10
  require 'nokogiri'
10
11
  require 'pathname'
@@ -14,8 +15,8 @@ require 'zip'
14
15
 
15
16
  module Qti
16
17
  class Importer
17
- attr_reader :package_root
18
- attr_reader :assessment_id
18
+ attr_reader :package_root, :assessment_id
19
+
19
20
  delegate :assessment_identifiers, to: :@manifest
20
21
  delegate :question_bank_identifiers, to: :@manifest
21
22
 
@@ -39,7 +40,7 @@ module Qti
39
40
  def self.manifest(path)
40
41
  mpath = manifest_path(path)
41
42
  package_root = File.dirname(mpath)
42
- manifest = Qti::Models::Manifest.from_path!(mpath, package_root = package_root)
43
+ manifest = Qti::Models::Manifest.from_path!(mpath, package_root: package_root)
43
44
  [mpath, package_root, manifest]
44
45
  end
45
46
 
@@ -16,6 +16,7 @@
16
16
  <points_per_item>1.0</points_per_item>
17
17
  </selection_extension>
18
18
  <sourcebank_ref>sourcebank_reference_uuid</sourcebank_ref>
19
+ <sourcebank_export_id>sourcebank_export_id_test</sourcebank_export_id>
19
20
  </selection>
20
21
  </selection_ordering>
21
22
  <item ident="i09d4a5492a38a5b4d1533b8fdbdf7376" title="Question">
@@ -2,4 +2,4 @@ source 'https://rubygems.org'
2
2
 
3
3
  gemspec path: '../../'
4
4
 
5
- gem 'rails', '~> 5.1.4'
5
+ gem 'rails', '~> 6.1.0'
@@ -118,7 +118,7 @@ describe Qti::Models::Base do
118
118
  context 'with explicit package root' do
119
119
  let(:package_root) { File.join('spec', 'fixtures', 'test_qti_2.2') }
120
120
  let(:item_path) { File.join(package_root, 'true-false', 'true-false.xml') }
121
- let(:item) { described_class.from_path!(item_path, package_root) }
121
+ let(:item) { described_class.from_path!(item_path, package_root: package_root) }
122
122
 
123
123
  it 'allows safe .. hrefs' do
124
124
  expect do
@@ -135,7 +135,7 @@ describe Qti::Models::Base do
135
135
 
136
136
  context 'with nil package root' do
137
137
  let(:item_path) { File.join('spec', 'fixtures', 'test_qti_2.2', 'true-false', 'true-false.xml') }
138
- let(:item) { described_class.from_path!(item_path, nil) }
138
+ let(:item) { described_class.from_path!(item_path, package_root: nil) }
139
139
 
140
140
  it 'rejects .. hrefs' do
141
141
  expect do
@@ -8,6 +8,7 @@ describe Qti::V1::Models::QuestionGroup do
8
8
  expect(loaded_class.title).to eq('Group 1 (1/4)')
9
9
  expect(loaded_class.identifier).to eq('i4663897607358cfba8636ed6127b9466')
10
10
  expect(loaded_class.sourcebank_ref).to eq('sourcebank_reference_uuid')
11
+ expect(loaded_class.sourcebank_export_id).to eq('sourcebank_export_id_test')
11
12
  expect(loaded_class.items.count).to eq(4)
12
13
  expect(loaded_class.selection_number).to eq(1)
13
14
  expect(loaded_class.points_per_item).to eq(1)
@@ -84,9 +84,9 @@ describe Qti::V2::Models::AssessmentItem do
84
84
 
85
85
  # it 'removes the passage from the item_body' do
86
86
  # item = test_object.create_assessment_item(item_ref)
87
- # rubocop:disable AsciiComments
87
+ # rubocop:disable Style/AsciiComments
88
88
  # expect(item.item_body).not_to include '¡El equipo de hockey te necesita!'
89
- # rubocop:enable AsciiComments
89
+ # rubocop:enable Style/AsciiComments
90
90
  # end
91
91
  # end
92
92
  end
@@ -87,9 +87,9 @@ describe Qti::V2::Models::AssessmentTest do
87
87
  # 'passages', '0cfd5cf7-2c91-4b35-a57a-9f5d1709f68f.html'
88
88
  # )
89
89
  # stimulus = loaded_class.create_stimulus(stimulus_path)
90
- # rubocop:disable AsciiComments
90
+ # rubocop:disable Style/AsciiComments
91
91
  # expect(stimulus.title).to eq '¡El equipo de hockey te necesita!'
92
- # rubocop:enable AsciiComments
92
+ # rubocop:enable Style/AsciiComments
93
93
  # end
94
94
  # end
95
95
  end
@@ -11,17 +11,17 @@
11
11
  # end
12
12
 
13
13
  # it 'has the title' do
14
- # rubocop:disable AsciiComments
14
+ # rubocop:disable Style/AsciiComments
15
15
  # expect(loaded_class.title).to eq '¡El equipo de hockey te necesita!'
16
- # rubocop:enable AsciiComments
16
+ # rubocop:enable Style/AsciiComments
17
17
  # end
18
18
 
19
19
  # it 'has sanitized item_body' do
20
20
  # expect(loaded_class.body).to include '<div'
21
21
  # expect(loaded_class.body).to include 'Listen to the audio passage.'
22
- # rubocop:disable AsciiComments
22
+ # rubocop:disable Style/AsciiComments
23
23
  # expect(loaded_class.body).to include '¡'
24
- # rubocop:enable AsciiComments
24
+ # rubocop:enable Style/AsciiComments
25
25
  # end
26
26
 
27
27
  # it 'has the identifier used to identify it in manifest file' do
data/spec/lib/qti_spec.rb CHANGED
@@ -40,8 +40,8 @@ describe Qti::Importer do
40
40
 
41
41
  it 'sets the path and package root properly' do
42
42
  item = importer.create_assessment_item(importer.assessment_item_refs.first)
43
- expect(item.path).to eq file_path + '/quiz.xml'
44
- expect(item.package_root).to eq file_path + '/'
43
+ expect(item.path).to eq "#{file_path}/quiz.xml"
44
+ expect(item.package_root).to eq "#{file_path}/"
45
45
  end
46
46
  end
47
47
 
@@ -64,7 +64,7 @@ describe Qti::Importer do
64
64
  ref = importer.assessment_item_refs.first
65
65
  item = importer.create_assessment_item(ref)
66
66
  expect(item.path).to eq ref[:path]
67
- expect(item.package_root).to eq file_path + '/'
67
+ expect(item.package_root).to eq "#{file_path}/"
68
68
  expect(item.manifest).not_to be_nil
69
69
  end
70
70
  end
data/spec/spec_helper.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  require 'byebug'
2
2
 
3
3
  # Limit coverage reporting to one build:
4
- if /^2\.6/ =~ RUBY_VERSION && /rails-6\.0/ =~ ENV['BUNDLE_GEMFILE']
4
+ if /^2\.7/ =~ RUBY_VERSION && /rails-6\.1/ =~ ENV['BUNDLE_GEMFILE']
5
5
  require 'simplecov'
6
6
 
7
7
  SimpleCov.start do
@@ -16,7 +16,7 @@ end
16
16
  $LOAD_PATH.unshift File.expand_path('../lib', __dir__)
17
17
  require 'qti'
18
18
 
19
- Dir['./spec/support/**/*.rb'].each { |f| require f }
19
+ Dir['./spec/support/**/*.rb'].sort.each { |f| require f }
20
20
 
21
21
  RSpec.configure do |config|
22
22
  config.expect_with :rspec do |expectations|
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: qti
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.6.2
4
+ version: 2.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hannah Bottalla
8
8
  - Robinson Rodríguez
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2021-11-19 00:00:00.000000000 Z
12
+ date: 2021-12-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: actionview
@@ -17,40 +17,40 @@ dependencies:
17
17
  requirements:
18
18
  - - ">="
19
19
  - !ruby/object:Gem::Version
20
- version: 5.1.7
20
+ version: '5.2'
21
21
  - - "<"
22
22
  - !ruby/object:Gem::Version
23
- version: '6.1'
23
+ version: '6.2'
24
24
  type: :runtime
25
25
  prerelease: false
26
26
  version_requirements: !ruby/object:Gem::Requirement
27
27
  requirements:
28
28
  - - ">="
29
29
  - !ruby/object:Gem::Version
30
- version: 5.1.7
30
+ version: '5.2'
31
31
  - - "<"
32
32
  - !ruby/object:Gem::Version
33
- version: '6.1'
33
+ version: '6.2'
34
34
  - !ruby/object:Gem::Dependency
35
35
  name: activesupport
36
36
  requirement: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: 5.1.7
40
+ version: '5.2'
41
41
  - - "<"
42
42
  - !ruby/object:Gem::Version
43
- version: '6.1'
43
+ version: '6.2'
44
44
  type: :runtime
45
45
  prerelease: false
46
46
  version_requirements: !ruby/object:Gem::Requirement
47
47
  requirements:
48
48
  - - ">="
49
49
  - !ruby/object:Gem::Version
50
- version: 5.1.7
50
+ version: '5.2'
51
51
  - - "<"
52
52
  - !ruby/object:Gem::Version
53
- version: '6.1'
53
+ version: '6.2'
54
54
  - !ruby/object:Gem::Dependency
55
55
  name: dry-struct
56
56
  requirement: !ruby/object:Gem::Requirement
@@ -141,14 +141,14 @@ dependencies:
141
141
  requirements:
142
142
  - - "~>"
143
143
  - !ruby/object:Gem::Version
144
- version: '1.17'
144
+ version: '2.1'
145
145
  type: :development
146
146
  prerelease: false
147
147
  version_requirements: !ruby/object:Gem::Requirement
148
148
  requirements:
149
149
  - - "~>"
150
150
  - !ruby/object:Gem::Version
151
- version: '1.17'
151
+ version: '2.1'
152
152
  - !ruby/object:Gem::Dependency
153
153
  name: byebug
154
154
  requirement: !ruby/object:Gem::Requirement
@@ -183,14 +183,14 @@ dependencies:
183
183
  requirements:
184
184
  - - "~>"
185
185
  - !ruby/object:Gem::Version
186
- version: '12.3'
186
+ version: '13.0'
187
187
  type: :development
188
188
  prerelease: false
189
189
  version_requirements: !ruby/object:Gem::Requirement
190
190
  requirements:
191
191
  - - "~>"
192
192
  - !ruby/object:Gem::Version
193
- version: '12.3'
193
+ version: '13.0'
194
194
  - !ruby/object:Gem::Dependency
195
195
  name: rspec
196
196
  requirement: !ruby/object:Gem::Requirement
@@ -225,14 +225,28 @@ dependencies:
225
225
  requirements:
226
226
  - - "~>"
227
227
  - !ruby/object:Gem::Version
228
- version: 0.74.0
228
+ version: 1.8.1
229
229
  type: :development
230
230
  prerelease: false
231
231
  version_requirements: !ruby/object:Gem::Requirement
232
232
  requirements:
233
233
  - - "~>"
234
234
  - !ruby/object:Gem::Version
235
- version: 0.74.0
235
+ version: 1.8.1
236
+ - !ruby/object:Gem::Dependency
237
+ name: rubocop-rails
238
+ requirement: !ruby/object:Gem::Requirement
239
+ requirements:
240
+ - - "~>"
241
+ - !ruby/object:Gem::Version
242
+ version: 2.9.1
243
+ type: :development
244
+ prerelease: false
245
+ version_requirements: !ruby/object:Gem::Requirement
246
+ requirements:
247
+ - - "~>"
248
+ - !ruby/object:Gem::Version
249
+ version: 2.9.1
236
250
  - !ruby/object:Gem::Dependency
237
251
  name: simplecov
238
252
  requirement: !ruby/object:Gem::Requirement
@@ -261,7 +275,7 @@ dependencies:
261
275
  - - "~>"
262
276
  - !ruby/object:Gem::Version
263
277
  version: '1.4'
264
- description:
278
+ description:
265
279
  email:
266
280
  - hannah@instructure.com
267
281
  - rrodriguez-bd@instructure.com
@@ -613,9 +627,9 @@ files:
613
627
  - spec/fixtures/with_banks/non_cc_assessments/g9a20cf3af178b54e4792cbe992f65790.xml.qti
614
628
  - spec/fixtures/with_banks/non_cc_assessments/gab22de457404cb5cf022078f1e4da75e.xml.qti
615
629
  - spec/fixtures/with_banks/non_cc_assessments/gf3edf8167be16b3a65a00ca923132b07.xml.qti
616
- - spec/gemfiles/rails-5.1.gemfile
617
630
  - spec/gemfiles/rails-5.2.gemfile
618
631
  - spec/gemfiles/rails-6.0.gemfile
632
+ - spec/gemfiles/rails-6.1.gemfile
619
633
  - spec/lib/qti/assessment_item_exporter_spec.rb
620
634
  - spec/lib/qti/exporter_spec.rb
621
635
  - spec/lib/qti/models/assessment_meta_spec.rb
@@ -670,7 +684,7 @@ homepage: https://github.com/instructure/qti
670
684
  licenses:
671
685
  - MIT
672
686
  metadata: {}
673
- post_install_message:
687
+ post_install_message:
674
688
  rdoc_options: []
675
689
  require_paths:
676
690
  - lib
@@ -678,15 +692,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
678
692
  requirements:
679
693
  - - ">="
680
694
  - !ruby/object:Gem::Version
681
- version: '2.4'
695
+ version: '2.6'
682
696
  required_rubygems_version: !ruby/object:Gem::Requirement
683
697
  requirements:
684
698
  - - ">="
685
699
  - !ruby/object:Gem::Version
686
700
  version: '0'
687
701
  requirements: []
688
- rubygems_version: 3.0.3
689
- signing_key:
702
+ rubygems_version: 3.1.4
703
+ signing_key:
690
704
  specification_version: 4
691
705
  summary: QTI 1.2 and 2.1 import and export models
692
706
  test_files:
@@ -965,9 +979,9 @@ test_files:
965
979
  - spec/fixtures/with_banks/non_cc_assessments/g9a20cf3af178b54e4792cbe992f65790.xml.qti
966
980
  - spec/fixtures/with_banks/non_cc_assessments/gab22de457404cb5cf022078f1e4da75e.xml.qti
967
981
  - spec/fixtures/with_banks/non_cc_assessments/gf3edf8167be16b3a65a00ca923132b07.xml.qti
968
- - spec/gemfiles/rails-5.1.gemfile
969
982
  - spec/gemfiles/rails-5.2.gemfile
970
983
  - spec/gemfiles/rails-6.0.gemfile
984
+ - spec/gemfiles/rails-6.1.gemfile
971
985
  - spec/lib/qti/assessment_item_exporter_spec.rb
972
986
  - spec/lib/qti/exporter_spec.rb
973
987
  - spec/lib/qti/models/assessment_meta_spec.rb