app_store_connect 0.29.0 → 0.38.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.
Files changed (66) hide show
  1. checksums.yaml +4 -4
  2. data/.github/dependabot.yml +12 -0
  3. data/.github/workflows/default.yml +34 -25
  4. data/.gitignore +0 -1
  5. data/.rubocop.yml +6 -2
  6. data/CHANGELOG.md +443 -0
  7. data/Gemfile.lock +201 -0
  8. data/README.md +113 -11
  9. data/app_store_connect.gemspec +8 -4
  10. data/assets/banner.png +0 -0
  11. data/bin/console +10 -0
  12. data/lib/app_store_connect/app_store_version_build_linkage_request.rb +1 -3
  13. data/lib/app_store_connect/app_store_version_create_request.rb +1 -3
  14. data/lib/app_store_connect/app_store_version_phased_release_create_request.rb +1 -3
  15. data/lib/app_store_connect/app_store_version_phased_release_update_request.rb +1 -3
  16. data/lib/app_store_connect/app_store_version_release_request_create_request.rb +1 -3
  17. data/lib/app_store_connect/app_store_version_update_request.rb +1 -3
  18. data/lib/app_store_connect/base.rb +83 -0
  19. data/lib/app_store_connect/beta_build_localization_create_request.rb +14 -0
  20. data/lib/app_store_connect/beta_build_localization_modify_request.rb +14 -0
  21. data/lib/app_store_connect/build_update_request.rb +1 -3
  22. data/lib/app_store_connect/bundle_id_capability_create_request.rb +1 -3
  23. data/lib/app_store_connect/bundle_id_create_request.rb +1 -3
  24. data/lib/app_store_connect/certificate_create_request.rb +1 -3
  25. data/lib/app_store_connect/client/builder.rb +91 -0
  26. data/lib/app_store_connect/client.rb +45 -71
  27. data/lib/app_store_connect/device_create_request.rb +1 -3
  28. data/lib/app_store_connect/object/data.rb +19 -7
  29. data/lib/app_store_connect/object/data_type.rb +23 -0
  30. data/lib/app_store_connect/object/included.rb +27 -0
  31. data/lib/app_store_connect/profile_create_request.rb +1 -3
  32. data/lib/app_store_connect/request/body.rb +26 -0
  33. data/lib/app_store_connect/request/builder/create.rb +69 -0
  34. data/lib/app_store_connect/request.rb +2 -2
  35. data/lib/app_store_connect/requests/delete_with_body.rb +11 -0
  36. data/lib/app_store_connect/requests/v1/app_store_version_localization/create.rb +25 -0
  37. data/lib/app_store_connect/requests/v1/app_store_version_localization/update.rb +25 -0
  38. data/lib/app_store_connect/requests/v1/beta_app_review_submission/create.rb +15 -0
  39. data/lib/app_store_connect/requests/v1/build_beta_detail/update.rb +20 -0
  40. data/lib/app_store_connect/requests/v1/build_beta_groups/create.rb +16 -0
  41. data/lib/app_store_connect/requests/v1/build_beta_groups/delete.rb +16 -0
  42. data/lib/app_store_connect/requests/v1/in_app_purchase_localization/create.rb +21 -0
  43. data/lib/app_store_connect/requests/v1/in_app_purchase_localization/update.rb +21 -0
  44. data/lib/app_store_connect/requests/v1/in_app_purchase_price_schedule/create.rb +15 -0
  45. data/lib/app_store_connect/requests/v1/in_app_purchase_review_screenshot/create.rb +20 -0
  46. data/lib/app_store_connect/requests/v1/in_app_purchase_review_screenshot/update.rb +21 -0
  47. data/lib/app_store_connect/requests/v1/in_app_purchase_submission/create.rb +15 -0
  48. data/lib/app_store_connect/requests/v2/in_app_purchase/create.rb +24 -0
  49. data/lib/app_store_connect/requests/v2/in_app_purchase/update.rb +23 -0
  50. data/lib/app_store_connect/review_submission_create_request.rb +1 -3
  51. data/lib/app_store_connect/review_submission_item_create_request.rb +1 -3
  52. data/lib/app_store_connect/review_submission_update_request.rb +1 -3
  53. data/lib/app_store_connect/specification/component/schema.rb +25 -0
  54. data/lib/app_store_connect/specification.rb +54 -0
  55. data/lib/app_store_connect/user_invitation_create_request.rb +1 -3
  56. data/lib/app_store_connect/version.rb +1 -1
  57. data/lib/app_store_connect.rb +4 -22
  58. data/lib/config/schema.json +175 -22
  59. data/lib/tasks/bundle.rake +7 -0
  60. data/lib/tasks/changelog.rake +17 -0
  61. data/lib/tasks/git.rake +19 -0
  62. data/lib/tasks/push.rake +18 -0
  63. data/lib/tasks/release.rake +11 -12
  64. data/lib/tasks/version.rake +4 -1
  65. metadata +98 -15
  66. data/lib/app_store_connect/create_request.rb +0 -14
data/Gemfile.lock ADDED
@@ -0,0 +1,201 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ app_store_connect (0.38.0)
5
+ activesupport (>= 6.0.0)
6
+ jwt (>= 1.4)
7
+ zeitwerk (>= 2.6.7)
8
+
9
+ GEM
10
+ remote: https://rubygems.org/
11
+ specs:
12
+ activesupport (7.0.4.3)
13
+ concurrent-ruby (~> 1.0, >= 1.0.2)
14
+ i18n (>= 1.6, < 2)
15
+ minitest (>= 5.1)
16
+ tzinfo (~> 2.0)
17
+ addressable (2.8.1)
18
+ public_suffix (>= 2.0.2, < 6.0)
19
+ ast (2.4.2)
20
+ async (1.30.3)
21
+ console (~> 1.10)
22
+ nio4r (~> 2.3)
23
+ timers (~> 4.1)
24
+ async-http (0.60.1)
25
+ async (>= 1.25)
26
+ async-io (>= 1.28)
27
+ async-pool (>= 0.2)
28
+ protocol-http (~> 0.24.0)
29
+ protocol-http1 (~> 0.15.0)
30
+ protocol-http2 (~> 0.15.0)
31
+ traces (>= 0.8.0)
32
+ async-http-faraday (0.11.0)
33
+ async-http (~> 0.42)
34
+ faraday
35
+ async-io (1.34.3)
36
+ async
37
+ async-pool (0.3.12)
38
+ async (>= 1.25)
39
+ cgi (0.3.6)
40
+ coderay (1.1.3)
41
+ concurrent-ruby (1.2.2)
42
+ console (1.16.2)
43
+ fiber-local
44
+ crack (0.4.5)
45
+ rexml
46
+ diff-lcs (1.5.0)
47
+ docile (1.4.0)
48
+ erb (4.0.2)
49
+ cgi (>= 0.3.3)
50
+ factory_bot (6.2.1)
51
+ activesupport (>= 5.0.0)
52
+ faraday (2.7.4)
53
+ faraday-net_http (>= 2.0, < 3.1)
54
+ ruby2_keywords (>= 0.0.4)
55
+ faraday-http-cache (2.4.1)
56
+ faraday (>= 0.8)
57
+ faraday-net_http (3.0.2)
58
+ ffi (1.15.5)
59
+ fiber-local (1.0.0)
60
+ formatador (1.1.0)
61
+ github_changelog_generator (1.16.4)
62
+ activesupport
63
+ async (>= 1.25.0)
64
+ async-http-faraday
65
+ faraday-http-cache
66
+ multi_json
67
+ octokit (~> 4.6)
68
+ rainbow (>= 2.2.1)
69
+ rake (>= 10.0)
70
+ guard (2.18.0)
71
+ formatador (>= 0.2.4)
72
+ listen (>= 2.7, < 4.0)
73
+ lumberjack (>= 1.0.12, < 2.0)
74
+ nenv (~> 0.1)
75
+ notiffany (~> 0.0)
76
+ pry (>= 0.13.0)
77
+ shellany (~> 0.0)
78
+ thor (>= 0.18.1)
79
+ guard-compat (1.2.1)
80
+ guard-rspec (4.7.3)
81
+ guard (~> 2.1)
82
+ guard-compat (~> 1.1)
83
+ rspec (>= 2.99.0, < 4.0)
84
+ hashdiff (1.0.1)
85
+ i18n (1.12.0)
86
+ concurrent-ruby (~> 1.0)
87
+ json (2.6.3)
88
+ jwt (2.7.0)
89
+ listen (3.7.1)
90
+ rb-fsevent (~> 0.10, >= 0.10.3)
91
+ rb-inotify (~> 0.9, >= 0.9.10)
92
+ lumberjack (1.2.8)
93
+ method_source (1.0.0)
94
+ minitest (5.18.0)
95
+ multi_json (1.15.0)
96
+ nenv (0.3.0)
97
+ nio4r (2.5.8)
98
+ notiffany (0.1.3)
99
+ nenv (~> 0.1)
100
+ shellany (~> 0.0)
101
+ octokit (4.25.1)
102
+ faraday (>= 1, < 3)
103
+ sawyer (~> 0.9)
104
+ parallel (1.23.0)
105
+ parser (3.2.2.0)
106
+ ast (~> 2.4.1)
107
+ protocol-hpack (1.4.2)
108
+ protocol-http (0.24.0)
109
+ protocol-http1 (0.15.0)
110
+ protocol-http (~> 0.22)
111
+ protocol-http2 (0.15.0)
112
+ protocol-hpack (~> 1.4)
113
+ protocol-http (~> 0.18)
114
+ pry (0.14.2)
115
+ coderay (~> 1.1)
116
+ method_source (~> 1.0)
117
+ public_suffix (5.0.0)
118
+ rainbow (3.1.1)
119
+ rake (13.0.6)
120
+ rb-fsevent (0.11.2)
121
+ rb-inotify (0.10.1)
122
+ ffi (~> 1.0)
123
+ regexp_parser (2.8.0)
124
+ rexml (3.2.5)
125
+ rspec (3.12.0)
126
+ rspec-core (~> 3.12.0)
127
+ rspec-expectations (~> 3.12.0)
128
+ rspec-mocks (~> 3.12.0)
129
+ rspec-core (3.12.1)
130
+ rspec-support (~> 3.12.0)
131
+ rspec-expectations (3.12.2)
132
+ diff-lcs (>= 1.2.0, < 2.0)
133
+ rspec-support (~> 3.12.0)
134
+ rspec-mocks (3.12.3)
135
+ diff-lcs (>= 1.2.0, < 2.0)
136
+ rspec-support (~> 3.12.0)
137
+ rspec-support (3.12.0)
138
+ rubocop (1.50.2)
139
+ json (~> 2.3)
140
+ parallel (~> 1.10)
141
+ parser (>= 3.2.0.0)
142
+ rainbow (>= 2.2.2, < 4.0)
143
+ regexp_parser (>= 1.8, < 3.0)
144
+ rexml (>= 3.2.5, < 4.0)
145
+ rubocop-ast (>= 1.28.0, < 2.0)
146
+ ruby-progressbar (~> 1.7)
147
+ unicode-display_width (>= 2.4.0, < 3.0)
148
+ rubocop-ast (1.28.0)
149
+ parser (>= 3.2.1.0)
150
+ ruby-progressbar (1.13.0)
151
+ ruby2_keywords (0.0.5)
152
+ rubyzip (2.3.2)
153
+ sawyer (0.9.2)
154
+ addressable (>= 2.3.5)
155
+ faraday (>= 0.17.3, < 3)
156
+ semantic (1.6.1)
157
+ shellany (0.0.1)
158
+ simplecov (0.22.0)
159
+ docile (~> 1.1)
160
+ simplecov-html (~> 0.11)
161
+ simplecov_json_formatter (~> 0.1)
162
+ simplecov-html (0.12.3)
163
+ simplecov_json_formatter (0.1.4)
164
+ thor (1.2.1)
165
+ timecop (0.9.6)
166
+ timers (4.3.5)
167
+ traces (0.8.0)
168
+ tzinfo (2.0.6)
169
+ concurrent-ruby (~> 1.0)
170
+ unicode-display_width (2.4.2)
171
+ webmock (3.18.1)
172
+ addressable (>= 2.8.0)
173
+ crack (>= 0.3.2)
174
+ hashdiff (>= 0.4.0, < 2.0.0)
175
+ zeitwerk (2.6.8)
176
+
177
+ PLATFORMS
178
+ arm64-darwin-21
179
+ arm64-darwin-22
180
+ x86_64-darwin-22
181
+ x86_64-linux
182
+
183
+ DEPENDENCIES
184
+ app_store_connect!
185
+ bundler
186
+ erb (~> 4.0.2)
187
+ factory_bot (~> 6.2.1)
188
+ github_changelog_generator (= 1.16.4)
189
+ guard-rspec (~> 4.7.3)
190
+ pry (~> 0.14.1)
191
+ rake (~> 13.0.6)
192
+ rspec (~> 3.12.0)
193
+ rubocop (~> 1.50.1)
194
+ rubyzip
195
+ semantic (~> 1.6.1)
196
+ simplecov (~> 0.22.0)
197
+ timecop (~> 0.9.5)
198
+ webmock (~> 3.18.1)
199
+
200
+ BUNDLED WITH
201
+ 2.3.24
data/README.md CHANGED
@@ -1,5 +1,14 @@
1
- # App Store Connect
2
- [![Test](https://github.com/kyledecot/app_store_connect/workflows/Test/badge.svg)](https://github.com/kyledecot/app_store_connect/actions) [![Gem Version](https://badge.fury.io/rb/app_store_connect.svg)](https://badge.fury.io/rb/app_store_connect) [![Maintainability](https://api.codeclimate.com/v1/badges/eb09ffa68f84f8da0b6d/maintainability)](https://codeclimate.com/github/kyledecot/app_store_connect/maintainability) [![Test Coverage](https://api.codeclimate.com/v1/badges/eb09ffa68f84f8da0b6d/test_coverage)](https://codeclimate.com/github/kyledecot/app_store_connect/test_coverage)
1
+
2
+
3
+ <div align="center">
4
+ <img src="assets/banner.png">
5
+
6
+ <h1>App Store Connect for Ruby</h1>
7
+
8
+ [![CI/CD](https://github.com/kyledecot/app_store_connect/actions/workflows/default.yml/badge.svg)](https://github.com/kyledecot/app_store_connect/actions/workflows/default.yml)
9
+ </div>
10
+
11
+
3
12
 
4
13
  A Ruby interface to the [App Store Connect API](https://developer.apple.com/app-store-connect/api/)
5
14
 
@@ -66,43 +75,124 @@ app_store_connect.sales_reports(
66
75
 
67
76
  ```ruby
68
77
 
69
- fetchAllDevices = app_store_connect.devices
70
- puts JSON.pretty_generate(fetchAllDevice)
78
+ devices = app_store_connect.devices
79
+ puts JSON.pretty_generate(devices)
71
80
 
72
81
  ```
73
82
 
74
83
  ### Register a New Device
75
84
 
76
85
  ```ruby
77
- result = app_store_connect.create_device(
86
+ created_device = app_store_connect.create_device(
78
87
  name: 'name',
79
88
  platform: 'IOS',
80
89
  udid: 'udid'
81
90
  )
82
91
 
83
- puts JSON.pretty_generate(result)
92
+ puts JSON.pretty_generate(created_device)
84
93
  ```
85
94
 
86
95
  ### Update an App Store Version
87
96
 
88
97
  ```ruby
89
- app_store_connect.update_app_store_version id: '<app-store-version-id>', version_string: '1.0'
98
+ app_store_connect.update_app_store_version(
99
+ id: '<app-store-version-id>',
100
+ version_string: '1.0'
101
+ )
90
102
  ```
91
103
 
92
104
  ### Link a Build to an App Store Version
93
105
 
94
106
  ```ruby
95
- app_store_connect.update_app_store_version_build id: '<app-store-version-id>', build_id: '<build-id>'
107
+ app_store_connect.update_app_store_version_build(
108
+ id: '<app-store-version-id>',
109
+ build_id: '<build-id>'
110
+ )
96
111
  ```
97
112
 
98
113
  ### Create a Review Submission Item
99
114
 
100
115
  ```ruby
101
- app_store_connect.create_review_submission_item relationships: {reviewSubmission: {data: {id: '<review-submission-id>', type: 'reviewSubmissions'}},
102
- appStoreVersion: {data: {id: '<app-store-version-id>', type: 'appStoreVersions'}}}
116
+ app_store_connect.create_review_submission_item(
117
+ relationships: {
118
+ reviewSubmission: {
119
+ data: {
120
+ id: '<review-submission-id>',
121
+ type: 'reviewSubmissions'
122
+ }
123
+ },
124
+ appStoreVersion: {
125
+ data: {
126
+ id: '<app-store-version-id>',
127
+ type: 'appStoreVersions'
128
+ }
129
+ }
130
+ }
131
+ )
132
+ ```
133
+
134
+ ### Create In-App Purchase Price Schedule
135
+
136
+ ```ruby
137
+ app_store_connect.create_in_app_purchase_price_schedule(
138
+ relationships: {
139
+ manual_prices: {
140
+ data: [
141
+ {
142
+ type: 'inAppPurchasePrices',
143
+ id: '${price1}'
144
+ }
145
+ ]
146
+ },
147
+ in_app_purchase: {
148
+ data: {
149
+ type: 'inAppPurchases',
150
+ id: '<in-app-purchase-id>'
151
+ }
152
+ }
153
+ },
154
+ included: [
155
+ {
156
+ type: 'inAppPurchasePrices',
157
+ id: '${price1}',
158
+ attributes: {
159
+ startDate: nil
160
+ },
161
+ relationships: {
162
+ inAppPurchaseV2: {
163
+ data: {
164
+ type: 'inAppPurchases',
165
+ id: '<in-app-purchase-id>'
166
+ }
167
+ },
168
+ inAppPurchasePricePoint: {
169
+ data: {
170
+ type: 'inAppPurchasePricePoints',
171
+ id: '<price-point-id>'
172
+ }
173
+ }
174
+ }
175
+ }
176
+ ]
177
+ )
103
178
  ```
104
179
 
105
- ## Q&A
180
+ ### Add or remove access for a Beta Group to a Build
181
+
182
+ ```ruby
183
+ app_store_connect.add_build_beta_groups(
184
+ id: '<build-id>',
185
+ data: [{id: '<beta-group-id>'}]
186
+ )
187
+
188
+ app_store_connect.delete_build_beta_groups(
189
+ id: '<build-id>',
190
+ data: [{id: '<beta-group-id>'}]
191
+ )
192
+
193
+ ```
194
+
195
+ ## FAQ
106
196
 
107
197
  ### How to understand the `devices, sales_reports, create_bundle_id` keyword seen in the demo?
108
198
 
@@ -116,6 +206,18 @@ It's function key from `schema.json` file.
116
206
 
117
207
  `http_body_type` have a value type. Based on this value, we can find the definition of the relevant configuration in the source code of ruby.
118
208
 
209
+ ### How to include related resources?
210
+
211
+ ```ruby
212
+ app_store_connect.in_app_purchase(id: 123, include: 'appStoreReviewScreenshot,pricePoints')
213
+ ```
214
+
215
+ ### How to filter fields?
216
+
217
+ ```ruby
218
+ app_store_connect.in_app_purchase(id: 123, fields: 'name,productId')
219
+ ```
220
+
119
221
  ## Development
120
222
 
121
223
  After checking out the repo, run `bundle install` to install dependencies. Then, run `rake spec` to run the tests. You can also run `rake console` for an interactive prompt that will allow you to experiment.
@@ -24,17 +24,21 @@ Gem::Specification.new do |spec|
24
24
  spec.required_ruby_version = '>= 2.7.0'
25
25
 
26
26
  spec.add_runtime_dependency 'activesupport', '>= 6.0.0'
27
- spec.add_runtime_dependency 'jwt', '>= 1.4', '<= 2.5.0'
27
+ spec.add_runtime_dependency 'jwt', '>= 1.4'
28
+ spec.add_runtime_dependency 'zeitwerk', '>= 2.6.7'
28
29
 
29
30
  spec.add_development_dependency 'bundler'
31
+ spec.add_development_dependency 'erb', '~> 4.0.2'
30
32
  spec.add_development_dependency 'factory_bot', '~> 6.2.1'
33
+ spec.add_development_dependency 'github_changelog_generator', '1.16.4'
31
34
  spec.add_development_dependency 'guard-rspec', '~> 4.7.3'
32
35
  spec.add_development_dependency 'pry', '~> 0.14.1'
33
36
  spec.add_development_dependency 'rake', '~> 13.0.6'
34
- spec.add_development_dependency 'rspec', '~> 3.11.0'
35
- spec.add_development_dependency 'rubocop', '~> 1.36.0'
37
+ spec.add_development_dependency 'rspec', '~> 3.12.0'
38
+ spec.add_development_dependency 'rubocop', '~> 1.50.1'
39
+ spec.add_development_dependency 'rubyzip'
36
40
  spec.add_development_dependency 'semantic', '~> 1.6.1'
37
- spec.add_development_dependency 'simplecov', '~> 0.21.2'
41
+ spec.add_development_dependency 'simplecov', '~> 0.22.0'
38
42
  spec.add_development_dependency 'timecop', '~> 0.9.5'
39
43
  spec.add_development_dependency 'webmock', '~> 3.18.1'
40
44
  end
data/assets/banner.png ADDED
Binary file
data/bin/console ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'bundler/setup'
5
+ require 'app_store_connect'
6
+ require 'rake'
7
+
8
+ load './lib/tasks/console.rake'
9
+
10
+ Rake::Task['console'].execute
@@ -1,9 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'app_store_connect/create_request'
4
-
5
3
  module AppStoreConnect
6
- class AppStoreVersionBuildLinkageRequest < CreateRequest
4
+ class AppStoreVersionBuildLinkageRequest < Request::Body
7
5
  data do
8
6
  id :build_id
9
7
  type 'builds'
@@ -1,9 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'app_store_connect/create_request'
4
-
5
3
  module AppStoreConnect
6
- class AppStoreVersionCreateRequest < CreateRequest
4
+ class AppStoreVersionCreateRequest < Request::Body
7
5
  data do
8
6
  type 'appStoreVersions'
9
7
 
@@ -1,9 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'app_store_connect/create_request'
4
-
5
3
  module AppStoreConnect
6
- class AppStoreVersionPhasedReleaseCreateRequest < CreateRequest
4
+ class AppStoreVersionPhasedReleaseCreateRequest < Request::Body
7
5
  data do
8
6
  type 'appStoreVersionPhasedReleases'
9
7
 
@@ -1,9 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'app_store_connect/create_request'
4
-
5
3
  module AppStoreConnect
6
- class AppStoreVersionPhasedReleaseUpdateRequest < CreateRequest
4
+ class AppStoreVersionPhasedReleaseUpdateRequest < Request::Body
7
5
  data do
8
6
  id
9
7
  type 'appStoreVersionPhasedReleases'
@@ -1,9 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'app_store_connect/create_request'
4
-
5
3
  module AppStoreConnect
6
- class AppStoreVersionReleaseRequestCreateRequest < CreateRequest
4
+ class AppStoreVersionReleaseRequestCreateRequest < Request::Body
7
5
  data do
8
6
  type 'appStoreVersionReleaseRequests'
9
7
  end
@@ -1,9 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'app_store_connect/create_request'
4
-
5
3
  module AppStoreConnect
6
- class AppStoreVersionUpdateRequest < CreateRequest
4
+ class AppStoreVersionUpdateRequest < Request::Body
7
5
  data do
8
6
  id
9
7
  type 'appStoreVersions'
@@ -0,0 +1,83 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AppStoreConnect
4
+ class Base
5
+ def initialize(**kwargs)
6
+ @options = Client::Options.new(kwargs)
7
+ @authorization = Client::Authorization.new(@options.slice(*Client::Authorization::OPTIONS))
8
+ @registry = Client::Registry.new(@options.slice(*Client::Registry::OPTIONS))
9
+ end
10
+
11
+ def respond_to_missing?(method_name, include_private = false)
12
+ web_service_endpoint_aliases.include?(method_name) || super
13
+ end
14
+
15
+ def method_missing(method_name, **kwargs)
16
+ super unless web_service_endpoint_aliases.include?(method_name)
17
+
18
+ web_service_endpoint = web_service_endpoint_by(method_name)
19
+
20
+ call(web_service_endpoint, **kwargs)
21
+ end
22
+
23
+ # :nocov:
24
+ def inspect
25
+ "#<#{self.class.name}:#{object_id}>"
26
+ end
27
+ # :nocov:
28
+
29
+ def web_service_endpoint_aliases
30
+ @registry.keys
31
+ end
32
+
33
+ private
34
+
35
+ def call(web_service_endpoint, **kwargs)
36
+ raise "invalid http method: #{web_service_endpoint.http_method}" unless %i[get delete post patch].include?(web_service_endpoint.http_method)
37
+
38
+ request = build_request(web_service_endpoint, **kwargs)
39
+
40
+ response = request.execute
41
+
42
+ Client::Utils.decode(response.body, response.content_type) if response.body
43
+ end
44
+
45
+ def build_uri(web_service_endpoint, **kwargs)
46
+ URI(web_service_endpoint
47
+ .url
48
+ .gsub(/(\{(\w+)\})/) { kwargs.fetch(Regexp.last_match(2).to_sym) })
49
+ end
50
+
51
+ def web_service_endpoint_by(alias_sym)
52
+ @registry[alias_sym]
53
+ end
54
+
55
+ def http_body(web_service_endpoint, **kwargs)
56
+ Client::Utils.encode("AppStoreConnect::#{web_service_endpoint.http_body_type}"
57
+ .constantize
58
+ .new(**kwargs)
59
+ .to_h)
60
+ end
61
+
62
+ def build_request(web_service_endpoint, **kwargs)
63
+ options = {
64
+ kwargs: kwargs,
65
+ web_service_endpoint: web_service_endpoint,
66
+ http_method: web_service_endpoint.http_method,
67
+ uri: build_uri(web_service_endpoint, **kwargs),
68
+ headers: headers
69
+ }
70
+
71
+ options[:http_body] = http_body(web_service_endpoint, **kwargs) if web_service_endpoint.http_body_type.present?
72
+
73
+ Request.new(**options)
74
+ end
75
+
76
+ def headers
77
+ {
78
+ 'Authorization' => "Bearer #{@authorization.token}",
79
+ 'Content-Type' => 'application/json'
80
+ }
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AppStoreConnect
4
+ class BetaBuildLocalizationCreateRequest < Request::Body
5
+ data do
6
+ type 'betaBuildLocalizations'
7
+
8
+ attributes do
9
+ property :locale, required: true
10
+ property :whats_new
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AppStoreConnect
4
+ class BetaBuildLocalizationModifyRequest < Request::Body
5
+ data do
6
+ id
7
+ type 'betaBuildLocalizations'
8
+
9
+ attributes do
10
+ property :whats_new
11
+ end
12
+ end
13
+ end
14
+ end
@@ -1,9 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'app_store_connect/create_request'
4
-
5
3
  module AppStoreConnect
6
- class BuildUpdateRequest < CreateRequest
4
+ class BuildUpdateRequest < Request::Body
7
5
  data do
8
6
  id
9
7
  type 'builds'
@@ -1,9 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'app_store_connect/create_request'
4
-
5
3
  module AppStoreConnect
6
- class BundleIdCapabilityCreateRequest < CreateRequest
4
+ class BundleIdCapabilityCreateRequest < Request::Body
7
5
  data do
8
6
  type 'bundleIdCapabilities'
9
7
 
@@ -1,9 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'app_store_connect/create_request'
4
-
5
3
  module AppStoreConnect
6
- class BundleIdCreateRequest < CreateRequest
4
+ class BundleIdCreateRequest < Request::Body
7
5
  data do
8
6
  type 'bundleIds'
9
7
 
@@ -1,9 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'app_store_connect/create_request'
4
-
5
3
  module AppStoreConnect
6
- class CertificateCreateRequest < CreateRequest
4
+ class CertificateCreateRequest < Request::Body
7
5
  data do
8
6
  type 'certificates'
9
7