qti 2.20.0 → 2.20.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1c38dab5972627b0bf1cd428bbde63a1363365dab50bf9726f6b8a35aa605a2a
4
- data.tar.gz: b00506a2ada125d8853f42fa7b5d328b68985b9821be063e5371a03f6333ef90
3
+ metadata.gz: 86c46f8f8cc44f5462d95d93455aefd56aae83e8f6291a492459ba9da425c510
4
+ data.tar.gz: 63429e02991279043a3a0380e720fee6bb27b36132cfcb97837a68ddec0dd0cc
5
5
  SHA512:
6
- metadata.gz: a4ac85f4bc7890cf07b860b9ddeb8874298dd18fc04136c3d5432e4e0513ec07fb15971657f08ef120ffa8040c1361d3d48b4a45457cb261415a8e1ce9b49358
7
- data.tar.gz: b2445a01bdeb590a23f2f89a050215b4b19290a436d2d49ea14d1d52a2c6be2b9c486e85095d68153ca5ace4c894d3a1524276d0189ccaae4024fffe2a1c5dad
6
+ metadata.gz: 2f628da6521093b39fa707d8305431e5282f4a5c9bae5f386f8e91b59d56be873f3705844b146a220a97e6ca1d8eb7f7b822e22d37c162499b4e418b2aebe5e3
7
+ data.tar.gz: 232035507f0adfe737d0271c9e2d4200330e0921205c4ae2f5800564d755ed82630ad58955615102e6e3c40392f4270fb0a9167e70f769c29e701b96eb6acf40
@@ -1,5 +1,6 @@
1
1
  module Qti
2
2
  module Models
3
+ # rubocop:disable Metrics/ClassLength
3
4
  class AssessmentMeta < Qti::Models::Base
4
5
  def title
5
6
  sanitize_content!(tag_under_quiz('title'))
@@ -9,6 +10,14 @@ module Qti
9
10
  sanitize_content!(tag_under_quiz('description'))
10
11
  end
11
12
 
13
+ def shuffle_questions
14
+ tag_under_quiz('shuffle_questions')
15
+ end
16
+
17
+ def shuffle_questions?
18
+ string_true?(shuffle_questions)
19
+ end
20
+
12
21
  def shuffle_answers
13
22
  tag_under_quiz('shuffle_answers')
14
23
  end
@@ -17,6 +26,10 @@ module Qti
17
26
  string_true?(shuffle_answers)
18
27
  end
19
28
 
29
+ def calculator_type
30
+ tag_under_quiz('calculator_type')
31
+ end
32
+
20
33
  def hide_results
21
34
  tag_under_quiz('hide_results')
22
35
  end
@@ -25,6 +38,14 @@ module Qti
25
38
  tag_under_quiz('scoring_policy')
26
39
  end
27
40
 
41
+ def cooling_period_seconds_raw
42
+ tag_under_quiz('cooling_period_seconds')
43
+ end
44
+
45
+ def cooling_period_seconds
46
+ cooling_period_seconds_raw&.to_i
47
+ end
48
+
28
49
  def quiz_type
29
50
  tag_under_quiz('quiz_type')
30
51
  end
@@ -168,6 +189,14 @@ module Qti
168
189
  tag_under_quiz('hide_correct_answers_at')
169
190
  end
170
191
 
192
+ def allow_clear_mc_selection
193
+ tag_under_quiz('allow_clear_mc_selection')
194
+ end
195
+
196
+ def allow_clear_mc_selection?
197
+ string_true?(allow_clear_mc_selection)
198
+ end
199
+
171
200
  def require_lockdown_browser
172
201
  tag_under_quiz('require_lockdown_browser')
173
202
  end
@@ -196,6 +225,80 @@ module Qti
196
225
  tag_under_quiz('lockdown_browser_monitor_data')
197
226
  end
198
227
 
228
+ def nq_ip_filters
229
+ @doc.xpath('//xmlns:quiz/xmlns:nq_ip_filter').map do |ip_filter|
230
+ [ip_filter.attributes['from']&.value, ip_filter.attributes['to']&.value]
231
+ end
232
+ end
233
+
234
+ def nq_ip_filters_enabled?
235
+ nq_ip_filters.any?
236
+ end
237
+
238
+ def result_view_restricted
239
+ tag_under_quiz('result_view_restricted')
240
+ end
241
+
242
+ def result_view_restricted?
243
+ string_true?(result_view_restricted)
244
+ end
245
+
246
+ def display_items
247
+ tag_under_quiz('display_items')
248
+ end
249
+
250
+ def display_items?
251
+ string_true?(display_items)
252
+ end
253
+
254
+ def display_item_feedback
255
+ tag_under_quiz('display_item_feedback')
256
+ end
257
+
258
+ def display_item_feedback?
259
+ string_true?(display_item_feedback)
260
+ end
261
+
262
+ def display_item_response
263
+ tag_under_quiz('display_item_response')
264
+ end
265
+
266
+ def display_item_response?
267
+ string_true?(display_item_response)
268
+ end
269
+
270
+ def display_points_awarded
271
+ tag_under_quiz('display_points_awarded')
272
+ end
273
+
274
+ def display_points_awarded?
275
+ string_true?(display_points_awarded)
276
+ end
277
+
278
+ def display_points_possible
279
+ tag_under_quiz('display_points_possible')
280
+ end
281
+
282
+ def display_points_possible?
283
+ string_true?(display_points_possible)
284
+ end
285
+
286
+ def display_item_correct_answer
287
+ tag_under_quiz('display_item_correct_answer')
288
+ end
289
+
290
+ def display_item_correct_answer?
291
+ string_true?(display_item_correct_answer)
292
+ end
293
+
294
+ def display_item_response_correctness
295
+ tag_under_quiz('display_item_response_correctness')
296
+ end
297
+
298
+ def display_item_response_correctness?
299
+ string_true?(display_item_response_correctness)
300
+ end
301
+
199
302
  private
200
303
 
201
304
  def tag_under_quiz(tag)
@@ -209,10 +312,12 @@ module Qti
209
312
  value&.casecmp('true')&.zero? || false
210
313
  end
211
314
  end
315
+ # rubocop:enable Metrics/ClassLength
212
316
 
213
317
  module AssessmentMetaBase
214
- delegate :title, :description,
215
- :shuffle_answers?, :scoring_policy, :points_possible,
318
+ delegate :title, :description, :shuffle_questions?,
319
+ :shuffle_answers?, :calculator_type, :scoring_policy,
320
+ :cooling_period_seconds, :points_possible,
216
321
  :hide_results, :quiz_type, :anonymous_submissions?,
217
322
  :could_be_locked?, :allowed_attempts, :one_question_at_a_time?,
218
323
  :cant_go_back?, :available?, :one_time_results?,
@@ -222,7 +327,11 @@ module Qti
222
327
  :lock_at, :unlock_at, :due_at, :require_lockdown_browser?,
223
328
  :require_lockdown_browser_for_results?,
224
329
  :require_lockdown_browser_monitor?, :show_correct_answers?,
225
- :lockdown_browser_monitor_data,
330
+ :allow_clear_mc_selection?, :lockdown_browser_monitor_data,
331
+ :nq_ip_filters, :nq_ip_filters_enabled?,
332
+ :result_view_restricted?, :display_items?, :display_item_feedback?,
333
+ :display_item_response?, :display_points_awarded?, :display_points_possible?,
334
+ :display_item_correct_answer?, :display_item_response_correctness?,
226
335
  to: :@canvas_meta_data, prefix: :canvas, allow_nil: true
227
336
 
228
337
  alias canvas_instructions canvas_description
data/lib/qti/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Qti
2
- VERSION = '2.20.0'.freeze
2
+ VERSION = '2.20.1'.freeze
3
3
  end
@@ -5,8 +5,11 @@
5
5
  <lock_at>2020-07-10T04:59:59</lock_at>
6
6
  <unlock_at>2020-04-16T05:00:00</unlock_at>
7
7
  <due_at>2020-05-23T04:59:59</due_at>
8
+ <shuffle_questions>true</shuffle_questions>
8
9
  <shuffle_answers>true</shuffle_answers>
10
+ <calculator_type>basic</calculator_type>
9
11
  <scoring_policy>keep_average</scoring_policy>
12
+ <cooling_period_seconds>86400</cooling_period_seconds>
10
13
  <hide_results></hide_results>
11
14
  <quiz_type>assignment</quiz_type>
12
15
  <points_possible/>
@@ -28,8 +31,19 @@
28
31
  <available>false</available>
29
32
  <one_time_results>false</one_time_results>
30
33
  <show_correct_answers_last_attempt>false</show_correct_answers_last_attempt>
34
+ <allow_clear_mc_selection>true</allow_clear_mc_selection>
31
35
  <only_visible_to_overrides>false</only_visible_to_overrides>
32
36
  <module_locked>false</module_locked>
37
+ <nq_ip_filter from="255.255.0.0" to="255.255.0.255"/>
38
+ <nq_ip_filter from="255.255.0.255" to="255.255.255.255"/>
39
+ <result_view_restricted>true</result_view_restricted>
40
+ <display_items>true</display_items>
41
+ <display_item_feedback>true</display_item_feedback>
42
+ <display_item_response>true</display_item_response>
43
+ <display_points_awarded>true</display_points_awarded>
44
+ <display_points_possible>true</display_points_possible>
45
+ <display_item_correct_answer>true</display_item_correct_answer>
46
+ <display_item_response_correctness>true</display_item_response_correctness>
33
47
  <assignment identifier="g390e22b33353b658bb23abbce000414f">
34
48
  <title>asd09sdfaxsdflj</title>
35
49
  <due_at>2020-05-23T04:59:59</due_at>
@@ -20,7 +20,10 @@ context 'Canvas Assessment Meta Data' do
20
20
  expect(assessment.canvas_available?).to eq(available)
21
21
  expect(assessment.canvas_one_time_results?).to eq(one_time_results)
22
22
  expect(assessment.canvas_scoring_policy).to eq(scoring_policy)
23
+ expect(assessment.canvas_cooling_period_seconds).to eq(cooling_period_seconds)
24
+ expect(assessment.canvas_shuffle_questions?).to eq(shuffle_questions)
23
25
  expect(assessment.canvas_shuffle_answers?).to eq(shuffle_answers)
26
+ expect(assessment.canvas_calculator_type).to eq(calculator_type)
24
27
  expect(assessment.canvas_lock_at).to eq(lock_at)
25
28
  expect(assessment.canvas_unlock_at).to eq(unlock_at)
26
29
  expect(assessment.canvas_due_at).to eq(due_at)
@@ -30,10 +33,21 @@ context 'Canvas Assessment Meta Data' do
30
33
  expect(assessment.canvas_show_correct_answers?).to eq(show_answers)
31
34
  expect(assessment.canvas_show_correct_answers_at).to eq(show_answers_at)
32
35
  expect(assessment.canvas_hide_correct_answers_at).to eq(hide_answers_at)
36
+ expect(assessment.canvas_allow_clear_mc_selection?).to eq(allow_clear_mc_selection)
33
37
  expect(assessment.canvas_require_lockdown_browser?).to eq(rlb)
34
38
  expect(assessment.canvas_require_lockdown_browser_for_results?).to eq(rlb_results)
35
39
  expect(assessment.canvas_require_lockdown_browser_monitor?).to eq(rlb_monitor)
36
40
  expect(assessment.canvas_lockdown_browser_monitor_data).to eq(lb_monitor_data)
41
+ expect(assessment.canvas_nq_ip_filters_enabled?).to eq(nq_ip_filters_enabled)
42
+ expect(assessment.canvas_nq_ip_filters).to eq(nq_ip_filters)
43
+ expect(assessment.canvas_result_view_restricted?).to eq(result_view_restricted)
44
+ expect(assessment.canvas_display_items?).to eq(display_items)
45
+ expect(assessment.canvas_display_item_response?).to eq(display_item_response)
46
+ expect(assessment.canvas_display_item_feedback?).to eq(display_item_feedback)
47
+ expect(assessment.canvas_display_points_awarded?).to eq(display_points_awarded)
48
+ expect(assessment.canvas_display_points_possible?).to eq(display_points_possible)
49
+ expect(assessment.canvas_display_item_correct_answer?).to eq(display_item_correct_answer)
50
+ expect(assessment.canvas_display_item_response_correctness?).to eq(display_item_response_correctness)
37
51
  end
38
52
  end
39
53
 
@@ -53,7 +67,10 @@ context 'Canvas Assessment Meta Data' do
53
67
  let(:available) { true }
54
68
  let(:one_time_results) { false }
55
69
  let(:scoring_policy) { 'keep_highest' }
70
+ let(:cooling_period_seconds) { nil }
71
+ let(:shuffle_questions) { false }
56
72
  let(:shuffle_answers) { false }
73
+ let(:calculator_type) { nil }
57
74
  let(:lock_at) { nil }
58
75
  let(:unlock_at) { nil }
59
76
  let(:due_at) { nil }
@@ -63,10 +80,21 @@ context 'Canvas Assessment Meta Data' do
63
80
  let(:show_answers) { true }
64
81
  let(:show_answers_at) { nil }
65
82
  let(:hide_answers_at) { nil }
83
+ let(:allow_clear_mc_selection) { false }
66
84
  let(:rlb) { false }
67
85
  let(:rlb_results) { false }
68
86
  let(:rlb_monitor) { false }
69
87
  let(:lb_monitor_data) { nil }
88
+ let(:nq_ip_filters_enabled) { false }
89
+ let(:nq_ip_filters) { [] }
90
+ let(:result_view_restricted) { false }
91
+ let(:display_items) { false }
92
+ let(:display_item_response) { false }
93
+ let(:display_item_feedback) { false }
94
+ let(:display_points_awarded) { false }
95
+ let(:display_points_possible) { false }
96
+ let(:display_item_correct_answer) { false }
97
+ let(:display_item_response_correctness) { false }
70
98
 
71
99
  include_examples('loads canvas meta data')
72
100
  end
@@ -87,7 +115,10 @@ context 'Canvas Assessment Meta Data' do
87
115
  let(:available) { false }
88
116
  let(:one_time_results) { false }
89
117
  let(:scoring_policy) { 'keep_average' }
118
+ let(:shuffle_questions) { true }
119
+ let(:cooling_period_seconds) { 86_400 }
90
120
  let(:shuffle_answers) { true }
121
+ let(:calculator_type) { 'basic' }
91
122
  let(:lock_at) { '2020-07-10T04:59:59' }
92
123
  let(:unlock_at) { '2020-04-16T05:00:00' }
93
124
  let(:due_at) { '2020-05-23T04:59:59' }
@@ -97,10 +128,26 @@ context 'Canvas Assessment Meta Data' do
97
128
  let(:show_answers) { true }
98
129
  let(:show_answers_at) { '2041-02-17 06:00:00 UTC' }
99
130
  let(:hide_answers_at) { '2042-12-26 06:00:00 UTC' }
131
+ let(:allow_clear_mc_selection) { true }
100
132
  let(:rlb) { false }
101
133
  let(:rlb_results) { false }
102
134
  let(:rlb_monitor) { false }
103
135
  let(:lb_monitor_data) { nil }
136
+ let(:nq_ip_filters_enabled) { true }
137
+ let(:nq_ip_filters) do
138
+ [
139
+ ['255.255.0.0', '255.255.0.255'],
140
+ ['255.255.0.255', '255.255.255.255']
141
+ ]
142
+ end
143
+ let(:result_view_restricted) { true }
144
+ let(:display_items) { true }
145
+ let(:display_item_response) { true }
146
+ let(:display_item_feedback) { true }
147
+ let(:display_points_awarded) { true }
148
+ let(:display_points_possible) { true }
149
+ let(:display_item_correct_answer) { true }
150
+ let(:display_item_response_correctness) { true }
104
151
 
105
152
  include_examples('loads canvas meta data')
106
153
  end
@@ -121,7 +168,10 @@ context 'Canvas Assessment Meta Data' do
121
168
  let(:available) { false }
122
169
  let(:one_time_results) { false }
123
170
  let(:scoring_policy) { nil }
171
+ let(:cooling_period_seconds) { nil }
172
+ let(:shuffle_questions) { false }
124
173
  let(:shuffle_answers) { false }
174
+ let(:calculator_type) { nil }
125
175
  let(:lock_at) { nil }
126
176
  let(:unlock_at) { nil }
127
177
  let(:due_at) { nil }
@@ -131,10 +181,21 @@ context 'Canvas Assessment Meta Data' do
131
181
  let(:show_answers) { false }
132
182
  let(:show_answers_at) { nil }
133
183
  let(:hide_answers_at) { nil }
184
+ let(:allow_clear_mc_selection) { false }
134
185
  let(:rlb) { false }
135
186
  let(:rlb_results) { false }
136
187
  let(:rlb_monitor) { false }
137
188
  let(:lb_monitor_data) { nil }
189
+ let(:nq_ip_filters_enabled) { false }
190
+ let(:nq_ip_filters) { [] }
191
+ let(:result_view_restricted) { false }
192
+ let(:display_items) { false }
193
+ let(:display_item_response) { false }
194
+ let(:display_item_feedback) { false }
195
+ let(:display_points_awarded) { false }
196
+ let(:display_points_possible) { false }
197
+ let(:display_item_correct_answer) { false }
198
+ let(:display_item_response_correctness) { false }
138
199
 
139
200
  include_examples('loads canvas meta data')
140
201
  end
@@ -155,7 +216,10 @@ context 'Canvas Assessment Meta Data' do
155
216
  let(:available) { true }
156
217
  let(:one_time_results) { false }
157
218
  let(:scoring_policy) { 'keep_highest' }
219
+ let(:cooling_period_seconds) { nil }
220
+ let(:shuffle_questions) { false }
158
221
  let(:shuffle_answers) { false }
222
+ let(:calculator_type) { nil }
159
223
  let(:lock_at) { nil }
160
224
  let(:unlock_at) { nil }
161
225
  let(:due_at) { nil }
@@ -165,10 +229,21 @@ context 'Canvas Assessment Meta Data' do
165
229
  let(:show_answers) { true }
166
230
  let(:show_answers_at) { nil }
167
231
  let(:hide_answers_at) { nil }
232
+ let(:allow_clear_mc_selection) { false }
168
233
  let(:rlb) { false }
169
234
  let(:rlb_results) { false }
170
235
  let(:rlb_monitor) { false }
171
236
  let(:lb_monitor_data) { nil }
237
+ let(:nq_ip_filters_enabled) { false }
238
+ let(:nq_ip_filters) { [] }
239
+ let(:result_view_restricted) { false }
240
+ let(:display_items) { false }
241
+ let(:display_item_response) { false }
242
+ let(:display_item_feedback) { false }
243
+ let(:display_points_awarded) { false }
244
+ let(:display_points_possible) { false }
245
+ let(:display_item_correct_answer) { false }
246
+ let(:display_item_response_correctness) { false }
172
247
 
173
248
  include_examples('loads canvas meta data')
174
249
  end
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: 2.20.0
4
+ version: 2.20.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adrian Diaz
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2023-08-03 00:00:00.000000000 Z
15
+ date: 2023-08-11 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: actionview