rest_api_builder 0.0.4 → 0.0.5
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/lib/rest_api_builder.rb +20 -0
- data/lib/rest_api_builder/request.rb +15 -26
- data/lib/rest_api_builder/request_options.rb +33 -0
- data/lib/rest_api_builder/response_handler.rb +44 -0
- data/rest_api_builder.gemspec +1 -1
- metadata +4 -3
- data/lib/rest_api_builder/rest_client_response_parser.rb +0 -39
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7ca6b82ae8dc6fab46c1804dfe8b7a48a5082fada32c6aad18ec4834953e1b06
|
4
|
+
data.tar.gz: c9f328a5da83137dc49772eed5e37e5b8647e26195488279d105891fed5c1704
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '07918f30ca0bfa5303987f446d0022099084a1cf3ebf47a202aa573b517fa230dbef62502d4645a813a9d174d5647b404c0687a388141c214b6c1ae6aee13b91'
|
7
|
+
data.tar.gz: adf81df2acb76b6b81673a833ebb813ff6715d5ec3bfcef4c6d5237ace09f465cd4c1231425faff0ea8c4d20a9ca6815b27a22d0dd0a5eec7c074d75a6f51c78
|
data/lib/rest_api_builder.rb
CHANGED
@@ -1 +1,21 @@
|
|
1
|
+
require 'forwardable'
|
1
2
|
require 'rest_api_builder/request'
|
3
|
+
require 'rest_api_builder/request_options'
|
4
|
+
require 'rest_api_builder/response_handler'
|
5
|
+
|
6
|
+
module RestAPIBuilder
|
7
|
+
extend Forwardable
|
8
|
+
|
9
|
+
def_delegator :request_options, :compose, :compose_request_options
|
10
|
+
def_delegator :request_options, :compose_json, :compose_json_request_options
|
11
|
+
|
12
|
+
def_delegators :response_handler, :handle_response, :handle_json_response, :handle_response_error
|
13
|
+
|
14
|
+
def request_options
|
15
|
+
RequestOptions.new
|
16
|
+
end
|
17
|
+
|
18
|
+
def response_handler
|
19
|
+
ResponseHandler.new
|
20
|
+
end
|
21
|
+
end
|
@@ -1,11 +1,7 @@
|
|
1
1
|
require 'rest-client'
|
2
|
-
require 'rest_api_builder/url_helper'
|
3
|
-
require 'rest_api_builder/rest_client_response_parser'
|
4
2
|
|
5
3
|
module RestAPIBuilder
|
6
4
|
class RequestSingleton
|
7
|
-
include RestAPIBuilder::UrlHelper
|
8
|
-
|
9
5
|
def json_execute(headers: {}, body: nil, **options)
|
10
6
|
headers = headers.merge(content_type: :json)
|
11
7
|
body &&= JSON.generate(body)
|
@@ -24,31 +20,24 @@ module RestAPIBuilder
|
|
24
20
|
raw_response: false,
|
25
21
|
rest_client_options: {}
|
26
22
|
)
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
raw_response: raw_response
|
23
|
+
options = RequestOptions.new.compose(
|
24
|
+
base_url: base_url,
|
25
|
+
method: method,
|
26
|
+
body: body,
|
27
|
+
headers: headers,
|
28
|
+
query: query,
|
29
|
+
path: path
|
35
30
|
)
|
36
|
-
headers = headers.merge(params: query) if query
|
37
31
|
|
38
|
-
|
39
|
-
|
40
|
-
method: method,
|
41
|
-
url: full_url(base_url, path),
|
42
|
-
payload: body,
|
43
|
-
headers: headers,
|
44
|
-
log: logger,
|
45
|
-
**rest_client_options
|
46
|
-
)
|
47
|
-
response_parser.parse_response(response, success: true)
|
48
|
-
rescue RestClient::RequestFailed => e
|
49
|
-
raise e unless e.response
|
32
|
+
response_handler = ResponseHandler.new
|
33
|
+
execute_request = proc { RestClient::Request.execute(**options, log: logger, **rest_client_options) }
|
50
34
|
|
51
|
-
|
35
|
+
if parse_json
|
36
|
+
response_handler.handle_json_response(logger: logger, &execute_request)
|
37
|
+
elsif raw_response
|
38
|
+
response_handler.handle_response_error(&execute_request)
|
39
|
+
else
|
40
|
+
response_handler.handle_response(logger: logger, &execute_request)
|
52
41
|
end
|
53
42
|
end
|
54
43
|
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'rest_api_builder/url_helper'
|
2
|
+
|
3
|
+
module RestAPIBuilder
|
4
|
+
class RequestOptions
|
5
|
+
include RestAPIBuilder::UrlHelper
|
6
|
+
|
7
|
+
def compose(base_url:, method:, path: nil, body: nil, headers: {}, query: nil)
|
8
|
+
if method == :get && body
|
9
|
+
raise ArgumentError, 'GET requests do not support body'
|
10
|
+
end
|
11
|
+
|
12
|
+
headers = headers.merge(params: query) if query
|
13
|
+
|
14
|
+
{
|
15
|
+
method: method,
|
16
|
+
url: full_url(base_url, path),
|
17
|
+
payload: body,
|
18
|
+
headers: headers
|
19
|
+
}
|
20
|
+
end
|
21
|
+
|
22
|
+
def compose_json(**options)
|
23
|
+
result = compose(**options)
|
24
|
+
headers = result[:headers]
|
25
|
+
payload = result[:payload]
|
26
|
+
|
27
|
+
result.merge(
|
28
|
+
headers: headers.merge(content_type: :json),
|
29
|
+
payload: payload && JSON.generate(payload)
|
30
|
+
)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module RestAPIBuilder
|
2
|
+
class ResponseHandler
|
3
|
+
def handle_json_response(**options, &block)
|
4
|
+
result = handle_response(**options, &block)
|
5
|
+
result.merge(body: parse_json(result[:body]))
|
6
|
+
end
|
7
|
+
|
8
|
+
def handle_response(logger: nil, &block)
|
9
|
+
result = parse_response(**handle_response_error(&block))
|
10
|
+
maybe_log_result(result, logger: logger)
|
11
|
+
result
|
12
|
+
end
|
13
|
+
|
14
|
+
def handle_response_error
|
15
|
+
response = yield
|
16
|
+
{ raw_response: response, success: true }
|
17
|
+
rescue RestClient::RequestFailed => e
|
18
|
+
raise e unless e.response
|
19
|
+
|
20
|
+
{ raw_response: e.response, success: false }
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def parse_response(raw_response:, success:)
|
26
|
+
{
|
27
|
+
success: success,
|
28
|
+
status: raw_response.code,
|
29
|
+
body: raw_response.body,
|
30
|
+
headers: raw_response.headers
|
31
|
+
}
|
32
|
+
end
|
33
|
+
|
34
|
+
def maybe_log_result(result, logger:)
|
35
|
+
logger && logger << "# => Response: #{result}\n"
|
36
|
+
end
|
37
|
+
|
38
|
+
def parse_json(json)
|
39
|
+
JSON.parse(json)
|
40
|
+
rescue JSON::ParserError
|
41
|
+
json
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
data/rest_api_builder.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'rest_api_builder'
|
3
|
-
s.version = '0.0.
|
3
|
+
s.version = '0.0.5'
|
4
4
|
s.summary = "A simple wrapper for rest-client"
|
5
5
|
s.description = "A simple wrapper for rest-client aiming to make creation and testing of API clients easier."
|
6
6
|
s.authors = ["Alexey D"]
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rest_api_builder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexey D
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-07-
|
11
|
+
date: 2020-07-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rubocop
|
@@ -63,7 +63,8 @@ files:
|
|
63
63
|
- README.md
|
64
64
|
- lib/rest_api_builder.rb
|
65
65
|
- lib/rest_api_builder/request.rb
|
66
|
-
- lib/rest_api_builder/
|
66
|
+
- lib/rest_api_builder/request_options.rb
|
67
|
+
- lib/rest_api_builder/response_handler.rb
|
67
68
|
- lib/rest_api_builder/url_helper.rb
|
68
69
|
- lib/rest_api_builder/webmock_request_expectations.rb
|
69
70
|
- rest_api_builder.gemspec
|
@@ -1,39 +0,0 @@
|
|
1
|
-
require 'json'
|
2
|
-
|
3
|
-
module RestAPIBuilder
|
4
|
-
class RestClientResponseParser
|
5
|
-
def initialize(logger:, parse_json:, raw_response:)
|
6
|
-
@logger = logger
|
7
|
-
@parse_json = parse_json
|
8
|
-
@raw_response = raw_response
|
9
|
-
end
|
10
|
-
|
11
|
-
def parse_response(response, success:)
|
12
|
-
return { success: success, raw_response: response } if @raw_response
|
13
|
-
|
14
|
-
body = @parse_json ? parse_json(response.body) : response.body
|
15
|
-
|
16
|
-
result = {
|
17
|
-
success: success,
|
18
|
-
status: response.code,
|
19
|
-
body: body,
|
20
|
-
headers: response.headers
|
21
|
-
}
|
22
|
-
maybe_log_result(result)
|
23
|
-
|
24
|
-
result
|
25
|
-
end
|
26
|
-
|
27
|
-
private
|
28
|
-
|
29
|
-
def parse_json(json)
|
30
|
-
JSON.parse(json)
|
31
|
-
rescue JSON::ParserError
|
32
|
-
json
|
33
|
-
end
|
34
|
-
|
35
|
-
def maybe_log_result(result)
|
36
|
-
@logger && @logger << "# => Response: #{result}\n"
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|