quiz_api_client 4.13.4 → 4.14.1

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: f9c4a3c5a1a9c2363d383f497b8aaccfc1ba1fbde99e6481e911b46f69ff6972
4
- data.tar.gz: 4edb45c0ced2efcb9f32c3d7ec1b0376f891dc8d5b9ec336ef61b5a992e30cc5
3
+ metadata.gz: c7df5e01555ce19ad84445f0287c640e0c2eb9873af3c88a6ad1432162ce228a
4
+ data.tar.gz: 04d758bf5007880147d0e4316b6d151821b904b0a84db0401b7b53b426d6791f
5
5
  SHA512:
6
- metadata.gz: 637eb311b402f08c22e4109be5e092366b08ae0fb9d5db049b8e186ad92bb965bb0ef0bff73e97b88096976e2d28148eb94d107d9c8ca9e5cdf1aed17f9bb3c5
7
- data.tar.gz: 4bc454f39df1137b2f289bfd7e99217c0c2eff58c43981b26be2bf3802f2d3a1e03ebd0da015ba48a4b8f6858e3a52f450c3b28d8ef255df1686c5965fc0fbae
6
+ metadata.gz: f4e95a71d9e8853ae5a3ef251b6df743ee36ce1838be1bcdf7ab6675c6e85a800a5cb4a48a7f394b6094d6b9747ea90c5a1ff2942059991bd6a5f69306185043
7
+ data.tar.gz: 72c177b35fc78f784c0b26fa49d90c92bfc305539528b357e104864cf339cd870202c97710df4ca672e8d9505b96217be73039b313a4bec7bd244bffbd6c3c15
@@ -101,7 +101,7 @@ module QuizApiClient
101
101
  rescue HTTParty::Error, Errno::ECONNREFUSED, Net::ReadTimeout => e
102
102
  raise_error(method, url, current_error: e)
103
103
  ensure
104
- record_metrics(method, url, resp, start_time, Time.now)
104
+ record_metrics(method, resp, start_time, Time.now)
105
105
  end
106
106
 
107
107
  def make_paginated_request(method, url, options)
@@ -138,7 +138,8 @@ module QuizApiClient
138
138
  end
139
139
 
140
140
  def next_page_link(response, options)
141
- return if response.headers['link'].blank?
141
+ return if response.headers['link'].nil?
142
+ return if response.headers['link'].empty?
142
143
 
143
144
  links = LinkHeader.parse(response.headers['link']).links
144
145
  next_link = links.find { |link| link['rel'] == 'next' }
@@ -148,7 +149,9 @@ module QuizApiClient
148
149
  def next_page_dynamo(response, url, options)
149
150
  hash_key = response.headers['x-last-evaluated-hash-key']
150
151
  range_key = response.headers['x-last-evaluated-range-key']
151
- return unless hash_key.present? && range_key.present?
152
+
153
+ return if hash_key.nil? || hash_key.empty?
154
+ return if range_key.nil? || range_key.empty?
152
155
 
153
156
  query = (options[:query] || {}).merge(
154
157
  last_evaluated_hash_key: hash_key,
@@ -163,9 +166,9 @@ module QuizApiClient
163
166
  failure.raise_error(method, url, response: response, current_error: current_error)
164
167
  end
165
168
 
166
- def record_metrics(method, url, resp, start_time, end_time)
169
+ def record_metrics(method, resp, start_time, end_time)
167
170
  code = resp&.code || 0
168
- metrics = QuizApiClient::HttpRequest::Metrics.new(config, method, url, code)
171
+ metrics = QuizApiClient::HttpRequest::Metrics.new(config, method, code)
169
172
 
170
173
  metrics.increment
171
174
  metrics.duration(start_time, end_time)
@@ -3,13 +3,12 @@ module QuizApiClient
3
3
  class Metrics
4
4
  extend Forwardable
5
5
 
6
- attr_reader :config, :method, :url, :code
6
+ attr_reader :config, :method, :code
7
7
  def_delegators :config, :metrics_handler, :metrics_namespace
8
8
 
9
- def initialize(config, method, url, code)
9
+ def initialize(config, method, code)
10
10
  @config = config
11
11
  @method = method
12
- @url = url
13
12
  @code = code
14
13
  end
15
14
 
@@ -58,8 +57,7 @@ module QuizApiClient
58
57
  def tags
59
58
  {
60
59
  method: method,
61
- status: code,
62
- url: url
60
+ status: code
63
61
  }
64
62
  end
65
63
  end
@@ -4,6 +4,10 @@ module QuizApiClient::Services
4
4
  post_to_quiz_api(body: body, params: params, token: token)
5
5
  end
6
6
 
7
+ def update(body: {}, params:, token: nil)
8
+ put_to_quiz_api(body: body, params: params, token: token)
9
+ end
10
+
7
11
  def create_batch(body:, token: nil)
8
12
  batch_post_to_quiz_api(body: body, token: token)
9
13
  end
@@ -17,6 +21,13 @@ module QuizApiClient::Services
17
21
  )
18
22
  end
19
23
 
24
+ def put_to_quiz_api(body:, params:, token:)
25
+ client(token: token).put(
26
+ "/api/quiz_clone_jobs/#{params.fetch(:id)}",
27
+ body
28
+ )
29
+ end
30
+
20
31
  def batch_post_to_quiz_api(body:, token:)
21
32
  client(token: token).post(
22
33
  '/api/quiz_clone_jobs/create_batch',
@@ -1,3 +1,3 @@
1
1
  module QuizApiClient
2
- VERSION = '4.13.4'.freeze
2
+ VERSION = '4.14.1'.freeze
3
3
  end
@@ -41,9 +41,9 @@ describe QuizApiClient::HttpClient do
41
41
  mock
42
42
  end
43
43
 
44
- def expect_metrics_calls(config, method, url, code)
44
+ def expect_metrics_calls(config, method, code)
45
45
  expect(QuizApiClient::HttpRequest::Metrics).to receive(:new)
46
- .with(config, method, url, code)
46
+ .with(config, method, code)
47
47
  .and_return(mock_metrics(mock_time(10)))
48
48
  end
49
49
 
@@ -65,7 +65,7 @@ describe QuizApiClient::HttpClient do
65
65
  it 'makes a get request' do
66
66
  path = '/api/quizzes'
67
67
  stub_quiz_api path, query: { sort: 'alpha' }
68
- expect_metrics_calls(client.config, :get, url_for_path(path), 200)
68
+ expect_metrics_calls(client.config, :get, 200)
69
69
  response = client.get(path, all: false, query: { sort: 'alpha' })
70
70
  expect(response.parsed_response).to eq [1]
71
71
  end
@@ -138,7 +138,7 @@ describe QuizApiClient::HttpClient do
138
138
  body: { title: 'ohai' }.to_json,
139
139
  **default_request_data
140
140
  ).and_return(instance_double('HTTParty::Response', success?: true, code: 200))
141
- expect_metrics_calls(client.config, :post, url, 200)
141
+ expect_metrics_calls(client.config, :post, 200)
142
142
  client.post('/api/quizzes', title: 'ohai')
143
143
  end
144
144
  end
@@ -151,7 +151,7 @@ describe QuizApiClient::HttpClient do
151
151
  body: { title: 'new title' }.to_json,
152
152
  **default_request_data
153
153
  ).and_return(instance_double('HTTParty::Response', success?: true, code: 200))
154
- expect_metrics_calls(client.config, :patch, url, 200)
154
+ expect_metrics_calls(client.config, :patch, 200)
155
155
  client.patch('/api/quizzes/1', title: 'new title')
156
156
  end
157
157
  end
@@ -164,7 +164,7 @@ describe QuizApiClient::HttpClient do
164
164
  body: { title: 'new title' }.to_json,
165
165
  **default_request_data
166
166
  ).and_return(instance_double('HTTParty::Response', success?: true, code: 200))
167
- expect_metrics_calls(client.config, :put, url, 200)
167
+ expect_metrics_calls(client.config, :put, 200)
168
168
  client.put('/api/quizzes/1', title: 'new title')
169
169
  end
170
170
  end
@@ -176,7 +176,7 @@ describe QuizApiClient::HttpClient do
176
176
  url,
177
177
  **default_request_data
178
178
  ).and_return(instance_double('HTTParty::Response', success?: true, code: 200))
179
- expect_metrics_calls(client.config, :delete, url, 200)
179
+ expect_metrics_calls(client.config, :delete, 200)
180
180
  client.delete('/api/quizzes/1')
181
181
  end
182
182
  end
@@ -277,7 +277,7 @@ describe QuizApiClient::HttpClient do
277
277
  it 'raises error' do
278
278
  expect(client).to receive(:successful_response?).with(mock_response).and_return(false)
279
279
  expect(client.class).to receive(:get).and_return(mock_response)
280
- expect_metrics_calls(client.config, method, url_for_path(path), code)
280
+ expect_metrics_calls(client.config, method, code)
281
281
  expect_raise_error_call(client.config, method, url_for_path(path), mock_response, nil)
282
282
  expect { client.get(path, all: false, query: { sort: 'alpha' }) }
283
283
  .to raise_error(QuizApiClient::HttpClient::RequestFailed)
@@ -290,7 +290,7 @@ describe QuizApiClient::HttpClient do
290
290
  it 'raises error' do
291
291
  expect(client).to receive(:successful_response?).with(mock_response).and_return(false)
292
292
  expect(client.class).to receive(:post).and_return(mock_response)
293
- expect_metrics_calls(client.config, method, url_for_path(path), code)
293
+ expect_metrics_calls(client.config, method, code)
294
294
  expect_raise_error_call(client.config, method, url_for_path(path), mock_response, nil)
295
295
  expect { client.post(path) }.to raise_error(QuizApiClient::HttpClient::RequestFailed)
296
296
  end
@@ -302,7 +302,7 @@ describe QuizApiClient::HttpClient do
302
302
  it 'raises error' do
303
303
  expect(client).to receive(:successful_response?).with(mock_response).and_return(false)
304
304
  expect(client.class).to receive(:put).and_return(mock_response)
305
- expect_metrics_calls(client.config, method, url_for_path(path), code)
305
+ expect_metrics_calls(client.config, method, code)
306
306
  expect_raise_error_call(client.config, method, url_for_path(path), mock_response, nil)
307
307
  expect { client.put(path) }.to raise_error(QuizApiClient::HttpClient::RequestFailed)
308
308
  end
@@ -314,7 +314,7 @@ describe QuizApiClient::HttpClient do
314
314
  it 'raises error' do
315
315
  expect(client).to receive(:successful_response?).with(mock_response).and_return(false)
316
316
  expect(client.class).to receive(:patch).and_return(mock_response)
317
- expect_metrics_calls(client.config, method, url_for_path(path), code)
317
+ expect_metrics_calls(client.config, method, code)
318
318
  expect_raise_error_call(client.config, method, url_for_path(path), mock_response, nil)
319
319
  expect { client.patch(path) }.to raise_error(QuizApiClient::HttpClient::RequestFailed)
320
320
  end
@@ -326,7 +326,7 @@ describe QuizApiClient::HttpClient do
326
326
  it 'raises error' do
327
327
  expect(client).to receive(:successful_response?).with(mock_response).and_return(false)
328
328
  expect(client.class).to receive(:delete).and_return(mock_response)
329
- expect_metrics_calls(client.config, method, url_for_path(path), code)
329
+ expect_metrics_calls(client.config, method, code)
330
330
  expect_raise_error_call(client.config, method, url_for_path(path), mock_response, nil)
331
331
  expect { client.delete(path) }.to raise_error(QuizApiClient::HttpClient::RequestFailed)
332
332
  end
@@ -348,21 +348,21 @@ describe QuizApiClient::HttpClient do
348
348
 
349
349
  it 'handles an HTTParty::Error error' do
350
350
  stub_request(:get, url).to_raise(HTTParty::Error)
351
- expect_metrics_calls(client.config, :get, url_for_path(path), 0)
351
+ expect_metrics_calls(client.config, :get, 0)
352
352
  expect_raise_error_call(client.config, :get, url_for_path(path), nil, kind_of(HTTParty::Error))
353
353
  expect { client.get('/') }.to raise_error(QuizApiClient::HttpClient::RequestFailed)
354
354
  end
355
355
 
356
356
  it 'handles an Errno::ECONNREFUSED error' do
357
357
  stub_request(:get, url).to_raise(Errno::ECONNREFUSED)
358
- expect_metrics_calls(client.config, :get, url_for_path(path), 0)
358
+ expect_metrics_calls(client.config, :get, 0)
359
359
  expect_raise_error_call(client.config, :get, url_for_path(path), nil, kind_of(Errno::ECONNREFUSED))
360
360
  expect { client.get('/') }.to raise_error(QuizApiClient::HttpClient::RequestFailed)
361
361
  end
362
362
 
363
363
  it 'handles an Net::ReadTimeout error' do
364
364
  stub_request(:get, url).to_raise(Net::ReadTimeout)
365
- expect_metrics_calls(client.config, :get, url_for_path(path), 0)
365
+ expect_metrics_calls(client.config, :get, 0)
366
366
  expect_raise_error_call(client.config, :get, url_for_path(path), nil, kind_of(Net::ReadTimeout))
367
367
  expect { client.get('/') }.to raise_error(QuizApiClient::HttpClient::RequestFailed)
368
368
  end
@@ -3,10 +3,9 @@ require 'inst_statsd'
3
3
  describe QuizApiClient::HttpRequest::Metrics do
4
4
  let(:config) { QuizApiClient::Config.new }
5
5
  let(:method) { 'GET' }
6
- let(:url) { 'https://something.com' }
7
6
  let(:code) { 200 }
8
7
 
9
- subject { described_class.new(config, method, url, code) }
8
+ subject { described_class.new(config, method, code) }
10
9
 
11
10
  describe '#increment' do
12
11
  it 'does nothing when the metrics handler is nil' do
@@ -29,8 +28,7 @@ describe QuizApiClient::HttpRequest::Metrics do
29
28
  'fake-namespace.quiz_api_client.request.count',
30
29
  tags: {
31
30
  method: method,
32
- status: code,
33
- url: url
31
+ status: code
34
32
  }
35
33
  )
36
34
 
@@ -64,8 +62,7 @@ describe QuizApiClient::HttpRequest::Metrics do
64
62
  duration_in_secs * 1_000,
65
63
  tags: {
66
64
  method: method,
67
- status: code,
68
- url: url
65
+ status: code
69
66
  }
70
67
  )
71
68
 
@@ -40,6 +40,43 @@ describe QuizApiClient::Services::QuizCloneJobsService do
40
40
  end
41
41
  end
42
42
 
43
+ describe '#update' do
44
+ let(:body) { { resource_map_url: 'http://foo.bar/123' } }
45
+ let(:params) { { id: 1 } }
46
+ let(:expected_url) { "https://#{host}/api/quiz_clone_jobs/#{params.fetch(:id)}" }
47
+ let(:stubbed_response) { { 'id' => '1' } }
48
+
49
+ context 'on success' do
50
+ before do
51
+ stub_request(:put, expected_url)
52
+ .to_return(
53
+ status: 200,
54
+ body: stubbed_response.to_json,
55
+ headers: { 'Content-Type' => 'application/json' }
56
+ )
57
+ end
58
+
59
+ it 'puts to /api/quiz_clone_jobs/:id' do
60
+ result = subject.update(body: body, params: params, token: 'token')
61
+ expect(result.parsed_response).to eql(stubbed_response)
62
+ end
63
+ end
64
+
65
+ context 'on failure' do
66
+ let(:status_code) { 401 }
67
+
68
+ before do
69
+ stub_request(:put, expected_url)
70
+ .to_return(status: status_code)
71
+ end
72
+
73
+ it 'returns a response with the correct code' do
74
+ response = subject.update(body: body, params: params, token: 'token')
75
+ expect(response.code).to eq(status_code)
76
+ end
77
+ end
78
+ end
79
+
43
80
  describe '#create_batch' do
44
81
  let(:expected_url) { "https://#{host}/api/quiz_clone_jobs/create_batch" }
45
82
  let(:body) { { quiz_ids: [1, 2] } }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: quiz_api_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.13.4
4
+ version: 4.14.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Slaughter
@@ -15,7 +15,7 @@ authors:
15
15
  autorequire:
16
16
  bindir: exe
17
17
  cert_chain: []
18
- date: 2023-09-29 00:00:00.000000000 Z
18
+ date: 2024-02-22 00:00:00.000000000 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: httparty