apple_vpp 1.0.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 ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ Njk4MWU4NzhlZWMwM2M2MTNjNDYxNDUxYjhiNWQwMDg0OTVmNDliZA==
5
+ data.tar.gz: !binary |-
6
+ ZGY5YWEwZTIzM2UwODY3NGM5NjIyYzk1MTE4NWFjMGI0ZWExNDFiMw==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ ZmJjNjNlNTZmYzBhNWIyZWM1NmZhM2M3ZDM0NDY1NTk2MTkzNGY1MTIyNWY4
10
+ MzFjNmFmYTVmNDViNzQ0ZjUxYzY2NGRmMmJjMTRiNzdlYWQ0M2JlZDBkNmVj
11
+ OWNlNWQyYjVjYzM5MDAzYzU1OTc3NDU5OWZjM2QzNmZiNjcyNmU=
12
+ data.tar.gz: !binary |-
13
+ NDZiNmYxMzdmYWE0MWNiNTY2ZDEyNWVlM2IyOTkxODMzYmZmNWI5Y2ViZGIx
14
+ ZTRkZDMxMTVlY2VlZDZkOGVkODgxMTY4Njc0Mzc4NDUzNDEwNTgxYjI0NzMx
15
+ Mjc3YWY4M2E5MWFjZWZiNzYwNGI1NGMzOTJjZTI1MzU5NzZkMTQ=
data/.gitignore ADDED
@@ -0,0 +1,18 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ coverage
6
+ InstalledFiles
7
+ lib/bundler/man
8
+ pkg
9
+ rdoc
10
+ spec/reports
11
+ test/tmp
12
+ test/version_tmp
13
+ tmp
14
+
15
+ # YARD artifacts
16
+ .yardoc
17
+ _yardoc
18
+ doc/
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format progress
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in apple_vpp.gemspec
4
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,31 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ apple_vpp (1.0.0)
5
+ rest-client (~> 1.6.7)
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ diff-lcs (1.2.4)
11
+ mime-types (1.25)
12
+ rake (10.1.0)
13
+ rest-client (1.6.7)
14
+ mime-types (>= 1.16)
15
+ rspec (2.14.1)
16
+ rspec-core (~> 2.14.0)
17
+ rspec-expectations (~> 2.14.0)
18
+ rspec-mocks (~> 2.14.0)
19
+ rspec-core (2.14.4)
20
+ rspec-expectations (2.14.0)
21
+ diff-lcs (>= 1.1.3, < 2.0)
22
+ rspec-mocks (2.14.1)
23
+
24
+ PLATFORMS
25
+ ruby
26
+
27
+ DEPENDENCIES
28
+ apple_vpp!
29
+ bundler (~> 1.3)
30
+ rake
31
+ rspec
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2013 tboyko
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
6
+ this software and associated documentation files (the "Software"), to deal in
7
+ the Software without restriction, including without limitation the rights to
8
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9
+ the Software, and to permit persons to whom the Software is furnished to do so,
10
+ subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17
+ FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18
+ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 TODO: Write your name
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,138 @@
1
+ apple_vpp
2
+ =========
3
+
4
+ Ruby bindings for the Apple VPP Managed App License Distribution API.
5
+
6
+ # Installation
7
+
8
+ Add this line to your application's Gemfile:
9
+
10
+ gem 'apple_vpp'
11
+
12
+ And then execute:
13
+
14
+ $ bundle
15
+
16
+ Or install it yourself as:
17
+
18
+ $ gem install apple_vpp
19
+
20
+ # Usage
21
+
22
+ Use the library like this:
23
+
24
+ ```ruby
25
+ s_token = File.read './from_apple_portal.vpptoken'
26
+
27
+ c = AppleVPP::Client.new s_token
28
+
29
+ users_json = c.get_users
30
+
31
+ c.edit_user user_id: users_json.first[:user_id],
32
+ email: 'youremail@example.org'
33
+ ```
34
+
35
+ # Methods
36
+
37
+ For information beyond what is included here, refer to the "Mobile Device Management Protocol Reference" documentation on Apple's Developer site.
38
+
39
+ ## associate_license_with_user
40
+
41
+ One of these is required:
42
+
43
+ * user_id
44
+ * client_user_id_str
45
+
46
+ One of these is required:
47
+
48
+ * adam_id
49
+ * license_id
50
+
51
+ Optional:
52
+
53
+ * pricing_param
54
+
55
+ ## client_config
56
+
57
+ Optional:
58
+
59
+ * client_context
60
+ * apn_token
61
+
62
+ ## disassociate_license_from_user
63
+
64
+ Required:
65
+
66
+ * license_id
67
+
68
+ ## edit_user
69
+
70
+ One of these is required:
71
+
72
+ * user_id
73
+ * client_user_id_str
74
+
75
+ Optional:
76
+
77
+ * email
78
+
79
+ ## get_licenses
80
+
81
+ Optional:
82
+
83
+ * since_modified_token
84
+ * adam_id
85
+ * pricing_param
86
+
87
+ ## get_user
88
+
89
+ One of these is required:
90
+
91
+ * user_id
92
+ * client_user_id_str
93
+
94
+ Optional:
95
+
96
+ * its_id_hash
97
+
98
+ ## get_users
99
+
100
+ Optional:
101
+
102
+ * since_modified_token
103
+ * include_retired
104
+
105
+ ## register_user
106
+
107
+ Required:
108
+
109
+ * client_user_id_str
110
+
111
+ Optional:
112
+
113
+ * email
114
+
115
+ ## retire_user
116
+
117
+ One of these is required:
118
+
119
+ * user_id
120
+ * client_user_id_str
121
+
122
+ # Error Handling
123
+
124
+ 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
+
126
+ ```ruby
127
+ AppleVPP::Error::Code#{error_code}
128
+ ```
129
+
130
+ A message will also be provided with the error.
131
+
132
+ ## Contributing
133
+
134
+ 1. Fork it
135
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
136
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
137
+ 4. Push to the branch (`git push origin my-new-feature`)
138
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
data/apple_vpp.gemspec ADDED
@@ -0,0 +1,25 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'apple_vpp/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "apple_vpp"
8
+ spec.version = AppleVPP::VERSION
9
+ spec.authors = ["Taylor Boyko"]
10
+ spec.email = ["taylorboyko@gmail.com"]
11
+ spec.description = %q{Ruby bindings for the Apple VPP App Assignment API}
12
+ spec.summary = %q{Ruby bindings for the Apple VPP App Assignment API}
13
+ spec.homepage = ""
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_dependency 'rest-client', '~> 1.6.7'
22
+ spec.add_development_dependency "bundler", "~> 1.3"
23
+ spec.add_development_dependency "rake"
24
+ spec.add_development_dependency "rspec"
25
+ end
@@ -0,0 +1,19 @@
1
+ module AppleVPP
2
+ class AppleSerializer
3
+
4
+ def self.to_ruby(apple_hash)
5
+ if apple_hash.kind_of?( Array )
6
+ return apple_hash.collect { |i| to_ruby i }
7
+ end
8
+
9
+ keys_with_hashes = apple_hash.select { | _k, v | v.kind_of?( Hash ) }
10
+
11
+ if keys_with_hashes.count > 0
12
+ keys_with_hashes.each { |k, v| apple_hash[k] = to_ruby v }
13
+ end
14
+
15
+ Hash[ apple_hash.map { | k, v | [ k.underscore.to_sym, v ] } ]
16
+ end
17
+
18
+ end
19
+ end
@@ -0,0 +1,187 @@
1
+ require 'rest_client'
2
+ require 'json'
3
+
4
+ module AppleVPP
5
+ class Client
6
+
7
+ attr_accessor :s_token
8
+
9
+ def initialize(s_token)
10
+ @s_token = s_token
11
+ @url_service = UrlService.new
12
+ end
13
+
14
+ def associate_license_with_user(params = {})
15
+ require_params [[:user_id, :client_user_id_str], [:adam_id, :license_id]], params
16
+
17
+ body = {
18
+ 'userId' => params[:user_id],
19
+ 'clientUserIdStr' => params[:client_user_id_str],
20
+ 'adamId' => params[:adam_id],
21
+ 'licenseId' => params[:license_id],
22
+ 'pricingParam' => params[:pricing_param]
23
+ }
24
+
25
+ resp = request :associate_license_srv_url, body
26
+
27
+ AppleSerializer.to_ruby [ resp['license'], resp['user'] ]
28
+ end
29
+
30
+ def disassociate_license_from_user(params = {})
31
+ require_params :license_id, params
32
+
33
+ body = {
34
+ 'licenseId' => params[:license_id]
35
+ }
36
+
37
+ resp = request :disassociate_license_srv_url, body
38
+
39
+ AppleSerializer.to_ruby [ resp['license'], resp['user'] ]
40
+ end
41
+
42
+ def client_config(params = {})
43
+ body = {
44
+ 'clientContext' => params[:client_context],
45
+ 'apnToken' => params[:apn_token]
46
+ }
47
+
48
+ resp = request :client_config_srv_url, body
49
+
50
+ AppleSerializer.to_ruby resp['clientContext']
51
+ end
52
+
53
+ def edit_user(params = {})
54
+ require_params [[:user_id, :client_user_id_str]], params
55
+
56
+ body = {
57
+ 'userId' => params[:user_id],
58
+ 'clientUserIdStr' => params[:client_user_id_str],
59
+ 'email' => params[:email]
60
+ }
61
+
62
+ resp = request :edit_user_srv_url, body
63
+
64
+ AppleSerializer.to_ruby resp['user']
65
+ end
66
+
67
+ def get_licenses(params = {})
68
+ licenses = []
69
+ batch_token = nil
70
+
71
+ begin
72
+
73
+ body = {
74
+ 'batchToken' => batch_token,
75
+ 'sinceModifiedToken' => params[:since_modified_token],
76
+ 'adamId' => params[:adam_id],
77
+ 'pricingParam' => params[:pricing_param]
78
+ }
79
+
80
+ resp = request :get_licenses_srv_url, body
81
+
82
+ licenses.concat( resp['licenses'] ) if resp['licenses']
83
+
84
+ batch_token = resp['batchToken']
85
+
86
+ end while batch_token
87
+
88
+ AppleSerializer.to_ruby licenses
89
+ end
90
+
91
+ def get_user(params = {})
92
+ require_params [[:user_id, :client_user_id_str]], params
93
+
94
+ body = {
95
+ 'userId' => params[:user_id],
96
+ 'clientUserIdStr' => params[:client_user_id_str],
97
+ 'itsIdHash' => params[:its_id_hash]
98
+ }
99
+
100
+ resp = request :get_user_srv_url, body
101
+
102
+ AppleSerializer.to_ruby resp['user']
103
+ end
104
+
105
+ def register_user(params = {})
106
+ require_params :client_user_id_str, params
107
+
108
+ body = {
109
+ 'clientUserIdStr' => params[:client_user_id_str],
110
+ 'email' => params[:email]
111
+ }
112
+
113
+ resp = request :register_user_srv_url, body
114
+
115
+ AppleSerializer.to_ruby resp['user']
116
+ end
117
+
118
+ def retire_user(params = {})
119
+ require_params [[:user_id, :client_user_id_str]], params
120
+
121
+ body = {
122
+ 'userId' => params[:user_id],
123
+ 'clientUserIdStr' => params[:client_user_id_str]
124
+ }
125
+
126
+ resp = request :retire_user_srv_url, body
127
+
128
+ AppleSerializer.to_ruby resp['user']
129
+ end
130
+
131
+ def get_users(params = {})
132
+ users = []
133
+ batch_token = nil
134
+
135
+ begin
136
+
137
+ body = {
138
+ 'batchToken' => batch_token,
139
+ 'sinceModifiedToken' => params[:since_modified_token],
140
+ 'includeRetired' => params[:include_retired] ? 1 : nil
141
+ }
142
+
143
+ resp = request :get_users_srv_url, body
144
+
145
+ users.concat( resp['users'] ) if resp['users']
146
+
147
+ batch_token = resp['batchToken']
148
+
149
+ end while batch_token
150
+
151
+ AppleSerializer.to_ruby users
152
+ end
153
+
154
+ private
155
+
156
+ # param_name_array is an array of required parameters. Include a sub-array of parameters for || requirement.
157
+
158
+ def require_params param_name_array, params
159
+ param_name_array = [param_name_array] unless param_name_array.kind_of? Array
160
+
161
+ param_name_array.each do |param_names|
162
+ param_names = [param_names] unless param_names.kind_of?(Array)
163
+
164
+ param_found = false
165
+ param_names.each do |param_name|
166
+ if params[param_name]
167
+ param_found = true
168
+ break
169
+ end
170
+ end
171
+
172
+ unless param_found
173
+ raise ArgumentError, "#{param_names.join(' or ')} must be provided"
174
+ end
175
+ end
176
+ end
177
+
178
+ def request url_service_url, body
179
+ @url_service.refresh unless @url_service.ready?
180
+
181
+ url = @url_service.send( url_service_url )
182
+
183
+ Request.submit url, @s_token, body
184
+ end
185
+
186
+ end
187
+ end
@@ -0,0 +1,14 @@
1
+ module AppleVPP
2
+ module Error
3
+
4
+ def self.create_error_class code
5
+ class_name = "Code#{code}"
6
+ begin
7
+ Module.const_get(class_name)
8
+ self.const_set class_name, ( Class.new StandardError )
9
+ rescue NameError
10
+ end
11
+ end
12
+
13
+ end
14
+ end
@@ -0,0 +1,23 @@
1
+ require 'rest-client'
2
+ require 'json'
3
+
4
+ module AppleVPP
5
+ class Request
6
+
7
+ def self.submit( url, s_token = nil, body = {} )
8
+ body['sToken'] = s_token
9
+ body.delete_if { |_k, v| v.nil? }
10
+
11
+ resp = RestClient.post url, body, content_type: :json
12
+ json = JSON.parse(resp)
13
+
14
+ if json['status'] == -1
15
+ raise (eval "AppleVPP::Error::Code#{json['errorNumber']}"), json['errorMessage']
16
+ end
17
+
18
+ json
19
+ end
20
+
21
+ end
22
+ end
23
+
@@ -0,0 +1,56 @@
1
+ module AppleVPP
2
+ class UrlService
3
+
4
+ SERVICE_URL = 'https://vpp.itunes.apple.com/WebObjects/MZFinance.woa/wa/'
5
+
6
+ attr_reader :associate_license_srv_url,
7
+ :client_config_srv_url,
8
+ :disassociate_license_srv_url,
9
+ :edit_user_srv_url,
10
+ :get_licenses_srv_url,
11
+ :get_user_srv_url,
12
+ :get_users_srv_url,
13
+ :invitation_email_url,
14
+ :register_user_srv_url,
15
+ :retire_user_srv_url,
16
+ :vpp_website_url,
17
+ :errors
18
+
19
+ def initialize
20
+ @errors = {}
21
+ @ready = false
22
+ end
23
+
24
+ def refresh
25
+ url = "#{SERVICE_URL}VPPServiceConfigSrv"
26
+ resp = Request.submit url
27
+
28
+ @associate_license_srv_url = resp['associateLicenseSrvUrl']
29
+ @client_config_srv_url = resp['clientConfigSrvUrl']
30
+ @disassociate_license_srv_url = resp['disassociateLicenseSrvUrl']
31
+ @edit_user_srv_url = resp['editUserSrvUrl']
32
+ @get_licenses_srv_url = resp['getLicensesSrvUrl']
33
+ @get_user_srv_url = resp['getUserSrvUrl']
34
+ @get_users_srv_url = resp['getUsersSrvUrl']
35
+ @invitation_email_url = resp['invitationEmailUrl']
36
+ @register_user_srv_url = resp['registerUserSrvUrl']
37
+ @retire_user_srv_url = resp['retireUserSrvUrl']
38
+ @vpp_website_url = resp['vppWebsiteUrl']
39
+
40
+ resp['errorCodes'].each do |i|
41
+ @errors[ i['errorNumber'] ] = i['errorMessage']
42
+ end
43
+
44
+ @errors.each do | number, _message|
45
+ AppleVPP::Error.create_error_class( number )
46
+ end
47
+
48
+ @ready = true
49
+ end
50
+
51
+ def ready?
52
+ @ready
53
+ end
54
+
55
+ end
56
+ end
@@ -0,0 +1,3 @@
1
+ module AppleVPP
2
+ VERSION = "1.0.0"
3
+ end
data/lib/apple_vpp.rb ADDED
@@ -0,0 +1,3 @@
1
+ require 'core_ext/string'
2
+
3
+ Dir[File.join(File.dirname(__FILE__), 'apple_vpp', '**', '*.rb')].each {|file| require file }
@@ -0,0 +1,9 @@
1
+ class String
2
+ def underscore
3
+ self.gsub(/::/, '/').
4
+ gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
5
+ gsub(/([a-z\d])([A-Z])/,'\1_\2').
6
+ tr("-", "_").
7
+ downcase
8
+ end
9
+ end
@@ -0,0 +1,5 @@
1
+ require 'spec_helper'
2
+
3
+ describe AppleVPP::API do
4
+
5
+ end
@@ -0,0 +1,22 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+
4
+ require 'apple_vpp'
5
+
6
+ # This file was generated by the `rspec --init` command. Conventionally, all
7
+ # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
8
+ # Require this file using `require "spec_helper"` to ensure that it is only
9
+ # loaded once.
10
+ #
11
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
12
+ RSpec.configure do |config|
13
+ config.treat_symbols_as_metadata_keys_with_true_values = true
14
+ config.run_all_when_everything_filtered = true
15
+ config.filter_run :focus
16
+
17
+ # Run specs in random order to surface order dependencies. If you find an
18
+ # order dependency and want to debug it, you can fix the order by providing
19
+ # the seed, which is printed after each run.
20
+ # --seed 1234
21
+ #config.order = 'random'
22
+ end
metadata ADDED
@@ -0,0 +1,121 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: apple_vpp
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Taylor Boyko
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-11-21 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rest-client
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: 1.6.7
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: 1.6.7
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '1.3'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '1.3'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ! '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ! '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ description: Ruby bindings for the Apple VPP App Assignment API
70
+ email:
71
+ - taylorboyko@gmail.com
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - .gitignore
77
+ - .rspec
78
+ - Gemfile
79
+ - Gemfile.lock
80
+ - LICENSE
81
+ - LICENSE.txt
82
+ - README.md
83
+ - Rakefile
84
+ - apple_vpp.gemspec
85
+ - lib/apple_vpp.rb
86
+ - lib/apple_vpp/apple_serializer.rb
87
+ - lib/apple_vpp/client.rb
88
+ - lib/apple_vpp/error.rb
89
+ - lib/apple_vpp/request.rb
90
+ - lib/apple_vpp/url_service.rb
91
+ - lib/apple_vpp/version.rb
92
+ - lib/core_ext/string.rb
93
+ - spec/apple_vpp/api_spec.rb
94
+ - spec/spec_helper.rb
95
+ homepage: ''
96
+ licenses:
97
+ - MIT
98
+ metadata: {}
99
+ post_install_message:
100
+ rdoc_options: []
101
+ require_paths:
102
+ - lib
103
+ required_ruby_version: !ruby/object:Gem::Requirement
104
+ requirements:
105
+ - - ! '>='
106
+ - !ruby/object:Gem::Version
107
+ version: '0'
108
+ required_rubygems_version: !ruby/object:Gem::Requirement
109
+ requirements:
110
+ - - ! '>='
111
+ - !ruby/object:Gem::Version
112
+ version: '0'
113
+ requirements: []
114
+ rubyforge_project:
115
+ rubygems_version: 2.1.10
116
+ signing_key:
117
+ specification_version: 4
118
+ summary: Ruby bindings for the Apple VPP App Assignment API
119
+ test_files:
120
+ - spec/apple_vpp/api_spec.rb
121
+ - spec/spec_helper.rb