app_store_connect 0.7.0 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6bece2d6691fbb4f254b53de5001324dfe4d10840c8c0cf82a073f0260bde177
4
- data.tar.gz: d45d001147d7694579c6c838a52fa376607d83cb82b82bc2481193f763cf4ed7
3
+ metadata.gz: 828bfc36ad01d4b563b45842227d5a6bdb8174e5861ff697d7cf44fe208dbd0a
4
+ data.tar.gz: a46feefa242d7cbd7a250864b02c279cb5ccbabd8f3ec455fb4a9432f85d879c
5
5
  SHA512:
6
- metadata.gz: 0e9cff4c10632c74fa8bc63a04b3cd24af7be3ee04bc0d9914da6e0fae3d421a6a802d429c7adc43ad1c8cf20761c296575041e73c78ab38ee2aa2bb0c4cf0b7
7
- data.tar.gz: 8301b52487821ab284c8f0c6ccbdd87b1fc3361337239aec2569da1ae4bc8a9f894ebdda28bb849a2ad42403ab840f7586f19c012ef156c6cc611db48333379a
6
+ metadata.gz: 0b4e5e5be24f9b2a82bc64c75ece2b2e5f5aaa41042320216b72bf692226cbe542d4d24485220c5f9de2b05bf0b310a700f2ba8e6bf2ea51c4c13ce0229c74cf
7
+ data.tar.gz: bbb0c90614528a5efd338f27ac418995673f084fe6bb1892e48849d1eed836a670d4e8b85aad1c699cb33f8ccbc94969be974c61d860de41dc2a3fab8843d271
data/.gitignore CHANGED
@@ -9,3 +9,4 @@
9
9
 
10
10
  # rspec failure tracking
11
11
  .rspec_status
12
+ .DS_Store
data/Gemfile.lock CHANGED
@@ -3,7 +3,6 @@ PATH
3
3
  specs:
4
4
  app_store_connect (0.7.0)
5
5
  activesupport (~> 5.2.3)
6
- httparty (~> 0.16)
7
6
  jwt (~> 2.1)
8
7
 
9
8
  GEM
@@ -42,9 +41,6 @@ GEM
42
41
  guard-compat (~> 1.1)
43
42
  rspec (>= 2.99.0, < 4.0)
44
43
  hashdiff (0.4.0)
45
- httparty (0.17.0)
46
- mime-types (~> 3.0)
47
- multi_xml (>= 0.5.2)
48
44
  i18n (1.6.0)
49
45
  concurrent-ruby (~> 1.0)
50
46
  jaro_winkler (1.5.3)
@@ -56,11 +52,7 @@ GEM
56
52
  ruby_dep (~> 1.2)
57
53
  lumberjack (1.0.13)
58
54
  method_source (0.9.2)
59
- mime-types (3.2.2)
60
- mime-types-data (~> 3.2015)
61
- mime-types-data (3.2019.0331)
62
55
  minitest (5.11.3)
63
- multi_xml (0.6.0)
64
56
  nenv (0.3.0)
65
57
  notiffany (0.1.1)
66
58
  nenv (~> 0.1)
data/README.md CHANGED
@@ -32,8 +32,8 @@ AppStoreConnect.config = {
32
32
  app_store_connect = AppStoreConnect::Client.new
33
33
 
34
34
  app_store_connect.apps
35
- app_store_connect.app('1234')
36
- app_store_connect.builds('1234')
35
+ app_store_connect.app(id: '1234')
36
+ app_store_connect.builds(id: '1234')
37
37
  ```
38
38
 
39
39
  ## Development
@@ -21,7 +21,6 @@ Gem::Specification.new do |spec|
21
21
  spec.require_paths = ['lib']
22
22
 
23
23
  spec.add_runtime_dependency 'activesupport', '~> 5.2.3'
24
- spec.add_runtime_dependency 'httparty', '~> 0.16'
25
24
  spec.add_runtime_dependency 'jwt', '~> 2.1'
26
25
 
27
26
  spec.add_development_dependency 'bundler', '~> 2.0'
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'jwt'
4
- require 'httparty'
5
4
 
6
5
  require 'app_store_connect/authorization'
7
6
  require 'app_store_connect/parser'
@@ -3,9 +3,10 @@
3
3
  require 'active_support/all'
4
4
 
5
5
  require 'app_store_connect/web_service_endpoint'
6
+ require 'app_store_connect/request'
6
7
 
7
8
  module AppStoreConnect
8
- class Client # rubocop:disable Metrics/ClassLength
9
+ class Client
9
10
  def initialize(**kwargs)
10
11
  @options = options(**kwargs)
11
12
 
@@ -40,27 +41,24 @@ module AppStoreConnect
40
41
  end
41
42
 
42
43
  def call(web_service_endpoint, **kwargs)
44
+ parser = proc do |response|
45
+ JSON.parse(response.body)
46
+ end
47
+
43
48
  case web_service_endpoint.http_method
44
49
  when :get
45
- get(web_service_endpoint, **kwargs)
50
+ get(web_service_endpoint, **kwargs, &parser)
46
51
  when :post
47
- post(web_service_endpoint, **kwargs)
52
+ post(web_service_endpoint, **kwargs, &parser)
48
53
  else
49
54
  raise "invalid http method: #{web_service_endpoint.http_method}"
50
55
  end
51
56
  end
52
57
 
53
- def build_url(web_service_endpoint, **kwargs)
54
- web_service_endpoint
55
- .url
56
- .gsub(/(\{(\w+)\})/) { kwargs.fetch(Regexp.last_match(2).to_sym) }
57
- end
58
-
59
- def url_parameter_names(web_service_endpoint)
60
- web_service_endpoint
58
+ def build_uri(web_service_endpoint, **kwargs)
59
+ URI(web_service_endpoint
61
60
  .url
62
- .scan(/(\{(\w+)\})/)
63
- .map { |_, n| n.to_sym }
61
+ .gsub(/(\{(\w+)\})/) { kwargs.fetch(Regexp.last_match(2).to_sym) })
64
62
  end
65
63
 
66
64
  def web_service_endpoint_by(name:)
@@ -87,44 +85,38 @@ module AppStoreConnect
87
85
  end
88
86
  end
89
87
 
90
- def build_body(request)
91
- request
92
- .to_h
93
- .deep_transform_keys { |k| k.to_s.camelize(:lower) }
94
- .to_json
95
- end
96
-
97
- def build_query(web_service_endpoint, **kwargs)
98
- query_parameters = kwargs.dup.tap do |hash|
99
- url_parameter_names(web_service_endpoint).each do |name|
100
- hash.delete(name.to_sym)
101
- end
102
- end
88
+ def get(web_service_endpoint, **kwargs, &block)
89
+ request = Request.new(
90
+ kwargs: kwargs,
91
+ web_service_endpoint: web_service_endpoint,
92
+ http_method: :get,
93
+ uri: build_uri(web_service_endpoint, **kwargs),
94
+ headers: headers
95
+ )
103
96
 
104
- query_parameters.to_query
97
+ request.execute(&block)
105
98
  end
106
99
 
107
- def get(web_service_endpoint, **kwargs)
108
- url = build_url(web_service_endpoint, **kwargs)
109
- query = build_query(web_service_endpoint, **kwargs)
110
-
111
- response = execute(:get, url, headers: headers, query: query)
112
-
113
- response['data']
100
+ def http_body(web_service_endpoint, **kwargs)
101
+ "AppStoreConnect::#{web_service_endpoint.http_body_type}"
102
+ .constantize
103
+ .new(**kwargs)
104
+ .to_h
105
+ .deep_transform_keys { |k| k.to_s.camelize(:lower) }
106
+ .to_json
114
107
  end
115
108
 
116
- def post(web_service_endpoint, **kwargs)
117
- url = build_url(web_service_endpoint, **kwargs)
118
- request = "AppStoreConnect::#{web_service_endpoint.http_body_type}".constantize.new(**kwargs)
119
- body = build_body(request)
120
-
121
- response = execute(:post, url, headers: headers, body: body)
122
-
123
- response
124
- end
109
+ def post(web_service_endpoint, **kwargs, &block)
110
+ request = Request.new(
111
+ web_service_endpoint: web_service_endpoint,
112
+ kwargs: kwargs,
113
+ http_method: :post,
114
+ uri: build_uri(web_service_endpoint, **kwargs),
115
+ headers: headers,
116
+ http_body: http_body(web_service_endpoint, **kwargs)
117
+ )
125
118
 
126
- def execute(http_method, url, **options)
127
- HTTParty.send(http_method, url, options)
119
+ request.execute(&block)
128
120
  end
129
121
 
130
122
  def headers
@@ -2,10 +2,12 @@
2
2
 
3
3
  module AppStoreConnect
4
4
  class CreateRequest
5
- include Object::Data
5
+ def self.inherited(klass)
6
+ klass.include(Object::Data)
7
+ end
6
8
 
7
9
  def initialize(**kwargs)
8
- @data = Data.new(kwargs)
10
+ @data = self.class::Data.new(kwargs)
9
11
  end
10
12
  end
11
13
  end
@@ -10,8 +10,6 @@ module AppStoreConnect
10
10
  class_methods do
11
11
  def type(type)
12
12
  @type = type
13
-
14
- const_set('TYPE', type)
15
13
  end
16
14
  end
17
15
 
@@ -0,0 +1,86 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'net/http'
4
+
5
+ module AppStoreConnect
6
+ attr_reader :uri
7
+
8
+ class Request
9
+ def initialize(**options)
10
+ @uri = options.fetch(:uri)
11
+ @options = options
12
+ end
13
+
14
+ def execute
15
+ Net::HTTP.start(uri.host, uri.port, net_http_options) do |http|
16
+ response = http.request(request)
17
+
18
+ yield response if block_given?
19
+ end
20
+ end
21
+
22
+ private
23
+
24
+ def web_service_endpoint
25
+ @options.fetch(:web_service_endpoint)
26
+ end
27
+
28
+ def query
29
+ return unless http_method == :get
30
+
31
+ kwargs.dup.tap do |hash|
32
+ url_parameter_names(web_service_endpoint).each do |name|
33
+ hash.delete(name.to_sym)
34
+ end
35
+ end.to_query
36
+ end
37
+
38
+ def http_method
39
+ @options.fetch(:http_method).to_sym
40
+ end
41
+
42
+ def net_http_options
43
+ { use_ssl: uri.scheme == 'https' }
44
+ end
45
+
46
+ def kwargs
47
+ @options.fetch(:kwargs, {})
48
+ end
49
+
50
+ def uri
51
+ @options.fetch(:uri).tap do |uri|
52
+ uri.query = query if http_method == :get
53
+ end
54
+ end
55
+
56
+ def headers
57
+ @options.fetch(:headers, {})
58
+ end
59
+
60
+ def body
61
+ return if http_method == :get
62
+
63
+ @options.fetch(:http_body)
64
+ end
65
+
66
+ def url_parameter_names(web_service_endpoint)
67
+ web_service_endpoint
68
+ .url
69
+ .scan(/(\{(\w+)\})/)
70
+ .map { |_, n| n.to_sym }
71
+ end
72
+
73
+ def request
74
+ case http_method
75
+ when :get
76
+ Net::HTTP::Get.new(uri, headers)
77
+ when :post
78
+ Net::HTTP::Post.new(uri, headers).tap do |request|
79
+ request.body = body
80
+ end
81
+ else
82
+ raise "unsupported http method: #{http_method}"
83
+ end
84
+ end
85
+ end
86
+ end
@@ -1,23 +1,20 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module AppStoreConnect
4
- class UserInvitationCreateRequest < Struct.new(:first_name, :last_name, :email, :roles)
5
- def initialize(kwargs)
6
- super(kwargs[:first_name], kwargs[:last_name], kwargs[:email], kwargs[:roles])
7
- end
8
-
9
- def body
10
- { 'data' =>
11
- { 'type' => 'userInvitations', 'attributes' =>
12
- { 'firstName' => first_name, 'lastName' => last_name, 'email' => email, 'roles' => roles, 'allAppsVisible' => true, 'provisioningAllowed' => true } } }
13
- end
3
+ require 'app_store_connect/create_request'
14
4
 
15
- def to_h
16
- body
17
- end
5
+ module AppStoreConnect
6
+ class UserInvitationCreateRequest < CreateRequest
7
+ data do
8
+ type 'userInvitations'
18
9
 
19
- def to_s
20
- body.to_json
10
+ attributes do
11
+ property :first_name, required: true
12
+ property :last_name, required: true
13
+ property :email, required: true
14
+ property :roles, required: true
15
+ property :all_apps_visible
16
+ property :provisioning_allowed
17
+ end
21
18
  end
22
19
  end
23
20
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module AppStoreConnect
4
- VERSION = '0.7.0'
4
+ VERSION = '0.8.0'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: app_store_connect
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kyle Decot
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-08-13 00:00:00.000000000 Z
11
+ date: 2019-08-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -24,20 +24,6 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: 5.2.3
27
- - !ruby/object:Gem::Dependency
28
- name: httparty
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '0.16'
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '0.16'
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: jwt
43
29
  requirement: !ruby/object:Gem::Requirement
@@ -229,6 +215,7 @@ files:
229
215
  - lib/app_store_connect/object/properties.rb
230
216
  - lib/app_store_connect/object/type.rb
231
217
  - lib/app_store_connect/parser.rb
218
+ - lib/app_store_connect/request.rb
232
219
  - lib/app_store_connect/type.rb
233
220
  - lib/app_store_connect/type/enum.rb
234
221
  - lib/app_store_connect/user_invitation_create_request.rb