ruby-jss 1.2.3 → 1.2.4a1
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.
- checksums.yaml +4 -4
- data/lib/jamf.rb +169 -0
- data/lib/jamf/api/abstract_classes/collection_resource.rb +422 -0
- data/lib/jamf/api/abstract_classes/generic_reference.rb +145 -0
- data/lib/jamf/api/abstract_classes/json_object.rb +1074 -0
- data/lib/jamf/api/abstract_classes/prestage.rb +219 -0
- data/lib/jamf/api/abstract_classes/prestage_skip_setup_items.rb +126 -0
- data/lib/jamf/api/abstract_classes/resource.rb +250 -0
- data/lib/jamf/api/abstract_classes/singleton_resource.rb +87 -0
- data/lib/jamf/api/attribute_classes/ip_address.rb +66 -0
- data/lib/jamf/api/attribute_classes/timestamp.rb +144 -0
- data/lib/jamf/api/connection.rb +734 -0
- data/lib/jamf/api/connection/api_error.rb +111 -0
- data/lib/jamf/api/connection/api_error_styleguide.rb +96 -0
- data/lib/jamf/api/connection/token.rb +220 -0
- data/lib/jamf/api/json_objects/account_prefs.rb +79 -0
- data/lib/jamf/api/json_objects/android_details.rb +139 -0
- data/lib/jamf/api/json_objects/appletv_details.rb +110 -0
- data/lib/jamf/api/json_objects/attachment.rb +68 -0
- data/lib/jamf/api/json_objects/cellular_network.rb +151 -0
- data/lib/jamf/api/json_objects/change_log_entry.rb +77 -0
- data/lib/jamf/api/json_objects/computer_prestage_skip_setup_items.rb +67 -0
- data/lib/jamf/api/json_objects/country.rb +51 -0
- data/lib/jamf/api/json_objects/extension_attribute_value.rb +128 -0
- data/lib/jamf/api/json_objects/installed_application.rb +59 -0
- data/lib/jamf/api/json_objects/installed_certificate.rb +53 -0
- data/lib/jamf/api/json_objects/installed_configuration_profile.rb +67 -0
- data/lib/jamf/api/json_objects/installed_ebook.rb +58 -0
- data/lib/jamf/api/json_objects/installed_provisioning_profile.rb +59 -0
- data/lib/jamf/api/json_objects/inventory_preload_extension_attribute.rb +52 -0
- data/lib/jamf/api/json_objects/ios_details.rb +244 -0
- data/lib/jamf/api/json_objects/location.rb +95 -0
- data/lib/jamf/api/json_objects/md_prestage_name.rb +57 -0
- data/lib/jamf/api/json_objects/md_prestage_names.rb +82 -0
- data/lib/jamf/api/json_objects/md_prestage_skip_setup_items.rb +165 -0
- data/lib/jamf/api/json_objects/mobile_device_details.rb +219 -0
- data/lib/jamf/api/json_objects/mobile_device_security.rb +101 -0
- data/lib/jamf/api/json_objects/prestage_assignment.rb +61 -0
- data/lib/jamf/api/json_objects/prestage_location.rb +104 -0
- data/lib/jamf/api/json_objects/prestage_purchasing_data.rb +132 -0
- data/lib/jamf/api/json_objects/prestage_scope.rb +54 -0
- data/lib/jamf/api/json_objects/prestage_sync_status.rb +63 -0
- data/lib/jamf/api/json_objects/purchasing_data.rb +125 -0
- data/lib/jamf/api/mixins/abstract.rb +58 -0
- data/lib/jamf/api/mixins/bulk_deletable.rb +39 -0
- data/lib/jamf/api/mixins/change_log.rb +136 -0
- data/lib/jamf/api/mixins/extendable.rb +75 -0
- data/lib/jamf/api/mixins/immutable.rb +39 -0
- data/lib/jamf/api/mixins/locatable.rb +124 -0
- data/lib/jamf/api/mixins/lockable.rb +48 -0
- data/lib/jamf/api/mixins/referable.rb +92 -0
- data/lib/jamf/api/mixins/searchable.rb +202 -0
- data/lib/jamf/api/mixins/uncreatable.rb +40 -0
- data/lib/jamf/api/mixins/undeletable.rb +40 -0
- data/lib/jamf/api/resources/collection_resources/account.rb +163 -0
- data/lib/jamf/api/resources/collection_resources/building.rb +114 -0
- data/lib/jamf/api/resources/collection_resources/category.rb +82 -0
- data/lib/jamf/api/resources/collection_resources/computer.rb +49 -0
- data/lib/jamf/api/resources/collection_resources/computer_prestage.rb +80 -0
- data/lib/jamf/api/resources/collection_resources/department.rb +79 -0
- data/lib/jamf/api/resources/collection_resources/extension_attribute.rb +45 -0
- data/lib/jamf/api/resources/collection_resources/inventory_preload_record.rb +274 -0
- data/lib/jamf/api/resources/collection_resources/md_prestage.rb +139 -0
- data/lib/jamf/api/resources/collection_resources/mobile_device.rb +315 -0
- data/lib/jamf/api/resources/collection_resources/script.rb +190 -0
- data/lib/jamf/api/resources/collection_resources/site.rb +77 -0
- data/lib/jamf/api/resources/singleton_resources/app_store_country_codes.rb +131 -0
- data/lib/jamf/api/resources/singleton_resources/authorization.rb +88 -0
- data/lib/jamf/api/resources/singleton_resources/client_checkin_settings.rb +139 -0
- data/lib/jamf/api/resources/singleton_resources/reenrollment_settings.rb +95 -0
- data/lib/jamf/client.rb +301 -0
- data/lib/jamf/client/jamf_binary.rb +132 -0
- data/lib/jamf/client/jamf_helper.rb +298 -0
- data/lib/jamf/client/management_action.rb +114 -0
- data/lib/jamf/compatibility.rb +88 -0
- data/lib/jamf/composer.rb +190 -0
- data/lib/jamf/configuration.rb +281 -0
- data/lib/jamf/exceptions.rb +107 -0
- data/lib/jamf/ruby_extensions.rb +36 -0
- data/lib/jamf/ruby_extensions/array.rb +35 -0
- data/lib/jamf/ruby_extensions/array/predicates.rb +46 -0
- data/lib/jamf/ruby_extensions/array/utils.rb +47 -0
- data/lib/jamf/ruby_extensions/filetest.rb +32 -0
- data/lib/jamf/ruby_extensions/filetest/predicates.rb +46 -0
- data/lib/jamf/ruby_extensions/hash.rb +33 -0
- data/lib/jamf/ruby_extensions/hash/backports.rb +92 -0
- data/lib/jamf/ruby_extensions/ipaddr.rb +37 -0
- data/lib/jamf/ruby_extensions/ipaddr/utils.rb +95 -0
- data/lib/jamf/ruby_extensions/object.rb +30 -0
- data/lib/jamf/ruby_extensions/object/predicates.rb +51 -0
- data/lib/jamf/ruby_extensions/pathname.rb +39 -0
- data/lib/jamf/ruby_extensions/pathname/predicates.rb +50 -0
- data/lib/jamf/ruby_extensions/pathname/utils.rb +75 -0
- data/lib/jamf/ruby_extensions/string.rb +35 -0
- data/lib/jamf/ruby_extensions/string/backports.rb +66 -0
- data/lib/jamf/ruby_extensions/string/conversions.rb +65 -0
- data/lib/jamf/ruby_extensions/string/predicates.rb +47 -0
- data/lib/jamf/utility.rb +423 -0
- data/lib/jamf/validate.rb +224 -0
- data/lib/jamf/version.rb +32 -0
- data/lib/jpapi.rb +26 -0
- data/lib/jss/version.rb +1 -1
- metadata +104 -4
|
@@ -0,0 +1,63 @@
|
|
|
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
|
+
# The Module
|
|
27
|
+
module Jamf
|
|
28
|
+
|
|
29
|
+
# Classes
|
|
30
|
+
#####################################
|
|
31
|
+
|
|
32
|
+
# A building defined in the JSS
|
|
33
|
+
class PrestageSyncStatus < Jamf::JSONObject
|
|
34
|
+
|
|
35
|
+
extend Jamf::Immutable
|
|
36
|
+
|
|
37
|
+
OBJECT_MODEL = {
|
|
38
|
+
|
|
39
|
+
# @!attribute syncState [r]
|
|
40
|
+
# @return [String]
|
|
41
|
+
syncState: {
|
|
42
|
+
class: :string
|
|
43
|
+
},
|
|
44
|
+
|
|
45
|
+
# @!attribute prestageId [r]
|
|
46
|
+
# @return [Integer]
|
|
47
|
+
prestageId: {
|
|
48
|
+
class: :integer
|
|
49
|
+
},
|
|
50
|
+
|
|
51
|
+
# @!attribute timestamp [r]
|
|
52
|
+
# @return [Jamf::Timestamp]
|
|
53
|
+
timestamp: {
|
|
54
|
+
class: Jamf::Timestamp
|
|
55
|
+
},
|
|
56
|
+
|
|
57
|
+
}.freeze
|
|
58
|
+
|
|
59
|
+
parse_object_model
|
|
60
|
+
|
|
61
|
+
end # class
|
|
62
|
+
|
|
63
|
+
end # module
|
|
@@ -0,0 +1,125 @@
|
|
|
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
|
+
# The module
|
|
27
|
+
module Jamf
|
|
28
|
+
|
|
29
|
+
# A 'location' for a managed object in Jamf Pro
|
|
30
|
+
class PurchasingData < Jamf::JSONObject
|
|
31
|
+
|
|
32
|
+
# TODO: setters or an uncreated device?
|
|
33
|
+
|
|
34
|
+
OBJECT_MODEL = {
|
|
35
|
+
|
|
36
|
+
# @!attribute isPurchased
|
|
37
|
+
# @param [String]
|
|
38
|
+
# @return [String]
|
|
39
|
+
isPurchased: {
|
|
40
|
+
class: :boolean
|
|
41
|
+
},
|
|
42
|
+
|
|
43
|
+
# @!attribute isLeased
|
|
44
|
+
# @param [String]
|
|
45
|
+
# @return [String]
|
|
46
|
+
isLeased: {
|
|
47
|
+
class: :boolean
|
|
48
|
+
},
|
|
49
|
+
|
|
50
|
+
# @!attribute poNumber
|
|
51
|
+
# @param [String]
|
|
52
|
+
# @return [String]
|
|
53
|
+
poNumber: {
|
|
54
|
+
class: :string
|
|
55
|
+
},
|
|
56
|
+
|
|
57
|
+
# @!attribute appleCareId
|
|
58
|
+
# @param [String]
|
|
59
|
+
# @return [String]
|
|
60
|
+
appleCareId: {
|
|
61
|
+
class: :string
|
|
62
|
+
},
|
|
63
|
+
|
|
64
|
+
# @!attribute vendor
|
|
65
|
+
# @param [String]
|
|
66
|
+
# @return [String]
|
|
67
|
+
vendor: {
|
|
68
|
+
class: :string
|
|
69
|
+
},
|
|
70
|
+
|
|
71
|
+
# @!attribute purchasePrice
|
|
72
|
+
# @param [String]
|
|
73
|
+
# @return [String]
|
|
74
|
+
purchasePrice: {
|
|
75
|
+
class: :string
|
|
76
|
+
},
|
|
77
|
+
|
|
78
|
+
# @!attribute purchasingAccount
|
|
79
|
+
# @param [String]
|
|
80
|
+
# @return [String]
|
|
81
|
+
purchasingAccount: {
|
|
82
|
+
class: :string
|
|
83
|
+
},
|
|
84
|
+
|
|
85
|
+
# @!attribute poDate
|
|
86
|
+
# @param [String]
|
|
87
|
+
# @return [String]
|
|
88
|
+
poDate: {
|
|
89
|
+
class: Jamf::Timestamp
|
|
90
|
+
},
|
|
91
|
+
|
|
92
|
+
# @!attribute warrantyExpiresDate
|
|
93
|
+
# @param [String]
|
|
94
|
+
# @return [String]
|
|
95
|
+
warrantyExpiresDate: {
|
|
96
|
+
class: Jamf::Timestamp
|
|
97
|
+
},
|
|
98
|
+
|
|
99
|
+
# @!attribute leaseExpiresDate
|
|
100
|
+
# @param [String]
|
|
101
|
+
# @return [String]
|
|
102
|
+
leaseExpiresDate: {
|
|
103
|
+
class: Jamf::Timestamp
|
|
104
|
+
},
|
|
105
|
+
|
|
106
|
+
# @!attribute lifeExpectancy
|
|
107
|
+
# @param [String]
|
|
108
|
+
# @return [String]
|
|
109
|
+
lifeExpectancy: {
|
|
110
|
+
class: :integer
|
|
111
|
+
},
|
|
112
|
+
|
|
113
|
+
# @!attribute purchasingContact
|
|
114
|
+
# @param [String]
|
|
115
|
+
# @return [String]
|
|
116
|
+
purchasingContact: {
|
|
117
|
+
class: :string
|
|
118
|
+
}
|
|
119
|
+
}.freeze
|
|
120
|
+
|
|
121
|
+
parse_object_model
|
|
122
|
+
|
|
123
|
+
end # class location
|
|
124
|
+
|
|
125
|
+
end # module
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Copyright 2019 Pixar
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "Apache License")
|
|
4
|
+
# with the following modification; you may not use this file except in
|
|
5
|
+
# compliance with the Apache License and the following modification to it:
|
|
6
|
+
# Section 6. Trademarks. is deleted and replaced with:
|
|
7
|
+
#
|
|
8
|
+
# 6. Trademarks. This License does not grant permission to use the trade
|
|
9
|
+
# names, trademarks, service marks, or product names of the Licensor
|
|
10
|
+
# and its affiliates, except as required to comply with Section 4(c) of
|
|
11
|
+
# the License and to reproduce the content of the NOTICE file.
|
|
12
|
+
#
|
|
13
|
+
# You may obtain a copy of the Apache License at
|
|
14
|
+
#
|
|
15
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
16
|
+
#
|
|
17
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
18
|
+
# distributed under the Apache License with the above modification is
|
|
19
|
+
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
20
|
+
# KIND, either express or implied. See the Apache License for the specific
|
|
21
|
+
# language governing permissions and limitations under the Apache License.
|
|
22
|
+
#
|
|
23
|
+
#
|
|
24
|
+
|
|
25
|
+
module Jamf
|
|
26
|
+
|
|
27
|
+
# This mixin should be extended in abstract class definitions
|
|
28
|
+
# it will raise an error if those classes are instantiated.
|
|
29
|
+
# It also maintains an array of classes that extend themselves this way
|
|
30
|
+
# and are abstract.
|
|
31
|
+
module Abstract
|
|
32
|
+
|
|
33
|
+
# when a class is extended by this module, it
|
|
34
|
+
# gets added to the array of known abstract classes
|
|
35
|
+
def self.extended(by_class)
|
|
36
|
+
abstract_classes << by_class
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# Classes will be added to this array as they are exteded by Abstract
|
|
40
|
+
def self.abstract_classes
|
|
41
|
+
@abstract_classes ||= []
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def self.abstract?
|
|
45
|
+
abstract_classes.include? self
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# when any extended class or subclass of an extended class is instntiated
|
|
49
|
+
# check that it isn't in the abstract list.
|
|
50
|
+
def new(*args, &block)
|
|
51
|
+
raise Jamf::UnsupportedError, "Unsupported: #{self} is an abstract class, cannot be instantiated." if Jamf::Abstract.abstract_classes.include? self
|
|
52
|
+
|
|
53
|
+
super
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
end # module Abstract
|
|
57
|
+
|
|
58
|
+
end # Jamf
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Copyright 2019 Pixar
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "Apache License")
|
|
4
|
+
# with the following modification; you may not use this file except in
|
|
5
|
+
# compliance with the Apache License and the following modification to it:
|
|
6
|
+
# Section 6. Trademarks. is deleted and replaced with:
|
|
7
|
+
#
|
|
8
|
+
# 6. Trademarks. This License does not grant permission to use the trade
|
|
9
|
+
# names, trademarks, service marks, or product names of the Licensor
|
|
10
|
+
# and its affiliates, except as required to comply with Section 4(c) of
|
|
11
|
+
# the License and to reproduce the content of the NOTICE file.
|
|
12
|
+
#
|
|
13
|
+
# You may obtain a copy of the Apache License at
|
|
14
|
+
#
|
|
15
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
16
|
+
#
|
|
17
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
18
|
+
# distributed under the Apache License with the above modification is
|
|
19
|
+
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
20
|
+
# KIND, either express or implied. See the Apache License for the specific
|
|
21
|
+
# language governing permissions and limitations under the Apache License.
|
|
22
|
+
#
|
|
23
|
+
#
|
|
24
|
+
|
|
25
|
+
module Jamf
|
|
26
|
+
|
|
27
|
+
# This mixin overrides JSONObject.mutable? to return false,
|
|
28
|
+
# meaning that no setters are ever defined, and if the
|
|
29
|
+
# object is a Jamf::Resource, #save will raise an error
|
|
30
|
+
#
|
|
31
|
+
module Immutable
|
|
32
|
+
|
|
33
|
+
def mutable?
|
|
34
|
+
false
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
end # Lockable
|
|
38
|
+
|
|
39
|
+
end # Jamf
|
|
@@ -0,0 +1,136 @@
|
|
|
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
|
+
module Jamf
|
|
27
|
+
|
|
28
|
+
# a mix-in module for Jamf::Resource subclasses.
|
|
29
|
+
#
|
|
30
|
+
# Many Jamf resources maintain an 'object history', available in the WebUI via
|
|
31
|
+
# the 'History' button at the bottom of a page. Ad-hoc history entries can
|
|
32
|
+
# be added containing textual notes, which is useful for objects that don't
|
|
33
|
+
# have a real 'notes' or 'description' field, like policies.
|
|
34
|
+
#
|
|
35
|
+
# In the Jamf Pro API, this history is usually available at a resource path
|
|
36
|
+
# ending with '/history'
|
|
37
|
+
#
|
|
38
|
+
# Due to the many kinds of history available in Jamf, like management
|
|
39
|
+
# history, application usage history, and so on, ruby-jss uses the term
|
|
40
|
+
# 'change log' to refer to a Jamf resource's 'object history', and access
|
|
41
|
+
# to the change log is provided by this module.
|
|
42
|
+
#
|
|
43
|
+
# The change log can be available in different places:
|
|
44
|
+
#
|
|
45
|
+
# - instances of a CollectionResources (e.g. individual policies)
|
|
46
|
+
# - mix-in this module by including it, to get instance methods
|
|
47
|
+
# - CollectionResources as a whole (e.g. Inventory Preload Records)
|
|
48
|
+
# - mix-in this module by extending it, to get class methods
|
|
49
|
+
# - SingletonResources (e.g. Client Checkin Settings )
|
|
50
|
+
# - mix-in this module by including AND extending, to get both
|
|
51
|
+
#
|
|
52
|
+
# This module will add two methods:
|
|
53
|
+
#
|
|
54
|
+
# 1) #change_log, will fetch and cache an Array of readonly
|
|
55
|
+
# Jamf::ChangeLogEntry instances. passing any truthy parameter will
|
|
56
|
+
# cause it to re-fetch the Array from the server.
|
|
57
|
+
#
|
|
58
|
+
# 2) #add_history_note(note), which takes a string and adds it to the
|
|
59
|
+
# object's change history as a note and re-fetches & caches the history.
|
|
60
|
+
#
|
|
61
|
+
module ChangeLog
|
|
62
|
+
|
|
63
|
+
# The change and note history for this resource.
|
|
64
|
+
#
|
|
65
|
+
# The history is cached internally and only re-fetched when
|
|
66
|
+
# a truthy parameter is given.
|
|
67
|
+
#
|
|
68
|
+
# @param refresh[Boolean] re-fetch and re-cache the history
|
|
69
|
+
#
|
|
70
|
+
# @return [Array<Jamf::ChangeHistoryEntry>] The change and note history for
|
|
71
|
+
# this resource
|
|
72
|
+
#
|
|
73
|
+
def change_log(refresh = false, cnx: Jamf.cnx)
|
|
74
|
+
# this should only be true for instances of CollectionResources
|
|
75
|
+
cnx = @cnx if @cnx
|
|
76
|
+
|
|
77
|
+
@change_log = nil if refresh
|
|
78
|
+
@change_log ||= cnx.get(change_log_rsrc)[:results].map! do |l|
|
|
79
|
+
#
|
|
80
|
+
# TODO: Report bug in jamf data, sometimes there's no details in the JSON
|
|
81
|
+
# so add an empty string if needed. DO it for note too, just in case
|
|
82
|
+
l[:details] ||= Jamf::BLANK
|
|
83
|
+
l[:note] ||= Jamf::BLANK
|
|
84
|
+
|
|
85
|
+
Jamf::ChangeLogEntry.new l
|
|
86
|
+
end # map!
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# Add a note to this resource's change log.
|
|
90
|
+
#
|
|
91
|
+
# If the change history has been cached already, it is
|
|
92
|
+
# recached after adding the note.
|
|
93
|
+
#
|
|
94
|
+
# @param note[String] The note to add. It cannot be empty.
|
|
95
|
+
#
|
|
96
|
+
# @return [void]
|
|
97
|
+
#
|
|
98
|
+
def add_change_log_note(note, cnx: Jamf.cnx)
|
|
99
|
+
# this should only be true for instances of CollectionResources
|
|
100
|
+
cnx = @cnx if @cnx
|
|
101
|
+
|
|
102
|
+
note = Jamf::Validate.non_empty_string note
|
|
103
|
+
note_to_send = { note: note }
|
|
104
|
+
cnx.post change_log_rsrc, note_to_send
|
|
105
|
+
# flush the cached data, force reload when next accessed, to get new note
|
|
106
|
+
@change_log = nil
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
# Private methods
|
|
110
|
+
###########################
|
|
111
|
+
private
|
|
112
|
+
|
|
113
|
+
# TODO: Implement paging
|
|
114
|
+
def change_log_rsrc
|
|
115
|
+
@change_log_rsrc ||= "#{rsrc_path}/history"
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
# def change_log_rsrc(page: nil, size: nil)
|
|
119
|
+
# params = ''
|
|
120
|
+
# params << '?' if page || size
|
|
121
|
+
# if page
|
|
122
|
+
#
|
|
123
|
+
# end
|
|
124
|
+
#
|
|
125
|
+
# if size
|
|
126
|
+
#
|
|
127
|
+
# end
|
|
128
|
+
# params << '?' if page || size
|
|
129
|
+
# params << '?' if page || size
|
|
130
|
+
#
|
|
131
|
+
# @change_log_rsrc ||= "#{rsrc_path}/history"
|
|
132
|
+
# end
|
|
133
|
+
|
|
134
|
+
end # module ChangeHistory
|
|
135
|
+
|
|
136
|
+
end # module
|
|
@@ -0,0 +1,75 @@
|
|
|
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
|
+
module Jamf
|
|
27
|
+
|
|
28
|
+
#
|
|
29
|
+
module Extendable
|
|
30
|
+
|
|
31
|
+
# The Array of extensionAttributes converted to a Hash of
|
|
32
|
+
# 'Name' => value
|
|
33
|
+
def ext_attrs
|
|
34
|
+
extensionAttributes.map { |ea| [ea.name, ea.value] }.to_h.freeze
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def ext_attr_names
|
|
38
|
+
extensionAttributes.map(&:name).freeze
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def set_ext_attr(ea_name, new_val)
|
|
42
|
+
raise Jamf::NoSuchItemError, "No ext attr named '#{ea_name}'" unless ext_attr_names.include? ea_name
|
|
43
|
+
eattr = extensionAttributes.select { |ea| ea.name == ea_name }.first
|
|
44
|
+
eattr.send :new_value=, new_val
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def ext_attrs_to_update
|
|
48
|
+
extensionAttributes.select(&:unsaved_changes?)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def ext_attrs_unsaved_changes
|
|
52
|
+
ext_attrs_to_update.map do |ea|
|
|
53
|
+
[ea.name,
|
|
54
|
+
{
|
|
55
|
+
old: ea.unsaved_changes[:value][:old],
|
|
56
|
+
new: ea.unsaved_changes[:value][:new]
|
|
57
|
+
}]
|
|
58
|
+
end.to_h
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def ext_attrs_unsaved_changes?
|
|
62
|
+
!ext_attrs_to_update.empty?
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def ext_attrs_clear_unsaved_changes
|
|
66
|
+
ext_attrs_to_update.each(&:clear_unsaved_changes)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def ext_attrs_to_jamf
|
|
70
|
+
ext_attrs_to_update.map(&:to_jamf)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
end # extendable
|
|
74
|
+
|
|
75
|
+
end # module
|