my_api_client 0.18.0 → 0.22.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/.circleci/config.yml +50 -120
- data/.gem_comet.yml +13 -2
- data/.github/dependabot.yml +32 -0
- data/.rubocop.yml +1 -1
- data/.rubocop_todo.yml +1 -15
- data/CHANGELOG.md +73 -86
- data/Gemfile +2 -0
- data/Gemfile.lock +75 -57
- data/README.jp.md +79 -15
- data/README.md +392 -8
- data/gemfiles/rails_5.0.gemfile +1 -0
- data/gemfiles/rails_5.1.gemfile +1 -0
- data/gemfiles/rails_5.2.gemfile +1 -0
- data/gemfiles/rails_6.0.gemfile +1 -0
- data/gemfiles/rails_6.1.gemfile +15 -0
- data/gemfiles/rails_7.0.gemfile +15 -0
- data/lib/generators/rails/templates/api_client.rb.erb +3 -5
- data/lib/generators/rspec/templates/api_client_spec.rb.erb +0 -8
- data/lib/my_api_client/base.rb +2 -9
- data/lib/my_api_client/integrations/bugsnag.rb +1 -1
- data/lib/my_api_client/request.rb +1 -1
- data/lib/my_api_client/rspec/matchers/be_handled_as_an_error.rb +3 -3
- data/lib/my_api_client/rspec/matchers/request_to.rb +1 -1
- data/lib/my_api_client/rspec/stub.rb +40 -15
- data/lib/my_api_client/version.rb +1 -1
- data/my_api/.ruby-version +1 -1
- data/my_api/Gemfile +3 -0
- data/my_api/Gemfile.lock +108 -99
- data/my_api/app/controllers/pagination_controller.rb +2 -2
- data/my_api/public/index.html +2 -2
- data/my_api/spec/spec_helper.rb +1 -1
- data/my_api_client.gemspec +6 -3
- data/rails_app/rails_5.2/Gemfile.lock +73 -64
- data/rails_app/rails_5.2/config/environments/production.rb +1 -1
- data/rails_app/rails_6.0/Gemfile.lock +95 -79
- data/rails_app/rails_6.0/config/environments/production.rb +1 -1
- data/rails_app/rails_6.1/.gitattributes +8 -0
- data/rails_app/rails_6.1/.gitignore +28 -0
- data/rails_app/rails_6.1/.rspec +3 -0
- data/rails_app/rails_6.1/Gemfile +17 -0
- data/rails_app/rails_6.1/Gemfile.lock +203 -0
- data/rails_app/rails_6.1/README.md +24 -0
- data/rails_app/rails_6.1/Rakefile +8 -0
- data/rails_app/rails_6.1/app/controllers/application_controller.rb +4 -0
- data/rails_app/rails_6.1/app/controllers/concerns/.keep +0 -0
- data/rails_app/rails_6.1/app/javascript/.keep +0 -0
- data/rails_app/rails_6.1/app/models/application_record.rb +5 -0
- data/rails_app/rails_6.1/app/models/concerns/.keep +0 -0
- data/rails_app/rails_6.1/bin/bundle +122 -0
- data/rails_app/rails_6.1/bin/rails +6 -0
- data/rails_app/rails_6.1/bin/rake +6 -0
- data/rails_app/rails_6.1/bin/setup +35 -0
- data/rails_app/rails_6.1/config/application.rb +42 -0
- data/rails_app/rails_6.1/config/boot.rb +5 -0
- data/rails_app/rails_6.1/config/credentials.yml.enc +1 -0
- data/rails_app/rails_6.1/config/database.yml +25 -0
- data/rails_app/rails_6.1/config/environment.rb +7 -0
- data/rails_app/rails_6.1/config/environments/development.rb +59 -0
- data/rails_app/rails_6.1/config/environments/production.rb +97 -0
- data/rails_app/rails_6.1/config/environments/test.rb +51 -0
- data/rails_app/rails_6.1/config/initializers/application_controller_renderer.rb +9 -0
- data/rails_app/rails_6.1/config/initializers/backtrace_silencers.rb +10 -0
- data/rails_app/rails_6.1/config/initializers/cors.rb +17 -0
- data/rails_app/rails_6.1/config/initializers/filter_parameter_logging.rb +8 -0
- data/rails_app/rails_6.1/config/initializers/inflections.rb +17 -0
- data/rails_app/rails_6.1/config/initializers/mime_types.rb +5 -0
- data/rails_app/rails_6.1/config/initializers/wrap_parameters.rb +16 -0
- data/rails_app/rails_6.1/config/locales/en.yml +33 -0
- data/rails_app/rails_6.1/config/routes.rb +5 -0
- data/rails_app/rails_6.1/config.ru +8 -0
- data/rails_app/rails_6.1/db/seeds.rb +8 -0
- data/rails_app/rails_6.1/lib/tasks/.keep +0 -0
- data/rails_app/rails_6.1/public/robots.txt +1 -0
- data/rails_app/rails_6.1/spec/rails_helper.rb +14 -0
- data/rails_app/rails_6.1/spec/spec_helper.rb +13 -0
- data/rails_app/rails_6.1/tmp/.keep +0 -0
- data/rails_app/rails_6.1/tmp/pids/.keep +0 -0
- data/rails_app/rails_6.1/vendor/.keep +0 -0
- data/rails_app/rails_7.0/Gemfile +13 -0
- data/rails_app/rails_7.0/Gemfile.lock +147 -0
- data/rails_app/rails_7.0/README.md +24 -0
- data/rails_app/rails_7.0/Rakefile +8 -0
- data/rails_app/rails_7.0/app/controllers/application_controller.rb +4 -0
- data/rails_app/rails_7.0/app/models/application_record.rb +5 -0
- data/rails_app/rails_7.0/bin/bundle +122 -0
- data/rails_app/rails_7.0/bin/rails +6 -0
- data/rails_app/rails_7.0/bin/rake +6 -0
- data/rails_app/rails_7.0/bin/setup +35 -0
- data/rails_app/rails_7.0/config/application.rb +41 -0
- data/rails_app/rails_7.0/config/boot.rb +5 -0
- data/rails_app/rails_7.0/config/credentials.yml.enc +1 -0
- data/rails_app/rails_7.0/config/database.yml +25 -0
- data/rails_app/rails_7.0/config/environment.rb +7 -0
- data/rails_app/rails_7.0/config/environments/development.rb +58 -0
- data/rails_app/rails_7.0/config/environments/production.rb +70 -0
- data/rails_app/rails_7.0/config/environments/test.rb +52 -0
- data/rails_app/rails_7.0/config/initializers/cors.rb +17 -0
- data/rails_app/rails_7.0/config/initializers/filter_parameter_logging.rb +8 -0
- data/rails_app/rails_7.0/config/initializers/inflections.rb +17 -0
- data/rails_app/rails_7.0/config/locales/en.yml +33 -0
- data/rails_app/rails_7.0/config/routes.rb +8 -0
- data/rails_app/rails_7.0/config.ru +8 -0
- data/rails_app/rails_7.0/db/seeds.rb +8 -0
- data/rails_app/rails_7.0/public/robots.txt +1 -0
- data/rails_app/rails_7.0/spec/rails_helper.rb +14 -0
- data/rails_app/rails_7.0/spec/spec_helper.rb +13 -0
- metadata +83 -11
- data/.dependabot/config.yml +0 -34
- data/.rubocop_challenge.yml +0 -5
data/Gemfile.lock
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
my_api_client (0.
|
|
5
|
-
activesupport (>= 5.
|
|
4
|
+
my_api_client (0.22.0)
|
|
5
|
+
activesupport (>= 5.2.0)
|
|
6
6
|
faraday (>= 0.17.1)
|
|
7
7
|
jsonpath
|
|
8
8
|
sawyer (>= 0.8.2)
|
|
@@ -10,38 +10,54 @@ PATH
|
|
|
10
10
|
GEM
|
|
11
11
|
remote: https://rubygems.org/
|
|
12
12
|
specs:
|
|
13
|
-
activesupport (6.
|
|
13
|
+
activesupport (6.1.4.4)
|
|
14
14
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
15
|
-
i18n (>=
|
|
16
|
-
minitest (
|
|
17
|
-
tzinfo (~>
|
|
18
|
-
zeitwerk (~> 2.
|
|
19
|
-
addressable (2.
|
|
15
|
+
i18n (>= 1.6, < 2)
|
|
16
|
+
minitest (>= 5.1)
|
|
17
|
+
tzinfo (~> 2.0)
|
|
18
|
+
zeitwerk (~> 2.3)
|
|
19
|
+
addressable (2.8.0)
|
|
20
20
|
public_suffix (>= 2.0.2, < 5.0)
|
|
21
|
-
ast (2.4.
|
|
22
|
-
bugsnag (6.
|
|
21
|
+
ast (2.4.2)
|
|
22
|
+
bugsnag (6.24.1)
|
|
23
23
|
concurrent-ruby (~> 1.0)
|
|
24
24
|
byebug (11.1.3)
|
|
25
25
|
coderay (1.1.3)
|
|
26
|
-
concurrent-ruby (1.1.
|
|
27
|
-
crack (0.4.
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
26
|
+
concurrent-ruby (1.1.9)
|
|
27
|
+
crack (0.4.5)
|
|
28
|
+
rexml
|
|
29
|
+
diff-lcs (1.5.0)
|
|
30
|
+
docile (1.4.0)
|
|
31
|
+
faraday (1.8.0)
|
|
32
|
+
faraday-em_http (~> 1.0)
|
|
33
|
+
faraday-em_synchrony (~> 1.0)
|
|
34
|
+
faraday-excon (~> 1.1)
|
|
35
|
+
faraday-httpclient (~> 1.0.1)
|
|
36
|
+
faraday-net_http (~> 1.0)
|
|
37
|
+
faraday-net_http_persistent (~> 1.1)
|
|
38
|
+
faraday-patron (~> 1.0)
|
|
39
|
+
faraday-rack (~> 1.0)
|
|
31
40
|
multipart-post (>= 1.2, < 3)
|
|
32
|
-
ruby2_keywords
|
|
41
|
+
ruby2_keywords (>= 0.0.4)
|
|
42
|
+
faraday-em_http (1.0.0)
|
|
43
|
+
faraday-em_synchrony (1.0.0)
|
|
44
|
+
faraday-excon (1.1.0)
|
|
45
|
+
faraday-httpclient (1.0.1)
|
|
46
|
+
faraday-net_http (1.0.1)
|
|
47
|
+
faraday-net_http_persistent (1.2.0)
|
|
48
|
+
faraday-patron (1.0.0)
|
|
49
|
+
faraday-rack (1.0.0)
|
|
33
50
|
hashdiff (1.0.1)
|
|
34
|
-
i18n (1.8.
|
|
51
|
+
i18n (1.8.11)
|
|
35
52
|
concurrent-ruby (~> 1.0)
|
|
36
|
-
|
|
37
|
-
jsonpath (1.0.6)
|
|
53
|
+
jsonpath (1.1.0)
|
|
38
54
|
multi_json
|
|
39
55
|
method_source (1.0.0)
|
|
40
|
-
minitest (5.
|
|
56
|
+
minitest (5.15.0)
|
|
41
57
|
multi_json (1.15.0)
|
|
42
58
|
multipart-post (2.1.1)
|
|
43
|
-
parallel (1.
|
|
44
|
-
parser (
|
|
59
|
+
parallel (1.21.0)
|
|
60
|
+
parser (3.0.3.2)
|
|
45
61
|
ast (~> 2.4.1)
|
|
46
62
|
pry (0.13.1)
|
|
47
63
|
coderay (~> 1.1)
|
|
@@ -51,66 +67,68 @@ GEM
|
|
|
51
67
|
pry (~> 0.13.0)
|
|
52
68
|
public_suffix (4.0.6)
|
|
53
69
|
rainbow (3.0.0)
|
|
54
|
-
rake (13.0.
|
|
55
|
-
regexp_parser (2.
|
|
56
|
-
rexml (3.2.
|
|
70
|
+
rake (13.0.6)
|
|
71
|
+
regexp_parser (2.2.0)
|
|
72
|
+
rexml (3.2.5)
|
|
57
73
|
rspec (3.10.0)
|
|
58
74
|
rspec-core (~> 3.10.0)
|
|
59
75
|
rspec-expectations (~> 3.10.0)
|
|
60
76
|
rspec-mocks (~> 3.10.0)
|
|
61
|
-
rspec-core (3.10.
|
|
77
|
+
rspec-core (3.10.1)
|
|
62
78
|
rspec-support (~> 3.10.0)
|
|
63
|
-
rspec-expectations (3.10.
|
|
79
|
+
rspec-expectations (3.10.1)
|
|
64
80
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
65
81
|
rspec-support (~> 3.10.0)
|
|
66
|
-
rspec-mocks (3.10.
|
|
82
|
+
rspec-mocks (3.10.2)
|
|
67
83
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
68
84
|
rspec-support (~> 3.10.0)
|
|
69
|
-
rspec-support (3.10.
|
|
85
|
+
rspec-support (3.10.3)
|
|
70
86
|
rspec_junit_formatter (0.4.1)
|
|
71
87
|
rspec-core (>= 2, < 4, != 2.12.0)
|
|
72
|
-
rubocop (1.
|
|
88
|
+
rubocop (1.24.0)
|
|
73
89
|
parallel (~> 1.10)
|
|
74
|
-
parser (>=
|
|
90
|
+
parser (>= 3.0.0.0)
|
|
75
91
|
rainbow (>= 2.2.2, < 4.0)
|
|
76
|
-
regexp_parser (>=
|
|
92
|
+
regexp_parser (>= 1.8, < 3.0)
|
|
77
93
|
rexml
|
|
78
|
-
rubocop-ast (>= 1.2.0)
|
|
94
|
+
rubocop-ast (>= 1.15.0, < 2.0)
|
|
79
95
|
ruby-progressbar (~> 1.7)
|
|
80
|
-
unicode-display_width (>= 1.4.0, <
|
|
81
|
-
rubocop-ast (1.
|
|
82
|
-
parser (>=
|
|
83
|
-
rubocop-performance (1.
|
|
84
|
-
rubocop (>=
|
|
96
|
+
unicode-display_width (>= 1.4.0, < 3.0)
|
|
97
|
+
rubocop-ast (1.15.0)
|
|
98
|
+
parser (>= 3.0.1.1)
|
|
99
|
+
rubocop-performance (1.13.0)
|
|
100
|
+
rubocop (>= 1.7.0, < 2.0)
|
|
85
101
|
rubocop-ast (>= 0.4.0)
|
|
86
|
-
rubocop-rspec (2.0
|
|
87
|
-
rubocop (~> 1.
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
ruby2_keywords (0.0.2)
|
|
102
|
+
rubocop-rspec (2.6.0)
|
|
103
|
+
rubocop (~> 1.19)
|
|
104
|
+
ruby-progressbar (1.11.0)
|
|
105
|
+
ruby2_keywords (0.0.5)
|
|
91
106
|
sawyer (0.8.2)
|
|
92
107
|
addressable (>= 2.3.5)
|
|
93
108
|
faraday (> 0.8, < 2.0)
|
|
94
|
-
simplecov (0.
|
|
109
|
+
simplecov (0.21.2)
|
|
95
110
|
docile (~> 1.1)
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
simplecov-html (0.
|
|
99
|
-
|
|
100
|
-
tzinfo (
|
|
101
|
-
|
|
102
|
-
unicode-display_width (1.
|
|
103
|
-
webmock (3.
|
|
104
|
-
addressable (>= 2.
|
|
111
|
+
simplecov-html (~> 0.11)
|
|
112
|
+
simplecov_json_formatter (~> 0.1)
|
|
113
|
+
simplecov-html (0.12.3)
|
|
114
|
+
simplecov_json_formatter (0.1.3)
|
|
115
|
+
tzinfo (2.0.4)
|
|
116
|
+
concurrent-ruby (~> 1.0)
|
|
117
|
+
unicode-display_width (2.1.0)
|
|
118
|
+
webmock (3.14.0)
|
|
119
|
+
addressable (>= 2.8.0)
|
|
105
120
|
crack (>= 0.3.2)
|
|
106
121
|
hashdiff (>= 0.4.0, < 2.0.0)
|
|
107
|
-
|
|
108
|
-
|
|
122
|
+
webrick (1.7.0)
|
|
123
|
+
yard (0.9.27)
|
|
124
|
+
webrick (~> 1.7.0)
|
|
125
|
+
zeitwerk (2.5.1)
|
|
109
126
|
|
|
110
127
|
PLATFORMS
|
|
111
128
|
ruby
|
|
112
129
|
|
|
113
130
|
DEPENDENCIES
|
|
131
|
+
activesupport (~> 6.1)
|
|
114
132
|
bugsnag (>= 6.11.0)
|
|
115
133
|
bundler (>= 2.0)
|
|
116
134
|
my_api_client!
|
|
@@ -121,9 +139,9 @@ DEPENDENCIES
|
|
|
121
139
|
rubocop
|
|
122
140
|
rubocop-performance
|
|
123
141
|
rubocop-rspec
|
|
124
|
-
simplecov (= 0.
|
|
142
|
+
simplecov (= 0.21.2)
|
|
125
143
|
webmock
|
|
126
144
|
yard
|
|
127
145
|
|
|
128
146
|
BUNDLED WITH
|
|
129
|
-
2.
|
|
147
|
+
2.2.22
|
data/README.jp.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
# MyApiClient
|
|
4
4
|
|
|
5
|
-
MyApiClient は API リクエストクラスを作成するための汎用的な機能を提供します。Sawyer や Faraday をベースにエラーハンドリングの機能を強化した構造になっています。
|
|
5
|
+
MyApiClient は API リクエストクラスを作成するための汎用的な機能を提供します。[Sawyer](https://github.com/lostisland/sawyer) や [Faraday](https://github.com/lostisland/faraday) をベースにエラーハンドリングの機能を強化した構造になっています。
|
|
6
6
|
|
|
7
7
|
ただし、 Sawyer はダミーデータの作成が難しかったり、他の gem で競合することがよくあるので、将来的には依存しないように変更していくかもしれません。
|
|
8
8
|
|
|
@@ -12,12 +12,12 @@ MyApiClient は API リクエストクラスを作成するための汎用的な
|
|
|
12
12
|
|
|
13
13
|
## Supported Versions
|
|
14
14
|
|
|
15
|
-
* Ruby 2.
|
|
16
|
-
* Rails 5.
|
|
15
|
+
* Ruby 2.6, 2.7, 3.0
|
|
16
|
+
* Rails 5.2, 6.0, 6.1, 7.0
|
|
17
17
|
|
|
18
18
|
## Installation
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
`my_api_client` を Gemfile に追加して下さい:
|
|
21
21
|
|
|
22
22
|
```ruby
|
|
23
23
|
gem 'my_api_client'
|
|
@@ -130,13 +130,13 @@ api_clinet.pagination.each do |response|
|
|
|
130
130
|
# Do something.
|
|
131
131
|
end
|
|
132
132
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
133
|
+
result = api_clinet.pagination
|
|
134
|
+
result.next # => 1st page result
|
|
135
|
+
result.next # => 2nd page result
|
|
136
|
+
result.next # => 3rd page result
|
|
137
137
|
```
|
|
138
138
|
|
|
139
|
-
なお、`#each` はレスポンスに含まれる `paging` の値が nil になるまで繰り返されるのでご注意ください。例えば `#take` と組み合わせることでページネーションの上限を設定できます。
|
|
139
|
+
なお、`#each` はレスポンスに含まれる `paging` の値が `nil` になるまで繰り返されるのでご注意ください。例えば `#take` と組み合わせることでページネーションの上限を設定できます。
|
|
140
140
|
|
|
141
141
|
`#pageable_get` の alias として `#pget` も利用可能です。
|
|
142
142
|
|
|
@@ -206,12 +206,12 @@ end
|
|
|
206
206
|
API request `GET https://example.com/path/to/resouce`: "Server error occurred."
|
|
207
207
|
```
|
|
208
208
|
|
|
209
|
+
`json` には `Hash` の Key に [JSONPath](https://goessner.net/articles/JsonPath/) を指定して、レスポンス JSON から任意の値を取得し、 Value とマッチするかどうかでエラーハンドリングできます。Value には `String` `Integer` `Range` `Regexp` が指定可能です。上記の場合であれば、以下のような JSON にマッチします。
|
|
210
|
+
|
|
209
211
|
```ruby
|
|
210
212
|
error_handling json: { '$.errors.code': 10..19 }, with: :my_error_handling
|
|
211
213
|
```
|
|
212
214
|
|
|
213
|
-
`json` には `Hash` の Key に [JSONPath](https://goessner.net/articles/JsonPath/) を指定して、レスポンス JSON から任意の値を取得し、 Value とマッチするかどうかでエラーハンドリングできます。Value には `String` `Integer` `Range` `Regexp` が指定可能です。上記の場合であれば、以下のような JSON にマッチします。
|
|
214
|
-
|
|
215
215
|
```json
|
|
216
216
|
{
|
|
217
217
|
"erros": {
|
|
@@ -551,6 +551,8 @@ end
|
|
|
551
551
|
|
|
552
552
|
### Stubbing
|
|
553
553
|
|
|
554
|
+
#### `response` option
|
|
555
|
+
|
|
554
556
|
以下のような `ApiClient` を定義しているとします。
|
|
555
557
|
|
|
556
558
|
```ruby
|
|
@@ -587,6 +589,7 @@ response = ExampleApiClient.new.request(user_id: 1)
|
|
|
587
589
|
response.id # => 12345
|
|
588
590
|
```
|
|
589
591
|
|
|
592
|
+
#### Proc
|
|
590
593
|
|
|
591
594
|
リクスエストパラメータを使ったレスポンスを返すようにスタブ化したい場合は、 `Proc` を利用することで実現できます。
|
|
592
595
|
|
|
@@ -600,7 +603,9 @@ response = ExampleApiClient.new.request(user_id: 1)
|
|
|
600
603
|
response.id # => 1
|
|
601
604
|
```
|
|
602
605
|
|
|
603
|
-
|
|
606
|
+
#### Return value of `#stub_api_client_all` and `#stub_api_client`
|
|
607
|
+
|
|
608
|
+
`#stub_api_client_all` や `#stub_api_client` の戻り値はスタブ化した API Client のスタブオブジェクトです。`receive` や `have_received` を使ったテストを書きたい場合は、これらの値を利用すると良いでしょう。
|
|
604
609
|
|
|
605
610
|
```ruby
|
|
606
611
|
def execute_api_request
|
|
@@ -612,7 +617,9 @@ execute_api_request
|
|
|
612
617
|
expect(api_client).to have_received(:request).with(user_id: 1)
|
|
613
618
|
```
|
|
614
619
|
|
|
615
|
-
|
|
620
|
+
#### `raise` option
|
|
621
|
+
|
|
622
|
+
例外が発生する場合のテストを書きたい場合は、 `raise` オプションを利用することができます。
|
|
616
623
|
|
|
617
624
|
```ruby
|
|
618
625
|
def execute_api_request
|
|
@@ -623,14 +630,15 @@ stub_api_client_all(ExampleApiClient, request: { raise: MyApiClient::Error })
|
|
|
623
630
|
expect { execute_api_request }.to raise_error(MyApiClient::Error)
|
|
624
631
|
```
|
|
625
632
|
|
|
626
|
-
|
|
633
|
+
なお、発生した例外に含まれるレスポンスパラメータやステータスコードもスタブ化したい場合は、 `response` オプションと同時に指定することが可能です。
|
|
627
634
|
|
|
628
635
|
```ruby
|
|
629
636
|
stub_api_client_all(
|
|
630
637
|
ExampleApiClient,
|
|
631
638
|
request: {
|
|
632
639
|
raise: MyApiClient::Error,
|
|
633
|
-
response: { message: 'error' }
|
|
640
|
+
response: { message: 'error' },
|
|
641
|
+
status_code: 429
|
|
634
642
|
}
|
|
635
643
|
)
|
|
636
644
|
|
|
@@ -639,9 +647,65 @@ begin
|
|
|
639
647
|
rescue MyApiClient::Error => e
|
|
640
648
|
response_body = e.params.response.data.to_h
|
|
641
649
|
expect(response_body).to eq(message: 'error')
|
|
650
|
+
status_code = e.params.response.status
|
|
651
|
+
expect(status_code).to eq(429)
|
|
652
|
+
end
|
|
653
|
+
```
|
|
654
|
+
|
|
655
|
+
#### `pageable` option
|
|
656
|
+
|
|
657
|
+
`#pageable_get` (`#pget`) を使った実装用に `pageable` というオプションが利用できます。
|
|
658
|
+
`pageable` に設定する値は `Enumerable` である必要があります。
|
|
659
|
+
|
|
660
|
+
```ruby
|
|
661
|
+
stub_api_client_all(
|
|
662
|
+
MyPaginationApiClient,
|
|
663
|
+
pagination: {
|
|
664
|
+
pageable: [
|
|
665
|
+
{ page: 1 },
|
|
666
|
+
{ page: 2 },
|
|
667
|
+
{ page: 3 },
|
|
668
|
+
],
|
|
669
|
+
}
|
|
670
|
+
)
|
|
671
|
+
|
|
672
|
+
MyPaginationApiClient.new.pagination.each do |response|
|
|
673
|
+
response.page #=> 1, 2, 3
|
|
642
674
|
end
|
|
643
675
|
```
|
|
644
676
|
|
|
677
|
+
なお、 `Enumerable` の各値にはここまで紹介した `response`, `raise`, `Proc` など全てのオプションが利用可能です。
|
|
678
|
+
|
|
679
|
+
```ruby
|
|
680
|
+
stub_api_client_all(
|
|
681
|
+
MyPaginationApiClient,
|
|
682
|
+
pagination: {
|
|
683
|
+
pageable: [
|
|
684
|
+
{ response: { page: 1 } },
|
|
685
|
+
{ page: 2 },
|
|
686
|
+
->(params) { { page: 3, user_id: params[:user_id] } },
|
|
687
|
+
{ raise: MyApiClient::ClientError::IamTeapot },
|
|
688
|
+
],
|
|
689
|
+
}
|
|
690
|
+
)
|
|
691
|
+
```
|
|
692
|
+
|
|
693
|
+
また、 `Enumerator` を使えば無限に続くページネーションを定義することもできます。
|
|
694
|
+
|
|
695
|
+
|
|
696
|
+
```ruby
|
|
697
|
+
stub_api_client_all(
|
|
698
|
+
MyPaginationApiClient,
|
|
699
|
+
pagination: {
|
|
700
|
+
pageable: Enumerator.new do |y|
|
|
701
|
+
loop.with_index(1) do |_, i|
|
|
702
|
+
y << { page: i }
|
|
703
|
+
end
|
|
704
|
+
end,
|
|
705
|
+
}
|
|
706
|
+
)
|
|
707
|
+
```
|
|
708
|
+
|
|
645
709
|
## Deployment
|
|
646
710
|
|
|
647
711
|
この gem のリリースには [gem_comet](https://github.com/ryz310/gem_comet) を利用しています。
|