d2l_sdk 0.1.10 → 0.1.11

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.
@@ -56,10 +56,11 @@ end
56
56
 
57
57
  # Create a new section in a particular org unit.
58
58
  def create_org_unit_section(org_unit_id, section_data)
59
- payload = { 'Name' => '', # String
60
- 'Code' => '', # String
61
- 'Description' => {}, # RichTextInput -- e.g. {'Content'=>'x', 'Type'=>'y'}
62
- }.merge!(section_data)
59
+ payload = {
60
+ 'Name' => '', # String
61
+ 'Code' => '', # String
62
+ 'Description' => {}, # RichTextInput -- e.g. {'Content'=>'x', 'Type'=>'y'}
63
+ }.merge!(section_data)
63
64
  # Check the validity of the SectionData that is passed as a payload
64
65
  check_section_data_validity(payload)
65
66
  path = "/d2l/api/lp/#{$lp_ver}/#{org_unit_id}/sections/"
@@ -82,9 +83,8 @@ def check_section_enrollment_validity(section_enrollment)
82
83
  end
83
84
 
84
85
  # Enroll a user in a section for a particular org unit.
85
- def enroll_user_in_org_unit_section(org_unit_id,section_id, section_data)
86
- payload = { 'UserId' => 9999, # Number : D2LID
87
- }.merge!(section_data)
86
+ def enroll_user_in_org_unit_section(org_unit_id, section_id, section_data)
87
+ payload = { 'UserId' => 9999 }.merge!(section_data) # Number : D2LID
88
88
  # Check the validity of the SectionEnrollment that is passed as a payload
89
89
  check_section_enrollment_validity(payload)
90
90
  path = "/d2l/api/lp/#{$lp_ver}/#{org_unit_id}/sections/#{section_id}/enrollments/"
@@ -143,13 +143,14 @@ end
143
143
 
144
144
  # Update information for a section in a particular org unit.
145
145
  def update_org_unit_section_info(org_unit_id, section_id, section_data)
146
- payload = { 'Name' => '', # String
147
- 'Code' => '', # String
148
- 'Description' => {}, # RichTextInput -- e.g. {'Content'=>'x', 'Type'=>'y'}
149
- }.merge!(section_data)
146
+ payload = {
147
+ 'Name' => '', # String
148
+ 'Code' => '', # String
149
+ 'Description' => {}, # RichTextInput -- e.g. {'Content'=>'x', 'Type'=>'y'}
150
+ }.merge!(section_data)
150
151
  # Check the validity of the SectionData that is passed as a payload
151
152
  check_section_data_validity(payload)
152
- path = "/d2l/api/lp/#{$lp_ver}/#{org_unit_id}/sections/section_id"
153
+ path = "/d2l/api/lp/#{$lp_ver}/#{org_unit_id}/sections/#{section_id}"
153
154
  # JSON param: SectionData
154
155
  _put(path, payload)
155
156
  # returns the SectionData JSON block, in its Fetch form
@@ -21,11 +21,12 @@ end
21
21
  # via executing a POST http method using a predefined path and the new payload.
22
22
  def create_semester_data(semester_data)
23
23
  # Define a valid, empty payload and merge! with the semester_data. Print it.
24
- payload = { 'Type' => 5, # Number:D2LID
25
- 'Name' => 'Winter 2013 Semester', # String
26
- 'Code' => '201701', # String #YearNUM where NUM{sp:01,su:06,fl:08}
27
- 'Parents' => [6606], # ARR of Number:D2LID
28
- }.merge!(semester_data)
24
+ payload = {
25
+ 'Type' => 5, # Number:D2LID
26
+ 'Name' => 'Winter 2013 Semester', # String
27
+ 'Code' => '201701', # String #YearNUM where NUM{sp:01,su:06,fl:08}
28
+ 'Parents' => [6606], # ARR of Number:D2LID
29
+ }.merge!(semester_data)
29
30
  # ap payload
30
31
  check_semester_data_validity(payload)
31
32
  path = "/d2l/api/lp/#{$lp_ver}/orgstructure/"
@@ -9,14 +9,14 @@ $bas_ver = get_latest_product_version('bas') # Award service
9
9
  $lti_ver = get_latest_product_version('lti') # learning tools interoperability
10
10
  # ext
11
11
 
12
- #lti, rp, LR, ext,
12
+ # lti, rp, LR, ext,
13
13
  puts "versions set to:"
14
14
  versions = {
15
- "Learning Environment" => $le_ver,
16
- "Learning Platform" => $lp_ver,
17
- "Eportfolio" => $ep_ver,
18
- "Learning Object Repository" => $LR_ver,
19
- "Award Service" => $bas_ver,
20
- "Learning Tools Interoperability" => $lti_ver
15
+ 'Learning Environment' => $le_ver,
16
+ 'Learning Platform' => $lp_ver,
17
+ 'Eportfolio' => $ep_ver,
18
+ 'Learning Object Repository' => $LR_ver,
19
+ 'Award Service' => $bas_ver,
20
+ 'Learning Tools Interoperability' => $lti_ver
21
21
  }
22
22
  ap versions
@@ -19,7 +19,7 @@ def check_user_data_validity(user_data)
19
19
  'properties' => {
20
20
  'OrgDefinedId' => { 'type' => 'string' },
21
21
  'FirstName' => { 'type' => 'string' },
22
- 'MiddleName' => { 'type' => 'string' },
22
+ 'MiddleName' => { 'type' => %w(string null) },
23
23
  'LastName' => { 'type' => 'string' },
24
24
  'ExternalEmail' => { 'type' => %w(string null) },
25
25
  'UserName' => { 'type' => 'string' },
@@ -39,7 +39,9 @@ end
39
39
  # exists in your system.
40
40
  def create_user_data(user_data)
41
41
  # Define a valid, empty payload and merge! with the user_data. Print it.
42
- payload = { 'OrgDefinedId' => '', # String
42
+ payload =
43
+ {
44
+ 'OrgDefinedId' => '', # String
43
45
  'FirstName' => 'TestUser', # String
44
46
  'MiddleName' => 'Test', # String
45
47
  'LastName' => 'Test', # String
@@ -108,11 +110,7 @@ end
108
110
  # Checks whether a username already exists
109
111
  # returns: true if the the user exists already
110
112
  def does_user_exist(username)
111
- if !get_user_by_username(username.to_s).nil?
112
- return true
113
- else
114
- return false
115
- end
113
+ !get_user_by_username(username.to_s).nil?
116
114
  end
117
115
 
118
116
  # Initiates a multithreaded search to streamline the search of a user based upon
@@ -167,24 +165,24 @@ end
167
165
  # returns: array::matching_names
168
166
  def _get_user_by_string(parameter, search_string, range, regex = false)
169
167
  # puts "searching from #{range.min.to_s} to #{range.max.to_s}"
170
- i = range.min
168
+ baseline = range.min
171
169
  matching_names = []
172
170
  # Average difference between each paged bookmarks beginnings is 109.6
173
- while i.to_i < range.max
174
- # path = "/d2l/api/lp/#{$lp_ver}/users/?bookmark=" + i.to_s
175
- response = get_users_by_bookmark(i.to_s)
171
+ while baseline.to_i < range.max
172
+ # path = "/d2l/api/lp/#{$lp_ver}/users/?bookmark=" + baseline.to_s
173
+ response = get_users_by_bookmark(baseline.to_s)
176
174
  if response['PagingInfo']['HasMoreItems'] == false
177
175
  # ap 'response returned zero items, last page possible for this thread..'
178
176
  return matching_names
179
177
  end
180
178
  response['Items'].each do |user|
181
179
  if regex && !user[parameter].nil?
182
- matching_names.push(user) if (user[parameter] =~ search_string) != nil
180
+ matching_names.push(user) unless (user[parameter] =~ search_string).nil?
183
181
  elsif !user[parameter].nil?
184
182
  matching_names.push(user) if user[parameter].include? search_string
185
183
  end
186
184
  end
187
- i = response['PagingInfo']['Bookmark']
185
+ baseline = response['PagingInfo']['Bookmark']
188
186
  end
189
187
  matching_names
190
188
  end
@@ -214,7 +212,7 @@ def check_updated_user_data_validity(user_data)
214
212
  'properties' => {
215
213
  'OrgDefinedId' => { 'type' => %w(string null) },
216
214
  'FirstName' => { 'type' => 'string' },
217
- 'MiddleName' => { 'type' => 'string' },
215
+ 'MiddleName' => { 'type' => %w(string null) },
218
216
  'LastName' => { 'type' => 'string' },
219
217
  'ExternalEmail' => { 'type' => %w(string null) },
220
218
  'UserName' => { 'type' => 'string' },
@@ -254,7 +252,7 @@ def update_user_data(user_id, new_data)
254
252
  # Define a path referencing the user data using the user_id
255
253
  path = "/d2l/api/lp/#{$lp_ver}/users/" + user_id.to_s
256
254
  _put(path, payload)
257
- puts '[+] User data updated successfully'.green
255
+ # puts '[+] User data updated successfully'.green
258
256
  # Returns a UserData JSON block of the updated user's data
259
257
  end
260
258
 
@@ -272,28 +270,25 @@ end
272
270
  # ACTIVATION:###########
273
271
  ########################
274
272
  # REVIEW: Retrieve a particular user’s activation settings.
275
- # RETURNS: a UserActivationData JSON block with the user’s current activation status.
273
+ # RETURNS: a UserActivationData JSON block with the current activation status.
276
274
  def get_user_activation_settings(user_id)
277
275
  path = "/d2l/api/lp/#{$lp_ver}/users/#{user_id}/activation"
278
276
  _get(path)
279
- # RETURNS: a UserActivationData JSON block with the user’s current activation status.
277
+ # RETURNS: a UserActivationData JSON block with the current activation status of the user.
280
278
  end
281
279
 
282
280
  # REVIEW: Update a particular user’s activation settings.
283
281
  # RETURNS: ?
284
282
  def update_user_activation_settings(user_id, is_active)
285
283
  # PUT /d2l/api/lp/(version)/users/(userId)/activation
286
- if is_active != true && is_active != false
287
- raise ArgumentError, 'is_active is not a boolean'
288
- else
289
- path = "/d2l/api/lp/#{$lp_ver}/users/#{user_id}/activation"
290
- payload =
291
- {
292
- "IsActive" => is_active
293
- }
294
- _put(path, payload)
295
- # RETURNS: ?
296
- end
284
+ raise ArgumentError, 'is_active is not a boolean' if is_active != true && is_active != false
285
+ path = "/d2l/api/lp/#{$lp_ver}/users/#{user_id}/activation"
286
+ payload =
287
+ {
288
+ "IsActive" => is_active
289
+ }
290
+ _put(path, payload)
291
+ # RETURNS: ?
297
292
  end
298
293
 
299
294
  ########################
@@ -307,7 +302,6 @@ def link_user_google_apps_account(google_apps_linking_item)
307
302
  # POST /d2l/api/gae/(version)/linkuser
308
303
  end
309
304
 
310
-
311
305
  ########################
312
306
  # NOTIFICATIONS:########
313
307
  ########################
@@ -360,17 +354,12 @@ end
360
354
  # REVIEW: Update a particular user’s password.
361
355
  # NOTE: 400 errors are implicitly invalid password
362
356
  def update_user_password(user_id, user_password_data)
363
- if user_password_data.is_a? String
364
- path = "/d2l/api/lp/#{$lp_ver}/users/#{user_id}/password"
365
- payload = {"Password" => user_password_data}
366
- _put(path, payload)
367
- else
368
- raise ArgumentError, "Argument 'user_password_data' is not a String"
369
- end
357
+ raise ArgumentError, "Argument 'user_password_data' is not a String" unless user_password_data.is_a? String
358
+ path = "/d2l/api/lp/#{$lp_ver}/users/#{user_id}/password"
359
+ payload = { "Password" => user_password_data }
360
+ _put(path, payload)
370
361
  end
371
362
 
372
-
373
-
374
363
  ########################
375
364
  # ROLES:################
376
365
  ########################
@@ -406,7 +395,6 @@ def create_new_role_from_existing_role(deep_copy_role_id, role_copy_data)
406
395
  # POST /d2l/api/lp/(version)/roles/
407
396
  end
408
397
 
409
-
410
398
  ########################
411
399
  # PROFILES:#############
412
400
  ########################
@@ -478,7 +466,6 @@ def get_user_profile_by_user_id(user_id)
478
466
  # Returns UserProfile JSON data block
479
467
  end
480
468
 
481
-
482
469
  # Retrieve a particular profile image, by User ID.
483
470
  # RETURNS: This action returns a file stream containing the current user’s
484
471
  # profile image. Note that the back-end service may return a
@@ -589,26 +576,26 @@ end
589
576
  # REVIEW: retrieve list of known LIS roles
590
577
  def get_lis_roles(lis_urn = "")
591
578
  path = "/d2l/api/lp/#{$lp_ver}/imsconfig/roles/"
592
- path += "#{lis_urn}" if lis_urn != ""
579
+ path += lis_urn.to_s if lis_urn != ""
593
580
  _get(path)
594
581
  # returns array of LIS role data blocks
595
582
  end
596
583
 
597
584
  # NOTE: UNSTABLE
598
585
  # REVIEW: retrieve mappings between user roles and LIS roles
599
- def get_user_role_lis_mappings(lis_urn = "", d2lid = 0)
586
+ def get_user_role_lis_mappings_by_urn(lis_urn = "", d2lid = 0)
600
587
  path = "/d2l/api/lp/#{$lp_ver}/imsconfig/map/roles/"
601
- path += "#{lis_urn}" if lis_urn != ""
602
- path += "#{d2lid}" if d2lid != 0
588
+ path += lis_urn.to_s if lis_urn != ""
589
+ path += d2lid.to_s if d2lid != 0
603
590
  _get(path)
604
591
  # returns JSON array of LIS role mapping data blocks
605
592
  end
606
593
 
607
594
  # NOTE: UNSTABLE
608
595
  # REVIEW: retrieve mapping between a user role and a LIS role
609
- def get_user_role_lis_mappings(role_id, d2lid = 0)
596
+ def get_user_role_lis_mappings_by_role(role_id, d2lid = 0)
610
597
  path = "/d2l/api/lp/#{$lp_ver}/imsconfig/map/roles/#{role_id}"
611
- path += "#{d2lid}" if d2lid != 0
598
+ path += d2lid.to_s if d2lid != 0
612
599
  _get(path)
613
600
  # returns JSON array of LIS role mapping data blocks
614
601
  end
@@ -620,7 +607,6 @@ def map_user_role_to_lis_roles(role_id, mappings)
620
607
  # PUT /d2l/api/lp/(version)/imsconfig/map/roles/(roleId)
621
608
  end
622
609
 
623
-
624
610
  ########################
625
611
  # SETTINGS:#############
626
612
  ########################
@@ -641,30 +627,34 @@ def get_locale_account_settings(user_id)
641
627
  # returns Locale JSON block
642
628
  end
643
629
 
644
-
645
-
646
- # TODO: Add schema check for update_locale conforming to the D2L update_locale
630
+ # Add schema check for update_locale conforming to the D2L update_locale
647
631
  # JSON data block of form: { "LocaleId" : <D2LID>}.
648
- def is_valid_locale_id(locale_id)
649
-
632
+ def valid_locale_id?(locale_id)
633
+ # check if its an integer OR if its a string comprised of only numbers.
634
+ locale_id.is_a?(Numeric) || locale_id.is_a?(String) && !!locale_id.match(/^(\d)+$/)
650
635
  end
651
636
 
652
637
  # REVIEW: Update the current user’s locale account settings.
653
- # TODO: Add schema check for update_locale
654
638
  # update_locale = { "LocaleId" : <D2LID>}
655
- def update_current_user_locale_account_settings(update_locale)
656
- payload = {"LocaleId" => 0}.merge!(update_locale)
639
+ def update_current_user_locale_account_settings(locale_id)
640
+ unless valid_locale_id?(locale_id)
641
+ raise ArgumentError, "Variable 'update_locale' is not a "
642
+ end
643
+ payload = { 'LocaleId' => locale_id }
657
644
  path = "/d2l/api/lp/#{$lp_ver}/accountSettings/mysettings/locale/"
645
+
658
646
  # requires UpdateSettings JSON data block
659
647
  # update_locale = { "LocaleId" : <D2LID>}
660
648
  _put(path, payload)
661
649
  end
662
650
 
663
651
  # REVIEW: Update the locale account settings for a particular user.
664
- # TODO: Add schema check for update_locale
665
652
  # update_locale = { "LocaleId" : <D2LID>}
666
- def update_user_locale_account_settings(user_id, update_locale)
667
- payload = {"LocaleId" => 0}.merge!(update_locale)
653
+ def update_user_locale_account_settings(user_id, locale_id)
654
+ unless valid_locale_id?(locale_id)
655
+ raise ArgumentError, "Variable 'update_locale' is not a "
656
+ end
657
+ payload = { 'LocaleId' => locale_id }
668
658
  path = "/d2l/api/lp/#{$lp_ver}/accountSettings/#{user_id}/locale/"
669
659
  # requires UpdateSettings JSON data block
670
660
  # update_locale = { "LocaleId" : <D2LID>}
@@ -1,3 +1,3 @@
1
1
  module D2lSdk
2
- VERSION = "0.1.10"
2
+ VERSION = '0.1.11'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: d2l_sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.10
4
+ version: 0.1.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kulpa
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-03-31 00:00:00.000000000 Z
11
+ date: 2017-05-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -144,9 +144,13 @@ executables: []
144
144
  extensions: []
145
145
  extra_rdoc_files: []
146
146
  files:
147
+ - ".codeclimate.yml"
148
+ - ".fasterer.yml"
147
149
  - ".gitignore"
148
150
  - ".rspec"
151
+ - ".rubocop.yml"
149
152
  - ".travis.yml"
153
+ - ".vscode/settings.json"
150
154
  - CODE_OF_CONDUCT.md
151
155
  - Gemfile
152
156
  - Gemfile.lock
@@ -155,7 +159,6 @@ files:
155
159
  - Rakefile
156
160
  - bin/console
157
161
  - bin/setup
158
- - change_lastname.rb
159
162
  - d2l_sdk.gemspec
160
163
  - example_scripts/adjusted_courses.txt
161
164
  - example_scripts/fix_201708_courses.rb
@@ -192,8 +195,6 @@ files:
192
195
  - lib/d2l_sdk/setup_versions.rb
193
196
  - lib/d2l_sdk/user.rb
194
197
  - lib/d2l_sdk/version.rb
195
- - lol.txt
196
- - test.rb
197
198
  - tests/All_Crud_test.rb
198
199
  - tests/ETL_listener.rb
199
200
  - tests/TestCourseCRUD.rb
@@ -1,65 +0,0 @@
1
- require 'd2l_sdk'
2
-
3
- # Setup vars for username and last name
4
- # retrieved via rundeck args passed to this script.
5
- @username = ARGV[0]
6
- @new_lastname = ARGV[1]
7
- @debug = false
8
-
9
- # Check that the user exists.
10
- # If the username doesn't exist, then raise.
11
- # Why: You can't change a user's profile that you can't reference.
12
- if !does_user_exist(@username)
13
- raise ArgumentError, "ARGV[0], '#{@username}', is not a username that exists."
14
- end
15
-
16
- # Already asserted that the user exists. Retrieve Hash of the user's profile.
17
- user_profile = get_user_by_username(@username)
18
-
19
- # debug code
20
- puts "Old User Data: \n" if @debug
21
- ap user_profile if @debug
22
-
23
- # Change the previous d2l user data and create a new json-formatted
24
- # payload. The payload is merged! with a skeleton payload, but it as
25
- # each parameter is defined, this will not affect its usage.
26
- old_lastname = user_profile["LastName"]
27
- user_profile["LastName"] = @new_lastname # update the user's lastname
28
- user_profile["UserName"].sub! old_lastname, @new_lastname # update the user's username
29
- unless user_profile["ExternalEmail"].nil?
30
- user_profile["ExternalEmail"].sub! old_lastname, @new_lastname # update the user's email
31
- end
32
-
33
- # Check if there already is a user created with the +new username+
34
- if does_user_exist(user_profile["UserName"])
35
- raise RuntimeError, "A user already exists with the new username, '#{user_profile["UserName"]}'."
36
- end
37
-
38
- # Pull in data only necessary for user_data in +update+ form.
39
- new_user_data =
40
- {
41
- 'OrgDefinedId' => user_profile["OrgDefinedId"],
42
- 'FirstName' => user_profile["FirstName"],
43
- 'MiddleName' => user_profile["MiddleName"],
44
- 'LastName' => user_profile["LastName"], # Changed previously
45
- 'ExternalEmail' => user_profile["ExternalEmail"],
46
- 'UserName' => user_profile["UserName"],
47
- 'Activation' =>
48
- {
49
- 'IsActive' => user_profile["Activation"]["IsActive"]
50
- }
51
- }
52
-
53
- # Debug code
54
- puts "New User Data: \n" if @debug
55
- ap new_user_data if @debug
56
-
57
- # Finally update the user's UserData
58
- update_user_data(user_profile["UserId"], new_user_data)
59
-
60
- # Check if the user was properly created.
61
- if !does_user_exist(user_profile["UserName"])
62
- raise "The user's last name was unsuccessfully updated."
63
- else
64
- puts "The username was successfully updated to: '#{user_profile["UserName"]}'."
65
- end