ruby-d2l 0.3.0 → 0.4.0

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/README.rdoc CHANGED
@@ -22,14 +22,15 @@ Then in your Ruby application you can use the configure block to set these value
22
22
  config.username = "D2L_WEB_SERVICES_USERNAME"
23
23
  config.password = "D2L_WEB_SERVICES_PASSWORD"
24
24
  config.site_url = "D2L_INSTANCE_URL" (e.g. https://d2l.mysite.edu)
25
+ config.soap_logging = true (defaults to false unless set)
25
26
  end
26
27
 
27
28
  == Documentation
28
29
 
29
30
  Code Example:
30
31
 
31
- template = RubyD2L::OrgUnit.get_course_template_by_code(:template_code => "TEMPLATE_CODE").to_hash
32
- ap template[:get_course_template_response][:course_template][:name].to_s
32
+ template = RubyD2L::OrgUnit.get_course_template_by_code(:template_code => "TEMPLATE_CODE")
33
+ ap template
33
34
 
34
35
 
35
36
  == Contributing to ruby-d2l
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.0
1
+ 0.4.0
data/lib/ruby-d2l/auth.rb CHANGED
@@ -1,4 +1,4 @@
1
- require "savon"
1
+ require 'savon'
2
2
 
3
3
  module RubyD2L
4
4
  class Auth
@@ -1,6 +1,5 @@
1
1
  module RubyD2L
2
2
  module Config
3
-
4
3
  attr_accessor :username
5
4
 
6
5
  attr_accessor :password
@@ -88,10 +88,65 @@ module RubyD2L
88
88
  # ]
89
89
  end
90
90
 
91
+ # = AddChildOrgUnit
92
+ # REQUIRED:: { :parent_id = "ID", :child_id => "ID" }
93
+ # RETURNS::
94
+ def self.add_child_org_unit(params={})
95
+ self.required_params(params, [:parent_id, :child_id])
96
+
97
+ params = {
98
+ :parent_id => "",
99
+ :child_id => ""
100
+ }.merge(params)
101
+
102
+ token = RubyD2L::Auth.get_token
103
+
104
+ the_xml = '<?xml version="1.0" encoding="utf-8"?>
105
+ <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
106
+ <soap:Header>
107
+ <RequestHeader xmlns="http://www.desire2learn.com/services/common/xsd/common-v1_0">
108
+ <Version>1.0</Version>
109
+ <CorellationId>12345</CorellationId>
110
+ <AuthenticationToken>'+ token +'</AuthenticationToken>
111
+ </RequestHeader>
112
+ </soap:Header>
113
+ <soap:Body>
114
+ <AddChildOrgUnitRequest xmlns="http://www.desire2learn.com/services/oums/wsdl/OrgUnitManagementService-v1_0">
115
+ <OrgUnitId>
116
+ <Id xmlns="http://www.desire2learn.com/services/common/xsd/common-v1_0">'+ params[:parent_id] +'</Id>
117
+ <Source xmlns="http://www.desire2learn.com/services/common/xsd/common-v1_0">Desire2Learn</Source>
118
+ </OrgUnitId>
119
+ <ChildOrgUnitId>
120
+ <Id xmlns="http://www.desire2learn.com/services/common/xsd/common-v1_0">'+ params[:child_id] +'</Id>
121
+ <Source xmlns="http://www.desire2learn.com/services/common/xsd/common-v1_0">Desire2Learn</Source>
122
+ </ChildOrgUnitId>
123
+ </AddChildOrgUnitRequest>
124
+ </soap:Body>
125
+ </soap:Envelope>'
126
+
127
+ add_child = self.connect(RubyD2L.site_url).request :add_child_org_unit do
128
+ soap.xml = the_xml
129
+ end
130
+
131
+ if add_child.to_hash.include?(:add_child_org_unit_response)
132
+ response = add_chile.to_hash[:add_child_org_unit_response]
133
+ response_hash = Tools.get_all_values_nested(response)
134
+ if response_hash.keys.any? {|k| k.include? "business_errors"}
135
+ return response_hash.keep_if {|k,v| k.include? "business_errors"}
136
+ else
137
+ return response_hash
138
+ end
139
+ else
140
+ return false
141
+ end
142
+
143
+ end
144
+
145
+
91
146
  # = CreateCourseOffering
92
- # REQUIRED: { :offering_name => "NAME", :offering_code => "CODE" }
93
- # OPTIONAL: { :is_active => "true|false", :start_date => DateTime.to_s (e.g. YYYYMMDDThh:mm:ss), :end_date => DateTime.to_s (e.g. YYYYMMDDThh:mm:ss) }
94
- # NOT IMPLEMENTED: I don't use <Path>'+ @course_path +'</Path>. Add it if you need it.
147
+ # REQUIRED:: { :offering_name => "NAME", :offering_code => "CODE" }
148
+ # OPTIONAL:: { :is_active => "true|false", :start_date => DateTime.to_s (e.g. YYYYMMDDThh:mm:ss), :end_date => DateTime.to_s (e.g. YYYYMMDDThh:mm:ss) }
149
+ # NOT IMPLEMENTED:: I don't use <Path>'+ @course_path +'</Path>. Add it if you need it.
95
150
  def self.create_course_offering(params={})
96
151
  self.required_params(params, [:offering_name, :offering_code, :template_id])
97
152
 
@@ -134,15 +189,21 @@ module RubyD2L
134
189
  </soap:Body>
135
190
  </soap:Envelope>'
136
191
 
137
- orgunit = self.connect(RubyD2L.site_url).request :create_course_offering do
192
+ create_offering = self.connect(RubyD2L.site_url).request :create_course_offering do
138
193
  soap.xml = the_xml
139
194
  end
140
195
 
196
+ response = create_offering.to_hash[:create_course_offering_response]
197
+ if response.include?(:course_offering)
198
+ return Tools.get_all_values_nested(response)
199
+ else
200
+ return false
201
+ end
141
202
  end
142
203
 
143
204
  # = CreateCourseTemplate
144
- # REQUIRED: { :template_name => "NAME", :template_code => "CODE" }
145
- # OPTIONAL: { :is_active => "true|false", :start_date => DateTime.to_s (e.g. YYYYMMDDThh:mm:ss), :end_date => DateTime.to_s (e.g. YYYYMMDDThh:mm:ss) }
205
+ # REQUIRED:: { :template_name => "NAME", :template_code => "CODE" }
206
+ # OPTIONAL:: { :is_active => "true|false", :start_date => DateTime.to_s (e.g. YYYYMMDDThh:mm:ss), :end_date => DateTime.to_s (e.g. YYYYMMDDThh:mm:ss) }
146
207
  def self.create_course_template(params={})
147
208
  self.required_params(params, [:template_name, :template_code])
148
209
 
@@ -179,11 +240,61 @@ module RubyD2L
179
240
  template = self.connect(RubyD2L.site_url).request :create_course_template do
180
241
  soap.xml = the_xml
181
242
  end
182
-
243
+
244
+ response = template.to_hash[:create_course_template_response]
245
+ if response.include?(:course_template)
246
+ return Tools.get_all_values_nested(response)
247
+ else
248
+ return false
249
+ end
183
250
  end
184
251
 
252
+
253
+ # = GetCourseOfferingByCode
254
+ # REQUIRED:: offering_code => "CODE"
255
+ # RETURNS:: false if not found, values hash if found
256
+ def self.get_course_offering_by_code(params={})
257
+ self.required_params(params, [:offering_code])
258
+
259
+ params = {
260
+ :offering_code => ""
261
+ }.merge(params)
262
+
263
+ token = RubyD2L::Auth.get_token
264
+
265
+ the_xml = '<?xml version="1.0" encoding="utf-8"?>
266
+ <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
267
+ <soap:Header>
268
+ <RequestHeader xmlns="http://www.desire2learn.com/services/common/xsd/common-v1_0">
269
+ <Version>1.0</Version>
270
+ <CorellationId>12345</CorellationId>
271
+ <AuthenticationToken>'+ token +'</AuthenticationToken>
272
+ </RequestHeader>
273
+ </soap:Header>
274
+ <soap:Body>
275
+ <GetCourseOfferingByCodeRequest xmlns="http://www.desire2learn.com/services/oums/wsdl/OrgUnitManagementService-v1_0">
276
+ <Code>'+ params[:offering_code] +'</Code>
277
+ </GetCourseOfferingByCodeRequest>
278
+ </soap:Body>
279
+ </soap:Envelope>'
280
+
281
+ offering = self.connect(RubyD2L.site_url).request :get_course_offering_by_code do
282
+ soap.xml = the_xml
283
+ end
284
+
285
+ response = offering.to_hash[:get_course_offering_response]
286
+ if response.include?(:course_offering)
287
+ return Tools.get_all_values_nested(response)
288
+ else
289
+ return false
290
+ end
291
+
292
+ end
293
+
294
+
185
295
  # = GetCourseTemplateByCode
186
- # REQUIRED: template_code => "CODE"
296
+ # REQUIRED:: template_code => "CODE"
297
+ # RETURNS:: false if not found, values hash if found
187
298
  def self.get_course_template_by_code(params={})
188
299
  self.required_params(params, [:template_code])
189
300
 
@@ -213,8 +324,101 @@ module RubyD2L
213
324
  soap.xml = the_xml
214
325
  end
215
326
 
327
+ response = template.to_hash[:get_course_template_response]
328
+ if response.include?(:course_template)
329
+ return Tools.get_all_values_nested(response)
330
+ else
331
+ return false
332
+ end
216
333
  end
217
334
 
335
+ # = GetChildCourseTemplates
336
+ # REQUIRED:: org_unit_id => "ID"
337
+ # RETURNS:: false if not found, values hash if found
338
+ def self.get_child_course_templates(params={})
339
+ self.required_params(params, [:org_unit_id])
340
+
341
+ params = {
342
+ :org_unit_id => ""
343
+ }.merge(params)
344
+
345
+ token = RubyD2L::Auth.get_token
346
+
347
+ the_xml = '<?xml version="1.0" encoding="utf-8"?>
348
+ <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
349
+ <soap:Header>
350
+ <RequestHeader xmlns="http://www.desire2learn.com/services/common/xsd/common-v1_0">
351
+ <Version>1.0</Version>
352
+ <CorellationId>12345</CorellationId>
353
+ <AuthenticationToken>'+ token +'</AuthenticationToken>
354
+ </RequestHeader>
355
+ </soap:Header>
356
+ <soap:Body>
357
+ <GetChildCourseTemplatesRequest xmlns="http://www.desire2learn.com/services/oums/wsdl/OrgUnitManagementService-v1_0">
358
+ <OrgUnitId>
359
+ <Id xmlns="http://www.desire2learn.com/services/common/xsd/common-v1_0">'+ params[:org_unit_id] +'</Id>
360
+ <Source xmlns="http://www.desire2learn.com/services/common/xsd/common-v1_0">Desire2Learn</Source>
361
+ </OrgUnitId>
362
+ </GetChildCourseTemplatesRequest>
363
+ </soap:Body>
364
+ </soap:Envelope>'
365
+
366
+ child_templates = self.connect(RubyD2L.site_url).request :get_child_course_templates do
367
+ soap.xml = the_xml
368
+ end
369
+
370
+ response = child_templates.to_hash[:get_course_templates_response]
371
+
372
+ if response.include?(:child_org_units)
373
+ return Tools.get_all_values_nested(response)
374
+ else
375
+ return false
376
+ end
377
+
378
+ end
379
+
380
+ # = GetDepartmentByCode
381
+ # REQUIRED:: :org_unit_code => "CODE"
382
+ # RETURNS:: false if not found, values hash if found
383
+ def self.get_department_by_code(params={})
384
+ self.required_params(params, [:org_unit_code])
385
+
386
+ params = {
387
+ :org_unit_code => ""
388
+ }.merge(params)
389
+
390
+ token = RubyD2L::Auth.get_token
391
+
392
+ the_xml = '<?xml version="1.0" encoding="utf-8"?>
393
+ <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
394
+ <soap:Header>
395
+ <RequestHeader xmlns="http://www.desire2learn.com/services/common/xsd/common-v1_0">
396
+ <Version>1.0</Version>
397
+ <CorellationId>12345</CorellationId>
398
+ <AuthenticationToken>'+ token +'</AuthenticationToken>
399
+ </RequestHeader>
400
+ </soap:Header>
401
+ <soap:Body>
402
+ <GetDepartmentByCodeRequest xmlns="http://www.desire2learn.com/services/oums/wsdl/OrgUnitManagementService-v1_0">
403
+ <Code>'+ params[:org_unit_code] +'</Code>
404
+ </GetDepartmentByCodeRequest>
405
+ </soap:Body>
406
+ </soap:Envelope>'
407
+
408
+ department = self.connect(RubyD2L.site_url).request :get_department_by_code do
409
+ soap.xml = the_xml
410
+ end
411
+
412
+ response = department.to_hash[:get_department_response]
413
+ if response.include?(:department)
414
+ return Tools.get_all_values_nested(response)
415
+ else
416
+ return false
417
+ end
418
+
419
+ end
420
+
421
+
218
422
  def self.required_params(passed_params={},*args)
219
423
  required_params = *args[0]
220
424
  required_params.each do |key|
@@ -0,0 +1,23 @@
1
+ class Tools
2
+
3
+ @path = []
4
+
5
+ @all_values = {}
6
+
7
+ def self.get_all_values_nested(nested_hash={})
8
+ nested_hash.each_pair do |k,v|
9
+ @path << k
10
+ case v
11
+ when Array, DateTime, FalseClass, Fixnum, NilClass, String, TrueClass then
12
+ @all_values.merge!({"#{@path.join(".")}" => "#{v}"})
13
+ @path.pop
14
+ when Hash then get_all_values_nested(v)
15
+ else raise ArgumentError, "Unhandled type #{v.class}"
16
+ end
17
+ end
18
+ @path.pop
19
+
20
+ return @all_values
21
+ end
22
+
23
+ end
data/lib/ruby-d2l/user.rb CHANGED
@@ -1,5 +1,3 @@
1
- require "savon"
2
-
3
1
  module RubyD2L
4
2
  class User
5
3
 
@@ -54,36 +52,150 @@ module RubyD2L
54
52
 
55
53
  end
56
54
 
55
+ # = EnrollUser
56
+ # REQUIRED:: { :org_unit_id => "ID, ":user_id => "ID", :role_id => "ID" }
57
+ # RETURNS::
58
+ def self.enroll_user(params={})
59
+ self.required_params(params, [:org_unit_id, :user_id, :role_id])
60
+
61
+ params = {
62
+ :org_unit_id => "",
63
+ :user_id => "",
64
+ :role_id => ""
65
+ }.merge(params)
57
66
 
58
- def self.get_user_by_user_name(params)
59
- site_url = params[0]
60
- token = params[1]
61
- if params[2] == nil || params[2] == "list_params"
62
- ap "[user_name] param required by get_user_by_user_name!"
63
- exit
67
+ token = RubyD2L::Auth.get_token
68
+
69
+ the_xml = '<?xml version="1.0" encoding="utf-8"?>
70
+ <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
71
+ <soap:Header>
72
+ <RequestHeader xmlns="http://www.desire2learn.com/services/common/xsd/common-v1_0">
73
+ <Version>1.0</Version>
74
+ <CorellationId>12345</CorellationId>
75
+ <AuthenticationToken>'+ token +'</AuthenticationToken>
76
+ </RequestHeader>
77
+ </soap:Header>
78
+ <soap:Body>
79
+ <EnrollUserRequest xmlns="http://www.desire2learn.com/services/ums/wsdl/UserManagementService-v1_0">
80
+ <OrgUnitId>
81
+ <Id xmlns="http://www.desire2learn.com/services/common/xsd/common-v1_0">'+ params[:org_unit_id] +'</Id>
82
+ <Source xmlns="http://www.desire2learn.com/services/common/xsd/common-v1_0">Desire2Learn</Source>
83
+ </OrgUnitId>
84
+ <UserId>
85
+ <Id xmlns="http://www.desire2learn.com/services/common/xsd/common-v1_0">'+ params[:user_id] +'</Id>
86
+ <Source xmlns="http://www.desire2learn.com/services/common/xsd/common-v1_0">Desire2Learn</Source>
87
+ </UserId>
88
+ <RoleId>
89
+ <Id xmlns="http://www.desire2learn.com/services/common/xsd/common-v1_0">'+ params[:role_id] +'</Id>
90
+ <Source xmlns="http://www.desire2learn.com/services/common/xsd/common-v1_0">Desire2Learn</Source>
91
+ </RoleId>
92
+ </EnrollUserRequest>
93
+ </soap:Body>
94
+ </soap:Envelope>'
95
+
96
+ enrollment = self.connect(RubyD2L.site_url).request :enroll_user do
97
+ soap.xml = the_xml
98
+ end
99
+
100
+ if enrollment.to_hash.include?(:enroll_user_response)
101
+ response = enrollment.to_hash[:enroll_user_response]
102
+ response_hash = Tools.get_all_values_nested(response)
103
+ if response_hash.keys.any? {|k| k.include? "business_errors"}
104
+ return response_hash.keep_if {|k,v| k.include? "business_errors"}
105
+ else
106
+ return response_hash
107
+ end
64
108
  else
65
- user_name = params[2]
109
+ return false
66
110
  end
111
+
112
+ end
113
+
114
+ # = EnrollUser
115
+ # REQUIRED:: N/A
116
+ # RETURNS:: Array of roles
117
+ def self.get_roles()
118
+ token = RubyD2L::Auth.get_token
119
+
120
+ the_xml = '<?xml version="1.0" encoding="utf-8"?>
121
+ <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
122
+ <soap:Header>
123
+ <RequestHeader xmlns="http://www.desire2learn.com/services/common/xsd/common-v1_0">
124
+ <Version>1.0</Version>
125
+ <CorellationId>12345</CorellationId>
126
+ <AuthenticationToken>'+ token +'</AuthenticationToken>
127
+ </RequestHeader>
128
+ </soap:Header>
129
+ <soap:Body>
130
+ <GetRolesRequest xmlns="http://www.desire2learn.com/services/ums/wsdl/UserManagementService-v1_0" />
131
+ </soap:Body>
132
+ </soap:Envelope>'
133
+
134
+ roles = self.connect(RubyD2L.site_url).request :get_roles do
135
+ soap.xml = the_xml
136
+ end
137
+
138
+ response = roles.to_hash[:get_roles_response]
139
+ @role_info = []
140
+ if response.include?(:roles)
141
+ response[:roles][:role_info].each do |r|
142
+ @role_info << Tools.get_all_values_nested(r)
143
+ end
144
+ return @role_info
145
+ else
146
+ return false
147
+ end
148
+ end
67
149
 
68
- user = connect(site_url).request :get_user_by_user_name do
69
- soap.xml = '<?xml version="1.0" encoding="utf-8"?>
70
- <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
71
- <soap:Header>
72
- <RequestHeader xmlns="http://www.desire2learn.com/services/common/xsd/common-v1_0">
73
- <Version>1.0</Version>
74
- <CorellationId>12345</CorellationId>
75
- <AuthenticationToken>'+ token +'</AuthenticationToken>
76
- </RequestHeader>
77
- </soap:Header>
78
- <soap:Body>
79
- <GetUserByUserNameRequest xmlns="http://www.desire2learn.com/services/ums/wsdl/UserManagementService-v1_0">
80
- <UserName>'+ user_name +'</UserName>
81
- </GetUserByUserNameRequest>
82
- </soap:Body>
83
- </soap:Envelope>'
150
+
151
+
152
+ def self.get_user_by_user_name(params={})
153
+ self.required_params(params, :user_name)
154
+
155
+ params = {
156
+ :user_name => ""
157
+ }.merge(params)
158
+
159
+ token = RubyD2L::Auth.get_token
160
+
161
+ the_xml = '<?xml version="1.0" encoding="utf-8"?>
162
+ <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
163
+ <soap:Header>
164
+ <RequestHeader xmlns="http://www.desire2learn.com/services/common/xsd/common-v1_0">
165
+ <Version>1.0</Version>
166
+ <CorellationId>12345</CorellationId>
167
+ <AuthenticationToken>'+ token +'</AuthenticationToken>
168
+ </RequestHeader>
169
+ </soap:Header>
170
+ <soap:Body>
171
+ <GetUserByUserNameRequest xmlns="http://www.desire2learn.com/services/ums/wsdl/UserManagementService-v1_0">
172
+ <UserName>'+ params[:user_name] +'</UserName>
173
+ </GetUserByUserNameRequest>
174
+ </soap:Body>
175
+ </soap:Envelope>'
176
+
177
+ user = self.connect(RubyD2L.site_url).request :get_user_by_user_name do
178
+ soap.xml = the_xml
179
+ end
180
+
181
+ # ap user.to_hash
182
+ # exit
183
+
184
+ response = user.to_hash[:get_user_response]
185
+ if response.include?(:user)
186
+ return Tools.get_all_values_nested(response)
187
+ else
188
+ return false
84
189
  end
190
+
85
191
  end
86
192
 
193
+ def self.required_params(passed_params={},*args)
194
+ required_params = *args[0]
195
+ required_params.each do |key|
196
+ raise ArgumentError.new("MISSING PARAM -- :#{key} parameter is required!") unless passed_params.has_key?(key)
197
+ end
198
+ end
87
199
 
88
200
  end
89
201
  end
data/lib/ruby-d2l.rb CHANGED
@@ -2,6 +2,7 @@ require "ruby-d2l/auth"
2
2
  require "ruby-d2l/config"
3
3
  require "ruby-d2l/grades"
4
4
  require "ruby-d2l/org_unit"
5
+ require "ruby-d2l/tools"
5
6
  require "ruby-d2l/user"
6
7
 
7
8
 
@@ -14,4 +15,11 @@ module RubyD2L
14
15
  yield self if block_given?
15
16
  end
16
17
 
18
+ Savon.configure do |config|
19
+ config.log = false
20
+ end
21
+ HTTPI.log = false
22
+
23
+
24
+
17
25
  end
data/ruby-d2l.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{ruby-d2l}
8
- s.version = "0.3.0"
8
+ s.version = "0.4.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Matt Mencel"]
12
- s.date = %q{2011-12-13}
12
+ s.date = %q{2011-12-21}
13
13
  s.description = %q{A Ruby SOAP client for accessing Desire2Learn Web Services (D2LWS)}
14
14
  s.email = %q{mr-mencel@wiu.edu}
15
15
  s.extra_rdoc_files = [
@@ -29,6 +29,7 @@ Gem::Specification.new do |s|
29
29
  "lib/ruby-d2l/config.rb",
30
30
  "lib/ruby-d2l/grades.rb",
31
31
  "lib/ruby-d2l/org_unit.rb",
32
+ "lib/ruby-d2l/tools.rb",
32
33
  "lib/ruby-d2l/user.rb",
33
34
  "ruby-d2l.gemspec",
34
35
  "test/helper.rb",
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 3
7
+ - 4
8
8
  - 0
9
- version: 0.3.0
9
+ version: 0.4.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Matt Mencel
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-12-13 00:00:00 -06:00
17
+ date: 2011-12-21 00:00:00 -06:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -108,6 +108,7 @@ files:
108
108
  - lib/ruby-d2l/config.rb
109
109
  - lib/ruby-d2l/grades.rb
110
110
  - lib/ruby-d2l/org_unit.rb
111
+ - lib/ruby-d2l/tools.rb
111
112
  - lib/ruby-d2l/user.rb
112
113
  - ruby-d2l.gemspec
113
114
  - test/helper.rb
@@ -126,7 +127,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
126
127
  requirements:
127
128
  - - ">="
128
129
  - !ruby/object:Gem::Version
129
- hash: -3831117481161228882
130
+ hash: -3300350606523422764
130
131
  segments:
131
132
  - 0
132
133
  version: "0"