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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4254318b97e9d1f594438694a31a6511ea9461fc
4
- data.tar.gz: 69e005cf224551553abdc2c047d84b278a3f3e70
3
+ metadata.gz: f8a2de4571899340aa8c1e6e6c099c0a6b75e7e6
4
+ data.tar.gz: f1453fac44237e86a82ff18f54d9bc1a1ca4f706
5
5
  SHA512:
6
- metadata.gz: '08db4857b6fb49cacdc2050356b43aa94b3998fb2a8f0d31fc133e12554b07d190e0a370363b9b8bc5dfa88a53717c91b449b0ba5de5d1254dab65bfd3e93c38'
7
- data.tar.gz: '08966200b98a7df2bfc4fee600650072ee52343e5ff3f83b987a450cd915901ee88b2273aea35e67b6a40f66e50020a75ee68ac35e66b713f14207d5aa12fe3b'
6
+ metadata.gz: 43618ed32e7313aa0c300391d619e448ed56102429766559f91ed0a4056587b35147fc773d4a293854a521c9f61d2fd9a0b9fbef7f41affff3b3e8b0075aa398
7
+ data.tar.gz: 9be00939ad2371270df68d053ac5d586a2dab12a09f4e1043e6c24377a4c1562bed461e1daabdfa4b4f3802e12a12f0fa0a4bc9439ff002d19c391585844bb56
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- my_target_api (2.0.1)
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.1'
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
 
@@ -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
- options = {
49
- logger: self.options[:logger],
50
- access_token: access_token,
51
- headers: self.options[:headers]
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 './response_formatter'
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
- def initialize(origin, options = {})
10
+ CONTENT_OUTPUT_LIMIT = 1000
11
+
12
+ def initialize(origin, logger: NilLogger)
12
13
  @origin = origin
13
- @options = options
14
+ @logger = logger
14
15
  end
15
16
 
16
- def get(url, params = {})
17
- log_hash(method: 'Request#get', url: url, params: params)
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
- log_hash(method: 'Request#post', url: url, params: params)
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
- log_hash(method: 'Request#delete', url: url, params: params)
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
- log_hash(method: 'Request#upload', url: url, params: params, content: 'no logging')
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, :options
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 log_hash(hash)
45
- log(hash.map do |key, value|
46
- "#{key}: #{value.is_a?(String) ? value : value.inspect}"
47
- end.join("\n"))
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 log(message)
51
- options[:logger] << message if options[:logger]
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 StandardError => e
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 StandardError => e
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 StandardError => e
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 StandardError => e
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,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ class MyTargetApi
4
+ # NULL object
5
+ class NilLogger
6
+
7
+ def self.<<(_message); end
8
+
9
+ end
10
+ end
@@ -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(options = {})
12
- @options = options
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, body_parameters(params), headers)
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
- headers.merge(query(params)).merge('Content-Type' => 'application/octet-stream')
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 :options
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
- raise_with_params(params: params, response: response) if response.code >= 400
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
- log("#{original_exception.class.name} #{original_exception.message}")
97
- raise_with_params(params: params, original_exception: original_exception)
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
- log(ResponseFormatter.new(response).format)
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(params: params,
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
- message =
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
@@ -2,6 +2,6 @@
2
2
 
3
3
  class MyTargetApi
4
4
 
5
- VERSION = '2.0.2'
5
+ VERSION = '2.0.7'
6
6
 
7
7
  end
@@ -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'
@@ -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' })
@@ -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::Request.new(access_token: 'my_target_token')
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), 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(have_received(:<<).with("method: Request#get\n"\
131
- "url: https://target.my.com/api/v1/request.json\n"\
132
- 'params: {}'))
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), 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
- '404: Unknown resource. Inspect #params, #response and #original_exception'\
160
- ' for more details')
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.2
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-09-01 00:00:00.000000000 Z
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