sakai-info 0.4.4 → 0.4.5
Sign up to get free protection for your applications and to get access to all the features.
- 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
|