rdstation-ruby-client 2.3.1 → 2.4.0

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: b6526c586f6fb45ddb0851311da56f9525ca352eb2383dd46e746fe98c9642f7
4
- data.tar.gz: c539bb37a63551c67b2e5d376bf08855f2a1a7371232b4490f7b3c06b1976c02
3
+ metadata.gz: d51df272057d17abe280b0fe23f7a97f9ef2ceb543f823db1ce8b047788d1887
4
+ data.tar.gz: d59bd8063663bb95df477c672066e4c6655172a193d9b2244bba6b8608a92869
5
5
  SHA512:
6
- metadata.gz: c6c7f1555c420ac06ee04bfe1d2ff5596c4a7d92dd39990b1221ff386247dcf3142b78c065190030856183f2b0878f0bcaae55e0b01889e738a04dc735704767
7
- data.tar.gz: e6fd2530aa309a93dac05b913ca7ab527d740ebd20fe640ea3c5fd87fe4449943a6c501d3902d2f9ecd40b79caa4431df143baccda99d642b3fe37ae13e25a20
6
+ metadata.gz: 1451abf2db818f4551575ea88befdb63b6f8f8b1afa3270b96ee50b059f0f69676d6c6104a6e217d58e9c84384527d77e81d257d5a222a1ab2df74e1ed525446
7
+ data.tar.gz: 06c2620cdf413e945207f7b0bad15bcdb762038b360ef3c9ed5371e2ff06edc4949f97602fc0c3ffc352ff14bf66774234c398b291a5606d34931ab0eded84e9
@@ -1,3 +1,7 @@
1
+ ## 2.4.0
2
+
3
+ - Add the TooManyRequests errors in case of rate limit exceeded. See [API request limit](https://developers.rdstation.com/en/request-limit) for more details
4
+
1
5
  ## 2.3.1
2
6
 
3
7
  - Fixed a bug when no error is found in the known errors list (issue [#52](https://github.com/ResultadosDigitais/rdstation-ruby-client/issues/52))
data/README.md CHANGED
@@ -93,7 +93,7 @@ RDStation.configure do |config|
93
93
  # authorization.access_token_expires_in is the time (in seconds for with the token is valid)
94
94
  # authorization.access_token is the new token
95
95
  # authorization.refresh_token is the existing refresh_token
96
- #
96
+ #
97
97
  # If you are using ActiveRecord, you may want to update the stored access_token, like in the following code:
98
98
  MyStoredAuth.where(refresh_token: authorization.refresh_token).update_all(access_token: authorization.access_token)
99
99
  end
@@ -232,7 +232,7 @@ client.fields.create builder.build
232
232
  ```ruby
233
233
  payload = {} # hash representing the payload
234
234
  client = RDStation::Client.new(access_token: 'access_token', refresh_token: 'refresh_token')
235
- client.fields.update('FIELD_UUID', payload)
235
+ client.fields.update('FIELD_UUID', payload)
236
236
  ```
237
237
  Or you can use the new `RDStation::Builder::Field`
238
238
 
@@ -315,6 +315,7 @@ Each endpoint may raise errors accoording to the HTTP response code from RDStati
315
315
  - `RDStation::Error::Conflict` (409)
316
316
  - `RDStation::Error::UnsupportedMediaType` (415)
317
317
  - `RDStation::Error::UnprocessableEntity` (422)
318
+ - `RDStation::Error::TooManyRequests` (429)
318
319
  - `RDStation::Error::InternalServerError` (500)
319
320
  - `RDStation::Error::NotImplemented` (501)
320
321
  - `RDStation::Error::BadGateway` (502)
@@ -19,6 +19,7 @@ module RDStation
19
19
  class Conflict < Error; end
20
20
  class UnsupportedMediaType < Error; end
21
21
  class UnprocessableEntity < Error; end
22
+ class TooManyRequests < Error; end
22
23
  class InternalServerError < Error; end
23
24
  class NotImplemented < Error; end
24
25
  class BadGateway < Error; end
@@ -8,6 +8,7 @@ module RDStation
8
8
  ARRAY_OF_HASHES = 'ARRAY_OF_HASHES'
9
9
  HASH_OF_MULTIPLE_TYPES = 'HASH_OF_MULTIPLE_TYPES'
10
10
  HASH_OF_HASHES = 'HASH_OF_HASHES'
11
+ SINGLE_HASH = 'SINGLE_HASH'
11
12
 
12
13
  def initialize(errors)
13
14
  @errors = errors
@@ -15,6 +16,7 @@ module RDStation
15
16
 
16
17
  def format
17
18
  return FLAT_HASH if flat_hash?
19
+ return SINGLE_HASH if single_hash?
18
20
  return HASH_OF_ARRAYS if hash_of_arrays?
19
21
  return HASH_OF_HASHES if hash_of_hashes?
20
22
  return HASH_OF_MULTIPLE_TYPES if hash_of_multiple_types?
@@ -24,6 +26,12 @@ module RDStation
24
26
 
25
27
  private
26
28
 
29
+ def single_hash?
30
+ return unless @errors.is_a?(Hash)
31
+
32
+ @errors.key?('error')
33
+ end
34
+
27
35
  def flat_hash?
28
36
  return unless @errors.is_a?(Hash)
29
37
 
@@ -13,6 +13,8 @@ module RDStation
13
13
  return @error_response unless @error_response.is_a?(Hash)
14
14
 
15
15
  case error_format.format
16
+ when RDStation::Error::Format::SINGLE_HASH
17
+ return from_single_hash
16
18
  when RDStation::Error::Format::FLAT_HASH
17
19
  return from_flat_hash
18
20
  when RDStation::Error::Format::HASH_OF_ARRAYS
@@ -26,6 +28,19 @@ module RDStation
26
28
  errors
27
29
  end
28
30
 
31
+ def from_single_hash
32
+ error_hash = @error_response.dup
33
+ error_message = error_hash.delete('error')
34
+
35
+ [
36
+ {
37
+ 'error_type' => 'TOO_MANY_REQUESTS',
38
+ 'error_message' => error_message,
39
+ 'details' => error_hash
40
+ }
41
+ ]
42
+ end
43
+
29
44
  def from_flat_hash
30
45
  [errors]
31
46
  end
@@ -60,7 +75,7 @@ module RDStation
60
75
  end
61
76
 
62
77
  def errors
63
- @errors ||= @error_response['errors']
78
+ @errors ||= @error_response.fetch('errors', @error_response)
64
79
  end
65
80
 
66
81
  private
@@ -32,6 +32,7 @@ module RDStation
32
32
  when 409 then RDStation::Error::Conflict
33
33
  when 415 then RDStation::Error::UnsupportedMediaType
34
34
  when 422 then RDStation::Error::UnprocessableEntity
35
+ when 429 then RDStation::Error::TooManyRequests
35
36
  when 500 then RDStation::Error::InternalServerError
36
37
  when 501 then RDStation::Error::NotImplemented
37
38
  when 502 then RDStation::Error::BadGateway
@@ -57,7 +58,7 @@ module RDStation
57
58
  end
58
59
 
59
60
  def additional_error_attributes
60
- {
61
+ attrs = {
61
62
  'headers' => response.headers,
62
63
  'body' => JSON.parse(response.body),
63
64
  'http_status' => response.code,
@@ -1,3 +1,3 @@
1
1
  module RDStation
2
- VERSION = '2.3.1'.freeze
2
+ VERSION = '2.4.0'.freeze
3
3
  end
@@ -98,5 +98,22 @@ RSpec.describe RDStation::Error::Format do
98
98
  expect(result).to eq(RDStation::Error::Format::HASH_OF_HASHES)
99
99
  end
100
100
  end
101
+
102
+ context 'when receives a single hash with error' do
103
+ let(:errors) do
104
+ {
105
+ 'error' => "'lead_limiter' rate limit exceeded for 86400 second(s) period for key ...",
106
+ 'max' => 24,
107
+ 'usage' => 55,
108
+ 'remaining_time' => 20745,
109
+ }
110
+ end
111
+
112
+ it 'returns the SINGLE_HASH format' do
113
+ result = error_format.format
114
+ expect(result).to eq(RDStation::Error::Format::SINGLE_HASH)
115
+ end
116
+
117
+ end
101
118
  end
102
119
  end
@@ -215,5 +215,35 @@ RSpec.describe RDStation::Error::Formatter do
215
215
  expect(result).to eq(expected_result)
216
216
  end
217
217
  end
218
+
219
+ context 'when receives a single hash of errors' do
220
+ let(:error_format) { instance_double(RDStation::Error::Format, format: RDStation::Error::Format::SINGLE_HASH) }
221
+
222
+ let(:error_response) do
223
+ {
224
+ 'error' => "'lead_limiter' rate limit exceeded for 86400 second(s) period for key",
225
+ 'max' => 24,
226
+ 'usage' => 55,
227
+ 'remaining_time' => 20745
228
+ }
229
+ end
230
+
231
+ let(:error_formatter) { described_class.new(error_response) }
232
+
233
+ let(:expected_result) do
234
+ [
235
+ {
236
+ 'error_type' => 'TOO_MANY_REQUESTS',
237
+ 'error_message' => "'lead_limiter' rate limit exceeded for 86400 second(s) period for key",
238
+ 'details' => { 'max' => 24, 'usage' => 55, 'remaining_time' => 20745 }
239
+ }
240
+ ]
241
+ end
242
+
243
+ it 'returns an array of errors' do
244
+ result = error_formatter.to_array
245
+ expect(result).to eq(expected_result)
246
+ end
247
+ end
218
248
  end
219
249
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rdstation-ruby-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.1
4
+ version: 2.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paulo L F Casaretto
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-08-11 00:00:00.000000000 Z
11
+ date: 2020-09-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -190,7 +190,7 @@ homepage: http://resultadosdigitais.com.br
190
190
  licenses:
191
191
  - MIT
192
192
  metadata: {}
193
- post_install_message:
193
+ post_install_message:
194
194
  rdoc_options: []
195
195
  require_paths:
196
196
  - lib
@@ -205,9 +205,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
205
205
  - !ruby/object:Gem::Version
206
206
  version: '0'
207
207
  requirements: []
208
- rubyforge_project:
209
- rubygems_version: 2.7.6.2
210
- signing_key:
208
+ rubygems_version: 3.0.8
209
+ signing_key:
211
210
  specification_version: 4
212
211
  summary: Ruby API wrapper for RD Station
213
212
  test_files: