my_target_api 2.0.2 → 2.0.7
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/Gemfile.lock +2 -2
- data/README.md +2 -2
- data/lib/my_target_api.rb +15 -10
- data/lib/my_target_api/add_access_token_to_request_decorator.rb +43 -0
- data/lib/my_target_api/log_request_parameters_decorator.rb +64 -23
- data/lib/my_target_api/net_client.rb +4 -4
- data/lib/my_target_api/nil_logger.rb +10 -0
- data/lib/my_target_api/prepare_post_params_decorator.rb +56 -0
- data/lib/my_target_api/request.rb +27 -63
- data/lib/my_target_api/request_error.rb +5 -7
- data/lib/my_target_api/version.rb +1 -1
- data/my_target_api.gemspec +1 -1
- data/spec/net_client_spec.rb +7 -0
- data/spec/request_spec.rb +23 -16
- metadata +11 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f8a2de4571899340aa8c1e6e6c099c0a6b75e7e6
|
4
|
+
data.tar.gz: f1453fac44237e86a82ff18f54d9bc1a1ca4f706
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 43618ed32e7313aa0c300391d619e448ed56102429766559f91ed0a4056587b35147fc773d4a293854a521c9f61d2fd9a0b9fbef7f41affff3b3e8b0075aa398
|
7
|
+
data.tar.gz: 9be00939ad2371270df68d053ac5d586a2dab12a09f4e1043e6c24377a4c1562bed461e1daabdfa4b4f3802e12a12f0fa0a4bc9439ff002d19c391585844bb56
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
my_target_api (2.0.
|
4
|
+
my_target_api (2.0.7)
|
5
5
|
json (~> 2.0, >= 2.0.0)
|
6
6
|
rest-client (~> 2.0, >= 2.0.0)
|
7
7
|
|
@@ -75,7 +75,7 @@ PLATFORMS
|
|
75
75
|
ruby
|
76
76
|
|
77
77
|
DEPENDENCIES
|
78
|
-
bundler (~> 2.1.4)
|
78
|
+
bundler (~> 2.1, >= 2.1.4)
|
79
79
|
my_target_api!
|
80
80
|
rake (~> 12.3.0, >= 12.3.0)
|
81
81
|
rspec (~> 3.7.0, >= 3.7.0)
|
data/README.md
CHANGED
@@ -7,7 +7,7 @@
|
|
7
7
|
Add this line to your application's Gemfile:
|
8
8
|
|
9
9
|
```
|
10
|
-
gem 'my_target_api', '~> 2.0.
|
10
|
+
gem 'my_target_api', '~> 2.0.5'
|
11
11
|
```
|
12
12
|
|
13
13
|
Or install from command line:
|
@@ -99,7 +99,7 @@ def read_active_campaigns
|
|
99
99
|
|
100
100
|
rescue MyTargetApi::RequestError => e
|
101
101
|
|
102
|
-
puts e.message, e.params, e.response, e.backtrace
|
102
|
+
puts e.message, e.method, e.url, e.params, e.response, e.backtrace
|
103
103
|
# You can access the original exception
|
104
104
|
puts e.original_exception&.message, e.original_exception&.backtrace
|
105
105
|
|
data/lib/my_target_api.rb
CHANGED
@@ -10,6 +10,8 @@ class MyTargetApi
|
|
10
10
|
autoload :RequestError, 'my_target_api/request_error'
|
11
11
|
autoload :NetClient, 'my_target_api/net_client'
|
12
12
|
autoload :LogRequestParametersDecorator, 'my_target_api/log_request_parameters_decorator'
|
13
|
+
autoload :AddAccessTokenToRequestDecorator, 'my_target_api/add_access_token_to_request_decorator'
|
14
|
+
autoload :PreparePostParamsDecorator, 'my_target_api/prepare_post_params_decorator'
|
13
15
|
|
14
16
|
def initialize(access_token, options = {})
|
15
17
|
@access_token = access_token
|
@@ -24,19 +26,19 @@ class MyTargetApi
|
|
24
26
|
end
|
25
27
|
|
26
28
|
def get_request(url, params)
|
27
|
-
request_object.get(url, params)
|
29
|
+
request_object.get(url, params, headers)
|
28
30
|
end
|
29
31
|
|
30
32
|
def post_request(url, params)
|
31
|
-
request_object.post(url, params)
|
33
|
+
request_object.post(url, params, headers)
|
32
34
|
end
|
33
35
|
|
34
36
|
def delete_request(url, params)
|
35
|
-
request_object.delete(url, params)
|
37
|
+
request_object.delete(url, params, headers)
|
36
38
|
end
|
37
39
|
|
38
40
|
def upload_request(url, content, params)
|
39
|
-
request_object.upload(url, content, params)
|
41
|
+
request_object.upload(url, content, params, headers)
|
40
42
|
end
|
41
43
|
|
42
44
|
private
|
@@ -45,13 +47,16 @@ class MyTargetApi
|
|
45
47
|
|
46
48
|
def request_object
|
47
49
|
@_request_object ||= begin
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
LogRequestParametersDecorator.new(Request.new(options), options)
|
50
|
+
logger = options[:logger]
|
51
|
+
request = Request.new(logger: logger)
|
52
|
+
request = LogRequestParametersDecorator.new(request, { logger: logger }.compact)
|
53
|
+
request = AddAccessTokenToRequestDecorator.new(request, { access_token: access_token })
|
54
|
+
PreparePostParamsDecorator.new(request)
|
54
55
|
end
|
55
56
|
end
|
56
57
|
|
58
|
+
def headers
|
59
|
+
options[:headers] || {}
|
60
|
+
end
|
61
|
+
|
57
62
|
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class MyTargetApi
|
4
|
+
# Add Authorization header
|
5
|
+
class AddAccessTokenToRequestDecorator
|
6
|
+
|
7
|
+
CONTENT_OUTPUT_LIMIT = 1000
|
8
|
+
|
9
|
+
def initialize(origin, access_token: nil)
|
10
|
+
@origin = origin
|
11
|
+
@access_token = access_token
|
12
|
+
end
|
13
|
+
|
14
|
+
def get(url, params = {}, headers = {})
|
15
|
+
origin.get(url, params, add_authorization_header(headers))
|
16
|
+
end
|
17
|
+
|
18
|
+
def post(url, params = {}, headers = {})
|
19
|
+
origin.post(url, params, add_authorization_header(headers))
|
20
|
+
end
|
21
|
+
|
22
|
+
def delete(url, params = {}, headers = {})
|
23
|
+
origin.delete(url, params, add_authorization_header(headers))
|
24
|
+
end
|
25
|
+
|
26
|
+
def upload(url, content, params = {}, headers = {})
|
27
|
+
origin.upload(url, content, params, add_authorization_header(headers))
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
attr_reader :origin, :access_token
|
33
|
+
|
34
|
+
def add_authorization_header(headers)
|
35
|
+
if access_token
|
36
|
+
{ 'Authorization' => "Bearer #{access_token}" }.merge(headers)
|
37
|
+
else
|
38
|
+
headers
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
end
|
@@ -1,54 +1,95 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'json'
|
4
|
-
require_relative './
|
5
|
-
require_relative './net_client'
|
4
|
+
require_relative './nil_logger'
|
6
5
|
|
7
6
|
class MyTargetApi
|
8
7
|
# Requests
|
9
8
|
class LogRequestParametersDecorator
|
10
9
|
|
11
|
-
|
10
|
+
CONTENT_OUTPUT_LIMIT = 1000
|
11
|
+
|
12
|
+
def initialize(origin, logger: NilLogger)
|
12
13
|
@origin = origin
|
13
|
-
@
|
14
|
+
@logger = logger
|
14
15
|
end
|
15
16
|
|
16
|
-
def get(url, params = {})
|
17
|
-
|
17
|
+
def get(url, params = {}, headers = {})
|
18
|
+
log_request(method: 'GET', url: url, params: params, headers: headers)
|
18
19
|
|
19
|
-
origin.get(url, params)
|
20
|
+
origin.get(url, params, headers)
|
20
21
|
end
|
21
22
|
|
22
|
-
def post(url, params = {})
|
23
|
-
|
23
|
+
def post(url, params = {}, headers = {})
|
24
|
+
log_request(method: 'POST', url: url, params: params, headers: headers)
|
24
25
|
|
25
|
-
origin.post(url, params)
|
26
|
+
origin.post(url, params, headers)
|
26
27
|
end
|
27
28
|
|
28
|
-
def delete(url, params = {})
|
29
|
-
|
29
|
+
def delete(url, params = {}, headers = {})
|
30
|
+
log_request(method: 'DELETE', url: url, params: params, headers: headers)
|
30
31
|
|
31
|
-
origin.delete(url, params)
|
32
|
+
origin.delete(url, params, headers)
|
32
33
|
end
|
33
34
|
|
34
|
-
def upload(url, content, params = {})
|
35
|
-
|
35
|
+
def upload(url, content, params = {}, headers = {})
|
36
|
+
log_request(method: 'POST', url: url, params: params, headers: headers, content: content)
|
36
37
|
|
37
|
-
origin.upload(url, content, params)
|
38
|
+
origin.upload(url, content, params, headers)
|
38
39
|
end
|
39
40
|
|
40
41
|
private
|
41
42
|
|
42
|
-
attr_reader :origin, :
|
43
|
+
attr_reader :origin, :logger
|
44
|
+
|
45
|
+
def log_request(method:, url:, params:, headers:, content: nil)
|
46
|
+
logger <<
|
47
|
+
"#{inspect_request(method: method, url: url, params: params, headers: headers)}"\
|
48
|
+
"#{inspect_content(content)}"
|
49
|
+
end
|
50
|
+
|
51
|
+
def inspect_request(method:, url:, params:, headers:)
|
52
|
+
<<~LOG
|
53
|
+
#{method} #{url}
|
54
|
+
#{inspect_headers(headers)}
|
55
|
+
#{inspect_params(params)}
|
56
|
+
LOG
|
57
|
+
end
|
58
|
+
|
59
|
+
def inspect_content(content)
|
60
|
+
return '' unless content
|
61
|
+
|
62
|
+
result = "Body content:\n"
|
63
|
+
result +=
|
64
|
+
if content.size > CONTENT_OUTPUT_LIMIT
|
65
|
+
<<~LOG
|
66
|
+
<< first #{CONTENT_OUTPUT_LIMIT} symbols >>
|
67
|
+
#{content[0...CONTENT_OUTPUT_LIMIT]}
|
68
|
+
LOG
|
69
|
+
else
|
70
|
+
content
|
71
|
+
end
|
72
|
+
result
|
73
|
+
end
|
74
|
+
|
75
|
+
def inspect_headers(params)
|
76
|
+
if params.empty?
|
77
|
+
'Headers: No headers'
|
78
|
+
else
|
79
|
+
"Headers:\n#{params.map { |name, value| "#{name}: #{value}" }.join("\n")}"
|
80
|
+
end
|
81
|
+
end
|
43
82
|
|
44
|
-
def
|
45
|
-
|
46
|
-
|
47
|
-
|
83
|
+
def inspect_params(params)
|
84
|
+
if params.empty?
|
85
|
+
'Params: No params'
|
86
|
+
else
|
87
|
+
"Params:\n#{params.map { |name, value| "#{name}: #{inspect_param(value)}" }.join("\n")}"
|
88
|
+
end
|
48
89
|
end
|
49
90
|
|
50
|
-
def
|
51
|
-
|
91
|
+
def inspect_param(value)
|
92
|
+
value.is_a?(String) ? value : value.inspect
|
52
93
|
end
|
53
94
|
|
54
95
|
end
|
@@ -37,19 +37,19 @@ class MyTargetApi
|
|
37
37
|
|
38
38
|
def get(*args)
|
39
39
|
RestClient.get(*args) { |response, &block| process_response(response, &block) }
|
40
|
-
rescue
|
40
|
+
rescue RestClient::Exception => e
|
41
41
|
raise(Exception.new(e, e.message).tap { e.set_backtrace(caller) })
|
42
42
|
end
|
43
43
|
|
44
44
|
def post(*args)
|
45
45
|
RestClient.post(*args) { |response, &block| process_response(response, &block) }
|
46
|
-
rescue
|
46
|
+
rescue RestClient::Exception => e
|
47
47
|
raise(Exception.new(e, e.message).tap { e.set_backtrace(caller) })
|
48
48
|
end
|
49
49
|
|
50
50
|
def delete(*args)
|
51
51
|
RestClient.delete(*args) { |response, &block| process_response(response, &block) }
|
52
|
-
rescue
|
52
|
+
rescue RestClient::Exception => e
|
53
53
|
raise(Exception.new(e, e.message).tap { e.set_backtrace(caller) })
|
54
54
|
end
|
55
55
|
|
@@ -64,7 +64,7 @@ class MyTargetApi
|
|
64
64
|
response.return!(&block)
|
65
65
|
end
|
66
66
|
Response.new(result.body, result.code, format_headers(result.headers))
|
67
|
-
rescue
|
67
|
+
rescue RestClient::Exception => e
|
68
68
|
raise(Exception.new(e, e.message).tap { e.set_backtrace(caller) })
|
69
69
|
end
|
70
70
|
|
@@ -0,0 +1,56 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'json'
|
4
|
+
|
5
|
+
class MyTargetApi
|
6
|
+
# Prepare post params
|
7
|
+
class PreparePostParamsDecorator
|
8
|
+
|
9
|
+
def initialize(origin)
|
10
|
+
@origin = origin
|
11
|
+
end
|
12
|
+
|
13
|
+
def get(url, params = {}, headers = {})
|
14
|
+
origin.get(url, params, headers)
|
15
|
+
end
|
16
|
+
|
17
|
+
def post(url, params = {}, headers = {})
|
18
|
+
prepared = body_parameters(params)
|
19
|
+
|
20
|
+
if prepared.is_a?(String)
|
21
|
+
origin.upload(url, prepared, {}, { 'Content-Type' => 'application/json' }.merge(headers))
|
22
|
+
else
|
23
|
+
origin.post(url, prepared, headers)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def delete(url, params = {}, headers = {})
|
28
|
+
origin.delete(url, params, headers)
|
29
|
+
end
|
30
|
+
|
31
|
+
def upload(url, content, params = {}, headers = {})
|
32
|
+
origin.upload(url, content, params, headers)
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
attr_reader :origin
|
38
|
+
|
39
|
+
def body_parameters(params)
|
40
|
+
result_params = params.dup
|
41
|
+
|
42
|
+
if result_params.values.any? { |param| param.is_a? IO } || result_params[:grant_type]
|
43
|
+
individual_body_parameters(result_params)
|
44
|
+
else
|
45
|
+
result_params.to_json
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def individual_body_parameters(params)
|
50
|
+
params.transform_values do |value|
|
51
|
+
value.is_a?(Array) || value.is_a?(Hash) ? value.to_json : value
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
end
|
@@ -3,45 +3,48 @@
|
|
3
3
|
require 'json'
|
4
4
|
require_relative './response_formatter'
|
5
5
|
require_relative './net_client'
|
6
|
+
require_relative './nil_logger'
|
6
7
|
|
7
8
|
class MyTargetApi
|
8
9
|
# Requests
|
9
10
|
class Request
|
10
11
|
|
11
|
-
def initialize(
|
12
|
-
@
|
12
|
+
def initialize(logger: NilLogger)
|
13
|
+
@logger = logger
|
13
14
|
end
|
14
15
|
|
15
|
-
def get(url, params = {})
|
16
|
-
response = with_exception_handling(params) do
|
16
|
+
def get(url, params = {}, headers = {})
|
17
|
+
response = with_exception_handling('GET', url, params) do
|
17
18
|
NetClient.get(url, headers.merge(query(params)))
|
18
19
|
end
|
19
20
|
|
20
21
|
process_response(response)
|
21
22
|
end
|
22
23
|
|
23
|
-
def post(url, params = {})
|
24
|
-
response = with_exception_handling(params) do
|
25
|
-
NetClient.post(url,
|
24
|
+
def post(url, params = {}, headers = {})
|
25
|
+
response = with_exception_handling('POST', url, params) do
|
26
|
+
NetClient.post(url, params, headers)
|
26
27
|
end
|
27
28
|
|
28
29
|
process_response(response)
|
29
30
|
end
|
30
31
|
|
31
|
-
def delete(url, params = {})
|
32
|
-
response = with_exception_handling(params) do
|
32
|
+
def delete(url, params = {}, headers = {})
|
33
|
+
response = with_exception_handling('DELETE', url, params) do
|
33
34
|
NetClient.delete(url, headers.merge(query(params)))
|
34
35
|
end
|
35
36
|
|
36
37
|
process_response(response)
|
37
38
|
end
|
38
39
|
|
39
|
-
def upload(url, content, params = {})
|
40
|
-
response = with_exception_handling(params) do
|
40
|
+
def upload(url, content, params = {}, headers = {})
|
41
|
+
response = with_exception_handling('POST', 'url', params) do
|
41
42
|
NetClient.post(
|
42
43
|
url,
|
43
44
|
content,
|
44
|
-
|
45
|
+
{ 'Content-Type' => 'application/octet-stream' }
|
46
|
+
.merge(headers)
|
47
|
+
.merge(query(params))
|
45
48
|
)
|
46
49
|
end
|
47
50
|
|
@@ -50,82 +53,43 @@ class MyTargetApi
|
|
50
53
|
|
51
54
|
private
|
52
55
|
|
53
|
-
attr_reader :
|
54
|
-
|
55
|
-
def body_parameters(params)
|
56
|
-
result_params = params.dup
|
57
|
-
|
58
|
-
if result_params.values.any? { |param| param.is_a? IO } || result_params[:grant_type]
|
59
|
-
individual_body_parameters(result_params)
|
60
|
-
else
|
61
|
-
result_params.to_json
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
def individual_body_parameters(params)
|
66
|
-
params.transform_values do |value|
|
67
|
-
value.is_a?(Array) || value.is_a?(Hash) ? value.to_json : value
|
68
|
-
end
|
69
|
-
end
|
56
|
+
attr_reader :logger
|
70
57
|
|
71
58
|
def query(params)
|
72
59
|
{ params: params }
|
73
60
|
end
|
74
61
|
|
75
|
-
def headers
|
76
|
-
if access_token
|
77
|
-
optional_headers.merge('Authorization' => "Bearer #{access_token}")
|
78
|
-
else
|
79
|
-
optional_headers
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
62
|
def process_response(response)
|
84
63
|
JSON.parse(response.body)
|
85
64
|
rescue JSON::ParserError
|
86
65
|
response.body
|
87
66
|
end
|
88
67
|
|
89
|
-
def with_exception_handling(params)
|
68
|
+
def with_exception_handling(method, url, params)
|
90
69
|
response = yield
|
91
70
|
log_response(response)
|
92
|
-
|
71
|
+
if response.code >= 400
|
72
|
+
raise_with_params(method: method, url: url, params: params, response: response)
|
73
|
+
end
|
93
74
|
response
|
94
75
|
rescue NetClient::Exception => e
|
95
76
|
original_exception = e.original_exception
|
96
|
-
|
97
|
-
raise_with_params(
|
77
|
+
logger << "#{original_exception.class.name} #{original_exception.message}"
|
78
|
+
raise_with_params(method: method, url: url, params: params,
|
79
|
+
original_exception: original_exception)
|
98
80
|
end
|
99
81
|
|
100
82
|
def log_response(response)
|
101
|
-
|
102
|
-
end
|
103
|
-
|
104
|
-
def headers_to_string(headers)
|
105
|
-
headers.map do |name, value|
|
106
|
-
"#{name}: #{value}"
|
107
|
-
end.join("\n")
|
83
|
+
logger << ResponseFormatter.new(response).format
|
108
84
|
end
|
109
85
|
|
110
|
-
def raise_with_params(params:, response: nil, original_exception: nil)
|
111
|
-
result = MyTargetApi::RequestError.new(
|
112
|
-
response: response,
|
86
|
+
def raise_with_params(method:, url:, params:, response: nil, original_exception: nil)
|
87
|
+
result = MyTargetApi::RequestError.new(method: method, url: url,
|
88
|
+
params: params, response: response,
|
113
89
|
original_exception: original_exception)
|
114
90
|
result.set_backtrace(caller)
|
115
91
|
raise result
|
116
92
|
end
|
117
93
|
|
118
|
-
def log(message)
|
119
|
-
options[:logger] << message if options[:logger]
|
120
|
-
end
|
121
|
-
|
122
|
-
def access_token
|
123
|
-
options[:access_token]
|
124
|
-
end
|
125
|
-
|
126
|
-
def optional_headers
|
127
|
-
options[:headers] || {}
|
128
|
-
end
|
129
|
-
|
130
94
|
end
|
131
95
|
end
|
@@ -4,18 +4,16 @@ class MyTargetApi
|
|
4
4
|
# Error for request
|
5
5
|
class RequestError < StandardError
|
6
6
|
|
7
|
-
attr_reader :params, :original_exception, :response
|
7
|
+
attr_reader :method, :url, :params, :original_exception, :response
|
8
8
|
|
9
|
-
def initialize(params:, original_exception: nil, response: nil)
|
9
|
+
def initialize(method:, url:, params:, original_exception: nil, response: nil)
|
10
|
+
@method = method
|
11
|
+
@url = url
|
10
12
|
@params = params
|
11
13
|
@response = response
|
12
14
|
@original_exception = original_exception
|
13
15
|
|
14
|
-
|
15
|
-
"#{(response ? "#{response.code}: #{response.body}. " : '')}"\
|
16
|
-
'Inspect #params, #response and #original_exception for more details'
|
17
|
-
|
18
|
-
super(message)
|
16
|
+
super(response ? "#{response.code}: #{response.body}" : 'No response')
|
19
17
|
end
|
20
18
|
|
21
19
|
end
|
data/my_target_api.gemspec
CHANGED
@@ -27,7 +27,7 @@ Gem::Specification.new do |spec|
|
|
27
27
|
spec.add_runtime_dependency 'json', '~> 2.0', '>= 2.0.0'
|
28
28
|
spec.add_runtime_dependency 'rest-client', '~> 2.0', '>= 2.0.0'
|
29
29
|
|
30
|
-
spec.add_development_dependency 'bundler', '~> 2.1.4'
|
30
|
+
spec.add_development_dependency 'bundler', '~> 2.1', '>= 2.1.4'
|
31
31
|
spec.add_development_dependency 'rake', '~> 12.3.0', '>= 12.3.0'
|
32
32
|
spec.add_development_dependency 'rspec', '~> 3.7.0', '>= 3.7.0'
|
33
33
|
spec.add_development_dependency 'rubocop', '~> 0.89.1'
|
data/spec/net_client_spec.rb
CHANGED
@@ -47,6 +47,13 @@ describe MyTargetApi::NetClient do
|
|
47
47
|
).body).to eq('{}')
|
48
48
|
end
|
49
49
|
|
50
|
+
it "doesn't catch not RestClient exceptions" do
|
51
|
+
test_exception = Class.new(StandardError)
|
52
|
+
allow(RestClient).to receive(:get).and_raise(test_exception)
|
53
|
+
|
54
|
+
expect { MyTargetApi::NetClient.get('https://api.com') }.to raise_error(test_exception)
|
55
|
+
end
|
56
|
+
|
50
57
|
it ':content_type' do
|
51
58
|
stub_request(:get, 'https://api.com')
|
52
59
|
.with(headers: { 'Content-Type' => 'application/octet-stream' })
|
data/spec/request_spec.rb
CHANGED
@@ -21,7 +21,7 @@ describe MyTargetApi::Request do
|
|
21
21
|
result = subject.post('https://target.my.com/api/v1/campaigns.json')
|
22
22
|
|
23
23
|
expect(MyTargetApi::NetClient).to(
|
24
|
-
have_received(:post).with('https://target.my.com/api/v1/campaigns.json',
|
24
|
+
have_received(:post).with('https://target.my.com/api/v1/campaigns.json', {}, {})
|
25
25
|
)
|
26
26
|
|
27
27
|
expect(result).to eq('name' => 'Campaign 1')
|
@@ -84,9 +84,7 @@ describe MyTargetApi::Request do
|
|
84
84
|
.to_return(body: 'Unknown resource', status: 404)
|
85
85
|
|
86
86
|
expect { subject.get('https://target.my.com/api/v1/wrong_path.json') }
|
87
|
-
.to raise_error(MyTargetApi::RequestError,
|
88
|
-
'404: Unknown resource. Inspect #params, #response and #original_exception'\
|
89
|
-
' for more details')
|
87
|
+
.to raise_error(MyTargetApi::RequestError, '404: Unknown resource')
|
90
88
|
end
|
91
89
|
|
92
90
|
it 'sets authorization header' do
|
@@ -96,7 +94,10 @@ describe MyTargetApi::Request do
|
|
96
94
|
headers: {}))
|
97
95
|
)
|
98
96
|
|
99
|
-
request = MyTargetApi::
|
97
|
+
request = MyTargetApi::AddAccessTokenToRequestDecorator.new(
|
98
|
+
MyTargetApi::Request.new,
|
99
|
+
access_token: 'my_target_token'
|
100
|
+
)
|
100
101
|
request.get('https://target.my.com/api/v1/some_path.json')
|
101
102
|
|
102
103
|
expect(MyTargetApi::NetClient).to(
|
@@ -117,7 +118,7 @@ describe MyTargetApi::Request do
|
|
117
118
|
logger = double('Logger double', '<<': nil)
|
118
119
|
options = { logger: logger }
|
119
120
|
request = MyTargetApi::LogRequestParametersDecorator.new(
|
120
|
-
MyTargetApi::Request.new(options),
|
121
|
+
MyTargetApi::Request.new(options), logger: logger
|
121
122
|
)
|
122
123
|
allow(MyTargetApi::NetClient).to(
|
123
124
|
receive(:get).and_return(double(code: 200,
|
@@ -127,9 +128,14 @@ describe MyTargetApi::Request do
|
|
127
128
|
|
128
129
|
request.get('https://target.my.com/api/v1/request.json')
|
129
130
|
|
130
|
-
expect(logger).to(
|
131
|
-
|
132
|
-
|
131
|
+
expect(logger).to(
|
132
|
+
have_received(:<<)
|
133
|
+
.with(<<~LOG)
|
134
|
+
GET https://target.my.com/api/v1/request.json
|
135
|
+
Headers: No headers
|
136
|
+
Params: No params
|
137
|
+
LOG
|
138
|
+
)
|
133
139
|
expect(logger).to(have_received(:<<).with(<<~LOG))
|
134
140
|
HTTP Code: 200
|
135
141
|
HTTP Body:
|
@@ -142,7 +148,7 @@ describe MyTargetApi::Request do
|
|
142
148
|
logger = double('Logger double', '<<': nil)
|
143
149
|
options = { logger: logger }
|
144
150
|
request = MyTargetApi::LogRequestParametersDecorator.new(
|
145
|
-
MyTargetApi::Request.new(options),
|
151
|
+
MyTargetApi::Request.new(options), logger: logger
|
146
152
|
)
|
147
153
|
allow(MyTargetApi::NetClient).to(
|
148
154
|
receive(:get).and_return(
|
@@ -155,13 +161,14 @@ describe MyTargetApi::Request do
|
|
155
161
|
)
|
156
162
|
|
157
163
|
expect { request.get('https://target.my.com/api/v1/request.json') }
|
158
|
-
.to raise_error(MyTargetApi::RequestError,
|
159
|
-
|
160
|
-
|
164
|
+
.to raise_error(MyTargetApi::RequestError, '404: Unknown resource')
|
165
|
+
|
166
|
+
expect(logger).to(have_received(:<<).with(<<~LOG))
|
167
|
+
GET https://target.my.com/api/v1/request.json
|
168
|
+
Headers: No headers
|
169
|
+
Params: No params
|
170
|
+
LOG
|
161
171
|
|
162
|
-
expect(logger).to(have_received(:<<).with("method: Request#get\n"\
|
163
|
-
"url: https://target.my.com/api/v1/request.json\n"\
|
164
|
-
'params: {}'))
|
165
172
|
expect(logger).to(have_received(:<<).with(<<~LOG))
|
166
173
|
HTTP Code: 404
|
167
174
|
HTTP Body:
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: my_target_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- OneRetarget.com
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-10-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|
@@ -55,6 +55,9 @@ dependencies:
|
|
55
55
|
requirement: !ruby/object:Gem::Requirement
|
56
56
|
requirements:
|
57
57
|
- - "~>"
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '2.1'
|
60
|
+
- - ">="
|
58
61
|
- !ruby/object:Gem::Version
|
59
62
|
version: 2.1.4
|
60
63
|
type: :development
|
@@ -62,6 +65,9 @@ dependencies:
|
|
62
65
|
version_requirements: !ruby/object:Gem::Requirement
|
63
66
|
requirements:
|
64
67
|
- - "~>"
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '2.1'
|
70
|
+
- - ">="
|
65
71
|
- !ruby/object:Gem::Version
|
66
72
|
version: 2.1.4
|
67
73
|
- !ruby/object:Gem::Dependency
|
@@ -153,8 +159,11 @@ files:
|
|
153
159
|
- LICENSE.txt
|
154
160
|
- README.md
|
155
161
|
- lib/my_target_api.rb
|
162
|
+
- lib/my_target_api/add_access_token_to_request_decorator.rb
|
156
163
|
- lib/my_target_api/log_request_parameters_decorator.rb
|
157
164
|
- lib/my_target_api/net_client.rb
|
165
|
+
- lib/my_target_api/nil_logger.rb
|
166
|
+
- lib/my_target_api/prepare_post_params_decorator.rb
|
158
167
|
- lib/my_target_api/request.rb
|
159
168
|
- lib/my_target_api/request_error.rb
|
160
169
|
- lib/my_target_api/resource.rb
|