qti 2.20.0 → 2.20.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: 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