ruby-jss 1.0.4 → 1.1.0b1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


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

Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES.md +26 -0
  3. data/lib/jss.rb +47 -24
  4. data/lib/jss/api_connection.rb +39 -7
  5. data/lib/jss/api_object.rb +651 -319
  6. data/lib/jss/api_object/account.rb +19 -5
  7. data/lib/jss/api_object/advanced_search/advanced_computer_search.rb +0 -3
  8. data/lib/jss/api_object/advanced_search/advanced_mobile_device_search.rb +0 -3
  9. data/lib/jss/api_object/advanced_search/advanced_user_search.rb +0 -3
  10. data/lib/jss/api_object/building.rb +0 -3
  11. data/lib/jss/api_object/category.rb +0 -3
  12. data/lib/jss/api_object/computer.rb +83 -28
  13. data/lib/jss/api_object/computer_invitation.rb +1 -11
  14. data/lib/jss/api_object/configuration_profile/osx_configuration_profile.rb +0 -3
  15. data/lib/jss/api_object/department.rb +0 -3
  16. data/lib/jss/api_object/distribution_point.rb +0 -3
  17. data/lib/jss/api_object/extendable.rb +113 -57
  18. data/lib/jss/api_object/extension_attribute.rb +46 -13
  19. data/lib/jss/api_object/extension_attribute/computer_extension_attribute.rb +0 -3
  20. data/lib/jss/api_object/extension_attribute/mobile_device_extension_attribute.rb +56 -19
  21. data/lib/jss/api_object/extension_attribute/user_extension_attribute.rb +0 -3
  22. data/lib/jss/api_object/group/computer_group.rb +0 -3
  23. data/lib/jss/api_object/group/mobile_device_group.rb +0 -3
  24. data/lib/jss/api_object/group/user_group.rb +0 -3
  25. data/lib/jss/api_object/ldap_server.rb +0 -3
  26. data/lib/jss/api_object/mobile_device.rb +25 -29
  27. data/lib/jss/api_object/mobile_device_application.rb +1 -9
  28. data/lib/jss/api_object/netboot_server.rb +0 -3
  29. data/lib/jss/api_object/network_segment.rb +0 -3
  30. data/lib/jss/api_object/package.rb +0 -3
  31. data/lib/jss/api_object/patch_source/patch_external_source.rb +0 -2
  32. data/lib/jss/api_object/patch_source/patch_internal_source.rb +0 -3
  33. data/lib/jss/api_object/patch_title.rb +1 -2
  34. data/lib/jss/api_object/peripheral.rb +0 -3
  35. data/lib/jss/api_object/peripheral_type.rb +0 -2
  36. data/lib/jss/api_object/policy.rb +20 -2
  37. data/lib/jss/api_object/removable_macaddr.rb +0 -3
  38. data/lib/jss/api_object/restricted_software.rb +0 -3
  39. data/lib/jss/api_object/scopable.rb +0 -12
  40. data/lib/jss/api_object/scopable/scope.rb +1 -1
  41. data/lib/jss/api_object/script.rb +0 -3
  42. data/lib/jss/api_object/self_servable.rb +3 -1
  43. data/lib/jss/api_object/site.rb +0 -3
  44. data/lib/jss/api_object/software_update_server.rb +0 -3
  45. data/lib/jss/api_object/user.rb +0 -3
  46. data/lib/jss/api_object/webhook.rb +0 -3
  47. data/lib/jss/compatibility.rb +74 -53
  48. data/lib/jss/exceptions.rb +5 -0
  49. data/lib/jss/ruby_extensions/string.rb +4 -48
  50. data/lib/jss/ruby_extensions/string/conversions.rb +69 -0
  51. data/lib/jss/ruby_extensions/string/predicates.rb +47 -0
  52. data/lib/jss/version.rb +1 -1
  53. data/test/README.md +2 -4
  54. metadata +6 -4
@@ -70,9 +70,6 @@ module JSS
70
70
  ### It's also used in various error messages
71
71
  RSRC_OBJECT_KEY = :netboot_server
72
72
 
73
- ### these keys, as well as :id and :name, are present in valid API JSON data for this class
74
- VALID_DATA_KEYS = [:protocol, :boot_args]
75
-
76
73
  # the object type for this object in
77
74
  # the object history table.
78
75
  # See {APIObject#add_object_history_entry}
@@ -59,9 +59,6 @@ module JSS
59
59
  ### It's also used in various error messages
60
60
  RSRC_OBJECT_KEY = :network_segment
61
61
 
62
- ### these keys, as well as :id and :name, are present in valid API JSON data for this class
63
- VALID_DATA_KEYS = [:distribution_point, :starting_address, :override_departments].freeze
64
-
65
62
  # the object type for this object in
66
63
  # the object history table.
67
64
  # See {APIObject#add_object_history_entry}
@@ -61,9 +61,6 @@ module JSS
61
61
  # It's also used in various error messages
62
62
  RSRC_OBJECT_KEY = :package
63
63
 
64
- # these keys, as well as :id and :name, are present in valid API JSON data for this class
65
- VALID_DATA_KEYS = %i[fill_existing_users fill_user_template reboot_required].freeze
66
-
67
64
  # The pkg storage folder on the distribution point
68
65
  DIST_POINT_PKGS_FOLDER = 'Packages'.freeze
69
66
 
@@ -48,8 +48,6 @@ module JSS
48
48
  # It's also used in various error messages
49
49
  RSRC_OBJECT_KEY = :patch_external_source
50
50
 
51
- ### these keys, as well as :id and :name, are present in valid API JSON data for this class
52
- VALID_DATA_KEYS = %i[enabled ssl_enabled host_name].freeze
53
51
 
54
52
  # Instance Methods
55
53
  #####################################
@@ -47,9 +47,6 @@ module JSS
47
47
  # It's also used in various error messages
48
48
  RSRC_OBJECT_KEY = :patch_internal_source
49
49
 
50
- ### these keys, as well as :id and :name, are present in valid API JSON data for this class
51
- VALID_DATA_KEYS = %i[enabled endpoint].freeze
52
-
53
50
  end # class PatchInternalSource
54
51
 
55
52
  end # module JSS
@@ -132,8 +132,7 @@ module JSS
132
132
  # It's also used in various error messages
133
133
  RSRC_OBJECT_KEY = :patch_software_title
134
134
 
135
- ### these keys, as well as :id and :name, are present in valid API JSON data for this class
136
- VALID_DATA_KEYS = %i[notifications name_id source_id].freeze
135
+ NON_UNIQUE_NAMES = true
137
136
 
138
137
  # the object type for this object in
139
138
  # the object history table.
@@ -74,9 +74,6 @@ module JSS
74
74
  ### It's also used in various error messages
75
75
  RSRC_OBJECT_KEY = :peripheral
76
76
 
77
- ### these keys, as well as :id and :name, are present in valid API JSON data for this class
78
- VALID_DATA_KEYS = [:type, :bar_code_1, :computer_id ]
79
-
80
77
  # the object type for this object in
81
78
  # the object history table.
82
79
  # See {APIObject#add_object_history_entry}
@@ -69,8 +69,6 @@ module JSS
69
69
  ### It's also used in various error messages
70
70
  RSRC_OBJECT_KEY = :peripheral_type
71
71
 
72
- ### these keys, as well as :id and :name, are present in valid API JSON data for this class
73
- VALID_DATA_KEYS = [:fields]
74
72
 
75
73
  ### field types can be one of these, either String or Symbol
76
74
  FIELD_TYPES = [:text, :menu]
@@ -92,8 +92,26 @@ module JSS
92
92
  # It's also used in various error messages
93
93
  RSRC_OBJECT_KEY = :policy
94
94
 
95
- # these keys, as well as :id and :name, are present in valid API JSON data for this class
96
- VALID_DATA_KEYS = %i[scope user_interaction files_processes].freeze
95
+ # subsets available for fetching
96
+ # TODO: FilesProcesses and Maintenance don't seem to work
97
+ SUBSETS = %i[
98
+ general
99
+ scope
100
+ selfservice
101
+ self_service
102
+ packages
103
+ scripts
104
+ printers
105
+ dockitems
106
+ dock_items
107
+ reboot
108
+ userinteraction
109
+ user_interaction
110
+ disk_encryption
111
+ diskencryption
112
+ accountmaintenance
113
+ account_maintenance
114
+ ].freeze
97
115
 
98
116
  # policies can take uploaded icons
99
117
  UPLOAD_TYPES = { icon: :policies }.freeze
@@ -72,9 +72,6 @@ module JSS
72
72
  ### It's also used in various error messages
73
73
  RSRC_OBJECT_KEY = :removable_mac_address
74
74
 
75
- ### these keys, as well as :id and :name, are present in valid API JSON data for this class
76
- VALID_DATA_KEYS = []
77
-
78
75
  # the object type for this object in
79
76
  # the object history table.
80
77
  # See {APIObject#add_object_history_entry}
@@ -50,9 +50,6 @@ module JSS
50
50
  # It's also used in various error messages
51
51
  RSRC_OBJECT_KEY = :restricted_software
52
52
 
53
- # these keys, as well as :id and :name, are present in valid API JSON data for this class
54
- VALID_DATA_KEYS = [:scope].freeze
55
-
56
53
  # Our scopes deal with computers
57
54
  SCOPE_TARGET_KEY = :computers
58
55
 
@@ -54,27 +54,19 @@ module JSS
54
54
  ###
55
55
  module Scopable
56
56
 
57
- #####################################
58
57
  ### Constants
59
58
  #####################################
60
59
 
61
60
  SCOPABLE = true
62
61
 
63
- #####################################
64
- ### Variables
65
- #####################################
66
-
67
- #####################################
68
62
  ### Attribtues
69
63
  #####################################
70
64
 
71
65
  attr_reader :scope
72
66
 
73
- #####################################
74
67
  ### Mixed-in Instance Methods
75
68
  #####################################
76
69
 
77
- ###
78
70
  ### @api private
79
71
  ###
80
72
  ### Call this during initialization of objects that have a scope
@@ -87,8 +79,6 @@ module JSS
87
79
  @scope.container = self
88
80
  end
89
81
 
90
-
91
- ###
92
82
  ### Change the scope
93
83
  ###
94
84
  ### @param new_scope[JSS::Scopable::Scope] the new scope
@@ -102,7 +92,6 @@ module JSS
102
92
  @need_to_update = true
103
93
  end
104
94
 
105
- ###
106
95
  ### When the scope changes, it calls this to tell us that an update is needed.
107
96
  ###
108
97
  ### @return [void]
@@ -112,7 +101,6 @@ module JSS
112
101
  end
113
102
 
114
103
 
115
- ###
116
104
  ### A wrapper around the update method, to try catching RestClient::Conflict
117
105
  ### 409 errors when we couldn't verify all ldap users/groups due to lack of ldap connections
118
106
  ###
@@ -178,7 +178,7 @@ module JSS
178
178
  # @param raw_scope[Hash] the JSON :scope data from an API query that is scopable, e.g. a Policy.
179
179
  #
180
180
  def initialize(target_key, raw_scope = nil)
181
- raw_scope ||= DEFAULT_SCOPE
181
+ raw_scope ||= DEFAULT_SCOPE.dup
182
182
  raise JSS::InvalidDataError, "The target class of a Scope must be one of the symbols :#{TARGETS_AND_GROUPS.keys.join(', :')}" unless TARGETS_AND_GROUPS.key?(target_key)
183
183
 
184
184
  @target_key = target_key
@@ -79,9 +79,6 @@ module JSS
79
79
  ### It's also used in various error messages
80
80
  RSRC_OBJECT_KEY = :script
81
81
 
82
- ### these keys, as well as :id and :name, are present in valid API JSON data for this class
83
- VALID_DATA_KEYS = [:parameters, :filename, :os_requirements].freeze
84
-
85
82
  ### The script storage folder on the distribution point, if used
86
83
  DIST_POINT_SCRIPTS_FOLDER = 'Scripts'.freeze
87
84
 
@@ -357,13 +357,15 @@ module JSS
357
357
  #
358
358
  # @return [void]
359
359
  #
360
- def self_service_dislay_name=(new_val)
360
+ def self_service_display_name=(new_val)
361
361
  new_val.strip!
362
362
  return nil if @self_service_dislay_name == new_val
363
363
  raise JSS::InvalidDataError, 'Only macOS Self Service items have display names' unless self_service_targets.include? :macos
364
364
  @self_service_dislay_name = new_val
365
365
  @need_to_update = true
366
366
  end
367
+ # alias for backward compatibility with the typo
368
+ alias self_service_dislay_name self_service_display_name
367
369
 
368
370
  # @param new_val[String] the new install button text
369
371
  #
@@ -55,9 +55,6 @@ module JSS
55
55
  # It's also used in various error messages
56
56
  RSRC_OBJECT_KEY = :site
57
57
 
58
- # these keys, as well as :id and :name, are present in valid API JSON data for this class
59
- VALID_DATA_KEYS = [].freeze
60
-
61
58
  # the object type for this object in
62
59
  # the object history table.
63
60
  # See {APIObject#add_object_history_entry}
@@ -69,9 +69,6 @@ module JSS
69
69
  ### It's also used in various error messages
70
70
  RSRC_OBJECT_KEY = :software_update_server
71
71
 
72
- ### these keys, as well as :id and :name, are present in valid API JSON data for this class
73
- VALID_DATA_KEYS = [:set_system_wide, :port]
74
-
75
72
  # the object type for this object in
76
73
  # the object history table.
77
74
  # See {APIObject#add_object_history_entry}
@@ -70,9 +70,6 @@ module JSS
70
70
  ### It's also used in various error messages
71
71
  RSRC_OBJECT_KEY = :user
72
72
 
73
- ### these keys, as well as :id and :name, are present in valid API JSON data for this class
74
- VALID_DATA_KEYS = [:position, :full_name, :email]
75
-
76
73
  ### This class lets us seach for users
77
74
  SEARCH_CLASS = JSS::AdvancedUserSearch
78
75
 
@@ -54,9 +54,6 @@ module JSS
54
54
  # It's also used in various error messages
55
55
  RSRC_OBJECT_KEY = :webhook
56
56
 
57
- # these keys, as well as :id and :name, are present in valid API JSON data for this class
58
- VALID_DATA_KEYS = [:event, :contact_type, :url, :enabled].freeze
59
-
60
57
  # the content types available for webhooks, internally we use Symbols,
61
58
  # but the API wants the proper MIME strings
62
59
  CONTENT_TYPES = {
@@ -1,67 +1,88 @@
1
- ### Copyright 2019 Pixar
2
-
3
- ###
4
- ### Licensed under the Apache License, Version 2.0 (the "Apache License")
5
- ### with the following modification; you may not use this file except in
6
- ### compliance with the Apache License and the following modification to it:
7
- ### Section 6. Trademarks. is deleted and replaced with:
8
- ###
9
- ### 6. Trademarks. This License does not grant permission to use the trade
10
- ### names, trademarks, service marks, or product names of the Licensor
11
- ### and its affiliates, except as required to comply with Section 4(c) of
12
- ### the License and to reproduce the content of the NOTICE file.
13
- ###
14
- ### You may obtain a copy of the Apache License at
15
- ###
16
- ### http://www.apache.org/licenses/LICENSE-2.0
17
- ###
18
- ### Unless required by applicable law or agreed to in writing, software
19
- ### distributed under the Apache License with the above modification is
20
- ### distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
21
- ### KIND, either express or implied. See the Apache License for the specific
22
- ### language governing permissions and limitations under the Apache License.
23
- ###
24
- ###
25
-
26
-
27
- ###
28
- ### Augmentation to make this code compatible with ruby 1.8.7
29
- ###
30
-
31
- #############################################
32
- ### Hash.key
33
- ###
34
- ### #key exists in ruby 1.9+, in 1.8 its called #index
35
- ### it returns the hash key for a given value, if the value exists
36
- ### in the hash
37
- ###
1
+ # Copyright 2019 Pixar
2
+
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "Apache License")
5
+ # with the following modification; you may not use this file except in
6
+ # compliance with the Apache License and the following modification to it:
7
+ # Section 6. Trademarks. is deleted and replaced with:
8
+ #
9
+ # 6. Trademarks. This License does not grant permission to use the trade
10
+ # names, trademarks, service marks, or product names of the Licensor
11
+ # and its affiliates, except as required to comply with Section 4(c) of
12
+ # the License and to reproduce the content of the NOTICE file.
13
+ #
14
+ # You may obtain a copy of the Apache License at
15
+ #
16
+ # http://www.apache.org/licenses/LICENSE-2.0
17
+ #
18
+ # Unless required by applicable law or agreed to in writing, software
19
+ # distributed under the Apache License with the above modification is
20
+ # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
21
+ # KIND, either express or implied. See the Apache License for the specific
22
+ # language governing permissions and limitations under the Apache License.
23
+ #
24
+ #
25
+
26
+ # backporting of some newer ruby methods into older rubies
27
+ #
28
+
29
+ # Hash.key
30
+ #
31
+ # #key exists in ruby 1.9+, in 1.8 its called #index
32
+ # it returns the hash key for a given value, if the value exists
33
+ # in the hash
34
+ #
35
+ ###########################################
38
36
  unless {}.respond_to? :key
39
37
  class Hash
40
- alias_method :key, :index
38
+
39
+ alias key index
40
+
41
41
  end
42
42
  end
43
43
 
44
- #############################################
45
- ### Array.sample
46
- ###
47
- ### #sample exists in ruby 1.9+, in 1.8 its called #choice
48
- ### it returns a randomly chosen element of the given array
49
- ### eg: [1, 2, 3].sample returns either 1, 2, or 3
50
- ###
44
+ # Array.sample
45
+ #
46
+ # #sample exists in ruby 1.9+, in 1.8 its called #choice
47
+ # it returns a randomly chosen element of the given array
48
+ # eg: [1, 2, 3].sample returns either 1, 2, or 3
49
+ #
50
+ ###########################################
51
51
  unless [].respond_to? :sample
52
52
  class Array
53
- alias_method :sample, :choice
53
+
54
+ alias sample choice
55
+
56
+ end
57
+ end
58
+
59
+ # String.force_encoding
60
+ #
61
+ #
62
+ ###########################################
63
+ unless ''.respond_to? :force_encoding
64
+ class String
65
+
66
+ def force_encoding(_args = nil)
67
+ self
68
+ end
69
+
54
70
  end
55
71
  end
56
72
 
57
73
 
58
- #############################################
59
- ### String.force_encoding
60
- ###
61
- ### Ruby 1.8 doesn't do encodings...
62
- ###
63
- unless "".respond_to? :force_encoding
74
+ # String.casecmp?
75
+ #
76
+ #
77
+ ###########################################
78
+ unless ''.respond_to? :casecmp?
64
79
  class String
65
- def force_encoding(args = nil); self; end
80
+
81
+ def casecmp?(other)
82
+ return nil unless other.is_a? String
83
+
84
+ casecmp(other).zero?
85
+ end
86
+
66
87
  end
67
88
  end
@@ -55,6 +55,11 @@ module JSS
55
55
  ###
56
56
  class AlreadyExistsError < RuntimeError; end
57
57
 
58
+ ### AmbiguousError - raise this error when a search
59
+ ### term that should find one object finds more.
60
+ ###
61
+ class AmbiguousError < RuntimeError; end
62
+
58
63
  ### FileServiceError - raise this error when
59
64
  ### there's a problem accessing file service on a
60
65
  ### distribution point.
@@ -20,54 +20,10 @@
20
20
  # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
21
21
  # KIND, either express or implied. See the Apache License for the specific
22
22
  # language governing permissions and limitations under the Apache License.
23
- #
24
- #
25
-
26
- #
27
- class String
28
-
29
- # Convert the strings "true" and "false"
30
- # (after stripping whitespace and downcasing)
31
- # to TrueClass and FalseClass respectively
32
- #
33
- # Return nil if any other string.
34
- #
35
- # @return [Boolean,nil] the boolean value
36
- #
37
- def jss_to_bool
38
- case strip.downcase
39
- when 'true' then true
40
- when 'false' then false
41
- end # case
42
- end # to bool
43
-
44
- # Convert a string to a Time object
45
- #
46
- # returns nil if not parsable by JSS::parse_datetime
47
- #
48
- # @return [Time] the time represented by the string.
49
- #
50
- def jss_to_time
51
- JSS.parse_time self
52
- rescue
53
- return nil
54
- end
55
23
 
56
- # Convert a String to a Pathname object
57
- #
58
- # @return [Pathname]
59
- #
60
- def jss_to_pathname
61
- Pathname.new self
62
- end
63
24
 
64
- # Is this string also a positive integer?
65
- # (i.e. it consists only of numberic digits)
66
- #
67
- # @return [Boolean]
68
- #
69
- def jss_integer?
70
- self =~ /\A[0-9]+\Z/ ? true : false
71
- end
25
+ require 'jss/ruby_extensions/string/conversions.rb'
26
+ require 'jss/ruby_extensions/string/predicates.rb'
72
27
 
73
- end # class
28
+ String.include JSSRubyExtensions::String::Predicates
29
+ String.include JSSRubyExtensions::String::Conversions