marble_api_client 1.0.0.pre.alpha
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 +7 -0
- data/.editorconfig +8 -0
- data/.gitignore +6 -0
- data/.rubocop.yml +25 -0
- data/.ruby-version +1 -0
- data/.travis.yml +25 -0
- data/CHANGELOG.md +3 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +5 -0
- data/Guardfile +16 -0
- data/LICENSE +7 -0
- data/README.md +137 -0
- data/Rakefile +17 -0
- data/bin/console +18 -0
- data/lib/marble_api_client/proxy.rb +68 -0
- data/lib/marble_api_client/requests/create.rb +27 -0
- data/lib/marble_api_client/requests/index.rb +31 -0
- data/lib/marble_api_client/requests.rb +4 -0
- data/lib/marble_api_client/responses/bad_request.rb +25 -0
- data/lib/marble_api_client/responses/client_error.rb +21 -0
- data/lib/marble_api_client/responses/forbidden.rb +29 -0
- data/lib/marble_api_client/responses/http_methods.rb +29 -0
- data/lib/marble_api_client/responses/list.rb +60 -0
- data/lib/marble_api_client/responses/not_found.rb +25 -0
- data/lib/marble_api_client/responses/not_implemented.rb +24 -0
- data/lib/marble_api_client/responses/record.rb +25 -0
- data/lib/marble_api_client/responses/server_error.rb +27 -0
- data/lib/marble_api_client/responses/success.rb +21 -0
- data/lib/marble_api_client/responses/unauthorized.rb +19 -0
- data/lib/marble_api_client/responses/unprocessable_entity.rb +40 -0
- data/lib/marble_api_client/responses.rb +92 -0
- data/lib/marble_api_client/version.rb +12 -0
- data/lib/marble_api_client.rb +18 -0
- data/marble_api_client.gemspec +32 -0
- data/spec/marble_api_client/proxy_spec.rb +89 -0
- data/spec/marble_api_client/requests/create_spec.rb +30 -0
- data/spec/marble_api_client/requests/index_spec.rb +34 -0
- data/spec/marble_api_client/responses/bad_request_spec.rb +24 -0
- data/spec/marble_api_client/responses/client_error_spec.rb +21 -0
- data/spec/marble_api_client/responses/forbidden_spec.rb +31 -0
- data/spec/marble_api_client/responses/list_spec.rb +77 -0
- data/spec/marble_api_client/responses/not_found_spec.rb +24 -0
- data/spec/marble_api_client/responses/not_implmented_spec.rb +24 -0
- data/spec/marble_api_client/responses/record_spec.rb +24 -0
- data/spec/marble_api_client/responses/responses_spec.rb +90 -0
- data/spec/marble_api_client/responses/server_error_spec.rb +24 -0
- data/spec/marble_api_client/responses/success_spec.rb +13 -0
- data/spec/marble_api_client/responses/unauthorized_spec.rb +13 -0
- data/spec/marble_api_client/responses/unprocessable_entity_spec.rb +49 -0
- data/spec/marble_api_client_spec.rb +16 -0
- data/spec/spec_helper.rb +23 -0
- metadata +223 -0
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
#
|
4
|
+
# Copyright (c) 2019-present, Blue Marble Payroll, LLC
|
5
|
+
#
|
6
|
+
# This source code is licensed under the MIT license found in the
|
7
|
+
# LICENSE file in the root directory of this source tree.
|
8
|
+
#
|
9
|
+
|
10
|
+
module MarbleApiClient
|
11
|
+
module Requests
|
12
|
+
# Index Request Object
|
13
|
+
class Index
|
14
|
+
def initialize(context: {}, record: {}, page: 1, page_size: 25)
|
15
|
+
@context = context
|
16
|
+
@record = record
|
17
|
+
@page = page
|
18
|
+
@page_size = page_size
|
19
|
+
end
|
20
|
+
|
21
|
+
def request_body
|
22
|
+
{
|
23
|
+
context: @context,
|
24
|
+
record: @record,
|
25
|
+
page: @page,
|
26
|
+
page_size: @page_size
|
27
|
+
}.to_json
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
#
|
4
|
+
# Copyright (c) 2019-present, Blue Marble Payroll, LLC
|
5
|
+
#
|
6
|
+
# This source code is licensed under the MIT license found in the
|
7
|
+
# LICENSE file in the root directory of this source tree.
|
8
|
+
#
|
9
|
+
|
10
|
+
module MarbleApiClient
|
11
|
+
module Responses
|
12
|
+
# 400 Response Class
|
13
|
+
class BadRequest < ClientError
|
14
|
+
ERRORS = 'errors'
|
15
|
+
|
16
|
+
def initialize(response)
|
17
|
+
super
|
18
|
+
end
|
19
|
+
|
20
|
+
def errors
|
21
|
+
parsed_body.dig(ERRORS)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
#
|
4
|
+
# Copyright (c) 2019-present, Blue Marble Payroll, LLC
|
5
|
+
#
|
6
|
+
# This source code is licensed under the MIT license found in the
|
7
|
+
# LICENSE file in the root directory of this source tree.
|
8
|
+
#
|
9
|
+
|
10
|
+
module MarbleApiClient
|
11
|
+
module Responses
|
12
|
+
# 400 Range Response Base Class
|
13
|
+
class ClientError
|
14
|
+
include HttpMethods
|
15
|
+
|
16
|
+
def initialize(response)
|
17
|
+
@response = response
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
#
|
4
|
+
# Copyright (c) 2019-present, Blue Marble Payroll, LLC
|
5
|
+
#
|
6
|
+
# This source code is licensed under the MIT license found in the
|
7
|
+
# LICENSE file in the root directory of this source tree.
|
8
|
+
#
|
9
|
+
|
10
|
+
module MarbleApiClient
|
11
|
+
module Responses
|
12
|
+
# 403 Response Class
|
13
|
+
class Forbidden < ClientError
|
14
|
+
STATUS_CODE = 'statusCode'
|
15
|
+
REDIRECT_URL = 'redirectUrl'
|
16
|
+
def initialize(response)
|
17
|
+
super
|
18
|
+
end
|
19
|
+
|
20
|
+
def status_code
|
21
|
+
parsed_body.dig(STATUS_CODE)
|
22
|
+
end
|
23
|
+
|
24
|
+
def redirect_url
|
25
|
+
parsed_body.dig(REDIRECT_URL)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
#
|
4
|
+
# Copyright (c) 2019-present, Blue Marble Payroll, LLC
|
5
|
+
#
|
6
|
+
# This source code is licensed under the MIT license found in the
|
7
|
+
# LICENSE file in the root directory of this source tree.
|
8
|
+
#
|
9
|
+
|
10
|
+
module MarbleApiClient
|
11
|
+
module Responses
|
12
|
+
# Module assumes existance of @response Net::HTTPResponse object
|
13
|
+
module HttpMethods
|
14
|
+
def code
|
15
|
+
@response.code
|
16
|
+
end
|
17
|
+
|
18
|
+
def body
|
19
|
+
@response.body
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def parsed_body
|
25
|
+
@parsed_body ||= JSON.parse(body)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
#
|
4
|
+
# Copyright (c) 2019-present, Blue Marble Payroll, LLC
|
5
|
+
#
|
6
|
+
# This source code is licensed under the MIT license found in the
|
7
|
+
# LICENSE file in the root directory of this source tree.
|
8
|
+
#
|
9
|
+
|
10
|
+
module MarbleApiClient
|
11
|
+
module Responses
|
12
|
+
# 200 Response Index Class
|
13
|
+
class List < Success
|
14
|
+
PAGE = 'page'
|
15
|
+
PAGE_SIZE = 'pageSize'
|
16
|
+
META = 'meta'
|
17
|
+
RECORDS = 'records'
|
18
|
+
SORT_DIRECTION = 'sortDirection'
|
19
|
+
SORT_COLUMN_INDEX = 'sortColumnIndex'
|
20
|
+
TOTAL = 'total'
|
21
|
+
TOTAL_PAGES = 'totalPages'
|
22
|
+
|
23
|
+
def initialize(response)
|
24
|
+
super
|
25
|
+
end
|
26
|
+
|
27
|
+
def page
|
28
|
+
parsed_body.dig(PAGE)
|
29
|
+
end
|
30
|
+
|
31
|
+
def page_size
|
32
|
+
parsed_body.dig(PAGE_SIZE)
|
33
|
+
end
|
34
|
+
|
35
|
+
def meta
|
36
|
+
parsed_body.dig(META)
|
37
|
+
end
|
38
|
+
|
39
|
+
def records
|
40
|
+
parsed_body.dig(RECORDS)
|
41
|
+
end
|
42
|
+
|
43
|
+
def sort_direction
|
44
|
+
parsed_body.dig(SORT_DIRECTION)
|
45
|
+
end
|
46
|
+
|
47
|
+
def sort_column_index
|
48
|
+
parsed_body.dig(SORT_COLUMN_INDEX)
|
49
|
+
end
|
50
|
+
|
51
|
+
def total
|
52
|
+
parsed_body.dig(TOTAL)
|
53
|
+
end
|
54
|
+
|
55
|
+
def total_pages
|
56
|
+
parsed_body.dig(TOTAL_PAGES)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
#
|
4
|
+
# Copyright (c) 2019-present, Blue Marble Payroll, LLC
|
5
|
+
#
|
6
|
+
# This source code is licensed under the MIT license found in the
|
7
|
+
# LICENSE file in the root directory of this source tree.
|
8
|
+
#
|
9
|
+
|
10
|
+
module MarbleApiClient
|
11
|
+
module Responses
|
12
|
+
# 404 Response Class
|
13
|
+
class NotFound < ClientError
|
14
|
+
ERRORS = 'errors'
|
15
|
+
|
16
|
+
def initialize(response)
|
17
|
+
super
|
18
|
+
end
|
19
|
+
|
20
|
+
def errors
|
21
|
+
parsed_body.dig(ERRORS)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
#
|
4
|
+
# Copyright (c) 2019-present, Blue Marble Payroll, LLC
|
5
|
+
#
|
6
|
+
# This source code is licensed under the MIT license found in the
|
7
|
+
# LICENSE file in the root directory of this source tree.
|
8
|
+
#
|
9
|
+
module MarbleApiClient
|
10
|
+
module Responses
|
11
|
+
# 501 Response Class
|
12
|
+
class NotImplemented < ServerError
|
13
|
+
ERRORS = 'errors'
|
14
|
+
|
15
|
+
def initialize(response)
|
16
|
+
super
|
17
|
+
end
|
18
|
+
|
19
|
+
def errors
|
20
|
+
parsed_body.dig(ERRORS)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
#
|
4
|
+
# Copyright (c) 2019-present, Blue Marble Payroll, LLC
|
5
|
+
#
|
6
|
+
# This source code is licensed under the MIT license found in the
|
7
|
+
# LICENSE file in the root directory of this source tree.
|
8
|
+
#
|
9
|
+
|
10
|
+
module MarbleApiClient
|
11
|
+
module Responses
|
12
|
+
# 200 Response Create Class
|
13
|
+
class Record < Success
|
14
|
+
RECORD = 'record'
|
15
|
+
|
16
|
+
def initialize(response)
|
17
|
+
super
|
18
|
+
end
|
19
|
+
|
20
|
+
def record
|
21
|
+
parsed_body.dig(RECORD)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
#
|
4
|
+
# Copyright (c) 2019-present, Blue Marble Payroll, LLC
|
5
|
+
#
|
6
|
+
# This source code is licensed under the MIT license found in the
|
7
|
+
# LICENSE file in the root directory of this source tree.
|
8
|
+
#
|
9
|
+
|
10
|
+
module MarbleApiClient
|
11
|
+
module Responses
|
12
|
+
# 500 Response Base Class
|
13
|
+
class ServerError
|
14
|
+
include HttpMethods
|
15
|
+
|
16
|
+
ERRORS = 'errors'
|
17
|
+
|
18
|
+
def initialize(response)
|
19
|
+
@response = response
|
20
|
+
end
|
21
|
+
|
22
|
+
def errors
|
23
|
+
parsed_body.dig(ERRORS)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
#
|
4
|
+
# Copyright (c) 2019-present, Blue Marble Payroll, LLC
|
5
|
+
#
|
6
|
+
# This source code is licensed under the MIT license found in the
|
7
|
+
# LICENSE file in the root directory of this source tree.
|
8
|
+
#
|
9
|
+
|
10
|
+
module MarbleApiClient
|
11
|
+
module Responses
|
12
|
+
# 200 Response Base Class
|
13
|
+
class Success
|
14
|
+
include HttpMethods
|
15
|
+
|
16
|
+
def initialize(response)
|
17
|
+
@response = response
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
#
|
4
|
+
# Copyright (c) 2019-present, Blue Marble Payroll, LLC
|
5
|
+
#
|
6
|
+
# This source code is licensed under the MIT license found in the
|
7
|
+
# LICENSE file in the root directory of this source tree.
|
8
|
+
#
|
9
|
+
|
10
|
+
module MarbleApiClient
|
11
|
+
module Responses
|
12
|
+
# 401 Response Class
|
13
|
+
class Unauthorized < ClientError
|
14
|
+
def initialize(response)
|
15
|
+
super
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
#
|
4
|
+
# Copyright (c) 2019-present, Blue Marble Payroll, LLC
|
5
|
+
#
|
6
|
+
# This source code is licensed under the MIT license found in the
|
7
|
+
# LICENSE file in the root directory of this source tree.
|
8
|
+
#
|
9
|
+
|
10
|
+
module MarbleApiClient
|
11
|
+
module Responses
|
12
|
+
# 422 Response Object
|
13
|
+
class UnprocessableEntity < ClientError
|
14
|
+
ERRORS = 'errors'
|
15
|
+
ERROR_PROPERTIES = 'errorProperties'
|
16
|
+
WARNINGS = 'warnings'
|
17
|
+
WARNING_PROPERTIES = 'warningProperties'
|
18
|
+
|
19
|
+
def initialize(response)
|
20
|
+
super
|
21
|
+
end
|
22
|
+
|
23
|
+
def errors
|
24
|
+
parsed_body.dig(ERRORS)
|
25
|
+
end
|
26
|
+
|
27
|
+
def error_properties
|
28
|
+
parsed_body.dig(ERROR_PROPERTIES)
|
29
|
+
end
|
30
|
+
|
31
|
+
def warnings
|
32
|
+
parsed_body.dig(WARNINGS)
|
33
|
+
end
|
34
|
+
|
35
|
+
def warning_properties
|
36
|
+
parsed_body.dig(WARNING_PROPERTIES)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,92 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'responses/http_methods'
|
4
|
+
|
5
|
+
require_relative 'responses/success'
|
6
|
+
require_relative 'responses/client_error'
|
7
|
+
require_relative 'responses/server_error'
|
8
|
+
|
9
|
+
require_relative 'responses/bad_request'
|
10
|
+
require_relative 'responses/forbidden'
|
11
|
+
require_relative 'responses/list'
|
12
|
+
require_relative 'responses/not_found'
|
13
|
+
require_relative 'responses/not_implemented'
|
14
|
+
require_relative 'responses/record'
|
15
|
+
require_relative 'responses/unauthorized'
|
16
|
+
require_relative 'responses/unprocessable_entity'
|
17
|
+
|
18
|
+
module MarbleApiClient
|
19
|
+
# Module for all response objects
|
20
|
+
module Responses
|
21
|
+
INDEX_ACTION = 'index'
|
22
|
+
CREATE_ACTION = 'create'
|
23
|
+
|
24
|
+
SUCCESS_RESPONSE_CODE = '200'
|
25
|
+
BAD_REQUEST_RESPONSE_CODE = '400'
|
26
|
+
UNAUTHORIZED_RESPONSE_CODE = '401'
|
27
|
+
FORBIDDEN_RESPONSE_CODE = '403'
|
28
|
+
NOT_FOUND_RESPONSE_CODE = '404'
|
29
|
+
UNPROCESSABLE_ENTITY_RESPONSE_CODE = '422'
|
30
|
+
SERVER_ERROR_RESPONSE_CODE = '500'
|
31
|
+
NOT_IMPLEMENTED_RESPONSE_CODE = '501'
|
32
|
+
|
33
|
+
RESPONSES = [
|
34
|
+
{
|
35
|
+
code: SUCCESS_RESPONSE_CODE,
|
36
|
+
action: INDEX_ACTION,
|
37
|
+
class_constant: List
|
38
|
+
},
|
39
|
+
{
|
40
|
+
code: SUCCESS_RESPONSE_CODE,
|
41
|
+
action: CREATE_ACTION,
|
42
|
+
class_constant: Record
|
43
|
+
},
|
44
|
+
{
|
45
|
+
code: BAD_REQUEST_RESPONSE_CODE,
|
46
|
+
class_constant: BadRequest
|
47
|
+
},
|
48
|
+
{
|
49
|
+
code: UNAUTHORIZED_RESPONSE_CODE,
|
50
|
+
class_constant: Unauthorized
|
51
|
+
},
|
52
|
+
{
|
53
|
+
code: FORBIDDEN_RESPONSE_CODE,
|
54
|
+
class_constant: Forbidden
|
55
|
+
},
|
56
|
+
{
|
57
|
+
code: NOT_FOUND_RESPONSE_CODE,
|
58
|
+
class_constant: NotFound
|
59
|
+
},
|
60
|
+
{
|
61
|
+
code: UNPROCESSABLE_ENTITY_RESPONSE_CODE,
|
62
|
+
class_constant: UnprocessableEntity
|
63
|
+
},
|
64
|
+
{
|
65
|
+
code: SERVER_ERROR_RESPONSE_CODE,
|
66
|
+
class_constant: ServerError
|
67
|
+
},
|
68
|
+
{
|
69
|
+
code: NOT_IMPLEMENTED_RESPONSE_CODE,
|
70
|
+
class_constant: NotImplemented
|
71
|
+
}
|
72
|
+
].freeze
|
73
|
+
|
74
|
+
class << self
|
75
|
+
def get_response_object(response, action)
|
76
|
+
raise ArgumentError, 'HTTPResponse required' unless response.is_a?(Net::HTTPResponse)
|
77
|
+
|
78
|
+
response_object = find_object(response, action)
|
79
|
+
|
80
|
+
raise ArgumentError, "Unexpecred HTTResponse: #{response.code}" unless response_object
|
81
|
+
|
82
|
+
response_object[:class_constant].new(response)
|
83
|
+
end
|
84
|
+
|
85
|
+
def find_object(response, action)
|
86
|
+
RESPONSES.find do |r|
|
87
|
+
r[:code] == response.code && (r[:action] ? r[:action] == action : true)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|