ruby-jss 1.4.1 → 1.5.1

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.

Potentially problematic release.


This version of ruby-jss might be problematic. Click here for more details.

Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES.md +38 -0
  3. data/lib/jamf.rb +10 -3
  4. data/lib/jamf/api/abstract_classes/collection_resource.rb +329 -150
  5. data/lib/jamf/api/abstract_classes/generic_reference.rb +9 -1
  6. data/lib/jamf/api/abstract_classes/json_object.rb +106 -82
  7. data/lib/jamf/api/abstract_classes/prestage.rb +54 -29
  8. data/lib/jamf/api/abstract_classes/prestage_skip_setup_items.rb +21 -0
  9. data/lib/jamf/api/abstract_classes/resource.rb +4 -4
  10. data/lib/jamf/api/abstract_classes/singleton_resource.rb +1 -1
  11. data/lib/jamf/api/connection.rb +13 -9
  12. data/lib/jamf/api/connection/api_error.rb +8 -8
  13. data/lib/jamf/api/connection/token.rb +16 -15
  14. data/lib/jamf/api/json_objects/computer_prestage_skip_setup_items.rb +14 -1
  15. data/lib/jamf/api/json_objects/device_enrollment_device.rb +14 -7
  16. data/lib/jamf/api/json_objects/device_enrollment_device_sync_state.rb +81 -0
  17. data/lib/jamf/api/json_objects/locale.rb +59 -0
  18. data/lib/jamf/api/json_objects/md_prestage_skip_setup_items.rb +50 -1
  19. data/lib/jamf/api/json_objects/prestage_location.rb +3 -3
  20. data/lib/jamf/api/json_objects/prestage_purchasing_data.rb +7 -7
  21. data/lib/jamf/api/json_objects/prestage_scope.rb +1 -1
  22. data/lib/jamf/api/{resources/collection_resources → json_objects}/time_zone.rb +9 -23
  23. data/lib/jamf/api/mixins/bulk_deletable.rb +27 -6
  24. data/lib/jamf/api/mixins/change_log.rb +201 -51
  25. data/lib/jamf/api/mixins/filterable.rb +51 -0
  26. data/lib/jamf/api/mixins/pageable.rb +208 -0
  27. data/lib/jamf/api/mixins/sortable.rb +59 -0
  28. data/lib/jamf/api/resources/collection_resources/building.rb +19 -8
  29. data/lib/jamf/api/resources/collection_resources/category.rb +5 -3
  30. data/lib/jamf/api/resources/collection_resources/computer_prestage.rb +11 -4
  31. data/lib/jamf/api/resources/collection_resources/device_enrollment.rb +10 -10
  32. data/lib/jamf/api/resources/collection_resources/inventory_preload_record.rb +11 -3
  33. data/lib/jamf/api/resources/collection_resources/mobile_device_prestage.rb +24 -22
  34. data/lib/jamf/api/resources/collection_resources/script.rb +61 -25
  35. data/lib/jamf/api/resources/singleton_resources/app_store_country_codes.rb +15 -5
  36. data/lib/jamf/api/resources/singleton_resources/client_checkin_settings.rb +14 -14
  37. data/lib/jamf/api/resources/singleton_resources/locales.rb +155 -0
  38. data/lib/jamf/api/resources/singleton_resources/time_zones.rb +213 -0
  39. data/lib/jamf/validate.rb +63 -24
  40. data/lib/jamf/version.rb +1 -1
  41. data/lib/jss.rb +2 -1
  42. data/lib/jss/api_connection.rb +110 -370
  43. data/lib/jss/api_object.rb +3 -19
  44. data/lib/jss/api_object/categorizable.rb +1 -1
  45. data/lib/jss/api_object/configuration_profile.rb +34 -3
  46. data/lib/jss/api_object/directory_binding_type.rb +66 -60
  47. data/lib/jss/api_object/directory_binding_type/active_directory.rb +71 -34
  48. data/lib/jss/api_object/directory_binding_type/admitmac.rb +536 -467
  49. data/lib/jss/api_object/directory_binding_type/centrify.rb +21 -7
  50. data/lib/jss/api_object/directory_binding_type/open_directory.rb +4 -4
  51. data/lib/jss/api_object/distribution_point.rb +2 -2
  52. data/lib/jss/api_object/dock_item.rb +102 -96
  53. data/lib/jss/api_object/extendable.rb +1 -1
  54. data/lib/jss/api_object/group.rb +33 -2
  55. data/lib/jss/api_object/network_segment.rb +43 -12
  56. data/lib/jss/api_object/patch_source.rb +10 -9
  57. data/lib/jss/api_object/printer.rb +10 -4
  58. data/lib/jss/api_object/scopable.rb +10 -15
  59. data/lib/jss/exceptions.rb +3 -0
  60. data/lib/jss/server.rb +15 -0
  61. data/lib/jss/version.rb +1 -1
  62. metadata +37 -22
@@ -849,11 +849,7 @@ module JSS
849
849
  raise ArgumentError, 'Missing searchterm or fetch key'
850
850
  end
851
851
 
852
- begin
853
- return new fetch_rsrc: fetch_rsrc, api: api
854
- rescue RestClient::NotFound
855
- raise JSS::NoSuchItemError, "No #{self::RSRC_OBJECT_KEY} found #{err_detail}" unless fetch_rsrc
856
- end
852
+ new fetch_rsrc: fetch_rsrc, api: api
857
853
  end # fetch
858
854
 
859
855
  # Fetch the mostly- or fully-raw JSON or XML data for an object of this
@@ -895,8 +891,6 @@ module JSS
895
891
  return data if format == :json || as_string
896
892
 
897
893
  REXML::Document.new(data)
898
- rescue RestClient::NotFound
899
- raise JSS::NoSuchItemError, "No #{self} with id #{id}"
900
894
  end
901
895
 
902
896
  # PUT some raw XML to the API for a given id in this subclass.
@@ -925,8 +919,6 @@ module JSS
925
919
  validate_not_metaclass(self)
926
920
  rsrc = "#{self::RSRC_BASE}/id/#{id}"
927
921
  REXML::Document.new(api.put_rsrc rsrc, xml.to_s)
928
- rescue RestClient::NotFound
929
- raise JSS::NoSuchItemError, "No #{self} with id #{id}"
930
922
  end
931
923
 
932
924
  # POST some raw XML to the API for a given id in this subclass.
@@ -1223,14 +1215,8 @@ module JSS
1223
1215
  #
1224
1216
  def delete
1225
1217
  return unless @in_jss
1226
- begin
1227
- @api.delete_rsrc @rest_rsrc
1228
- rescue RestClient::NotFound, RestClient::ResourceNotFound
1229
- # over slow connections (?) or more likely
1230
- # split-tunnel VPN connections, sometimes the thing gets deleted
1231
- # the call gets a 404 anyway
1232
- nil
1233
- end
1218
+
1219
+ @api.delete_rsrc @rest_rsrc
1234
1220
 
1235
1221
  @rest_rsrc = "#{self.class::RSRC_BASE}/name/#{CGI.escape @name.to_s}"
1236
1222
  @id = nil
@@ -1433,8 +1419,6 @@ module JSS
1433
1419
  end
1434
1420
 
1435
1421
  raw_json[args[:rsrc_object_key]]
1436
- rescue RestClient::ResourceNotFound
1437
- raise NoSuchItemError, "No #{self.class::RSRC_OBJECT_KEY} found matching resource #{rsrc}"
1438
1422
  end
1439
1423
 
1440
1424
  # Start examining the @init_data recieved from the API
@@ -198,7 +198,7 @@ module JSS
198
198
 
199
199
  if cat.is_a? String
200
200
  @category_name = cat
201
- @category_id = JSS::Category.category_id_from_name @category_name
201
+ @category_id = JSS::Category.category_id_from_name @category_name, api: @api
202
202
  else
203
203
  @category_name = cat[:name]
204
204
  @category_id = cat[:id]
@@ -23,7 +23,6 @@
23
23
  #
24
24
  #
25
25
 
26
- #
27
26
  module JSS
28
27
 
29
28
  # Classes
@@ -68,7 +67,6 @@ module JSS
68
67
  # How is the category stored in the API data?
69
68
  CATEGORY_DATA_TYPE = Hash
70
69
 
71
-
72
70
  # Attributes
73
71
  ###################################
74
72
 
@@ -125,12 +123,42 @@ module JSS
125
123
  parsed_payloads['PayloadContent']
126
124
  end
127
125
 
126
+ # @param new_content [Array<Hash>] replace the payload content entirely.
127
+ #
128
+ # The 'payload' of a config profile is an XML Plist. The top-level key
129
+ # of that plist 'PayloadContent' contains an Array of Dicts, each one being
130
+ # a part of the payload for the profile.
131
+ #
132
+ # When replacing the PayloadContent Array, using this method, provide a
133
+ # *ruby* Array full of *ruby* hashes, and they will be converted to a
134
+ # Plist and embedded into the API XML appropriately.
135
+ #
136
+ # WARNING: This is experimental! Editing the Plist Payload of a Config
137
+ # profile may break the profile. Make sure you test on a fake profile
138
+ # before using this method in production.
139
+ #
140
+ # @return [void]
141
+ #
142
+ def payload_content=(new_content)
143
+ payload_plist_data = parsed_payloads
144
+ payload_plist_data['PayloadContent'] = new_content
145
+ @payloads = payload_plist_data.to_plist
146
+ @need_to_update = true
147
+ @update_payloads = true
148
+ end
149
+
128
150
  # @return [Array<String>] the PayloadType of each payload (e.g. com.apple.caldav.account)
129
151
  #
130
152
  def payload_types
131
153
  payload_content.map { |p| p['PayloadType'] }
132
154
  end
133
155
 
156
+ # clear flag after updating
157
+ def update
158
+ super
159
+ @update_payloads = nil
160
+ end
161
+
134
162
  # Private Instance Methods
135
163
  ###################################
136
164
  private
@@ -142,7 +170,10 @@ module JSS
142
170
  gen = obj.add_element('general')
143
171
  gen.add_element('description').text = @description
144
172
  gen.add_element('redeploy_on_update').text = @redeploy_on_update
145
-
173
+ if @update_payloads
174
+ payloads_plist_xml = JSS.escape_xml(@payloads.gsub(/^\t*/, '').gsub(">\n", '>'))
175
+ gen.add_element('payloads').text = payloads_plist_xml
176
+ end
146
177
  obj << @scope.scope_xml
147
178
  add_self_service_xml doc
148
179
  add_category_to_xml doc
@@ -25,66 +25,72 @@
25
25
 
26
26
  module JSS
27
27
 
28
- # Module for containing the different types of DirectoryBindings stored within the JSS
29
- module DirectoryBindingType
30
-
31
- # Module Variables
32
- #####################################
33
-
34
- # Module Methods
35
- #####################################
36
- def should_update
37
- @need_to_update = true
38
- end
39
-
40
- def set_type_settings(settings)
41
- @type_settings = settings
42
- @type_settings.container = self
43
- end
44
-
45
- # Classes
46
- #####################################
47
-
48
- # A generic binding type class that sets common variables, methods, and constructors
49
- # for all the different directory binding types.
50
- #
51
- # @author Tyler Morgan
52
- class DirectoryBindingType
53
- # Mix-Ins
54
- #####################################
55
-
56
- # Class Methods
57
- #####################################
58
-
59
- # Class Constants
60
- #####################################
61
-
62
- # The different network protocols supported.
63
- NETWORK_PROTOCOL = {
64
- afp: "AFP",
65
- smb: "SMB"
66
- }.freeze
67
-
68
-
69
- # The different home folder types.
70
- HOME_FOLDER_TYPE = {
71
- network: "Network",
72
- local: "Local",
73
- either: "Either",
74
- mobile: "Mobile"
75
- }.freeze
76
-
77
- # Attributes
78
- #####################################
79
-
80
- # This is used to properly handle updating the containing object.
81
- attr_accessor :container
82
- end
28
+ # Module for containing the different types of DirectoryBindings stored within the JSS
29
+ module DirectoryBindingType
30
+
31
+ # Module Variables
32
+ #####################################
33
+
34
+ # Module Methods
35
+ #####################################
36
+ def should_update
37
+ @need_to_update = true
38
+ end
39
+
40
+ def set_type_settings(settings)
41
+ @type_settings = settings
42
+ @type_settings.container = self
43
+ end
44
+
45
+ # Classes
46
+ #####################################
47
+
48
+ # A generic binding type class that sets common variables, methods, and constructors
49
+ # for all the different directory binding types.
50
+ #
51
+ # @author Tyler Morgan
52
+ class DirectoryBindingType
53
+
54
+
55
+ # Mix-Ins
56
+ #####################################
57
+
58
+ # Class Methods
59
+ #####################################
60
+
61
+ # Class Constants
62
+ #####################################
63
+
64
+ # The different network protocols supported.
65
+ NETWORK_PROTOCOL = {
66
+ afp: 'AFP',
67
+ smb: 'SMB'
68
+ }.freeze
69
+
70
+ # The different home folder types.
71
+ HOME_FOLDER_TYPE = {
72
+ network: 'Network',
73
+ local: 'Local',
74
+ either: 'Either',
75
+ mobile: 'Mobile'
76
+ }.freeze
77
+
78
+ # Attributes
79
+ #####################################
80
+
81
+ # This is used to properly handle updating the containing object.
82
+ attr_accessor :container
83
+
84
+
85
+ end
86
+
87
+
83
88
  end
89
+
84
90
  end
85
91
 
86
- require "jss/api_object/directory_binding_type/active_directory"
87
- require "jss/api_object/directory_binding_type/open_directory"
88
- require "jss/api_object/directory_binding_type/admitmac"
89
- require "jss/api_object/directory_binding_type/centrify"
90
- require "jss/api_object/directory_binding_type/powerbroker_identity_services"
92
+ require 'jss/api_object/directory_binding_type/active_directory'
93
+ require 'jss/api_object/directory_binding_type/open_directory'
94
+ require 'jss/api_object/directory_binding_type/admitmac'
95
+ require 'jss/api_object/directory_binding_type/centrify'
96
+ require 'jss/api_object/directory_binding_type/powerbroker_identity_services'
@@ -259,11 +259,17 @@ module JSS
259
259
  # @return [void]
260
260
  def default_shell=(newvalue)
261
261
 
262
- # Data Check
263
- raise JSS::InvalidDataError, "default_shell must be a string." unless newvalue.is_a? String
262
+ new =
263
+ if newvalue.to_s.empty?
264
+ JSS::BLANK
265
+ else
266
+ # Data Check
267
+ raise JSS::InvalidDataError, "default_shell must be a string." unless newvalue.is_a? String
268
+ newvalue
269
+ end
264
270
 
265
271
  # Update Value
266
- @default_shell = newvalue
272
+ @default_shell = new
267
273
 
268
274
  # Set the object to needing to be updated.
269
275
  self.container&.should_update
@@ -280,12 +286,17 @@ module JSS
280
286
  #
281
287
  # @return [void]
282
288
  def uid=(newvalue)
283
-
284
- # Data Check
285
- raise JSS::InvalidDataError, "uid must be either an integer or a string." unless (newvalue.is_a? Integer || newvalue.is_a?(String))
289
+ new =
290
+ if newvalue.to_s.empty?
291
+ JSS::BLANK
292
+ else
293
+ # Data Check
294
+ raise JSS::InvalidDataError, "uid must be either an integer or a string." unless (newvalue.is_a? Integer || newvalue.is_a?(String))
295
+ newvalue
296
+ end
286
297
 
287
298
  # Update Value
288
- @uid = newvalue
299
+ @uid = new
289
300
 
290
301
  # Set the object to needing to be updated.
291
302
  self.container&.should_update
@@ -302,12 +313,17 @@ module JSS
302
313
  #
303
314
  # @return [void]
304
315
  def forest=(newvalue)
305
-
306
- # Data Check
307
- raise JSS::InvalidDataError, "forest must be a string." unless newvalue.is_a? String
308
-
316
+ new =
317
+ if newvalue.to_s.empty?
318
+ JSS::BLANK
319
+ else
320
+ # Data Check
321
+ raise JSS::InvalidDataError, "forest must be a string." unless newvalue.is_a? String
322
+ newvalue
323
+ end
324
+
309
325
  # Update Value
310
- @forest = newvalue
326
+ @forest = new
311
327
 
312
328
  # Set the object to needing to be updated.
313
329
  self.container&.should_update
@@ -323,12 +339,17 @@ module JSS
323
339
  #
324
340
  # @return [void]
325
341
  def user_gid=(newvalue)
326
-
327
- # Data Check
328
- raise JSS::InvalidDataError, "user_gid must be either an integer or a string." unless (newvalue.is_a? Integer || newvalue.is_a?(String))
342
+ new =
343
+ if newvalue.to_s.empty?
344
+ JSS::BLANK
345
+ else
346
+ # Data Check
347
+ raise JSS::InvalidDataError, "user_gid must be either an integer or a string." unless (newvalue.is_a? Integer || newvalue.is_a?(String))
348
+ newvalue
349
+ end
329
350
 
330
351
  # Update Value
331
- @user_gid = newvalue
352
+ @user_gid = new
332
353
 
333
354
  # Set the object to needing to be updated.
334
355
  self.container&.should_update
@@ -345,12 +366,17 @@ module JSS
345
366
  #
346
367
  # @return [void]
347
368
  def gid=(newvalue)
348
-
349
- # Data Check
350
- raise JSS::InvalidDataError, "gid must be either an integer or a string." unless (newvalue.is_a? Integer || newvalue.is_a?(String))
351
-
369
+ new =
370
+ if newvalue.to_s.empty?
371
+ JSS::BLANK
372
+ else
373
+ # Data Check
374
+ raise JSS::InvalidDataError, "gid must be either an integer or a string." unless (newvalue.is_a? Integer || newvalue.is_a?(String))
375
+ newvalue
376
+ end
377
+
352
378
  # Update Value
353
- @gid = newvalue
379
+ @gid = new
354
380
 
355
381
  # Set the object to needing to be updated.
356
382
  self.container&.should_update
@@ -389,12 +415,17 @@ module JSS
389
415
  #
390
416
  # @return [void]
391
417
  def preferred_domain=(newvalue)
392
-
393
- # Data Check
394
- raise JSS::InvalidDataError, "preferred_domain must be a string." unless newvalue.is_a? String
418
+ new =
419
+ if newvalue.to_s.empty?
420
+ JSS::BLANK
421
+ else
422
+ # Data Check
423
+ raise JSS::InvalidDataError, "preferred_domain must be a string." unless newvalue.is_a? String
424
+ newvalue
425
+ end
395
426
 
396
427
  # Update Value
397
- @preferred_domain = newvalue
428
+ @preferred_domain = new
398
429
 
399
430
  # Set the object to needing to be updated.
400
431
  self.container&.should_update
@@ -411,16 +442,22 @@ module JSS
411
442
  #
412
443
  # @return [void]
413
444
  def admin_groups=(newvalue)
414
-
415
- # Data Check
416
- raise JSS::InvalidDataError, "admin_groups must be either a string or an array of strings." unless (newvalue.is_a? String || newvalue.is_a?(Array))
417
-
445
+ new =
446
+ if newvalue.to_s.empty?
447
+ JSS::BLANK
448
+ else
449
+ # Data Check
450
+ raise JSS::InvalidDataError, "admin_groups must be either a string or an array of strings." unless (newvalue.is_a? String || newvalue.is_a?(Array))
451
+
452
+ if newvalue.is_a? Array
453
+ newvalue.join ","
454
+ else
455
+ newvalue
456
+ end
457
+ end
458
+
418
459
  # Update Value
419
- if newvalue.is_a? Array
420
- @admin_groups = newvalue.join ","
421
- else
422
- @admin_groups = newvalue
423
- end
460
+ @admin_groups = new
424
461
 
425
462
  # Set the object to needing to be updated.
426
463
  self.container&.should_update
@@ -24,502 +24,571 @@
24
24
  ###
25
25
 
26
26
  module JSS
27
-
28
- # Module for containing the different types of DirectoryBindings stored within the JSS
29
-
30
- module DirectoryBindingType
31
-
32
- # Module Variables
33
- #####################################
34
-
35
- # Module Methods
36
- #####################################
37
-
38
- # Classes
39
- #####################################
40
-
41
- # Class for the specific ADmitMac DirectoryBinding type stored within the JSS
42
- #
43
- # @author Tyler Morgan
44
- #
45
- # @note "Map Home Directory To Attribute" is currently only available in the Jamf Pro UI not through the API.
46
- #
47
- # Attributes
48
- # @!attribute [rw] require_confirmation
49
- # @!attribute [rw] local_home
50
- # @!attribute [rw] mount_style
51
- # @!attribute [rw] default_shell
52
- # @!attribute [rw] mount_network_home
53
- # @!attribute [rw] place_home_folders
54
- # @!attribute [rw] uid
55
- # @!attribute [rw] user_gid
56
- # @!attribute [rw] gid
57
- # @!attribute [rw] admin_group
58
- # @!attribute [rw] cached_credentials
59
- # @!attribute [rw] add_user_to_local
60
- # @!attribute [rw] users_ou
61
- # @!attribute [rw] groups_ou
62
- # @!attribute [rw] printers_ou
63
- # @!attribute [rw] shared_folders_ou
64
- # TODO: Include default values upon creation
65
-
66
- class ADmitMac < DirectoryBindingType
67
- # Mix-Ins
68
- #####################################
69
-
70
- # Class Methods
71
- #####################################
72
-
73
- # Class Constants
74
- #####################################
75
-
76
- # Attributes
77
- #####################################
78
-
79
- attr_reader :require_confirmation
80
- attr_reader :local_home
81
- attr_reader :mount_style
82
- attr_reader :default_shell
83
- attr_reader :mount_network_home
84
- attr_reader :place_home_folders
85
- attr_reader :uid
86
- attr_reader :user_gid
87
- attr_reader :gid
88
- attr_reader :admin_group
89
- attr_reader :cached_credentials
90
- attr_reader :add_user_to_local
91
- attr_reader :users_ou
92
- attr_reader :groups_ou
93
- attr_reader :printers_ou
94
- attr_reader :shared_folders_ou
95
-
96
- # Constructor
97
- #####################################
98
-
99
- # An initializer for the ADmitMac object.
100
- #
101
- # @author Tyler Morgan
102
- # @see JSS::DirectoryBinding
103
- # @see JSS::DirectoryBindingType
104
- #
105
- # @note Due to a JSS API funk, mount_style is not able to be configured through the API. It is linked to place_home_folders
106
- #
107
- # @param [Hash] initialize data
108
- def initialize(init_data)
109
-
110
- # Return without processing anything since there is
111
- # nothing to process.
112
- return if init_data.nil?
113
-
114
- # Process the provided information
115
- @require_confirmation = init_data[:require_confirmation]
116
- @default_shell = init_data[:default_shell]
117
- @mount_network_home = init_data[:mount_network_home]
118
- @place_home_folders = init_data[:place_home_folders]
119
- @uid = init_data[:uid]
120
- @user_gid = init_data[:user_gid]
121
- @gid = init_data[:gid]
122
- @cached_credentials = init_data[:cached_credentials]
123
- @add_user_to_local = init_data[:add_user_to_local]
124
- @users_ou = init_data[:users_ou]
125
- @groups_ou = init_data[:groups_ou]
126
- @printers_ou = init_data[:printers_ou]
127
- @shared_folders_ou = init_data[:shared_folders_ou]
128
- @mount_style = init_data[:mount_style]
129
-
130
- if init_data[:local_home].nil? || init_data[:local_home].is_a?(String)
131
- raise JSS::InvalidDataError, "Local Home must be one of #{HOME_FOLDER_TYPE.values.join(', ')}." unless HOME_FOLDER_TYPE.values.include? init_data[:local_home] || init_data[:local_home].nil?
132
-
133
- @local_home = init_data[:local_home]
134
- else
135
- raise JSS::InvalidDataError, "Local Home must be one of :#{HOME_FOLDER_TYPE.keys.join(',:')}." unless HOME_FOLDER_TYPE.keys.include? init_data[:local_home]
136
- end
137
-
138
- if init_data[:admin_group].nil?
139
- # This is needed since we have the ability to add and
140
- # remove admin groups from this array.
141
- @admin_group = []
142
- elsif init_data[:admin_group].is_a? String
143
- @admin_group = init_data[:admin_group].split(',')
144
- else
145
- @admin_group = init_data[:admin_group]
146
- end
147
- end
148
-
149
-
150
-
151
- # Public Instance Methods
152
- #####################################
153
-
154
- # Require confirmation before creating a mobile account on the system.
155
- #
156
- # @author Tyler Morgan
157
- #
158
- # @param newvalue [Bool]
159
- #
160
- # @raise [JSS::InvalidDataError] If the new value doesn't match a Bool value
161
- #
162
- # @return [void]
163
- def require_confirmation=(newvalue)
164
-
165
- raise JSS::InvalidDataError, "require_confirmation must be true or false." unless newvalue.is_a? Bool
166
-
167
- @require_confirmation = newvalue
168
-
169
- self.container&.should_update
170
- end
171
-
172
-
173
- # The type of home directory type created upon logging into a system
174
- #
175
- # @author Tyler Morgan
176
- #
177
- # @param newvalue [Symbol] The key specific to the folder type you want in HOME_FOLDER_TYPE
178
- # @see JSS::DirectoryBindingType::HOME_FOLDER_TYPE
179
- #
180
- # @raise [JSS::InvalidDataError] If the new value is not one of the possible keys in HOME_FOLDER_TYPE
181
- #
182
- # @return [void]
183
- def local_home=(newvalue)
184
-
185
- raise JSS::InvalidDataError, "local_home must be one of :#{HOME_FOLDER_TYPE.keys.join(',:')}." unless HOME_FOLDER_TYPE.keys.include? newvalue
186
-
187
- @local_home = HOME_FOLDER_TYPE[newvalue]
188
-
189
- self.container&.should_update
190
- end
191
-
192
- # The default shell assigned first upon logging into a system
193
- #
194
- # @author Tyler Morgan
195
- #
196
- # @param newvalue [String] The string path of the shell file being set as the default
197
- #
198
- # @raise [JSS::InvalidDataError] If the new value is not a String
199
- #
200
- # @return [void]
201
- def default_shell=(newvalue)
202
-
203
- raise JSS::InvalidDataError, "default_shell must be empty or a string." unless newvalue.is_a?(String)
204
-
205
- @default_shell = newvalue
206
-
207
- self.container&.should_update
208
- end
209
27
 
210
-
211
- # Mount network home folder on desktop
212
- #
213
- # @author Tyler Morgan
214
- #
215
- # @param newvalue [Bool]
216
- #
217
- # @raise [JSS::InvalidDataError] If the new value is not a Bool
218
- #
219
- # @return [void]
220
- def mount_network_home=(newvalue)
221
-
222
- raise JSS::InvalidDataError, "mount_network_home must be true or false." unless newvalue.is_a? Bool
223
-
224
- @mount_network_home = newvalue
225
-
226
- self.container&.should_update
28
+ # Module for containing the different types of DirectoryBindings stored within the JSS
29
+
30
+ module DirectoryBindingType
31
+
32
+ # Module Variables
33
+ #####################################
34
+
35
+ # Module Methods
36
+ #####################################
37
+
38
+ # Classes
39
+ #####################################
40
+
41
+ # Class for the specific ADmitMac DirectoryBinding type stored within the JSS
42
+ #
43
+ # @author Tyler Morgan
44
+ #
45
+ # @note "Map Home Directory To Attribute" is currently only available in the Jamf Pro UI not through the API.
46
+ #
47
+ # Attributes
48
+ # @!attribute [rw] require_confirmation
49
+ # @!attribute [rw] local_home
50
+ # @!attribute [rw] mount_style
51
+ # @!attribute [rw] default_shell
52
+ # @!attribute [rw] mount_network_home
53
+ # @!attribute [rw] place_home_folders
54
+ # @!attribute [rw] uid
55
+ # @!attribute [rw] user_gid
56
+ # @!attribute [rw] gid
57
+ # @!attribute [rw] admin_group
58
+ # @!attribute [rw] cached_credentials
59
+ # @!attribute [rw] add_user_to_local
60
+ # @!attribute [rw] users_ou
61
+ # @!attribute [rw] groups_ou
62
+ # @!attribute [rw] printers_ou
63
+ # @!attribute [rw] shared_folders_ou
64
+ # TODO: Include default values upon creation
65
+ class ADmitMac < DirectoryBindingType
66
+
67
+ # Mix-Ins
68
+ #####################################
69
+
70
+ # Class Methods
71
+ #####################################
72
+
73
+ # Class Constants
74
+ #####################################
75
+
76
+ # Attributes
77
+ #####################################
78
+
79
+ attr_reader :require_confirmation
80
+ attr_reader :local_home
81
+ attr_reader :mount_style
82
+ attr_reader :default_shell
83
+ attr_reader :mount_network_home
84
+ attr_reader :place_home_folders
85
+ attr_reader :uid
86
+ attr_reader :user_gid
87
+ attr_reader :gid
88
+ attr_reader :admin_group
89
+ attr_reader :cached_credentials
90
+ attr_reader :add_user_to_local
91
+ attr_reader :users_ou
92
+ attr_reader :groups_ou
93
+ attr_reader :printers_ou
94
+ attr_reader :shared_folders_ou
95
+
96
+ # Constructor
97
+ #####################################
98
+
99
+ # An initializer for the ADmitMac object.
100
+ #
101
+ # @author Tyler Morgan
102
+ # @see JSS::DirectoryBinding
103
+ # @see JSS::DirectoryBindingType
104
+ #
105
+ # @note Due to a JSS API funk, mount_style is not able to be configured through the API. It is linked to place_home_folders
106
+ #
107
+ # @param [Hash] initialize data
108
+ def initialize(init_data)
109
+ # Return without processing anything since there is
110
+ # nothing to process.
111
+ return if init_data.nil?
112
+
113
+ # Process the provided information
114
+ @require_confirmation = init_data[:require_confirmation]
115
+ @default_shell = init_data[:default_shell]
116
+ @mount_network_home = init_data[:mount_network_home]
117
+ @place_home_folders = init_data[:place_home_folders]
118
+ @uid = init_data[:uid]
119
+ @user_gid = init_data[:user_gid]
120
+ @gid = init_data[:gid]
121
+ @cached_credentials = init_data[:cached_credentials]
122
+ @add_user_to_local = init_data[:add_user_to_local]
123
+ @users_ou = init_data[:users_ou]
124
+ @groups_ou = init_data[:groups_ou]
125
+ @printers_ou = init_data[:printers_ou]
126
+ @shared_folders_ou = init_data[:shared_folders_ou]
127
+ @mount_style = init_data[:mount_style]
128
+
129
+ if init_data[:local_home].nil? || init_data[:local_home].is_a?(String)
130
+ unless HOME_FOLDER_TYPE.values.include? init_data[:local_home] || init_data[:local_home].nil?
131
+ raise JSS::InvalidDataError, "Local Home must be one of #{HOME_FOLDER_TYPE.values.join(', ')}."
227
132
  end
228
133
 
229
- # Path at which home folders are placed
230
- #
231
- # @author Tyler Morgan
232
- #
233
- # @param newvalue [String] The string path of the folder which user's directory files and folders will be created
234
- #
235
- # @raise [JSS::InvalidDataError] If the new value is not a String
236
- #
237
- # @return [void]
238
- def place_home_folders=(newvalue)
239
-
240
- raise JSS::InvalidDataError, "place_home_folders must be a string." unless newvalue.is_a? String
241
-
242
- @place_home_folders = newvalue
243
-
244
- self.container&.should_update
134
+ @local_home = init_data[:local_home]
135
+ else
136
+ unless HOME_FOLDER_TYPE.keys.include? init_data[:local_home]
137
+ raise JSS::InvalidDataError, "Local Home must be one of :#{HOME_FOLDER_TYPE.keys.join(',:')}."
245
138
  end
139
+ end
246
140
 
247
- # Jamf has these linked for some reason...
248
- alias mount_style place_home_folders
249
-
250
-
251
- # Map specific UID to Attribute
252
- #
253
- # @author Tyler Morgan
254
- #
255
- # @param newvalue [String] The UID you want to be mapped
256
- #
257
- # @raise [JSS::InvalidDataError] If the new value is not a String
258
- #
259
- # @return [void]
260
- def uid=(newvalue)
261
-
262
- raise JSS::InvalidDataError, "uid must be a string, integer, or nil." unless newvalue.is_a?(String) || newvalue.is_a?(Integer) || newvalue.nil?
263
-
264
- @uid = newvalue
265
-
266
- self.container&.should_update
141
+ @admin_group = if init_data[:admin_group].nil?
142
+ # This is needed since we have the ability to add and
143
+ # remove admin groups from this array.
144
+ []
145
+ elsif init_data[:admin_group].is_a? String
146
+ init_data[:admin_group].split(',')
147
+ else
148
+ init_data[:admin_group]
149
+ end
150
+ end
151
+
152
+ # Public Instance Methods
153
+ #####################################
154
+
155
+ # Require confirmation before creating a mobile account on the system.
156
+ #
157
+ # @author Tyler Morgan
158
+ #
159
+ # @param newvalue [Bool]
160
+ #
161
+ # @raise [JSS::InvalidDataError] If the new value doesn't match a Bool value
162
+ #
163
+ # @return [void]
164
+ def require_confirmation=(newvalue)
165
+ raise JSS::InvalidDataError, 'require_confirmation must be true or false.' unless newvalue.is_a?(TrueClass) || newvalue.is_a(FalseClass)
166
+
167
+ @require_confirmation = newvalue
168
+
169
+ container&.should_update
170
+ end
171
+
172
+ # The type of home directory type created upon logging into a system
173
+ #
174
+ # @author Tyler Morgan
175
+ #
176
+ # @param newvalue [Symbol] The key specific to the folder type you want in HOME_FOLDER_TYPE
177
+ # @see JSS::DirectoryBindingType::HOME_FOLDER_TYPE
178
+ #
179
+ # @raise [JSS::InvalidDataError] If the new value is not one of the possible keys in HOME_FOLDER_TYPE
180
+ #
181
+ # @return [void]
182
+ def local_home=(newvalue)
183
+ new =
184
+ if newvalue.to_s.empty?
185
+ JSS::BLANK
186
+ else
187
+ # Data Check
188
+ raise JSS::InvalidDataError, "local_home must be one of :#{HOME_FOLDER_TYPE.keys.join(',:')}." unless HOME_FOLDER_TYPE.keys.include? newvalue
189
+
190
+ HOME_FOLDER_TYPE[newvalue]
267
191
  end
268
192
 
269
-
270
- # Map specific a User's GID to Attribute
271
- #
272
- # @author Tyler Morgan
273
- #
274
- # @param newvalue [String] The User's GID you want to be mapped
275
- #
276
- # @raise [JSS::InvalidDataError] If the new value is not a String
277
- #
278
- # @return [void]
279
- def user_gid=(newvalue)
280
-
281
- raise JSS::InvalidDataError, "user_gid must be a string, integer, or nil." unless newvalue.is_a?(String) || newvalue.is_a?(Integer) || newvalue.nil?
282
-
283
- @user_gid = newvalue
284
-
285
- self.container&.should_update
193
+ @local_home = new
194
+
195
+ container&.should_update
196
+ end
197
+
198
+ # The default shell assigned first upon logging into a system
199
+ #
200
+ # @author Tyler Morgan
201
+ #
202
+ # @param newvalue [String] The string path of the shell file being set as the default
203
+ #
204
+ # @raise [JSS::InvalidDataError] If the new value is not a String
205
+ #
206
+ # @return [void]
207
+ def default_shell=(newvalue)
208
+ new =
209
+ if newvalue.to_s.empty?
210
+ JSS::BLANK
211
+ else
212
+ # Data Check
213
+ raise JSS::InvalidDataError, 'default_shell must be empty or a string.' unless newvalue.is_a?(String)
214
+
215
+ newvalue
286
216
  end
287
217
 
288
-
289
- # Map specific GID to Attribute
290
- #
291
- # @author Tyler Morgan
292
- #
293
- # @param newvalue [String] The GID you want to be mapped
294
- #
295
- # @raise [JSS::InvalidDataError] If the new value is not a String
296
- #
297
- # @return [void]
298
- def gid=(newvalue)
299
-
300
- raise JSS::InvalidDataError, "gid must be a string, integer, or nil." unless newvalue.is_a?(String) || newvalue.is_a?(Integer) || newvalue.nil?
301
-
302
- @gid = newvalue
303
-
304
- self.container&.should_update
218
+ @default_shell = new
219
+
220
+ container&.should_update
221
+ end
222
+
223
+ # Mount network home folder on desktop
224
+ #
225
+ # @author Tyler Morgan
226
+ #
227
+ # @param newvalue [Bool]
228
+ #
229
+ # @raise [JSS::InvalidDataError] If the new value is not a Bool
230
+ #
231
+ # @return [void]
232
+ def mount_network_home=(newvalue)
233
+ raise JSS::InvalidDataError, 'mount_network_home must be true or false.' unless newvalue.is_a?(TrueClass) || newvalue.is_a(FalseClass)
234
+
235
+ @mount_network_home = newvalue
236
+
237
+ container&.should_update
238
+ end
239
+
240
+ # Path at which home folders are placed
241
+ #
242
+ # @author Tyler Morgan
243
+ #
244
+ # @param newvalue [String] The string path of the folder which user's directory files and folders will be created
245
+ #
246
+ # @raise [JSS::InvalidDataError] If the new value is not a String
247
+ #
248
+ # @return [void]
249
+ def place_home_folders=(newvalue)
250
+ new =
251
+ if newvalue.to_s.empty?
252
+ JSS::BLANK
253
+ else
254
+ # Data Check
255
+ raise JSS::InvalidDataError, 'place_home_folders must be a string.' unless newvalue.is_a? String
256
+
257
+ newvalue
305
258
  end
306
259
 
307
- # Set specific groups to become administrators to a system.
308
- #
309
- # @author Tyler Morgan
310
- #
311
- # @param newvalue [Array<String>] An array of all the admin group names you want to set.
312
- # @see add_admin_group
313
- # @see remove_admin_group
314
- #
315
- # @raise [JSS::InvalidDataError] If the new value is not an Array
316
- #
317
- # @return [void]
318
- def admin_group=(newvalue)
319
-
320
- raise JSS::InvalidDataError, "An Array must be provided, please use add_admin_group and remove_admin_group for individual group additions and removals." unless newvalue.is_a? Array
321
-
322
- @admin_group = newvalue
323
-
324
- self.container&.should_update
260
+ @place_home_folders = new
261
+
262
+ container&.should_update
263
+ end
264
+
265
+ # Jamf has these linked for some reason...
266
+ alias mount_style place_home_folders
267
+
268
+ # Map specific UID to Attribute
269
+ #
270
+ # @author Tyler Morgan
271
+ #
272
+ # @param newvalue [String] The UID you want to be mapped
273
+ #
274
+ # @raise [JSS::InvalidDataError] If the new value is not a String
275
+ #
276
+ # @return [void]
277
+ def uid=(newvalue)
278
+ new =
279
+ if newvalue.to_s.empty?
280
+ JSS::BLANK
281
+ else
282
+ # Data Check
283
+ raise JSS::InvalidDataError, 'uid must be a string, integer, or nil.' unless newvalue.is_a?(String) || newvalue.is_a?(Integer) || newvalue.nil?
284
+
285
+ newvalue
325
286
  end
326
287
 
327
-
328
- # The number of times a user can log into the device while not connected to a network
329
- #
330
- # @author Tyler Morgan
331
- #
332
- # @param newvalue [Integer] The number of times you want a user to login while not connected to a network
333
- #
334
- # @raise [JSS::InvalidDataError] If the new value is not an Integer
335
- #
336
- # @return [void]
337
- def cached_credentials=(newvalue)
338
-
339
- raise JSS::InvalidDataError, "cached_credentials must be an integer." unless newvalue.is_a? Integer
340
-
341
- @cached_credentials = newvalue
342
-
343
- self.container&.should_update
288
+ @uid = new
289
+
290
+ container&.should_update
291
+ end
292
+
293
+ # Map specific a User's GID to Attribute
294
+ #
295
+ # @author Tyler Morgan
296
+ #
297
+ # @param newvalue [String] The User's GID you want to be mapped
298
+ #
299
+ # @raise [JSS::InvalidDataError] If the new value is not a String
300
+ #
301
+ # @return [void]
302
+ def user_gid=(newvalue)
303
+ new =
304
+ if newvalue.to_s.empty?
305
+ JSS::BLANK
306
+ else
307
+ # Data Check
308
+ raise JSS::InvalidDataError, 'user_gid must be a string, integer, or nil.' unless newvalue.is_a?(String) || newvalue.is_a?(Integer) || newvalue.nil?
309
+
310
+ newvalue
344
311
  end
345
312
 
346
-
347
- # If the user is a member of one of the groups in admin_group, add them
348
- # to the local administrator group.
349
- #
350
- # @author Tyler Morgan
351
- # @see admin_group
352
- #
353
- # @param newvalue [Bool]
354
- #
355
- # @raise [JSS::InvalidDataError] If the new value is not a Bool
356
- #
357
- # @return [void]
358
- def add_user_to_local=(newvalue)
359
-
360
- raise JSS::InvalidDataError, "add_user_to_local must be true or false." unless newvalue.is_a? Bool
361
-
362
- @add_user_to_local = newvalue
363
-
364
- self.container&.should_update
313
+ @user_gid = new
314
+
315
+ container&.should_update
316
+ end
317
+
318
+ # Map specific GID to Attribute
319
+ #
320
+ # @author Tyler Morgan
321
+ #
322
+ # @param newvalue [String] The GID you want to be mapped
323
+ #
324
+ # @raise [JSS::InvalidDataError] If the new value is not a String
325
+ #
326
+ # @return [void]
327
+ def gid=(newvalue)
328
+ new =
329
+ if newvalue.to_s.empty?
330
+ JSS::BLANK
331
+ else
332
+ # Data Check
333
+ raise JSS::InvalidDataError, 'gid must be a string, integer, or nil.' unless newvalue.is_a?(String) || newvalue.is_a?(Integer) || newvalue.nil?
334
+
335
+ newvalue
365
336
  end
366
337
 
367
-
368
- # An OU path for specific Users
369
- #
370
- # @author Tyler Morgan
371
- #
372
- # @param newvalue [String] The OU path for the specific user
373
- # @note Not sure what this is used for
374
- #
375
- # @raise [JSS::InvalidDataError] If the new value is not a String
376
- #
377
- # @return [void]
378
- def users_ou=(newvalue)
379
-
380
- raise JSS::InvalidDataError, "users_ou must be either a string or nil." unless newvalue.is_a? String || newvalue.nil?
381
-
382
- @users_ou = newvalue
383
-
384
- self.container&.should_update
338
+ @gid = new
339
+
340
+ container&.should_update
341
+ end
342
+
343
+ # Set specific groups to become administrators to a system.
344
+ #
345
+ # @author Tyler Morgan
346
+ #
347
+ # @param newvalue [Array<String>] An array of all the admin group names you want to set.
348
+ # @see add_admin_group
349
+ # @see remove_admin_group
350
+ #
351
+ # @raise [JSS::InvalidDataError] If the new value is not an Array
352
+ #
353
+ # @return [void]
354
+ def admin_group=(newvalue)
355
+ new =
356
+ if newvalue.to_s.empty?
357
+ JSS::BLANK
358
+ else
359
+ # Data Check
360
+ unless newvalue.is_a? Array
361
+ raise JSS::InvalidDataError, 'An Array must be provided, please use add_admin_group and remove_admin_group for individual group additions and removals.'
362
+ end
363
+
364
+ newvalue
385
365
  end
386
366
 
387
-
388
- # An OU path for specific User Groups
389
- #
390
- # @author Tyler Morgan
391
- #
392
- # @param newvalue [String] The OU path for the specific user group
393
- # @note Not sure what this is used for
394
- #
395
- # @raise [JSS::InvalidDataError] If the new value is not a String
396
- #
397
- # @return [void]
398
- def groups_ou=(newvalue)
399
-
400
- raise JSS::InvalidDataError, "groups_ou must be either a string or nil." unless newvalue.is_a? String || newvalue.nil?
401
-
402
- @groups_ou = newvalue
403
-
404
- self.container&.should_update
367
+ @admin_group = new
368
+
369
+ container&.should_update
370
+ end
371
+
372
+ # The number of times a user can log into the device while not connected to a network
373
+ #
374
+ # @author Tyler Morgan
375
+ #
376
+ # @param newvalue [Integer] The number of times you want a user to login while not connected to a network
377
+ #
378
+ # @raise [JSS::InvalidDataError] If the new value is not an Integer
379
+ #
380
+ # @return [void]
381
+ def cached_credentials=(newvalue)
382
+ new =
383
+ if newvalue.to_s.empty?
384
+ JSS::BLANK
385
+ else
386
+ # Data Check
387
+ raise JSS::InvalidDataError, 'cached_credentials must be an integer.' unless newvalue.is_a? Integer
388
+
389
+ newvalue
405
390
  end
406
391
 
407
-
408
- # An OU path for specific Printers
409
- #
410
- # @author Tyler Morgan
411
- #
412
- # @param newvalue [String] The OU path for the specific printer
413
- # @note Not sure what this is used for
414
- #
415
- # @raise [JSS::InvalidDataError] If the new value is not a String
416
- #
417
- # @return [void]
418
- def printers_ou=(newvalue)
419
-
420
- raise JSS::InvalidDataError, "printers_ou must be either a string or nil." unless newvalue.is_a? String || newvalue.nil?
421
-
422
- @printers_ou = newvalue
423
-
424
- self.container&.should_update
392
+ @cached_credentials = new
393
+
394
+ container&.should_update
395
+ end
396
+
397
+ # If the user is a member of one of the groups in admin_group, add them
398
+ # to the local administrator group.
399
+ #
400
+ # @author Tyler Morgan
401
+ # @see admin_group
402
+ #
403
+ # @param newvalue [Bool]
404
+ #
405
+ # @raise [JSS::InvalidDataError] If the new value is not a Bool
406
+ #
407
+ # @return [void]
408
+ def add_user_to_local=(newvalue)
409
+ raise JSS::InvalidDataError, 'add_user_to_local must be true or false.' unless newvalue.is_a?(TrueClass) || newvalue.is_a(FalseClass)
410
+
411
+ @add_user_to_local = newvalue
412
+
413
+ container&.should_update
414
+ end
415
+
416
+ # An OU path for specific Users
417
+ #
418
+ # @author Tyler Morgan
419
+ #
420
+ # @param newvalue [String] The OU path for the specific user
421
+ # @note Not sure what this is used for
422
+ #
423
+ # @raise [JSS::InvalidDataError] If the new value is not a String
424
+ #
425
+ # @return [void]
426
+ def users_ou=(newvalue)
427
+ new =
428
+ if newvalue.to_s.empty?
429
+ JSS::BLANK
430
+ else
431
+ # Data Check
432
+ raise JSS::InvalidDataError, 'users_ou must be either a string or nil.' unless newvalue.is_a? String || newvalue.nil?
433
+
434
+ newvalue
425
435
  end
426
436
 
427
-
428
- # An OU path for specific shared folders
429
- #
430
- # @author Tyler Morgan
431
- #
432
- # @param newvalue [String] The OU path for the specific shared folders
433
- # @note Not sure what this is used for
434
- #
435
- # @raise [JSS::InvalidDataError] If the new value is not a String
436
- #
437
- # @return [void]
438
- def shared_folders_ou=(newvalue)
439
-
440
- raise JSS::InvalidDataError, "shared_folders_ou must be either a string or nil." unless newvalue.is_a? String || newvalue.nil?
441
-
442
- @shared_folders_ou = newvalue
443
-
444
- self.container&.should_update
437
+ @users_ou = new
438
+
439
+ container&.should_update
440
+ end
441
+
442
+ # An OU path for specific User Groups
443
+ #
444
+ # @author Tyler Morgan
445
+ #
446
+ # @param newvalue [String] The OU path for the specific user group
447
+ # @note Not sure what this is used for
448
+ #
449
+ # @raise [JSS::InvalidDataError] If the new value is not a String
450
+ #
451
+ # @return [void]
452
+ def groups_ou=(newvalue)
453
+ new =
454
+ if newvalue.to_s.empty?
455
+ JSS::BLANK
456
+ else
457
+ # Data Check
458
+ raise JSS::InvalidDataError, 'groups_ou must be either a string or nil.' unless newvalue.is_a? String || newvalue.nil?
459
+
460
+ newvalue
445
461
  end
446
462
 
447
-
448
- # An a specific admin group to admin_group
449
- #
450
- # @author Tyler Morgan
451
- #
452
- # @param value [String] The admin group name you wish to add to the admin group list
453
- #
454
- # @raise [JSS::InvalidDataError] If the value provided is not a String
455
- # @raise [JSS::InvalidDataError] If the group provided is already a member of the admin_group array
456
- #
457
- # @return [Array <String>] An array of all the admin groups currently set.
458
- def add_admin_group(value)
459
-
460
- raise JSS::InvalidDataError, "Admin group must be a string." unless value.is_a? String
461
- raise JSS::InvalidDataError, "Admin group \"#{value}\" already is in the list of admin groups." unless !@admin_group.include? value
462
-
463
- @admin_group << value
464
-
465
- self.container&.should_update
466
-
467
- return @admin_group
463
+ @groups_ou = new
464
+
465
+ container&.should_update
466
+ end
467
+
468
+ # An OU path for specific Printers
469
+ #
470
+ # @author Tyler Morgan
471
+ #
472
+ # @param newvalue [String] The OU path for the specific printer
473
+ # @note Not sure what this is used for
474
+ #
475
+ # @raise [JSS::InvalidDataError] If the new value is not a String
476
+ #
477
+ # @return [void]
478
+ def printers_ou=(newvalue)
479
+ new =
480
+ if newvalue.to_s.empty?
481
+ JSS::BLANK
482
+ else
483
+ # Data Check
484
+ raise JSS::InvalidDataError, 'printers_ou must be either a string or nil.' unless newvalue.is_a? String || newvalue.nil?
485
+
486
+ newvalue
468
487
  end
469
488
 
470
-
471
- # Remove a specific admin group to admin_group
472
- #
473
- # @author Tyler Morgan
474
- #
475
- # @param newvalue [String] The admin group name you wish to remove from the admin group list
476
- #
477
- # @raise [JSS::InvalidDataError] If the value provided is not a String
478
- # @raise [JSS::InvalidDataError] If the group provided is not in the admin_group array
479
- #
480
- # @return [Array <String>] An array of all the admin groups currently set.
481
- def remove_admin_group(value)
482
-
483
- raise JSS::InvalidDataError, "Admin group being removed must be a string" unless value.is_a? String
484
- raise JSS::InvalidDataError, "Admin group #{value} is not in the current admin group(s)." unless @admin_group.include? value
485
-
486
- @admin_group.delete value
487
-
488
- self.container&.should_update
489
-
490
- return @admin_group
489
+ @printers_ou = new
490
+
491
+ container&.should_update
492
+ end
493
+
494
+ # An OU path for specific shared folders
495
+ #
496
+ # @author Tyler Morgan
497
+ #
498
+ # @param newvalue [String] The OU path for the specific shared folders
499
+ # @note Not sure what this is used for
500
+ #
501
+ # @raise [JSS::InvalidDataError] If the new value is not a String
502
+ #
503
+ # @return [void]
504
+ def shared_folders_ou=(newvalue)
505
+ new =
506
+ if newvalue.to_s.empty?
507
+ JSS::BLANK
508
+ else
509
+ # Data Check
510
+ raise JSS::InvalidDataError, 'shared_folders_ou must be either a string or nil.' unless newvalue.is_a? String || newvalue.nil?
511
+
512
+ newvalue
491
513
  end
492
514
 
493
-
494
- # Return a REXML Element containing the current state of the DirectoryBindingType
495
- # object for adding into the XML of the container.
496
- #
497
- # @author Tyler Morgan
498
- #
499
- # @return [REXML::Element]
500
- def type_setting_xml
501
- type_setting = REXML::Element.new "admitmac"
502
- type_setting.add_element("require_confirmation").text = @require_confirmation
503
- type_setting.add_element("local_home").text = @local_home
504
- type_setting.add_element("mount_style").text = @mount_style.downcase
505
- type_setting.add_element("default_shell").text = @default_shell
506
- type_setting.add_element("mount_network_home").text = @mount_network_home
507
- type_setting.add_element("place_home_folders").text = @place_home_folders
508
- type_setting.add_element("uid").text = @uid
509
- type_setting.add_element("user_gid").text = @user_gid
510
- type_setting.add_element("gid").text = @gid
511
- type_setting.add_element("add_user_to_local").text = @add_user_to_local
512
- type_setting.add_element("cached_credentials").text = @cached_credentials
513
- type_setting.add_element("users_ou").text = @users_ou
514
- type_setting.add_element("groups_ou").text = @groups_ou
515
- type_setting.add_element("printers_ou").text = @printers_ou
516
- type_setting.add_element("shared_folders_ou").text = @shared_folders_ou
517
- type_setting.add_element("admin_group").text = @admin_group.join(',').to_s unless @admin_group.nil?
518
-
519
- return type_setting
520
- end
521
- end
515
+ @shared_folders_ou = new
516
+
517
+ container&.should_update
518
+ end
519
+
520
+ # An a specific admin group to admin_group
521
+ #
522
+ # @author Tyler Morgan
523
+ #
524
+ # @param value [String] The admin group name you wish to add to the admin group list
525
+ #
526
+ # @raise [JSS::InvalidDataError] If the value provided is not a String
527
+ # @raise [JSS::InvalidDataError] If the group provided is already a member of the admin_group array
528
+ #
529
+ # @return [Array <String>] An array of all the admin groups currently set.
530
+ def add_admin_group(value)
531
+ raise JSS::InvalidDataError, 'Admin group must be a string.' unless value.is_a? String
532
+ raise JSS::InvalidDataError, "Admin group \"#{value}\" already is in the list of admin groups." if @admin_group.include? value
533
+
534
+ @admin_group << value
535
+
536
+ container&.should_update
537
+
538
+ @admin_group
539
+ end
540
+
541
+ # Remove a specific admin group to admin_group
542
+ #
543
+ # @author Tyler Morgan
544
+ #
545
+ # @param newvalue [String] The admin group name you wish to remove from the admin group list
546
+ #
547
+ # @raise [JSS::InvalidDataError] If the value provided is not a String
548
+ # @raise [JSS::InvalidDataError] If the group provided is not in the admin_group array
549
+ #
550
+ # @return [Array <String>] An array of all the admin groups currently set.
551
+ def remove_admin_group(value)
552
+ raise JSS::InvalidDataError, 'Admin group being removed must be a string' unless value.is_a? String
553
+ raise JSS::InvalidDataError, "Admin group #{value} is not in the current admin group(s)." unless @admin_group.include? value
554
+
555
+ @admin_group.delete value
556
+
557
+ container&.should_update
558
+
559
+ @admin_group
560
+ end
561
+
562
+ # Return a REXML Element containing the current state of the DirectoryBindingType
563
+ # object for adding into the XML of the container.
564
+ #
565
+ # @author Tyler Morgan
566
+ #
567
+ # @return [REXML::Element]
568
+ def type_setting_xml
569
+ type_setting = REXML::Element.new 'admitmac'
570
+ type_setting.add_element('require_confirmation').text = @require_confirmation
571
+ type_setting.add_element('local_home').text = @local_home
572
+ type_setting.add_element('mount_style').text = @mount_style.downcase
573
+ type_setting.add_element('default_shell').text = @default_shell
574
+ type_setting.add_element('mount_network_home').text = @mount_network_home
575
+ type_setting.add_element('place_home_folders').text = @place_home_folders
576
+ type_setting.add_element('uid').text = @uid
577
+ type_setting.add_element('user_gid').text = @user_gid
578
+ type_setting.add_element('gid').text = @gid
579
+ type_setting.add_element('add_user_to_local').text = @add_user_to_local
580
+ type_setting.add_element('cached_credentials').text = @cached_credentials
581
+ type_setting.add_element('users_ou').text = @users_ou
582
+ type_setting.add_element('groups_ou').text = @groups_ou
583
+ type_setting.add_element('printers_ou').text = @printers_ou
584
+ type_setting.add_element('shared_folders_ou').text = @shared_folders_ou
585
+ type_setting.add_element('admin_group').text = @admin_group.join(',').to_s unless @admin_group.nil?
586
+
587
+ type_setting
588
+ end
522
589
 
523
590
  end
524
591
 
525
- end
592
+ end
593
+
594
+ end