sakai-info 0.4.4 → 0.4.5
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.
- data/CHANGELOG.md +8 -0
- data/README.md +2 -2
- data/ROADMAP.md +5 -8
- data/lib/sakai-info/authz.rb +174 -96
- data/lib/sakai-info/cli.rb +4 -1
- data/lib/sakai-info/cli/help.rb +42 -14
- data/lib/sakai-info/content.rb +6 -2
- data/lib/sakai-info/site.rb +32 -6
- data/lib/sakai-info/version.rb +1 -1
- metadata +2 -2
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
# sakai-info Change History #
|
2
2
|
|
3
|
+
### 0.4.5 ###
|
4
|
+
|
5
|
+
*Released 2012-05-14*
|
6
|
+
|
7
|
+
* CLI support for authz roles, realms, and functions
|
8
|
+
* Bugfix: fix syntax error using ContentCollection.find! on missing collections
|
9
|
+
* Bugfix: gracefully handle missing AnnouncementChannel for Site serializations
|
10
|
+
|
3
11
|
### 0.4.4 ###
|
4
12
|
|
5
13
|
*Released 2012-05-12*
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# sakai-info #
|
2
2
|
|
3
|
-
last updated: 2012-05-
|
3
|
+
last updated: 2012-05-14
|
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.4.
|
27
|
+
`sakai-info-0.4.5.gem`.
|
28
28
|
|
29
29
|
Cleanup built gems using:
|
30
30
|
|
data/ROADMAP.md
CHANGED
@@ -1,23 +1,20 @@
|
|
1
1
|
# sakai-info Roadmap #
|
2
2
|
|
3
|
-
*Last updated 2012-05-
|
3
|
+
*Last updated 2012-05-14*
|
4
4
|
|
5
|
-
### 0.
|
6
|
-
|
7
|
-
* CLI access to authz (realms, roles, functions)
|
8
|
-
|
9
|
-
### 0.5.0 ###
|
5
|
+
### 0.5.x ###
|
10
6
|
|
11
7
|
* Sqlite test infrastructure for a few basic objects
|
12
8
|
* Deeper query functionality and field specification
|
13
9
|
* Simple web query interface - HTML, JSON, and YAML
|
10
|
+
* Global cache instead of per-class
|
14
11
|
|
15
|
-
### 0.6.
|
12
|
+
### 0.6.x ###
|
16
13
|
|
17
14
|
* Test fixtures and basic unit tests for all represented objects
|
18
15
|
* RDoc coverage for every class
|
19
16
|
|
20
|
-
### 0.7.
|
17
|
+
### 0.7.x ###
|
21
18
|
|
22
19
|
* OSP support
|
23
20
|
|
data/lib/sakai-info/authz.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
# SakaiInfo::Authz library
|
3
3
|
#
|
4
4
|
# Created 2012-02-17 daveadams@gmail.com
|
5
|
-
# Last updated 2012-05-
|
5
|
+
# Last updated 2012-05-14 daveadams@gmail.com
|
6
6
|
#
|
7
7
|
# https://github.com/daveadams/sakai-info
|
8
8
|
#
|
@@ -18,9 +18,11 @@ module SakaiInfo
|
|
18
18
|
end
|
19
19
|
clear_cache
|
20
20
|
|
21
|
-
def initialize(
|
22
|
-
@
|
23
|
-
|
21
|
+
def initialize(dbrow)
|
22
|
+
@dbrow = dbrow
|
23
|
+
|
24
|
+
@id = @dbrow[:role_key].to_i
|
25
|
+
@name = @dbrow[:role_name]
|
24
26
|
end
|
25
27
|
|
26
28
|
def to_s
|
@@ -30,13 +32,12 @@ module SakaiInfo
|
|
30
32
|
def self.find_by_id(id)
|
31
33
|
id = id.to_s
|
32
34
|
if @@cache[id].nil?
|
33
|
-
row = DB.connect.
|
34
|
-
"where role_key = ?", id.to_i).first
|
35
|
+
row = DB.connect[:sakai_realm_role].where(:role_key => id.to_i).first
|
35
36
|
if row.nil?
|
36
37
|
raise ObjectNotFoundException.new(AuthzRole, id)
|
37
38
|
end
|
38
|
-
@@cache[id] = AuthzRole.new(
|
39
|
-
@@cache[name] = @@cache[id]
|
39
|
+
@@cache[id] = AuthzRole.new(row)
|
40
|
+
@@cache[@@cache[id].name] = @@cache[id]
|
40
41
|
end
|
41
42
|
@@cache[id]
|
42
43
|
end
|
@@ -46,14 +47,12 @@ module SakaiInfo
|
|
46
47
|
raise ObjectNotFoundException.new(AuthzRole, "")
|
47
48
|
end
|
48
49
|
if @@cache[name].nil?
|
49
|
-
row = DB.connect.
|
50
|
-
"where role_name = ?", name).first
|
50
|
+
row = DB.connect[:sakai_realm_role].where(:role_name => name).first
|
51
51
|
if row.nil?
|
52
52
|
raise ObjectNotFoundException.new(AuthzRole, name)
|
53
53
|
end
|
54
|
-
|
55
|
-
@@cache[name] =
|
56
|
-
@@cache[id] = @@cache[name]
|
54
|
+
@@cache[name] = AuthzRole.new(row)
|
55
|
+
@@cache[@@cache[name].id] = @@cache[name]
|
57
56
|
end
|
58
57
|
@@cache[name]
|
59
58
|
end
|
@@ -73,18 +72,26 @@ module SakaiInfo
|
|
73
72
|
role
|
74
73
|
end
|
75
74
|
|
75
|
+
def self.query_by_realm_id_and_function_id(realm_id, function_id)
|
76
|
+
DB.connect[:sakai_realm_role].
|
77
|
+
where(:role_key => DB.connect[:sakai_realm_rl_fn].select(:role_key).
|
78
|
+
where(:realm_key => realm_id, :function_key => function_id))
|
79
|
+
end
|
80
|
+
|
81
|
+
def self.count_by_realm_id_and_function_id(realm_id, function_id)
|
82
|
+
AuthzRole.query_by_realm_id_and_function_id(realm_id, function_id).count
|
83
|
+
end
|
84
|
+
|
76
85
|
def self.find_by_realm_id_and_function_id(realm_id, function_id)
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
end
|
87
|
-
roles
|
86
|
+
AuthzRole.query_by_realm_id_and_function_id(realm_id, function_id).
|
87
|
+
order(:role_name).all.collect { |row| AuthzRole.new(row) }
|
88
|
+
end
|
89
|
+
|
90
|
+
def default_serialization
|
91
|
+
{
|
92
|
+
"id" => self.id,
|
93
|
+
"name" => self.name,
|
94
|
+
}
|
88
95
|
end
|
89
96
|
end
|
90
97
|
|
@@ -96,9 +103,11 @@ module SakaiInfo
|
|
96
103
|
end
|
97
104
|
clear_cache
|
98
105
|
|
99
|
-
def initialize(
|
100
|
-
@
|
101
|
-
|
106
|
+
def initialize(dbrow)
|
107
|
+
@dbrow = dbrow
|
108
|
+
|
109
|
+
@id = @dbrow[:function_key].to_i
|
110
|
+
@name = @dbrow[:function_name]
|
102
111
|
end
|
103
112
|
|
104
113
|
def to_s
|
@@ -108,28 +117,27 @@ module SakaiInfo
|
|
108
117
|
def self.find_by_id(id)
|
109
118
|
id = id.to_s
|
110
119
|
if @@cache[id].nil?
|
111
|
-
row = DB.connect.
|
112
|
-
"where function_key = ?", id.to_i).first
|
120
|
+
row = DB.connect[:sakai_realm_function].where(:function_key => id.to_i).first
|
113
121
|
if row.nil?
|
114
122
|
raise ObjectNotFoundException.new(AuthzFunction, id)
|
115
123
|
end
|
116
|
-
@@cache[id] = AuthzFunction.new(
|
117
|
-
@@cache[
|
124
|
+
@@cache[id] = AuthzFunction.new(row)
|
125
|
+
@@cache[@@cache[id].name] = @@cache[id]
|
118
126
|
end
|
119
127
|
@@cache[id]
|
120
128
|
end
|
121
129
|
|
122
130
|
def self.find_by_name(name)
|
131
|
+
if name.nil?
|
132
|
+
raise ObjectNotFoundException.new(AuthzFunction, "")
|
133
|
+
end
|
123
134
|
if @@cache[name].nil?
|
124
|
-
|
125
|
-
row = DB.connect.fetch("select function_key from sakai_realm_function " +
|
126
|
-
"where function_name = ?", name).first
|
135
|
+
row = DB.connect[:sakai_realm_function].where(:function_name => name).first
|
127
136
|
if row.nil?
|
128
137
|
raise ObjectNotFoundException.new(AuthzFunction, name)
|
129
138
|
end
|
130
|
-
|
131
|
-
@@cache[name] =
|
132
|
-
@@cache[id] = @@cache[name]
|
139
|
+
@@cache[name] = AuthzFunction.new(row)
|
140
|
+
@@cache[@@cache[name].id] = @@cache[name]
|
133
141
|
end
|
134
142
|
@@cache[name]
|
135
143
|
end
|
@@ -149,47 +157,62 @@ module SakaiInfo
|
|
149
157
|
function
|
150
158
|
end
|
151
159
|
|
160
|
+
def self.query_by_realm_id_and_role_id(realm_id, role_id)
|
161
|
+
DB.connect[:sakai_realm_function].
|
162
|
+
where(:function_key => DB.connect[:sakai_realm_rl_fn].select(:function_key).
|
163
|
+
where(:realm_key => realm_id, :role_key => role_id))
|
164
|
+
end
|
165
|
+
|
152
166
|
def self.count_by_realm_id_and_role_id(realm_id, role_id)
|
153
|
-
|
154
|
-
filter(:realm_key => realm_id, :role_key => role_id).count
|
167
|
+
AuthzFunction.query_by_realm_id_and_role_id(realm_id, role_id).count
|
155
168
|
end
|
156
169
|
|
157
170
|
def self.find_by_realm_id_and_role_id(realm_id, role_id)
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
end
|
168
|
-
functions
|
171
|
+
AuthzFunction.query_by_realm_id_and_role_id(realm_id, role_id).
|
172
|
+
order(:function_name).all.collect { |row| AuthzFunction.new(row) }
|
173
|
+
end
|
174
|
+
|
175
|
+
def default_serialization
|
176
|
+
{
|
177
|
+
"id" => self.id,
|
178
|
+
"name" => self.name,
|
179
|
+
}
|
169
180
|
end
|
170
181
|
end
|
171
182
|
|
172
183
|
class AuthzRealm < SakaiObject
|
173
184
|
attr_reader :name, :providers, :maintain_role
|
174
185
|
|
186
|
+
include ModProps
|
187
|
+
created_at_key :createdon
|
188
|
+
created_by_key :createdby
|
189
|
+
modified_at_key :modifiedon
|
190
|
+
modified_by_key :modifiedby
|
191
|
+
|
175
192
|
def self.clear_cache
|
176
193
|
@@cache = {}
|
177
194
|
end
|
178
195
|
clear_cache
|
179
196
|
|
180
|
-
def initialize(
|
181
|
-
@
|
182
|
-
|
183
|
-
|
197
|
+
def initialize(row)
|
198
|
+
@dbrow = row
|
199
|
+
|
200
|
+
@id = @dbrow[:realm_key].to_i
|
201
|
+
@name = @dbrow[:realm_id]
|
202
|
+
if @dbrow[:provider_id].nil?
|
184
203
|
@providers = nil
|
185
204
|
else
|
186
|
-
@providers =
|
205
|
+
@providers = @dbrow[:provider_id].split("+")
|
206
|
+
end
|
207
|
+
if @dbrow[:maintain_role].nil? or @dbrow[:maintain_role] == ""
|
208
|
+
@maintain_role = nil
|
209
|
+
else
|
210
|
+
@maintain_role = AuthzRole.find_by_id(@dbrow[:maintain_role])
|
187
211
|
end
|
188
|
-
@maintain_role = maintain_role
|
189
212
|
end
|
190
213
|
|
191
214
|
def realm_roles
|
192
|
-
@realm_roles ||= AuthzRealmRole.find_by_realm_id(
|
215
|
+
@realm_roles ||= AuthzRealmRole.find_by_realm_id(self.id)
|
193
216
|
end
|
194
217
|
|
195
218
|
def to_s
|
@@ -197,56 +220,34 @@ module SakaiInfo
|
|
197
220
|
end
|
198
221
|
|
199
222
|
def user_count
|
200
|
-
@user_count ||= AuthzRealmMembership.count_by_realm_id(
|
223
|
+
@user_count ||= AuthzRealmMembership.count_by_realm_id(self.id)
|
201
224
|
end
|
202
225
|
|
203
|
-
def
|
204
|
-
@
|
226
|
+
def users
|
227
|
+
@users ||= AuthzRealmMembership.find_by_realm_id(self.id)
|
205
228
|
end
|
206
229
|
|
207
230
|
def self.find_by_id(id)
|
208
231
|
id = id.to_s
|
209
232
|
if @@cache[id].nil?
|
210
|
-
row = DB.connect.
|
211
|
-
"from sakai_realm " +
|
212
|
-
"where realm_key = ?", id.to_i).first
|
233
|
+
row = DB.connect[:sakai_realm].where(:realm_key => id.to_i).first
|
213
234
|
if row.nil?
|
214
235
|
raise ObjectNotFoundException.new(AuthzRealm, id)
|
215
236
|
end
|
216
|
-
|
217
|
-
name =
|
218
|
-
providers = row[:provider_id]
|
219
|
-
maintain_role = nil
|
220
|
-
if row[:maintain_role].nil? or row[:maintain_role] == ""
|
221
|
-
maintain_role = nil
|
222
|
-
else
|
223
|
-
maintain_role = AuthzRole.find_by_id(row[:maintain_role].to_i)
|
224
|
-
end
|
225
|
-
@@cache[id] = AuthzRealm.new(id, name, providers, maintain_role)
|
226
|
-
@@cache[name] = @@cache[id]
|
237
|
+
@@cache[id] = AuthzRealm.new(row)
|
238
|
+
@@cache[@@cache[id].name] = @@cache[id]
|
227
239
|
end
|
228
240
|
@@cache[id]
|
229
241
|
end
|
230
242
|
|
231
243
|
def self.find_by_name(name)
|
232
244
|
if @@cache[name].nil?
|
233
|
-
row = DB.connect.
|
234
|
-
"from sakai_realm " +
|
235
|
-
"where realm_id = ?", name).first
|
245
|
+
row = DB.connect[:sakai_realm].where(:realm_id => name).first
|
236
246
|
if row.nil?
|
237
247
|
raise ObjectNotFoundException.new(AuthzRealm, name)
|
238
248
|
end
|
239
|
-
|
240
|
-
id =
|
241
|
-
providers = row[:provider_id]
|
242
|
-
maintain_role = nil
|
243
|
-
if row[:maintain_role].nil? or row[:maintain_role] == ""
|
244
|
-
maintain_role = nil
|
245
|
-
else
|
246
|
-
maintain_role = AuthzRole.find_by_id(row[:maintain_role].to_i)
|
247
|
-
end
|
248
|
-
@@cache[name] = AuthzRealm.new(id, name, providers, maintain_role)
|
249
|
-
@@cache[id] = @@cache[name]
|
249
|
+
@@cache[name] = AuthzRealm.new(row)
|
250
|
+
@@cache[@@cache[name].id] = @@cache[name]
|
250
251
|
end
|
251
252
|
@@cache[name]
|
252
253
|
end
|
@@ -273,6 +274,49 @@ module SakaiInfo
|
|
273
274
|
def self.find_by_site_id_and_group_id(site_id, group_id)
|
274
275
|
AuthzRealm.find_by_name("/site/#{site_id}/group/#{group_id}")
|
275
276
|
end
|
277
|
+
|
278
|
+
def default_serialization
|
279
|
+
result = {
|
280
|
+
"id" => self.id,
|
281
|
+
"name" => self.name,
|
282
|
+
"user_count" => self.user_count,
|
283
|
+
}
|
284
|
+
if not self.providers.nil?
|
285
|
+
result["providers"] = self.providers
|
286
|
+
end
|
287
|
+
if not self.maintain_role.nil?
|
288
|
+
result["maintain_role"] = self.maintain_role.name
|
289
|
+
end
|
290
|
+
result
|
291
|
+
end
|
292
|
+
|
293
|
+
def summary_serialization
|
294
|
+
{
|
295
|
+
"id" => self.id,
|
296
|
+
"name" => self.name,
|
297
|
+
}
|
298
|
+
end
|
299
|
+
|
300
|
+
def roles_serialization
|
301
|
+
{
|
302
|
+
"roles" => self.realm_roles.collect { |rr| rr.serialize(:realm_summary) }
|
303
|
+
}
|
304
|
+
end
|
305
|
+
|
306
|
+
def users_serialization
|
307
|
+
{
|
308
|
+
"users" => self.users.collect { |u| u.serialize(:realm_summary) }
|
309
|
+
}
|
310
|
+
end
|
311
|
+
|
312
|
+
def self.all_serializations
|
313
|
+
[
|
314
|
+
:default,
|
315
|
+
:mod,
|
316
|
+
:roles,
|
317
|
+
:users,
|
318
|
+
]
|
319
|
+
end
|
276
320
|
end
|
277
321
|
|
278
322
|
class AuthzRealmRole < SakaiObject
|
@@ -284,19 +328,23 @@ module SakaiInfo
|
|
284
328
|
end
|
285
329
|
|
286
330
|
def function_count
|
287
|
-
@function_count ||=
|
331
|
+
@function_count ||=
|
332
|
+
AuthzFunction.count_by_realm_id_and_role_id(self.realm.id, self.role.id)
|
288
333
|
end
|
289
334
|
|
290
335
|
def functions
|
291
|
-
@functions ||=
|
336
|
+
@functions ||=
|
337
|
+
AuthzFunction.find_by_realm_id_and_role_id(self.realm.id, self.role.id)
|
292
338
|
end
|
293
339
|
|
294
340
|
def user_count
|
295
|
-
@user_count ||=
|
341
|
+
@user_count ||=
|
342
|
+
User.count_by_realm_id_and_role_id(self.realm.id, self.role.id)
|
296
343
|
end
|
297
344
|
|
298
345
|
def users
|
299
|
-
@users ||=
|
346
|
+
@users ||=
|
347
|
+
User.find_by_realm_id_and_role_id(self.realm.id, self.role.id)
|
300
348
|
end
|
301
349
|
|
302
350
|
def self.find_by_realm_id(realm_id)
|
@@ -319,15 +367,22 @@ module SakaiInfo
|
|
319
367
|
"realm_name" => self.realm.name,
|
320
368
|
"role_name" => self.role.name,
|
321
369
|
"user_count" => self.user_count,
|
322
|
-
"function_count" => self.function_count
|
370
|
+
"function_count" => self.function_count,
|
323
371
|
}
|
324
372
|
end
|
325
373
|
|
326
374
|
def summary_serialization
|
327
375
|
{
|
328
|
-
"
|
376
|
+
"realm" => self.realm.name,
|
377
|
+
"role" => self.role.name,
|
378
|
+
}
|
379
|
+
end
|
380
|
+
|
381
|
+
def realm_summary_serialization
|
382
|
+
{
|
383
|
+
"role" => self.role.name,
|
329
384
|
"user_count" => self.user_count,
|
330
|
-
"function_count" => self.function_count
|
385
|
+
"function_count" => self.function_count,
|
331
386
|
}
|
332
387
|
end
|
333
388
|
end
|
@@ -354,7 +409,7 @@ module SakaiInfo
|
|
354
409
|
end
|
355
410
|
|
356
411
|
def self.count_by_realm_id(realm_id)
|
357
|
-
DB.connect[:sakai_realm_rl_gr].
|
412
|
+
DB.connect[:sakai_realm_rl_gr].where(:realm_key => realm_id).count
|
358
413
|
end
|
359
414
|
|
360
415
|
def self.find_by_user_id(user_id)
|
@@ -369,5 +424,28 @@ module SakaiInfo
|
|
369
424
|
end
|
370
425
|
results
|
371
426
|
end
|
427
|
+
|
428
|
+
def default_serialization
|
429
|
+
{
|
430
|
+
"realm" => self.realm.serialize(:summary),
|
431
|
+
"user" => self.user.serialize(:summary),
|
432
|
+
"role" => self.role.serialize(:summary),
|
433
|
+
}
|
434
|
+
end
|
435
|
+
|
436
|
+
def summary_serialization
|
437
|
+
{
|
438
|
+
"realm" => self.realm.name,
|
439
|
+
"user" => self.user.eid,
|
440
|
+
"role" => self.role.name,
|
441
|
+
}
|
442
|
+
end
|
443
|
+
|
444
|
+
def realm_summary_serialization
|
445
|
+
{
|
446
|
+
"user" => self.user.eid,
|
447
|
+
"role" => self.role.name,
|
448
|
+
}
|
449
|
+
end
|
372
450
|
end
|
373
451
|
end
|
data/lib/sakai-info/cli.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
# - sakai-info command line tool support
|
3
3
|
#
|
4
4
|
# Created 2012-02-19 daveadams@gmail.com
|
5
|
-
# Last updated 2012-05-
|
5
|
+
# Last updated 2012-05-14 daveadams@gmail.com
|
6
6
|
#
|
7
7
|
# https://github.com/daveadams/sakai-info
|
8
8
|
#
|
@@ -40,6 +40,9 @@ module SakaiInfo
|
|
40
40
|
"announcement-channel" => AnnouncementChannel,
|
41
41
|
"gradebook" => Gradebook,
|
42
42
|
"gradebook-item" => GradebookItem,
|
43
|
+
"role" => AuthzRole,
|
44
|
+
"function" => AuthzFunction,
|
45
|
+
"realm" => AuthzRealm,
|
43
46
|
}
|
44
47
|
end
|
45
48
|
end
|
data/lib/sakai-info/cli/help.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
# - sin command line help
|
3
3
|
#
|
4
4
|
# Created 2012-02-19 daveadams@gmail.com
|
5
|
-
# Last updated 2012-05-
|
5
|
+
# Last updated 2012-05-14 daveadams@gmail.com
|
6
6
|
#
|
7
7
|
# https://github.com/daveadams/sakai-info
|
8
8
|
#
|
@@ -14,14 +14,15 @@ module SakaiInfo
|
|
14
14
|
class Help
|
15
15
|
STRINGS = {
|
16
16
|
:default => <<EOF,
|
17
|
-
sin #{VERSION}
|
17
|
+
Sakai Info: sin #{VERSION}
|
18
18
|
Usage: sin <command> [<id>] [<options>]
|
19
19
|
|
20
20
|
Object commands:
|
21
21
|
user, group, site, page, tool, quiz, quiz-section, quiz-item, quiz-attempt,
|
22
22
|
quiz-attempt-item, quiz-attempt-item-attachment, question-pool, assignment,
|
23
23
|
assignment-submission, forum, forum-thread, forum-post, content,
|
24
|
-
announcement, announcement-channel, gradebook, gradebook-item
|
24
|
+
announcement, announcement-channel, gradebook, gradebook-item, role,
|
25
|
+
function, realm
|
25
26
|
|
26
27
|
Misc commands:
|
27
28
|
test Tests configured database connections
|
@@ -32,7 +33,7 @@ sin #{VERSION}
|
|
32
33
|
EOF
|
33
34
|
|
34
35
|
"options" => <<EOF,
|
35
|
-
sin #{VERSION}
|
36
|
+
Sakai Info: sin #{VERSION}
|
36
37
|
Options that apply globally:
|
37
38
|
--database=<name>
|
38
39
|
Connect to database instance <name> as defined in ~/.sakai-info instead
|
@@ -121,16 +122,17 @@ sin site
|
|
121
122
|
Prints information about the site ID specified. Additional options may be
|
122
123
|
passed to include additional information:
|
123
124
|
|
124
|
-
--users
|
125
|
-
--pages
|
126
|
-
--groups
|
127
|
-
--quizzes
|
128
|
-
--disk
|
129
|
-
--assignments
|
130
|
-
--
|
131
|
-
--
|
132
|
-
--
|
133
|
-
--
|
125
|
+
--users Print membership information
|
126
|
+
--pages Print page list with tools
|
127
|
+
--groups Print group information
|
128
|
+
--quizzes Print information about quizzes
|
129
|
+
--disk Print disk usage
|
130
|
+
--assignments Print assignment info
|
131
|
+
--announcements Print announcement info
|
132
|
+
--gradebook Print gradebook item info
|
133
|
+
--realm Print site realm details
|
134
|
+
--forums Print forum details
|
135
|
+
--mod Print creation/modification info
|
134
136
|
EOF
|
135
137
|
|
136
138
|
"page" => <<EOF,
|
@@ -350,6 +352,32 @@ sin gradebook-item
|
|
350
352
|
Usage: sin gradebook-item <id> [<options>]
|
351
353
|
|
352
354
|
Prints information about the gradebook item ID specified.
|
355
|
+
EOF
|
356
|
+
"role" => <<EOF,
|
357
|
+
sin role
|
358
|
+
|
359
|
+
Usage: sin role <id> [<options>]
|
360
|
+
|
361
|
+
Prints information about the authz role ID specified.
|
362
|
+
EOF
|
363
|
+
"function" => <<EOF,
|
364
|
+
sin function
|
365
|
+
|
366
|
+
Usage: sin function <id> [<options>]
|
367
|
+
|
368
|
+
Prints information about the authz function ID specified.
|
369
|
+
EOF
|
370
|
+
"realm" => <<EOF,
|
371
|
+
sin realm
|
372
|
+
|
373
|
+
Usage: sin realm <id> [<options>]
|
374
|
+
|
375
|
+
Prints information about the authz realm ID specified. Additional options may
|
376
|
+
be passed to include additional information:
|
377
|
+
|
378
|
+
--roles List roles associated with this realm
|
379
|
+
--users List users in this realm
|
380
|
+
--mod Print creation/modification info
|
353
381
|
EOF
|
354
382
|
}
|
355
383
|
|
data/lib/sakai-info/content.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
# SakaiInfo::Content library
|
3
3
|
#
|
4
4
|
# Created 2012-02-17 daveadams@gmail.com
|
5
|
-
# Last updated 2012-05-
|
5
|
+
# Last updated 2012-05-14 daveadams@gmail.com
|
6
6
|
#
|
7
7
|
# https://github.com/daveadams/sakai-info
|
8
8
|
#
|
@@ -361,8 +361,12 @@ module SakaiInfo
|
|
361
361
|
end
|
362
362
|
clear_cache
|
363
363
|
|
364
|
+
def initialize(id)
|
365
|
+
@id = id
|
366
|
+
end
|
367
|
+
|
364
368
|
def self.find(id)
|
365
|
-
@@cache[id] ||= MissingContentCollection.new(id
|
369
|
+
@@cache[id] ||= MissingContentCollection.new(id)
|
366
370
|
end
|
367
371
|
|
368
372
|
def size_on_disk
|
data/lib/sakai-info/site.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
# SakaiInfo::Site library
|
3
3
|
#
|
4
4
|
# Created 2012-02-17 daveadams@gmail.com
|
5
|
-
# Last updated 2012-05-
|
5
|
+
# Last updated 2012-05-14 daveadams@gmail.com
|
6
6
|
#
|
7
7
|
# https://github.com/daveadams/sakai-info
|
8
8
|
#
|
@@ -108,12 +108,28 @@ module SakaiInfo
|
|
108
108
|
end
|
109
109
|
|
110
110
|
# announcement properties
|
111
|
+
def announcement_channel
|
112
|
+
if @announcement_channel.nil?
|
113
|
+
begin
|
114
|
+
@announcement_channel = AnnouncementChannel.find_by_site_id(self.id)
|
115
|
+
rescue ObjectNotFoundException
|
116
|
+
@announcement_channel = -1
|
117
|
+
return nil
|
118
|
+
end
|
119
|
+
elsif @announcement_channel == -1
|
120
|
+
return nil
|
121
|
+
end
|
122
|
+
@announcement_channel
|
123
|
+
end
|
124
|
+
|
111
125
|
def announcements
|
112
|
-
|
126
|
+
return nil if self.announcement_channel.nil?
|
127
|
+
@announcements ||= self.announcement_channel.announcements
|
113
128
|
end
|
114
129
|
|
115
130
|
def announcement_count
|
116
|
-
|
131
|
+
return 0 if self.announcement_channel.nil?
|
132
|
+
@announcement_count ||= self.announcement_channel.announcement_count
|
117
133
|
end
|
118
134
|
|
119
135
|
# samigo quiz properties
|
@@ -252,7 +268,7 @@ module SakaiInfo
|
|
252
268
|
"pending_quiz_count" => self.pending_quiz_count,
|
253
269
|
"published_quiz_count" => self.published_quiz_count,
|
254
270
|
"assignment_count" => self.assignment_count,
|
255
|
-
|
271
|
+
"announcement_count" => self.announcement_count,
|
256
272
|
"gradebook_item_count" => (self.gradebook.nil? ? 0 : self.gradebook.item_count),
|
257
273
|
"forum_count" => self.forum_count
|
258
274
|
}
|
@@ -387,8 +403,18 @@ module SakaiInfo
|
|
387
403
|
|
388
404
|
def self.all_serializations
|
389
405
|
[
|
390
|
-
:default,
|
391
|
-
:
|
406
|
+
:default,
|
407
|
+
:users,
|
408
|
+
:pages,
|
409
|
+
:groups,
|
410
|
+
:quizzes,
|
411
|
+
:disk,
|
412
|
+
:assignments,
|
413
|
+
:announcements,
|
414
|
+
:gradebook,
|
415
|
+
:realm,
|
416
|
+
:forums,
|
417
|
+
:mod,
|
392
418
|
]
|
393
419
|
end
|
394
420
|
end
|
data/lib/sakai-info/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sakai-info
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-05-
|
12
|
+
date: 2012-05-14 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: sequel
|