rest_api_builder 0.1.2 → 0.1.3

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
2
  SHA256:
3
- metadata.gz: 96218189bfd186f70de1dbe9a83564193b9eebcd1e8bc1f140b0cf2df7ab547f
4
- data.tar.gz: badc7fb88fed02398ed637da3abaefcc18a0d84ae5f7c245dace7afb37e8d2a2
3
+ metadata.gz: 7044c0a51394cd9997b23d7c1189e32a3342cdc63c5b2d15faff2050857d8114
4
+ data.tar.gz: 77684c0bc571a4b424f9e5624bbc25eafd45246b954c0ad1b7f2a2ba20535649
5
5
  SHA512:
6
- metadata.gz: ca89a063999a87c496f0393f8ddc43523a94bdda47046b5ca7c396511f734ec9443dd2ac15fdd6e2df55f06ded04ddca6c84bd3da7acccf11466b3b26a1e0f05
7
- data.tar.gz: c3f272966028c03da3354bfe17ee30d93a4b4005d63e7aca7fda8c85708f726b98998d60d4a6de21b835ab8c570e799c04f12593dbdbad14d7d5d09640e0e280
6
+ metadata.gz: e4efb71298656b1703b9b147dfdb9901cb94ab70bc74c013224439270211d9ad92357d7886d0355491eea22bf9b368e33db1a111096da1e643a6dd7807c067c1
7
+ data.tar.gz: 5562e548abb6dc0c8798e6fbe238d07110f41a9bcf8953c31286178dc26d3b6170f22fef14140241e1a47ae43d4482765f9b473db6aee1640432ae347ce38908
@@ -1,32 +1,7 @@
1
1
  require 'forwardable'
2
- require 'rest_api_builder/request_options'
3
- require 'rest_api_builder/response_handler'
2
+ require 'rest_api_builder/request'
3
+ require 'rest_api_builder/api_client'
4
4
 
5
5
  module RestAPIBuilder
6
- class APIHelpers
7
- extend Forwardable
8
-
9
- def initialize
10
- @request_options = RequestOptions.new
11
- @response_handler = ResponseHandler.new
12
- end
13
-
14
- def_delegator :@request_options, :compose, :compose_request_options
15
- def_delegator :@request_options, :compose_json, :compose_json_request_options
16
-
17
- def_delegators :@response_handler, :handle_response, :handle_json_response, :handle_response_error
18
- end
19
-
20
- extend Forwardable
21
-
22
- def_delegators :rest_api_builder_helpers,
23
- :compose_request_options,
24
- :compose_json_request_options,
25
- :handle_response,
26
- :handle_json_response,
27
- :handle_response_error
28
-
29
- def rest_api_builder_helpers
30
- APIHelpers.new
31
- end
6
+ include RestAPIBuilder::Request
32
7
  end
@@ -0,0 +1,16 @@
1
+ require 'rest_api_builder/helpers/string_helper'
2
+
3
+ module RestAPIBuilder
4
+ module APIClient
5
+ def define_resource_shortcuts(resources, resources_scope:, init_with:)
6
+ resources.each do |name|
7
+ class_name = RestAPIBuilder::Helpers::StringHelper.camelize(name.to_s)
8
+ resource_class = Object.const_get("#{resources_scope}::#{class_name}")
9
+
10
+ define_singleton_method(name) do
11
+ init_with.call(resource_class)
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,15 @@
1
+ module RestAPIBuilder
2
+ module Helpers
3
+ module StringHelper
4
+ module_function
5
+
6
+ # From https://apidock.com/rails/String/camelize
7
+ def camelize(string)
8
+ string
9
+ .sub(/^[a-z\d]*/, &:capitalize)
10
+ .gsub(/(?:_|(\/))([a-z\d]*)/) { "#{Regexp.last_match(1)}#{Regexp.last_match(2).capitalize}" }
11
+ .gsub("/", "::")
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ module RestAPIBuilder
2
+ module Helpers
3
+ module UrlHelper
4
+ module_function
5
+
6
+ def full_url(url, path)
7
+ if path
8
+ File.join(url, path)
9
+ else
10
+ url
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,18 @@
1
+ require 'forwardable'
2
+ require 'rest_api_builder/request/request_options'
3
+ require 'rest_api_builder/request/response_handler'
4
+
5
+ module RestAPIBuilder
6
+ module Request
7
+ extend Forwardable
8
+
9
+ def_delegators RestAPIBuilder::Request::RequestOptions,
10
+ :compose_request_options,
11
+ :compose_json_request_options
12
+
13
+ def_delegators RestAPIBuilder::Request::ResponseHandler,
14
+ :handle_response,
15
+ :handle_json_response,
16
+ :handle_response_error
17
+ end
18
+ end
@@ -0,0 +1,37 @@
1
+ require 'rest_api_builder/helpers/url_helper'
2
+
3
+ module RestAPIBuilder
4
+ module Request
5
+ module RequestOptions
6
+ extend RestAPIBuilder::Helpers::UrlHelper
7
+
8
+ module_function
9
+
10
+ def compose_request_options(base_url:, method:, path: nil, body: nil, headers: {}, query: nil)
11
+ if method == :get && body
12
+ raise ArgumentError, 'GET requests do not support body'
13
+ end
14
+
15
+ headers = headers.merge(params: query) if query
16
+
17
+ {
18
+ method: method,
19
+ url: full_url(base_url, path),
20
+ payload: body,
21
+ headers: headers
22
+ }
23
+ end
24
+
25
+ def compose_json_request_options(**options)
26
+ result = compose_request_options(**options)
27
+ headers = result[:headers]
28
+ payload = result[:payload]
29
+
30
+ result.merge(
31
+ headers: headers.merge(content_type: :json),
32
+ payload: payload && JSON.generate(payload)
33
+ )
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,48 @@
1
+ require 'rest-client'
2
+
3
+ module RestAPIBuilder
4
+ module Request
5
+ module ResponseHandler
6
+ module_function
7
+
8
+ def handle_json_response(**options, &block)
9
+ result = handle_response(**options, &block)
10
+ result.merge(body: parse_json(result[:body]))
11
+ end
12
+
13
+ def handle_response(logger: nil, &block)
14
+ result = parse_response(**handle_response_error(&block))
15
+ maybe_log_result(result, logger: logger)
16
+ result
17
+ end
18
+
19
+ def handle_response_error
20
+ response = yield
21
+ { raw_response: response, success: true }
22
+ rescue RestClient::RequestFailed => e
23
+ raise e unless e.response
24
+
25
+ { raw_response: e.response, success: false }
26
+ end
27
+
28
+ def parse_response(raw_response:, success:)
29
+ {
30
+ success: success,
31
+ status: raw_response.code,
32
+ body: raw_response.body,
33
+ headers: raw_response.headers
34
+ }
35
+ end
36
+
37
+ def maybe_log_result(result, logger:)
38
+ logger && logger << "# => Response: #{result}\n"
39
+ end
40
+
41
+ def parse_json(json)
42
+ JSON.parse(json)
43
+ rescue JSON::ParserError
44
+ json
45
+ end
46
+ end
47
+ end
48
+ end
@@ -1,10 +1,10 @@
1
1
  require 'webmock'
2
- require 'rest_api_builder/url_helper'
2
+ require 'rest_api_builder/helpers/url_helper'
3
3
 
4
4
  module RestAPIBuilder
5
5
  class WebMockRequestExpectationsSingleton
6
6
  include WebMock::API
7
- include RestAPIBuilder::UrlHelper
7
+ include RestAPIBuilder::Helpers::UrlHelper
8
8
 
9
9
  def expect_json_execute(response: nil, **options)
10
10
  if response && response[:body]
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'rest_api_builder'
3
- s.version = '0.1.2'
3
+ s.version = '0.1.3'
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.1.2
4
+ version: 0.1.3
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-09-20 00:00:00.000000000 Z
11
+ date: 2020-09-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubocop
@@ -62,9 +62,12 @@ files:
62
62
  - LICENSE
63
63
  - README.md
64
64
  - lib/rest_api_builder.rb
65
- - lib/rest_api_builder/request_options.rb
66
- - lib/rest_api_builder/response_handler.rb
67
- - lib/rest_api_builder/url_helper.rb
65
+ - lib/rest_api_builder/api_client.rb
66
+ - lib/rest_api_builder/helpers/string_helper.rb
67
+ - lib/rest_api_builder/helpers/url_helper.rb
68
+ - lib/rest_api_builder/request.rb
69
+ - lib/rest_api_builder/request/request_options.rb
70
+ - lib/rest_api_builder/request/response_handler.rb
68
71
  - lib/rest_api_builder/webmock_request_expectations.rb
69
72
  - rest_api_builder.gemspec
70
73
  homepage: https://github.com/alexeyds/rest_api_builder
@@ -1,33 +0,0 @@
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
@@ -1,46 +0,0 @@
1
- require 'rest-client'
2
-
3
- module RestAPIBuilder
4
- class ResponseHandler
5
- def handle_json_response(**options, &block)
6
- result = handle_response(**options, &block)
7
- result.merge(body: parse_json(result[:body]))
8
- end
9
-
10
- def handle_response(logger: nil, &block)
11
- result = parse_response(**handle_response_error(&block))
12
- maybe_log_result(result, logger: logger)
13
- result
14
- end
15
-
16
- def handle_response_error
17
- response = yield
18
- { raw_response: response, success: true }
19
- rescue RestClient::RequestFailed => e
20
- raise e unless e.response
21
-
22
- { raw_response: e.response, success: false }
23
- end
24
-
25
- private
26
-
27
- def parse_response(raw_response:, success:)
28
- {
29
- success: success,
30
- status: raw_response.code,
31
- body: raw_response.body,
32
- headers: raw_response.headers
33
- }
34
- end
35
-
36
- def maybe_log_result(result, logger:)
37
- logger && logger << "# => Response: #{result}\n"
38
- end
39
-
40
- def parse_json(json)
41
- JSON.parse(json)
42
- rescue JSON::ParserError
43
- json
44
- end
45
- end
46
- end
@@ -1,11 +0,0 @@
1
- module RestAPIBuilder
2
- module UrlHelper
3
- def full_url(url, path)
4
- if path
5
- File.join(url, path)
6
- else
7
- url
8
- end
9
- end
10
- end
11
- end