sakai-info 0.5.5 → 0.5.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +10 -1
- data/README.md +2 -2
- data/lib/sakai-info/cli/lookup.rb +8 -1
- data/lib/sakai-info/quiz.rb +269 -13
- data/lib/sakai-info/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9c1c362f4848aa264774fd24bd81df00291b3065
|
4
|
+
data.tar.gz: 9cf242a834d446eb1ed52762d75c9fa57239ad31
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2cf906ddf0b795735a9cb283666b101843427b89ecad5d7b0e4d3b1c4993e72a553627d85a8ce337fe9b30846cd3c41344fa2d65b37d9fcc7874c559c0118f20
|
7
|
+
data.tar.gz: 28a0fc85c2a4cc78483ed8c259663aab06e4b53ae48e439c5e3b43dd553bcecfa4b7dc55fd5675d7d638cc4c8fe916e4abba31dc5b2d58e763cd55ae9a04256e
|
data/CHANGELOG.md
CHANGED
@@ -1,8 +1,17 @@
|
|
1
1
|
# sakai-info Change History #
|
2
2
|
|
3
|
+
### 0.5.6 ###
|
4
|
+
|
5
|
+
*Released 2014-12-11*
|
6
|
+
|
7
|
+
* Added submitted date and elapsed time to quiz attempt serialization
|
8
|
+
* Added additional shortcut names for assignment and assignment-submission
|
9
|
+
* New object types: pending-quiz-metadata, published-quiz-metadata
|
10
|
+
* New object types: pending-quiz-authorization, published-quiz-authorization
|
11
|
+
|
3
12
|
### 0.5.5 ###
|
4
13
|
|
5
|
-
*Released
|
14
|
+
*Released 2014-07-08*
|
6
15
|
|
7
16
|
* New object types: calendar and calendar-event
|
8
17
|
* Added Site.find_all
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# sakai-info #
|
2
2
|
|
3
|
-
last updated:
|
3
|
+
last updated: 2014-12-11
|
4
4
|
author: David Adams (daveadams@gmail.com)
|
5
5
|
github url: https://github.com/daveadams/sakai-info
|
6
6
|
|
@@ -24,7 +24,7 @@ Use `rake` to test and build the gem:
|
|
24
24
|
$ rake gem:build
|
25
25
|
|
26
26
|
The resulting gem will be saved to the working directory as
|
27
|
-
`sakai-info-0.5.
|
27
|
+
`sakai-info-0.5.6.gem`.
|
28
28
|
|
29
29
|
Cleanup built gems using:
|
30
30
|
|
@@ -2,7 +2,7 @@
|
|
2
2
|
# class for handling the default command line mode
|
3
3
|
#
|
4
4
|
# Created 2012-05-23 daveadams@gmail.com
|
5
|
-
# Last updated
|
5
|
+
# Last updated 2014-09-16 daveadams@gmail.com
|
6
6
|
#
|
7
7
|
# https://github.com/daveadams/sakai-info
|
8
8
|
#
|
@@ -99,6 +99,11 @@ module SakaiInfo
|
|
99
99
|
"published-quiz-access-control" => PublishedQuizAccessControl,
|
100
100
|
"nqac" => PendingQuizAccessControl,
|
101
101
|
"pending-quiz-access-control" => PendingQuizAccessControl,
|
102
|
+
"pqm" => PublishedQuizMetadata,
|
103
|
+
"published-quiz-metadata" => PublishedQuizMetadata,
|
104
|
+
"nqm" => PendingQuizMetadata,
|
105
|
+
"pending-quiz-metadata" => PendingQuizMetadata,
|
106
|
+
"qauth" => QuizAuthorization,
|
102
107
|
"qa" => QuizAttempt,
|
103
108
|
"quiz-attempt" => QuizAttempt,
|
104
109
|
"qai" => QuizAttemptItem,
|
@@ -109,9 +114,11 @@ module SakaiInfo
|
|
109
114
|
"qpool" => QuestionPool,
|
110
115
|
"question-pool" => QuestionPool,
|
111
116
|
"a" => Assignment,
|
117
|
+
"asn" => Assignment,
|
112
118
|
"assignment" => Assignment,
|
113
119
|
"as" => AssignmentSubmission,
|
114
120
|
"asub" => AssignmentSubmission,
|
121
|
+
"asnsub" => AssignmentSubmission,
|
115
122
|
"assignment-submission" => AssignmentSubmission,
|
116
123
|
"forum" => Forum,
|
117
124
|
"ft" => ForumThread,
|
data/lib/sakai-info/quiz.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
# SakaiInfo::Quiz library
|
3
3
|
#
|
4
4
|
# Created 2012-02-17 daveadams@gmail.com
|
5
|
-
# Last updated 2014-
|
5
|
+
# Last updated 2014-12-11 daveadams@gmail.com
|
6
6
|
#
|
7
7
|
# https://github.com/daveadams/sakai-info
|
8
8
|
#
|
@@ -132,6 +132,14 @@ module SakaiInfo
|
|
132
132
|
@access_control ||= self.access_control_class.find(self.id)
|
133
133
|
end
|
134
134
|
|
135
|
+
def metadata
|
136
|
+
@metadata ||= self.metadata_class.find_by_quiz_id(self.id)
|
137
|
+
end
|
138
|
+
|
139
|
+
def authorizations
|
140
|
+
@authorizations ||= self.authorization_class.find_by_quiz_id(self.id)
|
141
|
+
end
|
142
|
+
|
135
143
|
def default_serialization
|
136
144
|
result = {
|
137
145
|
"id" => self.id,
|
@@ -195,6 +203,22 @@ module SakaiInfo
|
|
195
203
|
}
|
196
204
|
end
|
197
205
|
|
206
|
+
def metadata_serialization
|
207
|
+
{
|
208
|
+
"metadata" => self.metadata.collect { |m| [m.key, m.value] }.to_h
|
209
|
+
}
|
210
|
+
end
|
211
|
+
|
212
|
+
def authorizations_serialization
|
213
|
+
{
|
214
|
+
"authorizations" => self.authorizations.collect { |a| a.serialize(:quiz_summary) }
|
215
|
+
}
|
216
|
+
end
|
217
|
+
|
218
|
+
def auths_serialization
|
219
|
+
self.authorizations_serialization
|
220
|
+
end
|
221
|
+
|
198
222
|
def self.all_serializations
|
199
223
|
[
|
200
224
|
:default,
|
@@ -260,6 +284,14 @@ module SakaiInfo
|
|
260
284
|
def access_control_class
|
261
285
|
PendingQuizAccessControl
|
262
286
|
end
|
287
|
+
|
288
|
+
def metadata_class
|
289
|
+
PendingQuizMetadata
|
290
|
+
end
|
291
|
+
|
292
|
+
def authorization_class
|
293
|
+
PendingQuizAuthorization
|
294
|
+
end
|
263
295
|
end
|
264
296
|
|
265
297
|
class PublishedQuiz < Quiz
|
@@ -324,6 +356,14 @@ module SakaiInfo
|
|
324
356
|
PublishedQuizAccessControl
|
325
357
|
end
|
326
358
|
|
359
|
+
def metadata_class
|
360
|
+
PublishedQuizMetadata
|
361
|
+
end
|
362
|
+
|
363
|
+
def authorization_class
|
364
|
+
PublishedQuizAuthorization
|
365
|
+
end
|
366
|
+
|
327
367
|
def attempt_count
|
328
368
|
@attempt_count ||= QuizAttempt.count_by_quiz_id(self.id)
|
329
369
|
end
|
@@ -728,18 +768,8 @@ module SakaiInfo
|
|
728
768
|
end
|
729
769
|
end
|
730
770
|
|
731
|
-
# class QuizItemAttachment < SakaiObject
|
732
|
-
# end
|
733
|
-
|
734
|
-
# class PendingQuizItemAttachment < QuizItemAttachment
|
735
|
-
# end
|
736
|
-
|
737
|
-
# class PublishedQuizItemAttachment < QuizItemAttachment
|
738
|
-
# end
|
739
|
-
|
740
771
|
class QuizAttempt < SakaiObject
|
741
|
-
attr_reader :dbrow, :
|
742
|
-
attr_reader :time_elapsed, :comments, :user_id, :quiz_id
|
772
|
+
attr_reader :dbrow, :total_auto_score, :status, :time_elapsed, :comments, :user_id, :quiz_id
|
743
773
|
|
744
774
|
def self.clear_cache
|
745
775
|
@@cache = {}
|
@@ -755,7 +785,7 @@ module SakaiInfo
|
|
755
785
|
@quiz_id = dbrow[:publishedassessmentid]
|
756
786
|
@total_auto_score = dbrow[:totalautoscore]
|
757
787
|
@status = dbrow[:status]
|
758
|
-
@attempted_at = dbrow[:
|
788
|
+
@attempted_at = dbrow[:attemptdate]
|
759
789
|
@time_elapsed = dbrow[:timeelapsed]
|
760
790
|
@is_auto_submitted = dbrow[:is_auto_submitted]
|
761
791
|
@is_late = dbrow[:islate]
|
@@ -821,6 +851,22 @@ module SakaiInfo
|
|
821
851
|
@is_late == 1
|
822
852
|
end
|
823
853
|
|
854
|
+
def attempted_at
|
855
|
+
if @attempted_at.nil?
|
856
|
+
nil
|
857
|
+
else
|
858
|
+
@attempted_at.strftime("%Y-%m-%d %H:%M:%S")
|
859
|
+
end
|
860
|
+
end
|
861
|
+
|
862
|
+
def submitted_at
|
863
|
+
if @submitted_at.nil?
|
864
|
+
nil
|
865
|
+
else
|
866
|
+
@submitted_at.strftime("%Y-%m-%d %H:%M:%S")
|
867
|
+
end
|
868
|
+
end
|
869
|
+
|
824
870
|
# status definitions from samigo-api/src/java/org/sakaiproject/tool/assessment/data/ifc/grading/AssessmentGradingIfc.java
|
825
871
|
ATTEMPT_STATUS = {
|
826
872
|
"0" => "unsubmitted",
|
@@ -842,7 +888,9 @@ module SakaiInfo
|
|
842
888
|
"user" => self.user.serialize(:summary),
|
843
889
|
"quiz" => self.quiz.serialize(:summary),
|
844
890
|
"item_count" => self.item_count,
|
891
|
+
"attempted_at" => self.attempted_at,
|
845
892
|
"submitted_at" => self.submitted_at,
|
893
|
+
"time_elapsed" => self.time_elapsed,
|
846
894
|
"is_auto_submitted" => self.auto_submitted?,
|
847
895
|
"is_late" => self.late?,
|
848
896
|
"status" => self.status,
|
@@ -1301,4 +1349,212 @@ module SakaiInfo
|
|
1301
1349
|
@quiz ||= PublishedQuiz.find(self.id)
|
1302
1350
|
end
|
1303
1351
|
end
|
1352
|
+
|
1353
|
+
# metadata
|
1354
|
+
class QuizMetadata < SakaiObject
|
1355
|
+
attr_reader :id, :dbrow, :key, :value
|
1356
|
+
|
1357
|
+
def initialize(dbrow)
|
1358
|
+
@dbrow = dbrow
|
1359
|
+
@id = dbrow[:assessmentmetadataid]
|
1360
|
+
@quiz_id = dbrow[:assessmentid]
|
1361
|
+
@key = dbrow[:label]
|
1362
|
+
@value = dbrow[:entry]
|
1363
|
+
end
|
1364
|
+
|
1365
|
+
def default_serialization
|
1366
|
+
{
|
1367
|
+
"id" => self.id,
|
1368
|
+
"quiz" => self.quiz.serialize(:summary),
|
1369
|
+
"key" => self.key,
|
1370
|
+
"value" => self.value,
|
1371
|
+
}
|
1372
|
+
end
|
1373
|
+
end
|
1374
|
+
|
1375
|
+
class PendingQuizMetadata < QuizMetadata
|
1376
|
+
def self.clear_cache
|
1377
|
+
@@cache = {}
|
1378
|
+
end
|
1379
|
+
clear_cache
|
1380
|
+
|
1381
|
+
def self.find(id)
|
1382
|
+
id = id.to_s
|
1383
|
+
if @@cache[id].nil?
|
1384
|
+
row = DB.connect[:sam_assessmetadata_t].where(:assessmentmetadataid => id.to_i).first
|
1385
|
+
if row.nil?
|
1386
|
+
raise ObjectNotFoundException.new(PendingQuizMetadata, id)
|
1387
|
+
end
|
1388
|
+
|
1389
|
+
@@cache[id] = PendingQuizMetadata.new(row)
|
1390
|
+
end
|
1391
|
+
@@cache[id]
|
1392
|
+
end
|
1393
|
+
|
1394
|
+
def quiz
|
1395
|
+
@quiz ||= PendingQuiz.find(@quiz_id)
|
1396
|
+
end
|
1397
|
+
|
1398
|
+
def self.query_by_quiz_id(quiz_id)
|
1399
|
+
DB.connect[:sam_assessmetadata_t].where(:assessmentid => quiz_id)
|
1400
|
+
end
|
1401
|
+
|
1402
|
+
def self.count_by_quiz_id(quiz_id)
|
1403
|
+
PendingQuizMetadata.query_by_quiz_id(quiz_id).count
|
1404
|
+
end
|
1405
|
+
|
1406
|
+
def self.find_by_quiz_id(quiz_id)
|
1407
|
+
PendingQuizMetadata.query_by_quiz_id(quiz_id).
|
1408
|
+
all.collect { |row| PendingQuizMetadata.new(row) }
|
1409
|
+
end
|
1410
|
+
end
|
1411
|
+
|
1412
|
+
class PublishedQuizMetadata < QuizMetadata
|
1413
|
+
def self.clear_cache
|
1414
|
+
@@cache = {}
|
1415
|
+
end
|
1416
|
+
clear_cache
|
1417
|
+
|
1418
|
+
def self.find(id)
|
1419
|
+
id = id.to_s
|
1420
|
+
if @@cache[id].nil?
|
1421
|
+
row = DB.connect[:sam_publishedmetadata_t].where(:assessmentmetadataid => id.to_i).first
|
1422
|
+
if row.nil?
|
1423
|
+
raise ObjectNotFoundException.new(PublishedQuizMetadata, id)
|
1424
|
+
end
|
1425
|
+
|
1426
|
+
@@cache[id] = PublishedQuizMetadata.new(row)
|
1427
|
+
end
|
1428
|
+
@@cache[id]
|
1429
|
+
end
|
1430
|
+
|
1431
|
+
def quiz
|
1432
|
+
@quiz ||= PublishedQuiz.find(@quiz_id)
|
1433
|
+
end
|
1434
|
+
|
1435
|
+
def self.query_by_quiz_id(quiz_id)
|
1436
|
+
DB.connect[:sam_publishedmetadata_t].where(:assessmentid => quiz_id)
|
1437
|
+
end
|
1438
|
+
|
1439
|
+
def self.count_by_quiz_id(quiz_id)
|
1440
|
+
PublishedQuizMetadata.query_by_quiz_id(quiz_id).count
|
1441
|
+
end
|
1442
|
+
|
1443
|
+
def self.find_by_quiz_id(quiz_id)
|
1444
|
+
PublishedQuizMetadata.query_by_quiz_id(quiz_id).
|
1445
|
+
all.collect { |row| PublishedQuizMetadata.new(row) }
|
1446
|
+
end
|
1447
|
+
end
|
1448
|
+
|
1449
|
+
# authorization
|
1450
|
+
class QuizAuthorization < SakaiObject
|
1451
|
+
attr_reader :id, :dbrow, :name, :starts_at, :ends_at
|
1452
|
+
|
1453
|
+
include ModProps
|
1454
|
+
created_by_key :lastmodifiedby
|
1455
|
+
created_at_key :lastmodifieddate
|
1456
|
+
modified_by_key :lastmodifiedby
|
1457
|
+
modified_at_key :lastmodifieddate
|
1458
|
+
|
1459
|
+
def initialize(dbrow)
|
1460
|
+
@dbrow = dbrow
|
1461
|
+
@id = dbrow[:id]
|
1462
|
+
@agent_id = dbrow[:agentid]
|
1463
|
+
@name = dbrow[:functionid]
|
1464
|
+
@quiz_id = dbrow[:qualifierid]
|
1465
|
+
@starts_at = dbrow[:effectivedate]
|
1466
|
+
@ends_at = dbrow[:expirationdate]
|
1467
|
+
end
|
1468
|
+
|
1469
|
+
def default_serialization
|
1470
|
+
{
|
1471
|
+
"id" => self.id,
|
1472
|
+
"quiz" => self.quiz.serialize(:summary),
|
1473
|
+
"name" => self.name,
|
1474
|
+
"agent" => @agent_id,
|
1475
|
+
}
|
1476
|
+
end
|
1477
|
+
|
1478
|
+
def quiz_summary_serialization
|
1479
|
+
{
|
1480
|
+
"name" => self.name,
|
1481
|
+
"agent" => @agent_id,
|
1482
|
+
}
|
1483
|
+
end
|
1484
|
+
end
|
1485
|
+
|
1486
|
+
class PendingQuizAuthorization < QuizAuthorization
|
1487
|
+
def self.clear_cache
|
1488
|
+
@@cache = {}
|
1489
|
+
end
|
1490
|
+
clear_cache
|
1491
|
+
|
1492
|
+
def self.find(id)
|
1493
|
+
id = id.to_s
|
1494
|
+
if @@cache[id].nil?
|
1495
|
+
row = DB.connect[:sam_authzdata_t].where(:id => id.to_i).first
|
1496
|
+
if row.nil?
|
1497
|
+
raise ObjectNotFoundException.new(PendingQuizAuthorization, id)
|
1498
|
+
end
|
1499
|
+
|
1500
|
+
@@cache[id] = PendingQuizAuthorization.new(row)
|
1501
|
+
end
|
1502
|
+
@@cache[id]
|
1503
|
+
end
|
1504
|
+
|
1505
|
+
def quiz
|
1506
|
+
@quiz ||= PendingQuiz.find(@quiz_id)
|
1507
|
+
end
|
1508
|
+
|
1509
|
+
def self.query_by_quiz_id(quiz_id)
|
1510
|
+
DB.connect[:sam_authzdata_t].where(:qualifierid => quiz_id).exclude(Sequel.like(:functionid, "%_PUBLISHED_ASSESSMENT%"))
|
1511
|
+
end
|
1512
|
+
|
1513
|
+
def self.count_by_quiz_id(quiz_id)
|
1514
|
+
PendingQuizAuthorization.query_by_quiz_id(quiz_id).count
|
1515
|
+
end
|
1516
|
+
|
1517
|
+
def self.find_by_quiz_id(quiz_id)
|
1518
|
+
PendingQuizAuthorization.query_by_quiz_id(quiz_id).
|
1519
|
+
all.collect { |row| PendingQuizAuthorization.new(row) }
|
1520
|
+
end
|
1521
|
+
end
|
1522
|
+
|
1523
|
+
class PublishedQuizAuthorization < QuizAuthorization
|
1524
|
+
def self.clear_cache
|
1525
|
+
@@cache = {}
|
1526
|
+
end
|
1527
|
+
clear_cache
|
1528
|
+
|
1529
|
+
def self.find(id)
|
1530
|
+
id = id.to_s
|
1531
|
+
if @@cache[id].nil?
|
1532
|
+
row = DB.connect[:sam_authzdata_t].where(:id => id.to_i).first
|
1533
|
+
if row.nil?
|
1534
|
+
raise ObjectNotFoundException.new(PublishedQuizAuthorization, id)
|
1535
|
+
end
|
1536
|
+
|
1537
|
+
@@cache[id] = PublishedQuizAuthorization.new(row)
|
1538
|
+
end
|
1539
|
+
@@cache[id]
|
1540
|
+
end
|
1541
|
+
|
1542
|
+
def quiz
|
1543
|
+
@quiz ||= PublishedQuiz.find(@quiz_id)
|
1544
|
+
end
|
1545
|
+
|
1546
|
+
def self.query_by_quiz_id(quiz_id)
|
1547
|
+
DB.connect[:sam_authzdata_t].where(:qualifierid => quiz_id).where(Sequel.like(:functionid, "%_PUBLISHED_ASSESSMENT%"))
|
1548
|
+
end
|
1549
|
+
|
1550
|
+
def self.count_by_quiz_id(quiz_id)
|
1551
|
+
PublishedQuizAuthorization.query_by_quiz_id(quiz_id).count
|
1552
|
+
end
|
1553
|
+
|
1554
|
+
def self.find_by_quiz_id(quiz_id)
|
1555
|
+
PublishedQuizAuthorization.query_by_quiz_id(quiz_id).
|
1556
|
+
all.collect { |row| PublishedQuizAuthorization.new(row) }
|
1557
|
+
end
|
1558
|
+
end
|
1559
|
+
|
1304
1560
|
end
|
data/lib/sakai-info/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sakai-info
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Adams
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-12-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sequel
|