ruby-jss 1.2.9 → 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.
Files changed (90) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES.md +196 -1
  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 +107 -83
  7. data/lib/jamf/api/abstract_classes/prestage.rb +55 -30
  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 +20 -12
  12. data/lib/jamf/api/connection/api_error.rb +8 -8
  13. data/lib/jamf/api/connection/token.rb +36 -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/department.rb +1 -1
  32. data/lib/jamf/api/resources/collection_resources/device_enrollment.rb +13 -13
  33. data/lib/jamf/api/resources/collection_resources/inventory_preload_record.rb +11 -3
  34. data/lib/jamf/api/resources/collection_resources/mobile_device_prestage.rb +24 -22
  35. data/lib/jamf/api/resources/collection_resources/script.rb +61 -25
  36. data/lib/jamf/api/resources/singleton_resources/app_store_country_codes.rb +15 -5
  37. data/lib/jamf/api/resources/singleton_resources/client_checkin_settings.rb +14 -14
  38. data/lib/jamf/api/resources/singleton_resources/locales.rb +155 -0
  39. data/lib/jamf/api/resources/singleton_resources/time_zones.rb +213 -0
  40. data/lib/jamf/configuration.rb +7 -9
  41. data/lib/jamf/ruby_extensions.rb +1 -0
  42. data/lib/jamf/ruby_extensions/array.rb +1 -1
  43. data/lib/jamf/ruby_extensions/array/utils.rb +3 -3
  44. data/lib/jamf/ruby_extensions/dig.rb +52 -0
  45. data/lib/jamf/validate.rb +63 -24
  46. data/lib/jamf/version.rb +1 -1
  47. data/lib/jss.rb +4 -1
  48. data/lib/jss/api_connection.rb +110 -397
  49. data/lib/jss/api_object.rb +16 -13
  50. data/lib/jss/api_object/advanced_search.rb +27 -26
  51. data/lib/jss/api_object/app_store_country_codes.rb +298 -0
  52. data/lib/jss/api_object/categorizable.rb +1 -1
  53. data/lib/jss/api_object/computer.rb +5 -1
  54. data/lib/jss/api_object/configuration_profile.rb +34 -3
  55. data/lib/jss/api_object/directory_binding.rb +273 -0
  56. data/lib/jss/api_object/directory_binding_type.rb +96 -0
  57. data/lib/jss/api_object/directory_binding_type/active_directory.rb +539 -0
  58. data/lib/jss/api_object/directory_binding_type/admitmac.rb +594 -0
  59. data/lib/jss/api_object/directory_binding_type/centrify.rb +226 -0
  60. data/lib/jss/api_object/directory_binding_type/open_directory.rb +178 -0
  61. data/lib/jss/api_object/directory_binding_type/powerbroker_identity_services.rb +73 -0
  62. data/lib/jss/api_object/disk_encryption_configurations.rb +114 -0
  63. data/lib/jss/api_object/distribution_point.rb +97 -37
  64. data/lib/jss/api_object/dock_item.rb +143 -0
  65. data/lib/jss/api_object/ebook.rb +1 -2
  66. data/lib/jss/api_object/extendable.rb +68 -32
  67. data/lib/jss/api_object/extension_attribute.rb +4 -3
  68. data/lib/jss/api_object/group.rb +33 -2
  69. data/lib/jss/api_object/mac_application.rb +107 -8
  70. data/lib/jss/api_object/mobile_device.rb +3 -0
  71. data/lib/jss/api_object/mobile_device_application.rb +12 -0
  72. data/lib/jss/api_object/network_segment.rb +195 -70
  73. data/lib/jss/api_object/package.rb +105 -40
  74. data/lib/jss/api_object/patch_source.rb +10 -9
  75. data/lib/jss/api_object/policy.rb +491 -7
  76. data/lib/jss/api_object/printer.rb +446 -0
  77. data/lib/jss/api_object/scopable.rb +10 -15
  78. data/lib/jss/api_object/scopable/scope.rb +386 -71
  79. data/lib/jss/api_object/self_servable.rb +17 -9
  80. data/lib/jss/api_object/uploadable.rb +1 -1
  81. data/lib/jss/api_object/user.rb +42 -1
  82. data/lib/jss/api_object/vpp_account.rb +209 -0
  83. data/lib/jss/api_object/vppable.rb +169 -13
  84. data/lib/jss/composer.rb +1 -1
  85. data/lib/jss/exceptions.rb +3 -0
  86. data/lib/jss/server.rb +15 -0
  87. data/lib/jss/utility.rb +8 -22
  88. data/lib/jss/validate.rb +53 -10
  89. data/lib/jss/version.rb +1 -1
  90. metadata +50 -22
@@ -40,7 +40,7 @@ module Jamf
40
40
 
41
41
  UPDATABLE = true
42
42
 
43
- RSRC_VERSION = 'v1'.freeze
43
+ RSRC_VERSION = 'v2'.freeze
44
44
 
45
45
  RSRC_PATH = 'check-in'.freeze
46
46
 
@@ -54,79 +54,79 @@ module Jamf
54
54
 
55
55
  # @!attribute isCreateHooks
56
56
  # @return [Boolean]
57
- isCreateHooks: {
57
+ createHooks: {
58
58
  class: :boolean
59
59
  },
60
60
 
61
61
  # @!attribute isHookLog
62
62
  # @return [Boolean]
63
- isHookLog: {
63
+ hookLog: {
64
64
  class: :boolean
65
65
  },
66
66
 
67
67
  # @!attribute isHookPolicies
68
68
  # @return [Boolean]
69
- isHookPolicies: {
69
+ hookPolicies: {
70
70
  class: :boolean
71
71
  },
72
72
 
73
73
  # @!attribute isHookHideRestore
74
74
  # @return [Boolean]
75
- isHookHideRestore: {
75
+ hookHideRestore: {
76
76
  class: :boolean
77
77
  },
78
78
 
79
79
  # @!attribute isHookMCX
80
80
  # @return [Boolean]
81
- isHookMCX: {
81
+ hookMcx: {
82
82
  class: :boolean
83
83
  },
84
84
 
85
85
  # @!attribute isBackgroundHooks
86
86
  # @return [Boolean]
87
- isBackgroundHooks: {
87
+ backgroundHooks: {
88
88
  class: :boolean
89
89
  },
90
90
 
91
91
  # @!attribute isHookDisplayStatus
92
92
  # @return [Boolean]
93
- isHookDisplayStatus: {
93
+ hookDisplayStatus: {
94
94
  class: :boolean
95
95
  },
96
96
 
97
97
  # @!attribute isCreateStartupScript
98
98
  # @return [Boolean]
99
- isCreateStartupScript: {
99
+ createStartupScript: {
100
100
  class: :boolean
101
101
  },
102
102
 
103
103
  # @!attribute isStartupLog
104
104
  # @return [Boolean]
105
- isStartupLog: {
105
+ startupLog: {
106
106
  class: :boolean
107
107
  },
108
108
 
109
109
  # @!attribute isStartupPolicies
110
110
  # @return [Boolean]
111
- isStartupPolicies: {
111
+ startupPolicies: {
112
112
  class: :boolean
113
113
  },
114
114
 
115
115
  # @!attribute isStartupSSH
116
116
  # @return [Boolean]
117
- isStartupSSH: {
117
+ startupSsh: {
118
118
  class: :boolean
119
119
  },
120
120
 
121
121
  # @!attribute isStartupMCX
122
122
  # @return [Boolean]
123
- isStartupMCX: {
123
+ startupMcx: {
124
124
  class: :boolean
125
125
  },
126
126
 
127
127
  # @!attribute isEnableLocalConfigurationProfiles
128
128
  # @return [Boolean]
129
- isEnableLocalConfigurationProfiles: {
129
+ enableLocalConfigurationProfiles: {
130
130
  class: :boolean
131
131
  }
132
132
 
@@ -0,0 +1,155 @@
1
+ # Copyright 2020 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
+ # The Module
27
+ module Jamf
28
+
29
+ # Classes
30
+ #####################################
31
+
32
+ # A list of known timezones
33
+ class Locales < Jamf::SingletonResource
34
+
35
+ # Mix-Ins
36
+ #####################################
37
+
38
+ extend Jamf::Immutable
39
+
40
+ # Constants
41
+ #####################################
42
+
43
+ RSRC_VERSION = 'v1'.freeze
44
+
45
+ RSRC_PATH = 'locales'.freeze
46
+
47
+ OBJECT_MODEL = {
48
+
49
+ # @!attribute checkInFrequency
50
+ # @return [integer]
51
+ locales: {
52
+ class: Jamf::Locale,
53
+ multi: true,
54
+ read_only: true,
55
+ aliases: [:list]
56
+ }
57
+
58
+ }.freeze # end OBJECT_MODEL
59
+
60
+ parse_object_model
61
+
62
+ # TEMP? until this endpoint is brought up to standards
63
+ # the data from the API is a raw Array, but it should be a
64
+ # Hash containing an array.
65
+ def initialize(data, cnx: Jamf.cnx)
66
+ data = { locales: data }
67
+ super data, cnx: cnx
68
+ end
69
+
70
+ # Class Methods
71
+ #####################################
72
+
73
+ # @return [Array<Jamf::Locale>] all the locales available
74
+ #
75
+ def self.list(refresh = false, cnx: Jamf.cnx)
76
+ fetch(refresh, cnx: cnx).locales
77
+ end
78
+
79
+ # Class level wrapper for #descriptions
80
+ def self.descriptions(refresh = false, cnx: Jamf.cnx)
81
+ fetch(refresh, cnx: cnx).descriptions
82
+ end
83
+ # how to alias a class method
84
+ singleton_class.send(:alias_method, :names, :descriptions)
85
+
86
+ # Class level wrapper for #identifiers
87
+ def self.identifiers(refresh = false, cnx: Jamf.cnx)
88
+ fetch(refresh, cnx: cnx).identifiers
89
+ end
90
+ singleton_class.send(:alias_method, :ids, :identifiers)
91
+
92
+ # Class level wrapper for #ids_by_desc
93
+ def self.ids_by_desc(refresh = false, cnx: Jamf.cnx)
94
+ fetch(refresh, cnx: cnx).ids_by_desc
95
+ end
96
+
97
+ # Class level wrapper for #descs_by_id
98
+ def self.descs_by_id(refresh = false, cnx: Jamf.cnx)
99
+ fetch(refresh, cnx: cnx).descs_by_id
100
+ end
101
+
102
+ # Class level wrapper for #id_for_desc
103
+ def self.id_for_desc(desc, refresh = false, cnx: Jamf.cnx)
104
+ fetch(refresh, cnx: cnx).id_for_desc desc
105
+ end
106
+
107
+ # Class level wrapper for #desc_for_id
108
+ def self.desc_for_id(id, refresh = false, cnx: Jamf.cnx)
109
+ fetch(refresh, cnx: cnx).desc_for_id id
110
+ end
111
+
112
+ # Instance Methods
113
+ #####################################
114
+
115
+ # @return [Array<String>] the available descriptions
116
+ def descriptions
117
+ @descriptions ||= locales.map(&:description)
118
+ end
119
+ alias names descriptions
120
+
121
+ # @return [Array<String>] the available identifiers
122
+ def identifiers
123
+ @identifiers ||= locales.map(&:identifier)
124
+ end
125
+ alias ids identifiers
126
+
127
+ # @return [Hash] name => code
128
+ def ids_by_desc
129
+ @ids_by_desc ||= locales.map { |l| [l.description, l.identifier] }.to_h
130
+ end
131
+
132
+ # @return [Hash] code => name
133
+ def descs_by_id
134
+ @descs_by_id ||= locales.map { |l| [l.identifier, l.description] }.to_h
135
+ end
136
+
137
+ # return an identifier from its description, case-insensitive
138
+ # @param desc[String] the description of a locale
139
+ # @return [String]
140
+ def id_for_desc(desc)
141
+ desc = descriptions.select { |n| n.casecmp? desc }.first
142
+ ids_by_desc[desc]
143
+ end
144
+
145
+ # return a description from its identifier, case-insensitive
146
+ # @param name[String] the identifier of a local
147
+ # @return [String]
148
+ def desc_for_id(id)
149
+ id = identifiers.select { |n| n.casecmp? id }.first
150
+ descs_by_id[id]
151
+ end
152
+
153
+ end # class
154
+
155
+ end # module
@@ -0,0 +1,213 @@
1
+ # Copyright 2020 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
+ # The Module
27
+ module Jamf
28
+
29
+ # Classes
30
+ #####################################
31
+
32
+ # A list of known timezones
33
+ class TimeZones < Jamf::SingletonResource
34
+
35
+ # Mix-Ins
36
+ #####################################
37
+
38
+ extend Jamf::Immutable
39
+
40
+ # Constants
41
+ #####################################
42
+
43
+ RSRC_VERSION = 'v1'.freeze
44
+
45
+ RSRC_PATH = 'time-zones'.freeze
46
+
47
+ OBJECT_MODEL = {
48
+
49
+ # @!attribute checkInFrequency
50
+ # @return [integer]
51
+ timeZones: {
52
+ class: Jamf::TimeZone,
53
+ multi: true,
54
+ read_only: true,
55
+ aliases: [:list]
56
+ }
57
+
58
+ }.freeze # end OBJECT_MODEL
59
+
60
+ parse_object_model
61
+
62
+ # TEMP? until this endpoint is brought up to standards
63
+ # the data from the API is a raw Array, but it should be a
64
+ # Hash containing an array.
65
+ def initialize(data, cnx: Jamf.cnx)
66
+ data = { timeZones: data }
67
+ super data, cnx: cnx
68
+ end
69
+
70
+
71
+
72
+ # Class Methods
73
+ #####################################
74
+
75
+ # @return [Array<Jamf::TimeZone>] all the zomes available
76
+ #
77
+ def self.list(refresh = false, cnx: Jamf.cnx)
78
+ fetch(refresh, cnx: cnx).timeZones
79
+ end
80
+
81
+ # Class level wrapper for #displayNames
82
+ def self.displayNames(refresh = false, cnx: Jamf.cnx)
83
+ fetch(refresh, cnx: cnx).displayNames
84
+ end
85
+ singleton_class.send(:alias_method, :names, :displayNames)
86
+
87
+ # Class level wrapper for #zoneIds
88
+ def self.zoneIds(refresh = false, cnx: Jamf.cnx)
89
+ fetch(refresh, cnx: cnx).zoneIds
90
+ end
91
+ singleton_class.send(:alias_method, :ids, :zoneIds)
92
+
93
+ # Class level wrapper for #regions
94
+ def self.regions(refresh = false, cnx: Jamf.cnx)
95
+ fetch(refresh, cnx: cnx).regions
96
+ end
97
+
98
+ # Class level wrapper for #ids_by_name
99
+ def self.ids_by_name(refresh = false, cnx: Jamf.cnx)
100
+ fetch(refresh, cnx: cnx).ids_by_name
101
+ end
102
+
103
+ # Class level wrapper for #names_by_id
104
+ def self.names_by_id(refresh = false, cnx: Jamf.cnx)
105
+ fetch(refresh, cnx: cnx).names_by_id
106
+ end
107
+
108
+ # Class level wrapper for #regions_by_id
109
+ def self.regions_by_id(refresh = false, cnx: Jamf.cnx)
110
+ fetch(refresh, cnx: cnx).regions_by_id
111
+ end
112
+
113
+ # Class level wrapper for #regions_by_name
114
+ def self.regions_by_name(refresh = false, cnx: Jamf.cnx)
115
+ fetch(refresh, cnx: cnx).regions_by_name
116
+ end
117
+
118
+ # Class level wrapper for #id_for_name
119
+ def self.id_for_name(name, refresh = false, cnx: Jamf.cnx)
120
+ fetch(refresh, cnx: cnx).id_for_name name
121
+ end
122
+
123
+ # Class level wrapper for #name_for_id
124
+ def self.name_for_id(id, refresh = false, cnx: Jamf.cnx)
125
+ fetch(refresh, cnx: cnx).name_for_id id
126
+ end
127
+
128
+ # Class level wrapper for #region_for_name
129
+ def self.region_for_name(name, refresh = false, cnx: Jamf.cnx)
130
+ fetch(refresh, cnx: cnx).region_for_name name
131
+ end
132
+
133
+ # Class level wrapper for #name_for_id
134
+ def self.region_for_id(id, refresh = false, cnx: Jamf.cnx)
135
+ fetch(refresh, cnx: cnx).region_for_id id
136
+ end
137
+
138
+
139
+ # Instance Methods
140
+ #####################################
141
+
142
+ # @return [Array<String>] the available zone names
143
+ def displayNames
144
+ @names ||= timeZones.map(&:displayName)
145
+ end
146
+ alias names displayNames
147
+
148
+ # @return [Array<String>] the available zone ids
149
+ def zoneIds
150
+ @ids ||= timeZones.map(&:zoneId)
151
+ end
152
+ alias ids zoneIds
153
+
154
+ # @return [Array<String>] the available zone regions
155
+ def regions
156
+ @regions ||= timeZones.map(&:region).uniq
157
+ end
158
+
159
+ # @return [Hash] name => id
160
+ def ids_by_name
161
+ @ids_by_name ||= timeZones.map { |tz| [tz.displayName, tz.zoneId] }.to_h
162
+ end
163
+
164
+ # @return [Hash] id => name
165
+ def names_by_id
166
+ @names_by_id ||= timeZones.map { |tz| [tz.zoneId, tz.displayName] }.to_h
167
+ end
168
+
169
+ # @return [Hash] id => region
170
+ def regions_by_id
171
+ @regions_by_id ||= timeZones.map { |tz| [tz.zoneId, tz.region] }.to_h
172
+ end
173
+
174
+ # @return [Hash] name => region
175
+ def regions_by_name
176
+ @regions_by_name ||= timeZones.map { |tz| [tz.displayName, tz.region] }.to_h
177
+ end
178
+
179
+ # return a zone id from its name, case-insensitive
180
+ # @param name[String] the name of a zone
181
+ # @return [String]
182
+ def id_for_name(name)
183
+ name = names.select { |n| n.casecmp? name }.first
184
+ ids_by_name[name]
185
+ end
186
+
187
+ # return a zone name from its id, case-insensitive
188
+ # @param name[String] the name of a zone
189
+ # @return [String]
190
+ def name_for_id(id)
191
+ id = ids.select { |n| n.casecmp? id }.first
192
+ names_by_id[id]
193
+ end
194
+
195
+ # return a zone name from its id, case-insensitive
196
+ # @param name[String] the name of a zone
197
+ # @return [String]
198
+ def region_for_name(name)
199
+ name = names.select { |n| n.casecmp? name }.first
200
+ regions_by_name[name]
201
+ end
202
+
203
+ # return a zones from its id, case-insensitive
204
+ # @param name[String] the name of a zone
205
+ # @return [String]
206
+ def region_for_id(id)
207
+ id = ids.select { |n| n.casecmp? id }.first
208
+ regions_by_id[id]
209
+ end
210
+
211
+ end # class
212
+
213
+ end # module