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.
Files changed (103) hide show
  1. checksums.yaml +4 -4
  2. data/lib/jamf.rb +169 -0
  3. data/lib/jamf/api/abstract_classes/collection_resource.rb +422 -0
  4. data/lib/jamf/api/abstract_classes/generic_reference.rb +145 -0
  5. data/lib/jamf/api/abstract_classes/json_object.rb +1074 -0
  6. data/lib/jamf/api/abstract_classes/prestage.rb +219 -0
  7. data/lib/jamf/api/abstract_classes/prestage_skip_setup_items.rb +126 -0
  8. data/lib/jamf/api/abstract_classes/resource.rb +250 -0
  9. data/lib/jamf/api/abstract_classes/singleton_resource.rb +87 -0
  10. data/lib/jamf/api/attribute_classes/ip_address.rb +66 -0
  11. data/lib/jamf/api/attribute_classes/timestamp.rb +144 -0
  12. data/lib/jamf/api/connection.rb +734 -0
  13. data/lib/jamf/api/connection/api_error.rb +111 -0
  14. data/lib/jamf/api/connection/api_error_styleguide.rb +96 -0
  15. data/lib/jamf/api/connection/token.rb +220 -0
  16. data/lib/jamf/api/json_objects/account_prefs.rb +79 -0
  17. data/lib/jamf/api/json_objects/android_details.rb +139 -0
  18. data/lib/jamf/api/json_objects/appletv_details.rb +110 -0
  19. data/lib/jamf/api/json_objects/attachment.rb +68 -0
  20. data/lib/jamf/api/json_objects/cellular_network.rb +151 -0
  21. data/lib/jamf/api/json_objects/change_log_entry.rb +77 -0
  22. data/lib/jamf/api/json_objects/computer_prestage_skip_setup_items.rb +67 -0
  23. data/lib/jamf/api/json_objects/country.rb +51 -0
  24. data/lib/jamf/api/json_objects/extension_attribute_value.rb +128 -0
  25. data/lib/jamf/api/json_objects/installed_application.rb +59 -0
  26. data/lib/jamf/api/json_objects/installed_certificate.rb +53 -0
  27. data/lib/jamf/api/json_objects/installed_configuration_profile.rb +67 -0
  28. data/lib/jamf/api/json_objects/installed_ebook.rb +58 -0
  29. data/lib/jamf/api/json_objects/installed_provisioning_profile.rb +59 -0
  30. data/lib/jamf/api/json_objects/inventory_preload_extension_attribute.rb +52 -0
  31. data/lib/jamf/api/json_objects/ios_details.rb +244 -0
  32. data/lib/jamf/api/json_objects/location.rb +95 -0
  33. data/lib/jamf/api/json_objects/md_prestage_name.rb +57 -0
  34. data/lib/jamf/api/json_objects/md_prestage_names.rb +82 -0
  35. data/lib/jamf/api/json_objects/md_prestage_skip_setup_items.rb +165 -0
  36. data/lib/jamf/api/json_objects/mobile_device_details.rb +219 -0
  37. data/lib/jamf/api/json_objects/mobile_device_security.rb +101 -0
  38. data/lib/jamf/api/json_objects/prestage_assignment.rb +61 -0
  39. data/lib/jamf/api/json_objects/prestage_location.rb +104 -0
  40. data/lib/jamf/api/json_objects/prestage_purchasing_data.rb +132 -0
  41. data/lib/jamf/api/json_objects/prestage_scope.rb +54 -0
  42. data/lib/jamf/api/json_objects/prestage_sync_status.rb +63 -0
  43. data/lib/jamf/api/json_objects/purchasing_data.rb +125 -0
  44. data/lib/jamf/api/mixins/abstract.rb +58 -0
  45. data/lib/jamf/api/mixins/bulk_deletable.rb +39 -0
  46. data/lib/jamf/api/mixins/change_log.rb +136 -0
  47. data/lib/jamf/api/mixins/extendable.rb +75 -0
  48. data/lib/jamf/api/mixins/immutable.rb +39 -0
  49. data/lib/jamf/api/mixins/locatable.rb +124 -0
  50. data/lib/jamf/api/mixins/lockable.rb +48 -0
  51. data/lib/jamf/api/mixins/referable.rb +92 -0
  52. data/lib/jamf/api/mixins/searchable.rb +202 -0
  53. data/lib/jamf/api/mixins/uncreatable.rb +40 -0
  54. data/lib/jamf/api/mixins/undeletable.rb +40 -0
  55. data/lib/jamf/api/resources/collection_resources/account.rb +163 -0
  56. data/lib/jamf/api/resources/collection_resources/building.rb +114 -0
  57. data/lib/jamf/api/resources/collection_resources/category.rb +82 -0
  58. data/lib/jamf/api/resources/collection_resources/computer.rb +49 -0
  59. data/lib/jamf/api/resources/collection_resources/computer_prestage.rb +80 -0
  60. data/lib/jamf/api/resources/collection_resources/department.rb +79 -0
  61. data/lib/jamf/api/resources/collection_resources/extension_attribute.rb +45 -0
  62. data/lib/jamf/api/resources/collection_resources/inventory_preload_record.rb +274 -0
  63. data/lib/jamf/api/resources/collection_resources/md_prestage.rb +139 -0
  64. data/lib/jamf/api/resources/collection_resources/mobile_device.rb +315 -0
  65. data/lib/jamf/api/resources/collection_resources/script.rb +190 -0
  66. data/lib/jamf/api/resources/collection_resources/site.rb +77 -0
  67. data/lib/jamf/api/resources/singleton_resources/app_store_country_codes.rb +131 -0
  68. data/lib/jamf/api/resources/singleton_resources/authorization.rb +88 -0
  69. data/lib/jamf/api/resources/singleton_resources/client_checkin_settings.rb +139 -0
  70. data/lib/jamf/api/resources/singleton_resources/reenrollment_settings.rb +95 -0
  71. data/lib/jamf/client.rb +301 -0
  72. data/lib/jamf/client/jamf_binary.rb +132 -0
  73. data/lib/jamf/client/jamf_helper.rb +298 -0
  74. data/lib/jamf/client/management_action.rb +114 -0
  75. data/lib/jamf/compatibility.rb +88 -0
  76. data/lib/jamf/composer.rb +190 -0
  77. data/lib/jamf/configuration.rb +281 -0
  78. data/lib/jamf/exceptions.rb +107 -0
  79. data/lib/jamf/ruby_extensions.rb +36 -0
  80. data/lib/jamf/ruby_extensions/array.rb +35 -0
  81. data/lib/jamf/ruby_extensions/array/predicates.rb +46 -0
  82. data/lib/jamf/ruby_extensions/array/utils.rb +47 -0
  83. data/lib/jamf/ruby_extensions/filetest.rb +32 -0
  84. data/lib/jamf/ruby_extensions/filetest/predicates.rb +46 -0
  85. data/lib/jamf/ruby_extensions/hash.rb +33 -0
  86. data/lib/jamf/ruby_extensions/hash/backports.rb +92 -0
  87. data/lib/jamf/ruby_extensions/ipaddr.rb +37 -0
  88. data/lib/jamf/ruby_extensions/ipaddr/utils.rb +95 -0
  89. data/lib/jamf/ruby_extensions/object.rb +30 -0
  90. data/lib/jamf/ruby_extensions/object/predicates.rb +51 -0
  91. data/lib/jamf/ruby_extensions/pathname.rb +39 -0
  92. data/lib/jamf/ruby_extensions/pathname/predicates.rb +50 -0
  93. data/lib/jamf/ruby_extensions/pathname/utils.rb +75 -0
  94. data/lib/jamf/ruby_extensions/string.rb +35 -0
  95. data/lib/jamf/ruby_extensions/string/backports.rb +66 -0
  96. data/lib/jamf/ruby_extensions/string/conversions.rb +65 -0
  97. data/lib/jamf/ruby_extensions/string/predicates.rb +47 -0
  98. data/lib/jamf/utility.rb +423 -0
  99. data/lib/jamf/validate.rb +224 -0
  100. data/lib/jamf/version.rb +32 -0
  101. data/lib/jpapi.rb +26 -0
  102. data/lib/jss/version.rb +1 -1
  103. metadata +104 -4
@@ -0,0 +1,107 @@
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
+ # Exceptions
30
+ #####################################
31
+
32
+ # MissingDataError - raise this error when we
33
+ # are missing args, or other simliar stuff.
34
+ #
35
+ class MissingDataError < RuntimeError; end
36
+
37
+ # InvalidDataError - raise this error when
38
+ # a data item isn't what we expected.
39
+ #
40
+ class InvalidDataError < RuntimeError; end
41
+
42
+ # InvalidConnectionError - raise this error when we
43
+ # don't have a usable connection to a network service, or
44
+ # don't have proper authentication/authorization.
45
+ #
46
+ class InvalidConnectionError < RuntimeError; end
47
+
48
+ # NoSuchItemError - raise this error when
49
+ # a desired item doesn't exist.
50
+ #
51
+ class NoSuchItemError < RuntimeError; end
52
+
53
+ # AlreadyExistsError - raise this error when
54
+ # trying to create something that already exists.
55
+ #
56
+ class AlreadyExistsError < RuntimeError; end
57
+
58
+ # FileServiceError - raise this error when
59
+ # there's a problem accessing file service on a
60
+ # distribution point.
61
+ #
62
+ class FileServiceError < RuntimeError; end
63
+
64
+ # UnmanagedError - raise this when we
65
+ # try to do something managerial to
66
+ # an unmanaged object
67
+ #
68
+ class UnmanagedError < RuntimeError; end
69
+
70
+ # UnsupportedError - raise this when we
71
+ # try to do something not yet supported
72
+ #
73
+ class UnsupportedError < RuntimeError; end
74
+
75
+ # TimeoutError - raise this when we
76
+ # try to do something and it times out
77
+ #
78
+ class TimeoutError < RuntimeError; end
79
+
80
+ # AuthenticationError - raise this when
81
+ # a name/pw are wrong
82
+ #
83
+ class AuthenticationError < RuntimeError; end
84
+
85
+ # ConflictError - raise this when
86
+ # attempts to PUT or PUSH to the API
87
+ # result in a 409 Conflict http error.
88
+ # See {Jamf::APIConnection#raise_conflict_error}
89
+ #
90
+ class ConflictError < RuntimeError; end
91
+
92
+ # BadRequestError - raise this when
93
+ # attempts to PUT or PUSH or DELETE to the API
94
+ # result in a 400 Bad Request http error.
95
+ # See {Jamf::APIConnection.raise_bad_request_error}
96
+ #
97
+ class BadRequestError < RuntimeError; end
98
+
99
+ # APIRequestError - raise this when
100
+ # attempts API actions generate an error not dealt with
101
+ # by ConflictError or BadRequestError
102
+ # result in a 400 Bad Request http error.
103
+ # See {Jamf::APIConnection.raise_api_error}
104
+ #
105
+ class APIRequestError < RuntimeError; end
106
+
107
+ end # module JAMF
@@ -0,0 +1,36 @@
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
+ ### All monkey-patched convenience methods are either prefixed with "jss_" or
27
+ ### if they are type coercions, "to_jss_"
28
+ ###
29
+
30
+ require 'jamf/ruby_extensions/filetest.rb'
31
+ require 'jamf/ruby_extensions/hash.rb'
32
+ require 'jamf/ruby_extensions/ipaddr.rb'
33
+ require 'jamf/ruby_extensions/object.rb'
34
+ require 'jamf/ruby_extensions/pathname.rb'
35
+ require 'jamf/ruby_extensions/string.rb'
36
+ require 'jamf/ruby_extensions/array.rb'
@@ -0,0 +1,35 @@
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
+ require 'jamf/ruby_extensions/array/predicates'
27
+ require 'jamf/ruby_extensions/array/utils'
28
+
29
+ #
30
+ class Array
31
+
32
+ include JamfRubyExtensions::Array::Predicates
33
+ include JamfRubyExtensions::Array::Utils
34
+
35
+ end # class
@@ -0,0 +1,46 @@
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 JamfRubyExtensions
27
+
28
+ module Array
29
+
30
+ module Predicates
31
+
32
+ # A case-insensitive version of #include? for Arrays of Strings.
33
+ #
34
+ # @param somestring [String] the String to search for
35
+ #
36
+ # @return [Boolean] Does the Array contain the String, ignoring case?
37
+ #
38
+ def j_ci_include_string?(somestring)
39
+ any? { |s| s.to_s.casecmp? somestring }
40
+ end
41
+
42
+ end # module
43
+
44
+ end # module
45
+
46
+ end # module
@@ -0,0 +1,47 @@
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
+ module JamfRubyExtensions
25
+
26
+ module Array
27
+
28
+ module Utils
29
+
30
+ # Fetch a string from an Array of Strings case-insensitively,
31
+ # e.g. my_array.j_ci_fetch_string('ThRashEer') will return 'thrasher'
32
+ # or nil if no match
33
+ #
34
+ # @param somestring [String] the String to search for
35
+ #
36
+ # @return [String, nil] The matching string as it exists in the Array, nil if it doesn't exist
37
+ #
38
+ def j_ci_fetch_string(somestring)
39
+ idx = index { |s| s.to_s.casecmp? somestring }
40
+ idx ? self[idx] : nil
41
+ end
42
+
43
+ end # module
44
+
45
+ end # module
46
+
47
+ end # module
@@ -0,0 +1,32 @@
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
+ require 'jamf/ruby_extensions/filetest/predicates'
27
+
28
+ module FileTest
29
+
30
+ extend JamfRubyExtensions::FileTest::Predicates
31
+
32
+ end # module FileTest
@@ -0,0 +1,46 @@
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 JamfRubyExtensions
27
+
28
+ module FileTest
29
+
30
+ module Predicates
31
+
32
+ # FileTest.file? returns true if
33
+ # the item is a symlink pointing to a regular file.
34
+ #
35
+ # This test, real_file?, returns true if the item is
36
+ # a regular file but NOT a symlink.
37
+ #
38
+ def j_real_file?(path)
39
+ FileTest.file?(path) && !FileTest.symlink?(path)
40
+ end # real_file?
41
+
42
+ end # module
43
+
44
+ end # module
45
+
46
+ end # module
@@ -0,0 +1,33 @@
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
+ require 'jamf/ruby_extensions/hash/backports'
27
+
28
+ # include the modules loaded above
29
+ class Hash
30
+
31
+ include JamfRubyExtensions::Hash::BackPorts
32
+
33
+ end
@@ -0,0 +1,92 @@
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
+ # Copyright 2019 Pixar
26
+
27
+ #
28
+ # Licensed under the Apache License, Version 2.0 (the "Apache License")
29
+ # with the following modification; you may not use this file except in
30
+ # compliance with the Apache License and the following modification to it:
31
+ # Section 6. Trademarks. is deleted and replaced with:
32
+ #
33
+ # 6. Trademarks. This License does not grant permission to use the trade
34
+ # names, trademarks, service marks, or product names of the Licensor
35
+ # and its affiliates, except as required to comply with Section 4(c) of
36
+ # the License and to reproduce the content of the NOTICE file.
37
+ #
38
+ # You may obtain a copy of the Apache License at
39
+ #
40
+ # http://www.apache.org/licenses/LICENSE-2.0
41
+ #
42
+ # Unless required by applicable law or agreed to in writing, software
43
+ # distributed under the Apache License with the above modification is
44
+ # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
45
+ # KIND, either express or implied. See the Apache License for the specific
46
+ # language governing permissions and limitations under the Apache License.
47
+
48
+ module JamfRubyExtensions
49
+
50
+ module Hash
51
+
52
+ module BackPorts
53
+
54
+ empty_hash = {}
55
+
56
+ # Ruby 2.5 + has transform_keys
57
+ unless empty_hash.respond_to? :transform_keys
58
+ def transform_keys(&block)
59
+ nh = {}
60
+ each do |k, v|
61
+ nk = yield k
62
+ nh[nk] = v
63
+ end
64
+ nh
65
+ end
66
+
67
+ def transform_keys!(&block)
68
+ replace transform_keys(&block)
69
+ end
70
+ end # unless
71
+
72
+ # Ruby 2.4 + has transform_values
73
+ unless empty_hash.respond_to? :transform_values
74
+ def transform_values(&block)
75
+ nh = {}
76
+ each do |k, v|
77
+ nv = yield v
78
+ nh[k] = nv
79
+ end
80
+ nh
81
+ end
82
+
83
+ def transform_values!(&block)
84
+ replace transform_values(&block)
85
+ end
86
+ end # unless
87
+
88
+ end # module
89
+
90
+ end # module
91
+
92
+ end # module