apple_vpp 3.0.2 → 3.1.0
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/README.md +33 -2
- data/apple_vpp.gemspec +1 -1
- data/lib/apple_vpp/client.rb +48 -10
- data/lib/apple_vpp/error.rb +19 -0
- data/lib/apple_vpp/request.rb +17 -3
- data/lib/apple_vpp/url_service.rb +16 -11
- data/lib/apple_vpp/version.rb +1 -1
- data/spec/apple_vpp/api_spec.rb +2 -2
- data/spec/spec_helper.rb +0 -1
- metadata +17 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 66e3f762a1be742576c657a6d8c7a597cf3a2952
|
4
|
+
data.tar.gz: 0a811283fbe9b3e3c18b8552f3cf9bad3aa8543d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 54a55e79df45d3b96f1414e262f48aaea2881765ee82091fa226dc06f8796936dac6549f889d1ad73d289e7e5c2fd17e7187bddd3de6ae066a952ed77c838715
|
7
|
+
data.tar.gz: 696437d6b02a2dc705a4f1059dd2e8471609af868543355744a0d558a90a65470269bb33eda8b95fe83bdf8019dc9c2b7c8a2b4843408e826233f7e483decc13
|
data/README.md
CHANGED
@@ -29,7 +29,7 @@ c = AppleVPP::Client.new s_token
|
|
29
29
|
resp = c.get_users
|
30
30
|
|
31
31
|
c.edit_user user_id: resp[:users].first[:user_id],
|
32
|
-
email: 'youremail@example.org'
|
32
|
+
email: 'youremail@example.org'
|
33
33
|
```
|
34
34
|
|
35
35
|
# Methods
|
@@ -38,7 +38,7 @@ For information beyond what is included here, refer to the "Mobile Device Manage
|
|
38
38
|
|
39
39
|
## associate_license_with_user
|
40
40
|
|
41
|
-
One of these is required:
|
41
|
+
One of these is required:
|
42
42
|
|
43
43
|
* user_id
|
44
44
|
* client_user_id_str
|
@@ -76,6 +76,12 @@ Optional:
|
|
76
76
|
|
77
77
|
* email
|
78
78
|
|
79
|
+
## get_assets
|
80
|
+
|
81
|
+
Optional:
|
82
|
+
|
83
|
+
* include_license_counts
|
84
|
+
|
79
85
|
## get_licenses
|
80
86
|
|
81
87
|
Optional:
|
@@ -102,6 +108,24 @@ Optional:
|
|
102
108
|
* since_modified_token
|
103
109
|
* include_retired
|
104
110
|
|
111
|
+
## manage_licenses_by_adam_id_src
|
112
|
+
|
113
|
+
Required:
|
114
|
+
|
115
|
+
* adam_id_str
|
116
|
+
* pricing_param
|
117
|
+
|
118
|
+
One (and only one) of these are required:
|
119
|
+
|
120
|
+
* associate_client_user_id_strs
|
121
|
+
* associate_serial_numbers
|
122
|
+
* disassociate_client_user_id_strs
|
123
|
+
* disassociate_serial_numbers
|
124
|
+
|
125
|
+
Optional:
|
126
|
+
|
127
|
+
* notify_disassociation
|
128
|
+
|
105
129
|
## register_user
|
106
130
|
|
107
131
|
Required:
|
@@ -121,6 +145,8 @@ One of these is required:
|
|
121
145
|
|
122
146
|
# Error Handling
|
123
147
|
|
148
|
+
## Apple API Errors
|
149
|
+
|
124
150
|
Should an error be reported by the Apple API service, the library will raise a custom error class that will correspond to the Apple error code like so:
|
125
151
|
|
126
152
|
```ruby
|
@@ -129,6 +155,11 @@ AppleVPP::Error::Code#{error_code}
|
|
129
155
|
|
130
156
|
A message will also be provided with the error.
|
131
157
|
|
158
|
+
## 503 Service Unavailable Errors
|
159
|
+
|
160
|
+
The Apple API service may return a `503 Service Unavailable` error if the service is overwhelmed or if your client is being too aggressive. In this scenario, `apple_vpp` will raise `AppleVPP::Error::ServiceUnavailable`. The raised error will include a method `.retry_in_seconds` which returns an integer value, in seconds, of how long you should wait before retrying your request. The raw `Retry-After` header that Apple returns is also available via `.retry_after`.
|
161
|
+
|
162
|
+
|
132
163
|
## Contributing
|
133
164
|
|
134
165
|
1. Fork it
|
data/apple_vpp.gemspec
CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
-
spec.add_dependency 'rest-client', '~> 1.
|
21
|
+
spec.add_dependency 'rest-client', '~> 1.8.0'
|
22
22
|
spec.add_development_dependency "bundler", "~> 1.3"
|
23
23
|
spec.add_development_dependency "rake"
|
24
24
|
spec.add_development_dependency "rspec"
|
data/lib/apple_vpp/client.rb
CHANGED
@@ -65,6 +65,16 @@ module AppleVPP
|
|
65
65
|
AppleSerializer.to_ruby resp['user']
|
66
66
|
end
|
67
67
|
|
68
|
+
def get_assets(params = {})
|
69
|
+
body = {
|
70
|
+
'includeLicenseCounts' => params[:include_license_counts]
|
71
|
+
}
|
72
|
+
|
73
|
+
resp = request :get_vpp_assets_srv_url, body
|
74
|
+
|
75
|
+
AppleSerializer.to_ruby resp['assets']
|
76
|
+
end
|
77
|
+
|
68
78
|
def get_licenses(params = {})
|
69
79
|
licenses = []
|
70
80
|
batch_token = nil
|
@@ -88,7 +98,7 @@ module AppleVPP
|
|
88
98
|
|
89
99
|
end while batch_token
|
90
100
|
|
91
|
-
{
|
101
|
+
{
|
92
102
|
licenses: AppleSerializer.to_ruby(licenses),
|
93
103
|
since_modified_token: since_modified_token
|
94
104
|
}
|
@@ -96,10 +106,10 @@ module AppleVPP
|
|
96
106
|
|
97
107
|
def get_user(params = {})
|
98
108
|
require_params [[:user_id, :client_user_id_str]], params
|
99
|
-
|
109
|
+
|
100
110
|
body = {
|
101
|
-
'userId' => params[:user_id],
|
102
|
-
'clientUserIdStr' => params[:client_user_id_str],
|
111
|
+
'userId' => params[:user_id],
|
112
|
+
'clientUserIdStr' => params[:client_user_id_str],
|
103
113
|
'itsIdHash' => params[:its_id_hash]
|
104
114
|
}
|
105
115
|
|
@@ -108,6 +118,34 @@ module AppleVPP
|
|
108
118
|
AppleSerializer.to_ruby resp['user']
|
109
119
|
end
|
110
120
|
|
121
|
+
def manage_licenses_by_adam_id(params = {})
|
122
|
+
require_params [:adam_id_str, :pricing_param], params
|
123
|
+
|
124
|
+
unless params.has_key?(:associate_client_user_id_strs) ^
|
125
|
+
params.has_key?(:associate_serial_numbers) ^
|
126
|
+
params.has_key?(:disassociate_client_user_id_strs) ^
|
127
|
+
params.has_key?(:disassociate_license_id_strs)
|
128
|
+
raise ArgumentError, 'One and only one of these parameters may be provided: associate_client_user_id_strs, associate_serial_numbers, disassociate_client_user_id_strs, disassociate_license_id_strs.'
|
129
|
+
end
|
130
|
+
|
131
|
+
body = {
|
132
|
+
'adamIdStr' => params[:adam_id_str],
|
133
|
+
'associateClientUserIdStrs' => params[:associate_client_user_id_strs],
|
134
|
+
'associateSerialNumbers' => params[:associate_serial_numbers],
|
135
|
+
'disassociateClientUserIdStrs' => params[:disassociate_client_user_id_strs],
|
136
|
+
'disassociateLicenseIdStrs' => params[:disassociate_license_id_strs],
|
137
|
+
'pricingParam' => params[:pricing_param],
|
138
|
+
'notifyDisassociation' => params[:notify_disassociation]
|
139
|
+
}
|
140
|
+
|
141
|
+
resp = request :manage_vpp_licenses_by_adam_id_srv_url, body
|
142
|
+
|
143
|
+
ret = AppleSerializer.to_ruby resp
|
144
|
+
ret.delete(:status)
|
145
|
+
|
146
|
+
ret
|
147
|
+
end
|
148
|
+
|
111
149
|
def register_user(params = {})
|
112
150
|
require_params :client_user_id_str, params
|
113
151
|
|
@@ -117,7 +155,7 @@ module AppleVPP
|
|
117
155
|
}
|
118
156
|
|
119
157
|
resp = request :register_user_srv_url, body
|
120
|
-
|
158
|
+
|
121
159
|
AppleSerializer.to_ruby resp['user']
|
122
160
|
end
|
123
161
|
|
@@ -153,21 +191,21 @@ module AppleVPP
|
|
153
191
|
|
154
192
|
batch_token = resp['batchToken']
|
155
193
|
since_modified_token = resp['sinceModifiedToken']
|
156
|
-
|
194
|
+
|
157
195
|
end while batch_token
|
158
196
|
|
159
|
-
{
|
197
|
+
{
|
160
198
|
users: AppleSerializer.to_ruby(users),
|
161
199
|
since_modified_token: since_modified_token
|
162
200
|
}
|
163
201
|
end
|
164
202
|
|
165
203
|
private
|
166
|
-
|
204
|
+
|
167
205
|
# param_name_array is an array of required parameters. Include a sub-array of parameters for || requirement.
|
168
206
|
|
169
207
|
def require_params param_name_array, params
|
170
|
-
param_name_array = [param_name_array] unless param_name_array.kind_of? Array
|
208
|
+
param_name_array = [param_name_array] unless param_name_array.kind_of? Array
|
171
209
|
|
172
210
|
param_name_array.each do |param_names|
|
173
211
|
param_names = [param_names] unless param_names.kind_of?(Array)
|
@@ -179,7 +217,7 @@ module AppleVPP
|
|
179
217
|
break
|
180
218
|
end
|
181
219
|
end
|
182
|
-
|
220
|
+
|
183
221
|
unless param_found
|
184
222
|
raise ArgumentError, "#{param_names.join(' or ')} must be provided"
|
185
223
|
end
|
data/lib/apple_vpp/error.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'time'
|
2
|
+
|
1
3
|
module AppleVPP
|
2
4
|
class Error < ::StandardError
|
3
5
|
|
@@ -9,5 +11,22 @@ module AppleVPP
|
|
9
11
|
self.const_set "Code#{code}", ( Class.new AppleVPP::Error )
|
10
12
|
end
|
11
13
|
|
14
|
+
class ServiceUnavailable
|
15
|
+
attr_accessor :retry_after
|
16
|
+
|
17
|
+
def initialize retry_after
|
18
|
+
@retry_after = retry_after
|
19
|
+
end
|
20
|
+
|
21
|
+
def retry_in_seconds
|
22
|
+
if @retry_after == @retry_after.to_i.to_s
|
23
|
+
@retry_after
|
24
|
+
else
|
25
|
+
Time.parse(@retry_after) - Time.now
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
12
31
|
end
|
13
32
|
end
|
data/lib/apple_vpp/request.rb
CHANGED
@@ -7,12 +7,26 @@ module AppleVPP
|
|
7
7
|
def self.submit( url, s_token = nil, body = {} )
|
8
8
|
body['sToken'] = s_token
|
9
9
|
body.delete_if { |_k, v| v.nil? }
|
10
|
-
|
11
|
-
|
10
|
+
require 'awesome_print'
|
11
|
+
ap body
|
12
|
+
begin
|
13
|
+
|
14
|
+
resp = RestClient.post url, body, content_type: :json
|
15
|
+
|
16
|
+
rescue RestClient::ExceptionWithResponse => e
|
17
|
+
|
18
|
+
unless e.response.code == 503
|
19
|
+
raise e
|
20
|
+
end
|
21
|
+
|
22
|
+
raise AppleVPP::Error::ServiceUnavailable.new(e.response.raw_headers['Retry-After'])
|
23
|
+
|
24
|
+
end
|
25
|
+
|
12
26
|
json = JSON.parse(resp)
|
13
27
|
|
14
28
|
if json['status'] == -1
|
15
|
-
raise (eval "AppleVPP::Error::Code#{json['errorNumber']}"), json['errorMessage']
|
29
|
+
raise (eval "AppleVPP::Error::Code#{json['errorNumber']}"), json['errorMessage']
|
16
30
|
end
|
17
31
|
|
18
32
|
json
|
@@ -7,10 +7,12 @@ module AppleVPP
|
|
7
7
|
:client_config_srv_url,
|
8
8
|
:disassociate_license_srv_url,
|
9
9
|
:edit_user_srv_url,
|
10
|
+
:get_vpp_assets_srv_url,
|
10
11
|
:get_licenses_srv_url,
|
11
12
|
:get_user_srv_url,
|
12
13
|
:get_users_srv_url,
|
13
14
|
:invitation_email_url,
|
15
|
+
:manage_vpp_licenses_by_adam_id_srv_url,
|
14
16
|
:register_user_srv_url,
|
15
17
|
:retire_user_srv_url,
|
16
18
|
:vpp_website_url,
|
@@ -25,17 +27,19 @@ module AppleVPP
|
|
25
27
|
url = "#{SERVICE_URL}VPPServiceConfigSrv"
|
26
28
|
resp = Request.submit url
|
27
29
|
|
28
|
-
@associate_license_srv_url
|
29
|
-
@client_config_srv_url
|
30
|
-
@disassociate_license_srv_url
|
31
|
-
@edit_user_srv_url
|
32
|
-
@
|
33
|
-
@
|
34
|
-
@
|
35
|
-
@
|
36
|
-
@
|
37
|
-
@
|
38
|
-
@
|
30
|
+
@associate_license_srv_url = resp['associateLicenseSrvUrl']
|
31
|
+
@client_config_srv_url = resp['clientConfigSrvUrl']
|
32
|
+
@disassociate_license_srv_url = resp['disassociateLicenseSrvUrl']
|
33
|
+
@edit_user_srv_url = resp['editUserSrvUrl']
|
34
|
+
@get_vpp_assets_srv_url = resp['getVPPAssetsSrvUrl']
|
35
|
+
@get_licenses_srv_url = resp['getLicensesSrvUrl']
|
36
|
+
@get_user_srv_url = resp['getUserSrvUrl']
|
37
|
+
@get_users_srv_url = resp['getUsersSrvUrl']
|
38
|
+
@invitation_email_url = resp['invitationEmailUrl']
|
39
|
+
@manage_vpp_licenses_by_adam_id_srv_url = resp['manageVPPLicensesByAdamIdSrvUrl']
|
40
|
+
@register_user_srv_url = resp['registerUserSrvUrl']
|
41
|
+
@retire_user_srv_url = resp['retireUserSrvUrl']
|
42
|
+
@vpp_website_url = resp['vppWebsiteUrl']
|
39
43
|
|
40
44
|
resp['errorCodes'].each do |i|
|
41
45
|
@errors[ i['errorNumber'] ] = i['errorMessage']
|
@@ -50,3 +54,4 @@ module AppleVPP
|
|
50
54
|
|
51
55
|
end
|
52
56
|
end
|
57
|
+
|
data/lib/apple_vpp/version.rb
CHANGED
data/spec/apple_vpp/api_spec.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -10,7 +10,6 @@ require 'apple_vpp'
|
|
10
10
|
#
|
11
11
|
# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
|
12
12
|
RSpec.configure do |config|
|
13
|
-
config.treat_symbols_as_metadata_keys_with_true_values = true
|
14
13
|
config.run_all_when_everything_filtered = true
|
15
14
|
config.filter_run :focus
|
16
15
|
|
metadata
CHANGED
@@ -1,69 +1,69 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: apple_vpp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0
|
4
|
+
version: 3.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Taylor Boyko
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-07-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rest-client
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 1.
|
19
|
+
version: 1.8.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 1.
|
26
|
+
version: 1.8.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - ~>
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '1.3'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - ~>
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '1.3'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rspec
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
description: Ruby bindings for the Apple VPP App Assignment API
|
@@ -73,8 +73,8 @@ executables: []
|
|
73
73
|
extensions: []
|
74
74
|
extra_rdoc_files: []
|
75
75
|
files:
|
76
|
-
- .gitignore
|
77
|
-
- .rspec
|
76
|
+
- ".gitignore"
|
77
|
+
- ".rspec"
|
78
78
|
- CHANGELOG.md
|
79
79
|
- Gemfile
|
80
80
|
- LICENSE
|
@@ -102,17 +102,17 @@ require_paths:
|
|
102
102
|
- lib
|
103
103
|
required_ruby_version: !ruby/object:Gem::Requirement
|
104
104
|
requirements:
|
105
|
-
- -
|
105
|
+
- - ">="
|
106
106
|
- !ruby/object:Gem::Version
|
107
107
|
version: '0'
|
108
108
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
109
109
|
requirements:
|
110
|
-
- -
|
110
|
+
- - ">="
|
111
111
|
- !ruby/object:Gem::Version
|
112
112
|
version: '0'
|
113
113
|
requirements: []
|
114
114
|
rubyforge_project:
|
115
|
-
rubygems_version: 2.
|
115
|
+
rubygems_version: 2.4.6
|
116
116
|
signing_key:
|
117
117
|
specification_version: 4
|
118
118
|
summary: Ruby bindings for the Apple VPP App Assignment API
|