api_client_builder 1.2.0 → 1.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 88e1b96d923ba97a2adcc4a9016c2e63fd9bdc3c
4
- data.tar.gz: 8abe62264ede2bcf80ada8ae2a24cac37dd3b7d2
2
+ SHA256:
3
+ metadata.gz: 2accab064d29f0ff8f30fe57c72e1d6d4e8443e638fc118c0c3491072f4f9893
4
+ data.tar.gz: 36eca023a1104ab85da81b13422b2ab0125601c0d008a398e91310697cd1b99c
5
5
  SHA512:
6
- metadata.gz: 19b3e2ee30df3ce75e7616a3146d392312d5540a58ae3b75d05ee41db21d344f86c9c0ae5cabaf96b0411d4331d16fd12d18013b3d749c9a037745d2053958cf
7
- data.tar.gz: af3aaf9e2f75477a988d623a721d0818b87a0bb782e4fbaefe9515e2690f8c8fd08e72d43c6481130f25167fde7cac25459c8db92fd528f1f626d9ea2e187e03
6
+ metadata.gz: 811764f10bf9810621e0148944e040123433690f7fce45e7512c9e5537e894b62b5dfb2fa96f2c45df7221c5942121879728cc488181495223bb9bb6d57162bb
7
+ data.tar.gz: 39a5f07153ddaef6f2e5dbb2acb971c8f033f3d97421b915fb9b0b43a5fcc02159321c1d807c930ff934115c21ecedca74ed97c18734371694eefa71739bd1c1
@@ -0,0 +1,13 @@
1
+ pipeline {
2
+ agent {
3
+ label 'docker'
4
+ }
5
+
6
+ stages {
7
+ stage('Lint & Test') {
8
+ steps {
9
+ sh './build.sh'
10
+ }
11
+ }
12
+ }
13
+ }
data/README.md CHANGED
@@ -186,6 +186,10 @@ class HTTPClientHandler
186
186
  client.post(route, params, headers)
187
187
  end
188
188
 
189
+ def delete(route, params = nil, headers = {})
190
+ client.delete(route, params, headers)
191
+ end
192
+
189
193
  # Define a client to use here. The HTTPClient gem is a good option
190
194
 
191
195
  # Build up headers and authentication handling here as well
@@ -296,6 +300,20 @@ def post_request
296
300
  end
297
301
  ```
298
302
 
303
+ #### For deletes
304
+
305
+ The builder will call `#delete_request` when handling delete routes.
306
+
307
+ ```ruby
308
+ def delete_request
309
+ # Build the URL -- this could be to add pagination params to the route, or
310
+ # add whatever else is necessary to the route.
311
+ # Also send the body if that's how the client handler is configured.
312
+ http_response = @http_client.delete("a URL")
313
+ build_response(http_response)
314
+ end
315
+ ```
316
+
299
317
  #### Handling retry-able requests
300
318
 
301
319
  If requests defined need to be retry-able, extend the response handler by providing
@@ -4,8 +4,8 @@ Gem::Specification.new do |gem|
4
4
  gem.name = 'api_client_builder'
5
5
  gem.summary = 'API Client Builder provides an easy to use interface for creating HTTP api clients'
6
6
  gem.description = 'API Client Builder provides an easy to use interface for creating HTTP api clients'
7
- gem.authors = ['Jayce Higgins', 'Bryan Petty']
8
- gem.email = ['jhiggins@instructure.com', 'bpetty@instructure.com', 'eng@instructure.com']
7
+ gem.authors = ['Jayce Higgins']
8
+ gem.email = ['jhiggins@instructure.com', 'eng@instructure.com']
9
9
  gem.homepage = 'https://github.com/instructure/api-client-builder'
10
10
 
11
11
  gem.version = APIClientBuilder::VERSION
@@ -8,6 +8,7 @@ require_relative 'api_client_builder/get_collection_request'
8
8
  require_relative 'api_client_builder/get_item_request'
9
9
  require_relative 'api_client_builder/post_request'
10
10
  require_relative 'api_client_builder/put_request'
11
+ require_relative 'api_client_builder/delete_request'
11
12
  require_relative 'api_client_builder/url_generator'
12
13
 
13
14
  require_relative 'api_client_builder/api_client'
@@ -75,5 +75,22 @@ module APIClientBuilder
75
75
  )
76
76
  end
77
77
  end
78
+
79
+ # Used to define a DELETE api route on the base class. Will
80
+ # yield a method that takes the shape of 'delete_type' that will
81
+ # return a DeleteRequest.
82
+ #
83
+ # @param type [Symbol] defines the route model
84
+ # @param route [String] defines the routes endpoint
85
+ #
86
+ # @return [DeleteRequest] the request object that handles puts
87
+ def self.delete(type, route)
88
+ define_method("delete_#{type}") do |**params|
89
+ DeleteRequest.new(
90
+ type,
91
+ response_handler_build(http_client, @url_generator.build_route(route, **params), type)
92
+ )
93
+ end
94
+ end
78
95
  end
79
96
  end
@@ -0,0 +1,19 @@
1
+ module APIClientBuilder
2
+ class DeleteRequest < Request
3
+ # Yields the response body if the response was successful. Will call
4
+ # the response handlers if there was not a successful response.
5
+ #
6
+ # @return [JSON] the http response body
7
+ def response
8
+ response = response_handler.delete_request
9
+
10
+ if response.success?
11
+ response
12
+ else
13
+ error_handlers.each do |handler|
14
+ handler.call(response, self)
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -1,3 +1,3 @@
1
1
  module APIClientBuilder
2
- VERSION = '1.2.0'.freeze
2
+ VERSION = '1.3.0'.freeze
3
3
  end
@@ -41,5 +41,15 @@ module APIClientBuilder
41
41
  expect(client.put_some_object({})).to be_a(APIClientBuilder::PutRequest)
42
42
  end
43
43
  end
44
+
45
+ describe '.delete' do
46
+ it 'defines a delete method on the client' do
47
+ expect(client).to respond_to(:delete_some_object)
48
+ end
49
+
50
+ it 'returns a DeleteRequest object' do
51
+ expect(client.delete_some_object({})).to be_a(APIClientBuilder::DeleteRequest)
52
+ end
53
+ end
44
54
  end
45
55
  end
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+ require_relative 'test_client/client'
3
+
4
+ module APIClientBuilder
5
+ describe DeleteRequest do
6
+ describe '#response' do
7
+ context 'request was successful' do
8
+ it 'returns a response object' do
9
+ client = TestClient::Client.new(domain: 'https://www.domain.com/api/endpoints/')
10
+
11
+ some_object = client.delete_some_object({}).response
12
+ expect(some_object.body).to eq('good delete request')
13
+ end
14
+ end
15
+
16
+ context 'request was unsuccessful' do
17
+ it 'calls the error handlers' do
18
+ client = TestClient::Client.new(domain: 'https://www.domain.com/api/endpoints/')
19
+
20
+ bad_response = APIClientBuilder::Response.new('bad request', 400, [200])
21
+ allow_any_instance_of(TestClient::ResponseHandler).to receive(:delete_request).and_return(bad_response)
22
+ expect { client.delete_some_object({}).response }.to raise_error(
23
+ APIClientBuilder::DefaultPageError, /Error Code: 400/
24
+ )
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -17,5 +17,6 @@ module TestClient
17
17
 
18
18
  post :some_object, 'some/post/url'
19
19
  put :some_object, 'som/put/url'
20
+ delete :some_object, 'som/delete/url'
20
21
  end
21
22
  end
@@ -18,6 +18,10 @@ module TestClient
18
18
  APIClientBuilder::Response.new([4, 5, 6], SUCCESS_STATUS, SUCCESS_RANGE)
19
19
  end
20
20
 
21
+ def delete_request
22
+ APIClientBuilder::Response.new('good delete request', SUCCESS_STATUS, SUCCESS_RANGE)
23
+ end
24
+
21
25
  def put_request(_body)
22
26
  APIClientBuilder::Response.new('good request', SUCCESS_STATUS, SUCCESS_RANGE)
23
27
  end
metadata CHANGED
@@ -1,92 +1,92 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: api_client_builder
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jayce Higgins
8
- - Bryan Petty
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2018-10-03 00:00:00.000000000 Z
11
+ date: 2020-03-27 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: pry
16
15
  requirement: !ruby/object:Gem::Requirement
17
16
  requirements:
18
- - - '>='
17
+ - - ">="
19
18
  - !ruby/object:Gem::Version
20
19
  version: '0'
21
20
  type: :development
22
21
  prerelease: false
23
22
  version_requirements: !ruby/object:Gem::Requirement
24
23
  requirements:
25
- - - '>='
24
+ - - ">="
26
25
  - !ruby/object:Gem::Version
27
26
  version: '0'
28
27
  - !ruby/object:Gem::Dependency
29
28
  name: rspec
30
29
  requirement: !ruby/object:Gem::Requirement
31
30
  requirements:
32
- - - ~>
31
+ - - "~>"
33
32
  - !ruby/object:Gem::Version
34
33
  version: '3.7'
35
34
  type: :development
36
35
  prerelease: false
37
36
  version_requirements: !ruby/object:Gem::Requirement
38
37
  requirements:
39
- - - ~>
38
+ - - "~>"
40
39
  - !ruby/object:Gem::Version
41
40
  version: '3.7'
42
41
  - !ruby/object:Gem::Dependency
43
42
  name: rubocop
44
43
  requirement: !ruby/object:Gem::Requirement
45
44
  requirements:
46
- - - ~>
45
+ - - "~>"
47
46
  - !ruby/object:Gem::Version
48
47
  version: 0.57.2
49
48
  type: :development
50
49
  prerelease: false
51
50
  version_requirements: !ruby/object:Gem::Requirement
52
51
  requirements:
53
- - - ~>
52
+ - - "~>"
54
53
  - !ruby/object:Gem::Version
55
54
  version: 0.57.2
56
55
  - !ruby/object:Gem::Dependency
57
56
  name: simplecov
58
57
  requirement: !ruby/object:Gem::Requirement
59
58
  requirements:
60
- - - ~>
59
+ - - "~>"
61
60
  - !ruby/object:Gem::Version
62
61
  version: '0'
63
62
  type: :development
64
63
  prerelease: false
65
64
  version_requirements: !ruby/object:Gem::Requirement
66
65
  requirements:
67
- - - ~>
66
+ - - "~>"
68
67
  - !ruby/object:Gem::Version
69
68
  version: '0'
70
69
  description: API Client Builder provides an easy to use interface for creating HTTP
71
70
  api clients
72
71
  email:
73
72
  - jhiggins@instructure.com
74
- - bpetty@instructure.com
75
73
  - eng@instructure.com
76
74
  executables: []
77
75
  extensions: []
78
76
  extra_rdoc_files: []
79
77
  files:
80
- - .gitignore
81
- - .rubocop.yml
82
- - .travis.yml
78
+ - ".gitignore"
79
+ - ".rubocop.yml"
80
+ - ".travis.yml"
83
81
  - Gemfile
82
+ - Jenkinsfile
84
83
  - LICENSE.txt
85
84
  - README.md
86
85
  - api_client_builder.gemspec
87
86
  - build.sh
88
87
  - lib/api_client_builder.rb
89
88
  - lib/api_client_builder/api_client.rb
89
+ - lib/api_client_builder/delete_request.rb
90
90
  - lib/api_client_builder/get_collection_request.rb
91
91
  - lib/api_client_builder/get_item_request.rb
92
92
  - lib/api_client_builder/post_request.rb
@@ -96,6 +96,7 @@ files:
96
96
  - lib/api_client_builder/url_generator.rb
97
97
  - lib/api_client_builder/version.rb
98
98
  - spec/lib/api_client_builder/api_client_spec.rb
99
+ - spec/lib/api_client_builder/delete_request_spec.rb
99
100
  - spec/lib/api_client_builder/get_collection_request_spec.rb
100
101
  - spec/lib/api_client_builder/get_item_request_spec.rb
101
102
  - spec/lib/api_client_builder/post_request_spec.rb
@@ -117,23 +118,23 @@ require_paths:
117
118
  - lib
118
119
  required_ruby_version: !ruby/object:Gem::Requirement
119
120
  requirements:
120
- - - '>='
121
+ - - ">="
121
122
  - !ruby/object:Gem::Version
122
123
  version: '2.3'
123
124
  required_rubygems_version: !ruby/object:Gem::Requirement
124
125
  requirements:
125
- - - '>='
126
+ - - ">="
126
127
  - !ruby/object:Gem::Version
127
128
  version: '0'
128
129
  requirements: []
129
- rubyforge_project:
130
- rubygems_version: 2.0.14
130
+ rubygems_version: 3.0.6
131
131
  signing_key:
132
132
  specification_version: 4
133
133
  summary: API Client Builder provides an easy to use interface for creating HTTP api
134
134
  clients
135
135
  test_files:
136
136
  - spec/lib/api_client_builder/api_client_spec.rb
137
+ - spec/lib/api_client_builder/delete_request_spec.rb
137
138
  - spec/lib/api_client_builder/get_collection_request_spec.rb
138
139
  - spec/lib/api_client_builder/get_item_request_spec.rb
139
140
  - spec/lib/api_client_builder/post_request_spec.rb