my_api_client 0.13.0 → 0.16.1

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 (82) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +102 -36
  3. data/.dependabot/config.yml +34 -0
  4. data/.envrc.skeleton +1 -0
  5. data/.rubocop.yml +8 -10
  6. data/.rubocop_challenge.yml +3 -0
  7. data/.rubocop_todo.yml +5 -10
  8. data/CHANGELOG.md +229 -0
  9. data/Gemfile.lock +48 -43
  10. data/README.jp.md +98 -23
  11. data/bin/console +4 -0
  12. data/example/api_clients/application_api_client.rb +13 -0
  13. data/example/api_clients/my_error_api_client.rb +34 -0
  14. data/example/api_clients/my_errors.rb +27 -0
  15. data/example/api_clients/my_pagination_api_client.rb +18 -0
  16. data/example/api_clients/my_rest_api_client.rb +48 -0
  17. data/example/api_clients/my_status_api_client.rb +22 -0
  18. data/lib/generators/rails/templates/application_api_client.rb.erb +0 -11
  19. data/lib/my_api_client.rb +10 -2
  20. data/lib/my_api_client/base.rb +2 -18
  21. data/lib/my_api_client/config.rb +0 -29
  22. data/lib/my_api_client/default_error_handlers.rb +64 -0
  23. data/lib/my_api_client/error_handling.rb +13 -23
  24. data/lib/my_api_client/error_handling/generator.rb +30 -10
  25. data/lib/my_api_client/error_handling/{process_retry_option.rb → retry_option_processor.rb} +1 -1
  26. data/lib/my_api_client/errors.rb +0 -53
  27. data/lib/my_api_client/errors/api_limit_error.rb +6 -0
  28. data/lib/my_api_client/errors/client_error.rb +93 -0
  29. data/lib/my_api_client/errors/network_error.rb +43 -0
  30. data/lib/my_api_client/errors/server_error.rb +42 -0
  31. data/lib/my_api_client/params/request.rb +7 -10
  32. data/lib/my_api_client/request.rb +48 -70
  33. data/lib/my_api_client/request/basic.rb +32 -0
  34. data/lib/my_api_client/request/executor.rb +89 -0
  35. data/lib/my_api_client/request/logger.rb +37 -0
  36. data/lib/my_api_client/request/pagination.rb +39 -0
  37. data/lib/my_api_client/rspec/matcher_helper.rb +2 -2
  38. data/lib/my_api_client/rspec/matchers/be_handled_as_an_error.rb +2 -0
  39. data/lib/my_api_client/rspec/matchers/request_to.rb +3 -4
  40. data/lib/my_api_client/version.rb +1 -1
  41. data/my_api/.envrc.skeleton +3 -0
  42. data/my_api/.gitignore +14 -0
  43. data/my_api/.jetskeep +1 -0
  44. data/my_api/.rspec +3 -0
  45. data/my_api/.ruby-version +1 -0
  46. data/my_api/Gemfile +23 -0
  47. data/my_api/Gemfile.lock +243 -0
  48. data/my_api/Procfile +7 -0
  49. data/my_api/README.md +54 -0
  50. data/my_api/Rakefile +4 -0
  51. data/my_api/app/controllers/application_controller.rb +5 -0
  52. data/my_api/app/controllers/error_controller.rb +21 -0
  53. data/my_api/app/controllers/pagination_controller.rb +58 -0
  54. data/my_api/app/controllers/rest_controller.rb +60 -0
  55. data/my_api/app/controllers/status_controller.rb +11 -0
  56. data/my_api/app/helpers/application_helper.rb +5 -0
  57. data/my_api/app/jobs/application_job.rb +7 -0
  58. data/my_api/app/models/application_item.rb +5 -0
  59. data/my_api/config.ru +7 -0
  60. data/my_api/config/application.rb +73 -0
  61. data/my_api/config/dynamodb.yml +22 -0
  62. data/my_api/config/environments/development.rb +9 -0
  63. data/my_api/config/environments/production.rb +11 -0
  64. data/my_api/config/environments/test.rb +9 -0
  65. data/my_api/config/routes.rb +17 -0
  66. data/my_api/db/.gitkeep +0 -0
  67. data/my_api/public/404.html +67 -0
  68. data/my_api/public/422.html +67 -0
  69. data/my_api/public/500.html +66 -0
  70. data/my_api/public/favicon.ico +0 -0
  71. data/my_api/public/index.html +91 -0
  72. data/my_api/spec/controllers/error_controller_spec.rb +43 -0
  73. data/my_api/spec/controllers/pagination_controller_spec.rb +73 -0
  74. data/my_api/spec/controllers/rest_controller_spec.rb +99 -0
  75. data/my_api/spec/controllers/status_controller_spec.rb +47 -0
  76. data/my_api/spec/fixtures/payloads/posts-index.json +51 -0
  77. data/my_api/spec/fixtures/payloads/posts-show.json +53 -0
  78. data/my_api/spec/spec_helper.rb +31 -0
  79. data/my_api_client.gemspec +1 -1
  80. metadata +62 -9
  81. data/lib/my_api_client/logger.rb +0 -36
  82. data/renovate.json +0 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5e287e051f0699595e499150dd4e4c303e00a82f951ffc86b13afde142a3720e
4
- data.tar.gz: 7725d581e64d01683a636f56e86d217010d536f827023d691faca3b5cbbe2264
3
+ metadata.gz: 1eb52f8cf1220f7a0db30d5a6f83a8ef880315d6f23f878103ea234812c4071e
4
+ data.tar.gz: d6176d4ea51df4d2486be4150055b05b60ded0d674c937c61bc46dc9df79f0a6
5
5
  SHA512:
6
- metadata.gz: c37ce83c7a27302b8e890087251c67b955e8398b95d08a78b47447401cf0b3332b9bcd66c0e46e4e578a5a51e80f0a4a5fcea576c69fd8d29be8fa5c1c670720
7
- data.tar.gz: 9a42a194c50def52f2aca6f9c54aac80dd7e4191114aa24fef543f81fab235417b3ec1f86ff2f960cd77cd1ff17188df5c073a4574df80fed9963375060058ce
6
+ metadata.gz: 4bfcd9f62258c714797b9234959f53b2c84c2bc7c651d8ea6b4ba8ce2a6750c8528c8cd33ee842f090c01414c65028d0e8c412a2ec3e425b9382984f632cda37
7
+ data.tar.gz: 6f48b2d64393db7ca69da8e68236c095f5bf94fd424e87cd805cb264a09e616782816d7b83308b512d6e45a3f500b6c85f1a2f93e2ef6b96cb2a23d486909561
@@ -5,7 +5,7 @@
5
5
  version: 2.1
6
6
 
7
7
  orbs:
8
- ruby-orbs: sue445/ruby-orbs@1.4.5
8
+ ruby-orbs: sue445/ruby-orbs@1.6.0
9
9
  code-climate: rvla/code-climate@0.0.2
10
10
 
11
11
  references:
@@ -25,7 +25,13 @@ references:
25
25
  default: ''
26
26
 
27
27
  executors:
28
- default:
28
+ executor_for_api:
29
+ parameters:
30
+ <<: *ruby_version
31
+ docker:
32
+ - image: circleci/ruby:<< parameters.ruby_version >>-node-browsers
33
+ working_directory: ~/repo/my_api
34
+ executor_for_gem:
29
35
  parameters:
30
36
  <<: *ruby_version
31
37
  docker:
@@ -41,8 +47,28 @@ commands:
41
47
  - run: |
42
48
  cp gemfiles/rails_<< parameters.rails_version >>.gemfile Gemfile
43
49
  bundle update activesupport
44
- run_rspec:
45
- description: Run RSpec
50
+ run_rspec_for_api:
51
+ description: Run RSpec for the API
52
+ steps:
53
+ - run:
54
+ name: Execute RSpec
55
+ command: |
56
+ bundle exec rspec --format documentation \
57
+ --color \
58
+ --format RspecJunitFormatter
59
+ deploy_api_server:
60
+ description: Deploy the API server on the AWS
61
+ steps:
62
+ - run:
63
+ name: Install RSync
64
+ command: sudo apt-get install -y rsync
65
+ - run:
66
+ # This command is not currently work. It could't reference uploaded gem file.
67
+ # You can execute `$ bundle exec jets deploy` on your local.
68
+ name: Deploy the API server with jets
69
+ command: JETS_AGREE=yes bundle exec jets deploy
70
+ run_rspec_for_gem:
71
+ description: Run RSpec for the gem
46
72
  steps:
47
73
  - code-climate/install
48
74
  - run:
@@ -114,40 +140,67 @@ commands:
114
140
  <<: *ruby_version
115
141
  <<: *bundler_options
116
142
  steps:
117
- - checkout
143
+ - checkout:
144
+ path: ~/repo
118
145
  - run:
119
146
  name: Install Bundler 2.x
120
147
  command: gem install bundler:2.1.2
121
148
  - ruby-orbs/bundle-install:
122
149
  cache_key_prefix: v1-dependencies-<< parameters.ruby_version >>
123
150
  bundle_extra_args: << parameters.bundler_options >>
124
- test_and_build:
151
+ restore_bundled_with: false
152
+ test_and_deploy_for_api:
153
+ description: Build the API
154
+ steps:
155
+ - run_rspec_for_api
156
+ - deploy_api_server
157
+ test_and_build_for_gem:
125
158
  description: Build the RubyGem
126
159
  parameters:
127
160
  <<: *rails_version
128
161
  steps:
129
162
  - modify_active_support_version:
130
163
  rails_version: << parameters.rails_version >>
131
- - run_rspec
164
+ - run_rspec_for_gem
132
165
  - rake_build
133
166
 
134
167
  jobs:
135
- build:
168
+ test_api:
169
+ parameters:
170
+ <<: *ruby_version
171
+ executor:
172
+ name: executor_for_api
173
+ ruby_version: << parameters.ruby_version >>
174
+ steps:
175
+ - setup:
176
+ ruby_version: << parameters.ruby_version >>
177
+ - run_rspec_for_api
178
+ deploy_api:
179
+ parameters:
180
+ <<: *ruby_version
181
+ executor:
182
+ name: executor_for_api
183
+ ruby_version: << parameters.ruby_version >>
184
+ steps:
185
+ - setup:
186
+ ruby_version: << parameters.ruby_version >>
187
+ - test_and_deploy_for_api
188
+ build_gem:
136
189
  parameters:
137
190
  <<: *ruby_version
138
191
  <<: *rails_version
139
192
  <<: *bundler_options
140
193
  executor:
141
- name: default
194
+ name: executor_for_gem
142
195
  ruby_version: << parameters.ruby_version >>
143
196
  steps:
144
197
  - setup:
145
198
  ruby_version: << parameters.ruby_version >>
146
199
  bundler_options: << parameters.bundler_options >>
147
- - test_and_build:
200
+ - test_and_build_for_gem:
148
201
  rails_version: << parameters.rails_version >>
149
202
  upload-coverage:
150
- executor: default
203
+ executor: executor_for_gem
151
204
  steps:
152
205
  - attach_workspace:
153
206
  at: ~/repo
@@ -157,22 +210,22 @@ jobs:
157
210
  parts: 19
158
211
  - code-climate/upload-coverage
159
212
  rubocop:
160
- executor: default
213
+ executor: executor_for_gem
161
214
  steps:
162
215
  - setup
163
216
  - rubocop
164
217
  yardoc:
165
- executor: default
218
+ executor: executor_for_gem
166
219
  steps:
167
220
  - setup
168
221
  - yardoc
169
222
  rubocop_challenge:
170
- executor: default
223
+ executor: executor_for_gem
171
224
  steps:
172
225
  - checkout
173
226
  - rubocop_challenge
174
227
  release:
175
- executor: default
228
+ executor: executor_for_gem
176
229
  steps:
177
230
  - setup
178
231
  - release
@@ -182,84 +235,85 @@ workflows:
182
235
 
183
236
  commit:
184
237
  jobs:
185
- - build:
238
+ - build_gem:
186
239
  name: build_on_ruby_2.4_and_rails_4.2
187
240
  ruby_version: '2.4'
188
241
  rails_version: '4.2'
189
- - build:
242
+ - build_gem:
190
243
  name: build_on_ruby_2.4_and_rails_5.0
191
244
  ruby_version: '2.4'
192
245
  rails_version: '5.0'
193
- - build:
246
+ - build_gem:
194
247
  name: build_on_ruby_2.4_and_rails_5.1
195
248
  ruby_version: '2.4'
196
249
  rails_version: '5.1'
197
- - build:
250
+ - build_gem:
198
251
  name: build_on_ruby_2.4_and_rails_5.2
199
252
  ruby_version: '2.4'
200
253
  rails_version: '5.2'
201
- - build:
254
+ - build_gem:
202
255
  name: build_on_ruby_2.5_and_rails_4.2
203
256
  ruby_version: '2.5'
204
257
  rails_version: '4.2'
205
- - build:
258
+ - build_gem:
206
259
  name: build_on_ruby_2.5_and_rails_5.0
207
260
  ruby_version: '2.5'
208
261
  rails_version: '5.0'
209
- - build:
262
+ - build_gem:
210
263
  name: build_on_ruby_2.5_and_rails_5.1
211
264
  ruby_version: '2.5'
212
265
  rails_version: '5.1'
213
- - build:
266
+ - build_gem:
214
267
  name: build_on_ruby_2.5_and_rails_5.2
215
268
  ruby_version: '2.5'
216
269
  rails_version: '5.2'
217
- - build:
270
+ - build_gem:
218
271
  name: build_on_ruby_2.5_and_rails_6.0
219
272
  ruby_version: '2.5'
220
273
  rails_version: '6.0'
221
- - build:
274
+ - build_gem:
222
275
  name: build_on_ruby_2.6_and_rails_4.2
223
276
  ruby_version: '2.6'
224
277
  rails_version: '4.2'
225
- - build:
278
+ - build_gem:
226
279
  name: build_on_ruby_2.6_and_rails_5.0
227
280
  ruby_version: '2.6'
228
281
  rails_version: '5.0'
229
- - build:
282
+ - build_gem:
230
283
  name: build_on_ruby_2.6_and_rails_5.1
231
284
  ruby_version: '2.6'
232
285
  rails_version: '5.1'
233
- - build:
286
+ - build_gem:
234
287
  name: build_on_ruby_2.6_and_rails_5.2
235
288
  ruby_version: '2.6'
236
289
  rails_version: '5.2'
237
- - build:
290
+ - build_gem:
238
291
  name: build_on_ruby_2.6_and_rails_6.0
239
292
  ruby_version: '2.6'
240
293
  rails_version: '6.0'
241
- - build:
294
+ - build_gem:
242
295
  name: build_on_ruby_2.7_and_rails_5.0
243
296
  ruby_version: '2.7'
244
297
  rails_version: '5.0'
245
- - build:
298
+ - build_gem:
246
299
  name: build_on_ruby_2.7_and_rails_5.1
247
300
  ruby_version: '2.7'
248
301
  rails_version: '5.1'
249
- - build:
302
+ - build_gem:
250
303
  name: build_on_ruby_2.7_and_rails_5.2
251
304
  ruby_version: '2.7'
252
305
  rails_version: '5.2'
253
- - build:
306
+ - build_gem:
254
307
  name: build_on_ruby_2.7_and_rails_6.0_with_integrations
255
308
  ruby_version: '2.7'
256
309
  rails_version: '6.0'
257
310
  bundler_options: '--with integrations'
258
- - build:
311
+ - build_gem:
259
312
  name: build_on_ruby_2.7_and_rails_6.0_without_integrations
260
313
  ruby_version: '2.7'
261
314
  rails_version: '6.0'
262
315
  bundler_options: '--without integrations'
316
+ - test_api
263
317
  - rubocop
264
318
  - yardoc
265
319
  - upload-coverage:
@@ -317,11 +371,23 @@ workflows:
317
371
  cron: "30 23 * * *" # 8:30am every day (JST)
318
372
  filters:
319
373
  branches:
320
- only:
321
- - master
374
+ only: [master]
322
375
  jobs:
323
376
  - rubocop_challenge
324
377
 
378
+ # deploy_api_server:
379
+ # triggers:
380
+ # - schedule:
381
+ # cron: "0 12 * * *" # 3:00am every day (JST)
382
+ # filters:
383
+ # branches:
384
+ # only: [master]
385
+ # jobs:
386
+ # - deploy_api:
387
+ # ruby_version: '2.5'
388
+ # - build_gem:
389
+ # requires: [deploy_api]
390
+
325
391
  experimental:
326
392
  notify:
327
393
  branches:
@@ -0,0 +1,34 @@
1
+ version: 1
2
+ update_configs:
3
+ - package_manager: "ruby:bundler"
4
+ directory: "/"
5
+ update_schedule: "live"
6
+ default_reviewers:
7
+ - "ryz310"
8
+ default_assignees:
9
+ - "ryz310"
10
+ default_labels:
11
+ - "dependabot"
12
+ automerged_updates:
13
+ - match:
14
+ dependency_type: "development"
15
+ update_type: "all"
16
+ - match:
17
+ dependency_type: "production"
18
+ update_type: "semver:patch"
19
+ - package_manager: "ruby:bundler"
20
+ directory: "/my_api"
21
+ update_schedule: "live"
22
+ default_reviewers:
23
+ - "ryz310"
24
+ default_assignees:
25
+ - "ryz310"
26
+ default_labels:
27
+ - "dependabot"
28
+ automerged_updates:
29
+ - match:
30
+ dependency_type: "development"
31
+ update_type: "all"
32
+ - match:
33
+ dependency_type: "production"
34
+ update_type: "semver:patch"
@@ -1 +1,2 @@
1
1
  export GITHUB_ACCESS_TOKEN={GITHUB_ACCESS_TOKEN}
2
+ export MY_API_ENDPOINT={API gateway endtpoint of "my_api" for integration testing}
@@ -7,28 +7,25 @@ inherit_from: .rubocop_todo.yml
7
7
  AllCops:
8
8
  TargetRubyVersion: 2.4
9
9
 
10
- Metrics/AbcSize:
11
- Max: 20
10
+ Layout/LineLength:
11
+ Max: 100
12
+ Exclude:
13
+ - my_api/config/application.rb
12
14
 
13
15
  Metrics/BlockLength:
14
- Max: 50
15
16
  Exclude:
16
17
  - 'my_api_client.gemspec'
17
18
  - 'lib/my_api_client/rspec/matchers/**/*'
18
19
  - 'spec/**/*'
20
+ - 'my_api/spec/**/*'
19
21
 
20
22
  Metrics/MethodLength:
21
23
  Max: 15
22
24
 
23
- Metrics/LineLength:
24
- Max: 100
25
-
26
25
  Naming/AccessorMethodName:
27
- Enabled: false
28
-
29
- Style/ClassAndModuleChildren:
30
26
  Exclude:
31
- - 'spec/**/*'
27
+ - example/api_clients/**/*
28
+ - spec/lib/my_api_client/rspec/matchers/be_handled_as_an_error_spec.rb
32
29
 
33
30
  Style/TrailingCommaInArrayLiteral:
34
31
  EnforcedStyleForMultiline: comma
@@ -38,6 +35,7 @@ Style/TrailingCommaInHashLiteral:
38
35
 
39
36
  RSpec/DescribeClass:
40
37
  Exclude:
38
+ - 'spec/integrations/api_clients/**/*'
41
39
  - 'spec/lib/my_api_client/rspec/matchers/**/*'
42
40
 
43
41
  RSpec/ExampleLength:
@@ -0,0 +1,3 @@
1
+ ---
2
+ Ignore:
3
+ - Performance/StartWith
@@ -1,17 +1,12 @@
1
1
  # This configuration was generated by
2
2
  # `rubocop --auto-gen-config`
3
- # on 2020-01-08 23:41:00 +0000 using RuboCop version 0.79.0.
3
+ # on 2020-08-17 23:30:51 UTC using RuboCop version 0.89.1.
4
4
  # The point is for the user to remove these configuration records
5
5
  # one by one as the offenses are removed from the code base.
6
6
  # Note that changes in the inspected code, or installation of new
7
7
  # versions of RuboCop, may require this file to be generated again.
8
8
 
9
- # Offense count: 18
10
- RSpec/LeakyConstantDeclaration:
11
- Exclude:
12
- - 'spec/lib/my_api_client/base_spec.rb'
13
- - 'spec/lib/my_api_client/config_spec.rb'
14
- - 'spec/lib/my_api_client/error_handling_spec.rb'
15
- - 'spec/lib/my_api_client/exceptions_spec.rb'
16
- - 'spec/lib/my_api_client/request_spec.rb'
17
- - 'spec/lib/my_api_client/rspec/stub_spec.rb'
9
+ # Offense count: 60
10
+ # Configuration parameters: AllowSubject.
11
+ RSpec/MultipleMemoizedHelpers:
12
+ Max: 15
@@ -1,5 +1,234 @@
1
1
  # Change log
2
2
 
3
+ ## v0.16.1 (Aug 27, 2020)
4
+
5
+ ### Feature
6
+
7
+ * [#296](https://github.com/ryz310/my_api_client/pull/296) Support HTTP PUT method ([@ryz310](https://github.com/ryz310))
8
+
9
+ ### Rubocop Challenge
10
+
11
+ * [#256](https://github.com/ryz310/my_api_client/pull/256) Performance/StartWith-20200523233027 ([@ryz310](https://github.com/ryz310))
12
+ * [#268](https://github.com/ryz310/my_api_client/pull/268) Lint/RedundantCopDisableDirective-20200622233019 ([@ryz310](https://github.com/ryz310))
13
+ * [#289](https://github.com/ryz310/my_api_client/pull/289) Re-generate .rubocop_todo.yml with RuboCop v0.89.1 ([@ryz310](https://github.com/ryz310))
14
+ * [#293](https://github.com/ryz310/my_api_client/pull/293) RSpec/LeadingSubject-20200817233022 ([@ryz310](https://github.com/ryz310))
15
+
16
+ ### Dependabot
17
+
18
+ * [#232](https://github.com/ryz310/my_api_client/pull/232) ryz310/dependabot/bundler/faraday-1.0.1 ([@ryz310](https://github.com/ryz310))
19
+ * [#241](https://github.com/ryz310/my_api_client/pull/241) ryz310/dependabot/bundler/my_api/byebug-11.1.3 ([@ryz310](https://github.com/ryz310))
20
+ * [#243](https://github.com/ryz310/my_api_client/pull/243) ryz310/dependabot/bundler/yard-0.9.25 ([@ryz310](https://github.com/ryz310))
21
+ * [#248](https://github.com/ryz310/my_api_client/pull/248) ryz310/dependabot/bundler/activesupport-5.2.4.3 ([@ryz310](https://github.com/ryz310))
22
+ * [#251](https://github.com/ryz310/my_api_client/pull/251) ryz310/dependabot/bundler/my_api/puma-4.3.5 ([@ryz310](https://github.com/ryz310))
23
+ * [#257](https://github.com/ryz310/my_api_client/pull/257) ryz310/dependabot/bundler/my_api/dynomite-1.2.6 ([@ryz310](https://github.com/ryz310))
24
+ * [#264](https://github.com/ryz310/my_api_client/pull/264) ryz310/dependabot/bundler/my_api/rack-2.2.3 ([@ryz310](https://github.com/ryz310))
25
+ * [#265](https://github.com/ryz310/my_api_client/pull/265) ryz310/dependabot/bundler/my_api/actionpack-6.0.3.2 ([@ryz310](https://github.com/ryz310))
26
+ * [#266](https://github.com/ryz310/my_api_client/pull/266) ryz310/dependabot/bundler/my_api/capybara-3.33.0 ([@ryz310](https://github.com/ryz310))
27
+ * [#281](https://github.com/ryz310/my_api_client/pull/281) ryz310/dependabot/bundler/rubocop-performance-1.7.1 ([@ryz310](https://github.com/ryz310))
28
+ * [#287](https://github.com/ryz310/my_api_client/pull/287) ryz310/dependabot/bundler/my_api/kramdown-2.3.0 ([@ryz310](https://github.com/ryz310))
29
+ * [#290](https://github.com/ryz310/my_api_client/pull/290) ryz310/dependabot/bundler/bugsnag-6.16.0 ([@ryz310](https://github.com/ryz310))
30
+ * [#294](https://github.com/ryz310/my_api_client/pull/294) ryz310/dependabot/bundler/my_api/jets-2.3.17 ([@ryz310](https://github.com/ryz310))
31
+ * [#295](https://github.com/ryz310/my_api_client/pull/295) ryz310/dependabot/bundler/rubocop-rspec-1.43.2 ([@ryz310](https://github.com/ryz310))
32
+
33
+ ### Misc
34
+
35
+ * [#271](https://github.com/ryz310/my_api_client/pull/271) Minor fixes ([@ryz310](https://github.com/ryz310))
36
+
37
+ ## v0.16.0 (Mar 29, 2020)
38
+
39
+ ### Breaking Change
40
+
41
+ #### [#225](https://github.com/ryz310/my_api_client/pull/225) Raise an exception whenever an error is detected ([@ryz310](https://github.com/ryz310))
42
+
43
+ Until now, using `with` or `block` in `error_handling` did not automatically raise an exception, but will now always raise an exception when an error is detected.
44
+ You can specify raising error class with `raise` option.
45
+
46
+ **Before**
47
+
48
+ ```rb
49
+ error_handling json: { '$.errors.code': 10..19 }, with: :my_error_handling
50
+
51
+ def my_error_handling
52
+ # Executes this method when an error is detected.
53
+ # No exception is raised. You can raise an error if necessary.
54
+ end
55
+ ```
56
+ ```rb
57
+ error_handling status_code: 500..599 do |_params, logger|
58
+ # Executes this block when an error is detected.
59
+ # No exception is raised. You can raise an error if necessary.
60
+ end
61
+ ```
62
+
63
+ **After**
64
+
65
+ ```rb
66
+ error_handling json: { '$.errors.code': 10..19 }, with: :my_error_handling
67
+
68
+ def my_error_handling
69
+ # Executes this method when an error is detected.
70
+ # And then raise `MyApiClient::Error`.
71
+ end
72
+ ```
73
+ ```rb
74
+ error_handling status_code: 500..599 do |params, logger|
75
+ # Executes this block when an error is detected.
76
+ # And then raise `MyApiClient::Error`.
77
+ end
78
+ ```
79
+
80
+ #### [#226](https://github.com/ryz310/my_api_client/pull/226) Default error handlers ([@ryz310](https://github.com/ryz310))
81
+
82
+ Until now, you needed define all `error_handling` or `retry_on` yourself. But will now some `error_handling` and `retry_on` are prepared as default.
83
+
84
+ You can check default `error_handling` or `retry_on` here.
85
+
86
+ See: https://github.com/ryz310/my_api_client/blob/master/lib/my_api_client/default_error_handlers.rb
87
+
88
+ ### Dependabot
89
+
90
+ * [#227](https://github.com/ryz310/my_api_client/pull/227) ryz310/dependabot/bundler/pry-byebug-3.9.0 ([@ryz310](https://github.com/ryz310))
91
+ * [#228](https://github.com/ryz310/my_api_client/pull/228) ryz310/dependabot/bundler/my_api/jets-2.3.15 ([@ryz310](https://github.com/ryz310))
92
+
93
+ ### Misc
94
+
95
+ * [#229](https://github.com/ryz310/my_api_client/pull/229) Edit dependabot configuration ([@ryz310](https://github.com/ryz310))
96
+
97
+ ## v0.15.0 (Mar 21, 2020)
98
+
99
+ ### Feature
100
+
101
+ * [#220](https://github.com/ryz310/my_api_client/pull/220) Pageable HTTP request ([@ryz310](https://github.com/ryz310))
102
+ * Add `#pageable_get` method (alias: `#pget`)
103
+ * For example:
104
+ * API client definition
105
+ ```ruby
106
+ class MyPaginationApiClient < ApplicationApiClient
107
+ endpoint 'https://example.com/v1'
108
+
109
+ # GET pagination?page=1
110
+ def pagination
111
+ pageable_get 'pagination', paging: '$.links.next', headers: headers, query: { page: 1 }
112
+ end
113
+
114
+ private
115
+
116
+ def headers
117
+ { 'Content-Type': 'application/json;charset=UTF-8' }
118
+ end
119
+ end
120
+ ```
121
+ * The pagination API response
122
+ ```json
123
+ {
124
+ "links": {
125
+ "next": "https://example.com/pagination?page=3",
126
+ "previous": "https://example.com/pagination?page=1",
127
+ },
128
+ "page": 2
129
+ }
130
+ ```
131
+ * Usage
132
+ ```ruby
133
+ api_clinet = MyPaginationApiClient.new
134
+ api_clinet.pagination.each do |response|
135
+ # Do something.
136
+ end
137
+
138
+ p = api_clinet.pagination
139
+ p.next # => 1st page result
140
+ p.next # => 2nd page result
141
+ p.next # => 3rd page result
142
+ ```
143
+ * [#223](https://github.com/ryz310/my_api_client/pull/223) Use Enumerator::Lazy instead of Enumerator ([@ryz310](https://github.com/ryz310))
144
+
145
+ ## v0.14.0 (Mar 14, 2020)
146
+
147
+ ### Feature
148
+
149
+ * [#211](https://github.com/ryz310/my_api_client/pull/211) Integration testing using the jets framework ([@ryz310](https://github.com/ryz310))
150
+ * [#213](https://github.com/ryz310/my_api_client/pull/213) Add status API to integration testing ([@ryz310](https://github.com/ryz310))
151
+ * [#214](https://github.com/ryz310/my_api_client/pull/214) Add error API to integration testing ([@ryz310](https://github.com/ryz310))
152
+ * [#215](https://github.com/ryz310/my_api_client/pull/215) Update the REST API to enhance integration testing ([@ryz310](https://github.com/ryz310))
153
+
154
+ ### Refactoring
155
+
156
+ * [#179](https://github.com/ryz310/my_api_client/pull/179) Change the "with" option structure ([@ryz310](https://github.com/ryz310))
157
+ * [#206](https://github.com/ryz310/my_api_client/pull/206) Rebuild api request processing ([@ryz310](https://github.com/ryz310))
158
+ * [#207](https://github.com/ryz310/my_api_client/pull/207) Fix offending codes ([@ryz310](https://github.com/ryz310))
159
+
160
+ ### Breaking Change
161
+
162
+ * [#196](https://github.com/ryz310/my_api_client/pull/196) Change the request structure ([@ryz310](https://github.com/ryz310))
163
+
164
+ > ### logging
165
+ >
166
+ > **before**
167
+ >
168
+ > ```
169
+ > I, [2020-02-02T15:26:53.788092 #93220] INFO -- : API request `GET https://api.esa.io/v1/teams/feedforce/posts`: "Start"
170
+ > I, [2020-02-02T15:26:55.760452 #93220] INFO -- : API request `GET https://api.esa.io/v1/teams/feedforce/posts`: "Duration 1.97186 sec"
171
+ > I, [2020-02-02T15:26:55.760739 #93220] INFO -- : API request `GET https://api.esa.io/v1/teams/feedforce/posts`: "Success (200)"
172
+ > ```
173
+ >
174
+ > **after**
175
+ >
176
+ > Shows URL with query strings.
177
+ >
178
+ > ```
179
+ > I, [2020-02-02T15:20:47.471040 #90870] INFO -- : API request `GET https://api.esa.io/v1/teams/feedforce/posts?page=1&per_page=100&q=user%3Aryosuke_sato+category%3Aunsorted`: "Start"
180
+ > I, [2020-02-02T15:20:49.516099 #90870] INFO -- : API request `GET https://api.esa.io/v1/teams/feedforce/posts?page=1&per_page=100&q=user%3Aryosuke_sato+category%3Aunsorted`: "Duration 2.034907 sec"
181
+ > I, [2020-02-02T15:20:49.516391 #90870] INFO -- : API request `GET https://api.esa.io/v1/teams/feedforce/posts?page=1&per_page=100&q=user%3Aryosuke_sato+category%3Aunsorted`: "Success (200)"
182
+ > ```
183
+ >
184
+ > ### MyApiClient::Params::Request
185
+ >
186
+ > **before**
187
+ >
188
+ > ```rb
189
+ > request_params.metadata # =>
190
+ > # {
191
+ > # line: 'GET path/to/resource',
192
+ > # headers: { 'Content-Type': 'application/json; charset=utf-8' },
193
+ > # query: { key: 'value' }
194
+ > # }
195
+ > ```
196
+ >
197
+ > **after**
198
+ >
199
+ > The `#metadata` does not include `query` key and then includes full URL into `line` value.
200
+ >
201
+ > ```rb
202
+ > request_params.metadata # =>
203
+ > # {
204
+ > # line: 'GET https://example.com/path/to/resource?key=value',
205
+ > # headers: { 'Content-Type': 'application/json; charset=utf-8' }
206
+ > # }
207
+ > ```
208
+
209
+ ### Rubocop Challenge
210
+
211
+ * [#205](https://github.com/ryz310/my_api_client/pull/205) Re-generate .rubocop_todo.yml with RuboCop v0.80.0 ([@ryz310](https://github.com/ryz310))
212
+ * [#210](https://github.com/ryz310/my_api_client/pull/210) Re-generate .rubocop_todo.yml with RuboCop v0.80.1 ([@ryz310](https://github.com/ryz310))
213
+
214
+ ### Dependabot
215
+
216
+ * [#190](https://github.com/ryz310/my_api_client/pull/190) Add a config file of the dependabot ([@ryz310](https://github.com/ryz310))
217
+ * [#183](https://github.com/ryz310/my_api_client/pull/183) Bump pry-byebug from 3.7.0 to 3.8.0 ([@ryz310](https://github.com/ryz310))
218
+ * [#194](https://github.com/ryz310/my_api_client/pull/194) Bump bugsnag from 6.12.2 to 6.13.0 ([@ryz310](https://github.com/ryz310))
219
+ * [#197](https://github.com/ryz310/my_api_client/pull/197) Bump webmock from 3.8.0 to 3.8.1 ([@ryz310](https://github.com/ryz310))
220
+ * [#199](https://github.com/ryz310/my_api_client/pull/199) Bump webmock from 3.8.1 to 3.8.2 ([@ryz310](https://github.com/ryz310))
221
+ * [#216](https://github.com/ryz310/my_api_client/pull/216) Bump webmock from 3.8.2 to 3.8.3 ([@ryz310](https://github.com/ryz310))
222
+
223
+ ### Renovate
224
+
225
+ * [#193](https://github.com/ryz310/my_api_client/pull/193) Change renovate automerge setting ([@ryz310](https://github.com/ryz310))
226
+ * [#189](https://github.com/ryz310/my_api_client/pull/189) Update the renovate settings ([@ryz310](https://github.com/ryz310))
227
+ * [#184](https://github.com/ryz310/my_api_client/pull/184) Update ruby-orbs orb to v1.5.1 ([@ryz310](https://github.com/ryz310))
228
+ * [#185](https://github.com/ryz310/my_api_client/pull/185) Update ruby-orbs orb to v1.5.4 ([@ryz310](https://github.com/ryz310))
229
+ * [#187](https://github.com/ryz310/my_api_client/pull/187) Update ruby-orbs orb to v1.5.6 ([@ryz310](https://github.com/ryz310))
230
+ * [#192](https://github.com/ryz310/my_api_client/pull/192) Update ruby-orbs orb to v1.6.0 ([@ryz310](https://github.com/ryz310))
231
+
3
232
  ## v0.13.0 (Jan 21, 2020)
4
233
 
5
234
  ### Feature