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.
- checksums.yaml +4 -4
- data/CHANGES.md +38 -0
- data/lib/jamf.rb +10 -3
- data/lib/jamf/api/abstract_classes/collection_resource.rb +329 -150
- data/lib/jamf/api/abstract_classes/generic_reference.rb +9 -1
- data/lib/jamf/api/abstract_classes/json_object.rb +106 -82
- data/lib/jamf/api/abstract_classes/prestage.rb +54 -29
- data/lib/jamf/api/abstract_classes/prestage_skip_setup_items.rb +21 -0
- data/lib/jamf/api/abstract_classes/resource.rb +4 -4
- data/lib/jamf/api/abstract_classes/singleton_resource.rb +1 -1
- data/lib/jamf/api/connection.rb +13 -9
- data/lib/jamf/api/connection/api_error.rb +8 -8
- data/lib/jamf/api/connection/token.rb +16 -15
- data/lib/jamf/api/json_objects/computer_prestage_skip_setup_items.rb +14 -1
- data/lib/jamf/api/json_objects/device_enrollment_device.rb +14 -7
- data/lib/jamf/api/json_objects/device_enrollment_device_sync_state.rb +81 -0
- data/lib/jamf/api/json_objects/locale.rb +59 -0
- data/lib/jamf/api/json_objects/md_prestage_skip_setup_items.rb +50 -1
- data/lib/jamf/api/json_objects/prestage_location.rb +3 -3
- data/lib/jamf/api/json_objects/prestage_purchasing_data.rb +7 -7
- data/lib/jamf/api/json_objects/prestage_scope.rb +1 -1
- data/lib/jamf/api/{resources/collection_resources → json_objects}/time_zone.rb +9 -23
- data/lib/jamf/api/mixins/bulk_deletable.rb +27 -6
- data/lib/jamf/api/mixins/change_log.rb +201 -51
- data/lib/jamf/api/mixins/filterable.rb +51 -0
- data/lib/jamf/api/mixins/pageable.rb +208 -0
- data/lib/jamf/api/mixins/sortable.rb +59 -0
- data/lib/jamf/api/resources/collection_resources/building.rb +19 -8
- data/lib/jamf/api/resources/collection_resources/category.rb +5 -3
- data/lib/jamf/api/resources/collection_resources/computer_prestage.rb +11 -4
- data/lib/jamf/api/resources/collection_resources/device_enrollment.rb +10 -10
- data/lib/jamf/api/resources/collection_resources/inventory_preload_record.rb +11 -3
- data/lib/jamf/api/resources/collection_resources/mobile_device_prestage.rb +24 -22
- data/lib/jamf/api/resources/collection_resources/script.rb +61 -25
- data/lib/jamf/api/resources/singleton_resources/app_store_country_codes.rb +15 -5
- data/lib/jamf/api/resources/singleton_resources/client_checkin_settings.rb +14 -14
- data/lib/jamf/api/resources/singleton_resources/locales.rb +155 -0
- data/lib/jamf/api/resources/singleton_resources/time_zones.rb +213 -0
- data/lib/jamf/validate.rb +63 -24
- data/lib/jamf/version.rb +1 -1
- data/lib/jss.rb +2 -1
- data/lib/jss/api_connection.rb +110 -370
- data/lib/jss/api_object.rb +3 -19
- data/lib/jss/api_object/categorizable.rb +1 -1
- data/lib/jss/api_object/configuration_profile.rb +34 -3
- data/lib/jss/api_object/directory_binding_type.rb +66 -60
- data/lib/jss/api_object/directory_binding_type/active_directory.rb +71 -34
- data/lib/jss/api_object/directory_binding_type/admitmac.rb +536 -467
- data/lib/jss/api_object/directory_binding_type/centrify.rb +21 -7
- data/lib/jss/api_object/directory_binding_type/open_directory.rb +4 -4
- data/lib/jss/api_object/distribution_point.rb +2 -2
- data/lib/jss/api_object/dock_item.rb +102 -96
- data/lib/jss/api_object/extendable.rb +1 -1
- data/lib/jss/api_object/group.rb +33 -2
- data/lib/jss/api_object/network_segment.rb +43 -12
- data/lib/jss/api_object/patch_source.rb +10 -9
- data/lib/jss/api_object/printer.rb +10 -4
- data/lib/jss/api_object/scopable.rb +10 -15
- data/lib/jss/exceptions.rb +3 -0
- data/lib/jss/server.rb +15 -0
- data/lib/jss/version.rb +1 -1
- metadata +37 -22
@@ -0,0 +1,51 @@
|
|
1
|
+
# Copyright 2020 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
|
+
# process filter strings for resources with filter request parameters
|
28
|
+
module Filterable
|
29
|
+
|
30
|
+
# # When this is included
|
31
|
+
# def self.included(klass)
|
32
|
+
# puts "Filterable was included by #{klass}"
|
33
|
+
# end
|
34
|
+
#
|
35
|
+
# # When this is exdended
|
36
|
+
# def self.extended(klass)
|
37
|
+
# puts "Filterable was extended by #{klass}"
|
38
|
+
# end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
# generate the RSQL filter to put into the url
|
43
|
+
def parse_collection_filter(filter)
|
44
|
+
return if filter.nil?
|
45
|
+
|
46
|
+
"&filter=#{CGI.escape filter}"
|
47
|
+
end
|
48
|
+
|
49
|
+
end # Filterable
|
50
|
+
|
51
|
+
end # Jamf
|
@@ -0,0 +1,208 @@
|
|
1
|
+
# Copyright 2020 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
|
+
# methods for dealing with paged collection GET requests
|
28
|
+
#
|
29
|
+
module Pageable
|
30
|
+
|
31
|
+
# # When This is included
|
32
|
+
# def self.included(klass)
|
33
|
+
# puts "Pageable was included by #{klass}"
|
34
|
+
# end
|
35
|
+
#
|
36
|
+
# # When this is exdended
|
37
|
+
# def self.extended(klass)
|
38
|
+
# puts "Pageable was extended by #{klass}"
|
39
|
+
# end
|
40
|
+
|
41
|
+
DFT_PAGE_SIZE = 100
|
42
|
+
|
43
|
+
MIN_PAGE_SIZE = 1
|
44
|
+
|
45
|
+
MAX_PAGE_SIZE = 2000
|
46
|
+
|
47
|
+
PAGE_SIZE_RANGE = (MIN_PAGE_SIZE..MAX_PAGE_SIZE).freeze
|
48
|
+
|
49
|
+
# @param rsrc [String] The collection resource GET endpoint
|
50
|
+
#
|
51
|
+
# @param cnx [Jamf::Connection] The API connection to use
|
52
|
+
#
|
53
|
+
# @return [Integer] How many items exist in this collection?
|
54
|
+
#
|
55
|
+
def collection_count(rsrc, cnx: Jamf.cnx)
|
56
|
+
# this should only be true for instances of CollectionResources
|
57
|
+
cnx = @cnx if @cnx
|
58
|
+
cnx.get("#{rsrc}?page=0&page-size=1")[:totalCount]
|
59
|
+
end
|
60
|
+
|
61
|
+
# Get a specific page of a paged collection request,
|
62
|
+
# possibly sorted & filtered.
|
63
|
+
#
|
64
|
+
# @param rsrc [String] The collection resource GET endpoint
|
65
|
+
#
|
66
|
+
# @param page [Integer] which page to get
|
67
|
+
#
|
68
|
+
# @param page_size [Integer] how many items per page
|
69
|
+
#
|
70
|
+
# @param sort [String,Array<String>] server-side sorting parameters
|
71
|
+
#
|
72
|
+
# @param filter [String] RSQL String limiting the result set
|
73
|
+
#
|
74
|
+
# @param cnx [Jamf::Connection] The API connection to use
|
75
|
+
#
|
76
|
+
# @return [Array<Object>] The parsed JSON for the requested page
|
77
|
+
#
|
78
|
+
def fetch_collection_page(rsrc, page, page_size, sort, filter, cnx: Jamf.cnx)
|
79
|
+
page_size ||= DFT_PAGE_SIZE
|
80
|
+
validate_page_params page_size, page
|
81
|
+
raw = cnx.get "#{rsrc}?page=#{page}&page-size=#{page_size}#{sort}#{filter}"
|
82
|
+
|
83
|
+
raw[:results]
|
84
|
+
end
|
85
|
+
|
86
|
+
################### Private methods
|
87
|
+
private
|
88
|
+
|
89
|
+
# get the first page of a paged collection, and set up for
|
90
|
+
# getting later pages
|
91
|
+
#
|
92
|
+
# @param rsrc [String] The collection resource GET endpoint
|
93
|
+
#
|
94
|
+
# @param page_size [Integer] how many items per page
|
95
|
+
#
|
96
|
+
# @param sort [String,Array<String>] server-side sorting parameters
|
97
|
+
#
|
98
|
+
# @param filter [String] RSQL String limiting the result set
|
99
|
+
#
|
100
|
+
# @param cnx [Jamf::Connection] The API connection to use
|
101
|
+
#
|
102
|
+
# @return [Array<Object>] The first page of the collection for this resource
|
103
|
+
#
|
104
|
+
def first_collection_page(rsrc, page_size, sort, filter, cnx)
|
105
|
+
page_size ||= DFT_PAGE_SIZE
|
106
|
+
validate_page_params page_size
|
107
|
+
|
108
|
+
@collection_rsrc_path = rsrc
|
109
|
+
@collection_cnx = cnx
|
110
|
+
@collection_page = :first
|
111
|
+
@collection_page_size = page_size
|
112
|
+
@collection_sort = sort
|
113
|
+
@collection_filter = filter
|
114
|
+
@collection_paged_fetched_count = 0
|
115
|
+
|
116
|
+
next_collection_page
|
117
|
+
end
|
118
|
+
|
119
|
+
# Fetch the next page of a paged collection request.
|
120
|
+
#
|
121
|
+
# Returns an empty array if there's been no paged request
|
122
|
+
# or if the last one has no more pages.
|
123
|
+
#
|
124
|
+
# @return [Array<Object>] The next page of the collection for this resource
|
125
|
+
#
|
126
|
+
def next_collection_page
|
127
|
+
case @collection_page
|
128
|
+
when :first
|
129
|
+
@collection_page = 0
|
130
|
+
when Integer
|
131
|
+
@collection_page += 1
|
132
|
+
else
|
133
|
+
# if here, we haven't initiated a paged request, or
|
134
|
+
# all pages have already been delivered
|
135
|
+
return []
|
136
|
+
end
|
137
|
+
|
138
|
+
raw = @collection_cnx.get "#{@collection_rsrc_path}?page=#{@collection_page}&page-size=#{@collection_page_size}#{@collection_sort}#{@collection_filter}"
|
139
|
+
|
140
|
+
@collection_paged_fetched_count += raw[:results].size
|
141
|
+
@collection_paged_total_count = raw[:totalCount]
|
142
|
+
|
143
|
+
# did we get everything in the this page?
|
144
|
+
# if so, clear all the paging data
|
145
|
+
clear_collection_paging_data if @collection_paged_fetched_count >= @collection_paged_total_count
|
146
|
+
|
147
|
+
# return the page results
|
148
|
+
raw[:results]
|
149
|
+
end
|
150
|
+
|
151
|
+
def clear_collection_paging_data
|
152
|
+
@collection_rsrc_path = nil
|
153
|
+
@collection_cnx = nil
|
154
|
+
@collection_sort = nil
|
155
|
+
@collection_filter = nil
|
156
|
+
@collection_page = nil
|
157
|
+
@collection_page_size = nil
|
158
|
+
@collection_paged_total_count = nil
|
159
|
+
@collection_paged_fetched_count = nil
|
160
|
+
end
|
161
|
+
|
162
|
+
# ensure valid page && page_size
|
163
|
+
#
|
164
|
+
# @param page_size [Integer] the page_size to be validated, must be in range
|
165
|
+
#
|
166
|
+
# @param page [Integer] the page number requested, must be >= 0
|
167
|
+
#
|
168
|
+
# @return [void]
|
169
|
+
#
|
170
|
+
def validate_page_params(page_size, page = nil)
|
171
|
+
raise ArgumentError, "page_size must be an Integer from #{MIN_PAGE_SIZE} to #{MAX_PAGE_SIZE}" unless PAGE_SIZE_RANGE.include? page_size
|
172
|
+
|
173
|
+
# if page is nil, ignore it, one of the auto paging methods is calling us
|
174
|
+
return if page.nil?
|
175
|
+
|
176
|
+
raise ArgumentError, 'page must be an Integer zero or higher' unless page.is_a?(Integer) && page > -1
|
177
|
+
end
|
178
|
+
|
179
|
+
# Description of #fetch_all_collection_pages
|
180
|
+
#
|
181
|
+
# @param rsrc [String] The collection resource GET endpoint
|
182
|
+
#
|
183
|
+
# @param sort [String,Array<String>] server-side sorting parameters
|
184
|
+
#
|
185
|
+
# @param filter [String] RSQL String limiting the result set
|
186
|
+
#
|
187
|
+
# @param cnx [Type] describe_cnx_here
|
188
|
+
#
|
189
|
+
# @return [Type] description_of_returned_object
|
190
|
+
#
|
191
|
+
def fetch_all_collection_pages(rsrc, sort, filter, cnx)
|
192
|
+
page = 0
|
193
|
+
page_size = MAX_PAGE_SIZE
|
194
|
+
|
195
|
+
raw = cnx.get "#{rsrc}?page=#{page}&page-size=#{page_size}#{sort}#{filter}"
|
196
|
+
results = raw[:results]
|
197
|
+
|
198
|
+
until results.size >= raw[:totalCount]
|
199
|
+
page += 1
|
200
|
+
raw = cnx.get "#{rsrc}?page=#{page}&page-size=#{page_size}#{sort}#{filter}"
|
201
|
+
results += raw[:results]
|
202
|
+
end
|
203
|
+
results
|
204
|
+
end
|
205
|
+
|
206
|
+
end # Pagable
|
207
|
+
|
208
|
+
end # Jamf
|
@@ -0,0 +1,59 @@
|
|
1
|
+
# Copyright 2020 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
|
+
# parse the sort params for collection GET requests
|
28
|
+
module Sortable
|
29
|
+
|
30
|
+
# # When this is included
|
31
|
+
# def self.included(klass)
|
32
|
+
# puts "Sortable was included by #{klass}"
|
33
|
+
# end
|
34
|
+
#
|
35
|
+
# # When this is exdended
|
36
|
+
# def self.extended(klass)
|
37
|
+
# puts "Sortable was extended by #{klass}"
|
38
|
+
# end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
# generate the sort params for the url
|
43
|
+
#
|
44
|
+
def parse_collection_sort(sort)
|
45
|
+
case sort
|
46
|
+
when nil
|
47
|
+
sort
|
48
|
+
when String
|
49
|
+
"&sort=#{CGI.escape sort}"
|
50
|
+
when Array
|
51
|
+
"&sort=#{CGI.escape sort.join(',')}"
|
52
|
+
else
|
53
|
+
raise ArgumentError, 'sort criteria must be a String or Array of Strings'
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
end # Sortable
|
58
|
+
|
59
|
+
end # Jamf
|
@@ -35,7 +35,11 @@ module Jamf
|
|
35
35
|
# Mix-Ins
|
36
36
|
#####################################
|
37
37
|
|
38
|
+
extend Jamf::BulkDeletable
|
38
39
|
include Jamf::ChangeLog
|
40
|
+
# TODO: this prob isn't needed anymore
|
41
|
+
# or should be updated - according to the specs, all
|
42
|
+
# references are just ids - integers-in-strings.
|
39
43
|
include Jamf::Referable
|
40
44
|
|
41
45
|
# Constants
|
@@ -54,7 +58,7 @@ module Jamf
|
|
54
58
|
# @!attribute [r] id
|
55
59
|
# @return [Integer]
|
56
60
|
id: {
|
57
|
-
class: :
|
61
|
+
class: :j_id,
|
58
62
|
identifier: :primary,
|
59
63
|
readonly: true
|
60
64
|
},
|
@@ -65,45 +69,52 @@ module Jamf
|
|
65
69
|
class: :string,
|
66
70
|
identifier: true,
|
67
71
|
validator: :non_empty_string,
|
68
|
-
required: true
|
72
|
+
required: true,
|
73
|
+
filter_key: true
|
69
74
|
},
|
70
75
|
|
71
76
|
# @!attribute street1
|
72
77
|
# @return [String]
|
73
78
|
streetAddress1: {
|
74
|
-
class: :string
|
79
|
+
class: :string,
|
80
|
+
filter_key: true
|
75
81
|
},
|
76
82
|
|
77
83
|
# @!attribute street2
|
78
84
|
# @return [String]
|
79
85
|
streetAddress2: {
|
80
|
-
class: :string
|
86
|
+
class: :string,
|
87
|
+
filter_key: true
|
81
88
|
},
|
82
89
|
|
83
90
|
# @!attribute city
|
84
91
|
# @return [String]
|
85
92
|
city: {
|
86
|
-
class: :string
|
93
|
+
class: :string,
|
94
|
+
filter_key: true
|
87
95
|
},
|
88
96
|
|
89
97
|
# @!attribute state_province
|
90
98
|
# @return [String]
|
91
99
|
stateProvince: {
|
92
100
|
class: :string,
|
93
|
-
aliases: %i[state province]
|
101
|
+
aliases: %i[state province],
|
102
|
+
filter_key: true
|
94
103
|
},
|
95
104
|
|
96
105
|
# @!attribute zip_postal_code
|
97
106
|
# @return [String]
|
98
107
|
zipPostalCode: {
|
99
108
|
class: :string,
|
100
|
-
aliases: %i[zip zipcode zip_code postal_code postalcode]
|
109
|
+
aliases: %i[zip zipcode zip_code postal_code postalcode],
|
110
|
+
filter_key: true
|
101
111
|
},
|
102
112
|
|
103
113
|
# @!attribute country
|
104
114
|
# @return [String]
|
105
115
|
country: {
|
106
|
-
class: :string
|
116
|
+
class: :string,
|
117
|
+
filter_key: true
|
107
118
|
}
|
108
119
|
}.freeze
|
109
120
|
|
@@ -41,7 +41,7 @@ module Jamf
|
|
41
41
|
# Constants
|
42
42
|
#####################################
|
43
43
|
|
44
|
-
RSRC_VERSION = '
|
44
|
+
RSRC_VERSION = 'v1'.freeze
|
45
45
|
|
46
46
|
RSRC_PATH = 'categories'.freeze
|
47
47
|
|
@@ -65,13 +65,15 @@ module Jamf
|
|
65
65
|
class: :string,
|
66
66
|
identifier: true,
|
67
67
|
validator: :non_empty_string,
|
68
|
-
required: true
|
68
|
+
required: true,
|
69
|
+
filter_key: true
|
69
70
|
},
|
70
71
|
|
71
72
|
# @!attribute priority
|
72
73
|
# @return [Integer]
|
73
74
|
priority: {
|
74
|
-
class: :integer
|
75
|
+
class: :integer,
|
76
|
+
filter_key: true
|
75
77
|
}
|
76
78
|
}.freeze
|
77
79
|
|
@@ -35,7 +35,7 @@ module Jamf
|
|
35
35
|
# Constants
|
36
36
|
#####################################
|
37
37
|
|
38
|
-
RSRC_VERSION = '
|
38
|
+
RSRC_VERSION = 'v2'.freeze
|
39
39
|
|
40
40
|
RSRC_PATH = 'computer-prestages'.freeze
|
41
41
|
|
@@ -53,23 +53,30 @@ module Jamf
|
|
53
53
|
|
54
54
|
# @!attribute isInstallProfilesDuringSetup
|
55
55
|
# @return [Boolean]
|
56
|
-
|
56
|
+
installProfilesDuringSetup: {
|
57
57
|
class: :boolean
|
58
58
|
},
|
59
59
|
|
60
60
|
# @!attribute prestageInstalledProfileIds
|
61
61
|
# @return [Array<Integer>]
|
62
62
|
prestageInstalledProfileIds: {
|
63
|
-
class: :
|
63
|
+
class: :j_id,
|
64
64
|
multi: true
|
65
65
|
},
|
66
66
|
|
67
67
|
# @!attribute customPackageIds
|
68
68
|
# @return [Array<Integer>]
|
69
69
|
customPackageIds: {
|
70
|
-
class: :
|
70
|
+
class: :j_id,
|
71
71
|
multi: true
|
72
|
+
},
|
73
|
+
|
74
|
+
# @!attribute customPackageDistributionPointId
|
75
|
+
# @return [String]
|
76
|
+
customPackageDistributionPointId: {
|
77
|
+
class: :j_id
|
72
78
|
}
|
79
|
+
|
73
80
|
).freeze
|
74
81
|
|
75
82
|
parse_object_model
|