my_target_api 2.0.2 → 2.0.7
Sign up to get free protection for your applications and to get access to all the features.
- 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
|