record_store 8.0.5 → 8.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
  SHA256:
3
- metadata.gz: 6c527f647483b3ba25a8795bd1de0eebc8db895263dcaa836b36ba61d6937ede
4
- data.tar.gz: 89aa174d951809d032d50defe287e53f348a363c68b0eadb759ee15589915b1c
3
+ metadata.gz: a6884d926bdd86badb5c898030ca919d28c61ff64fc7b023c5af227cc289a2be
4
+ data.tar.gz: 6189b564b512cb320b5a69a4027dc4642212ab9dc1aa054e66b899b70c58187b
5
5
  SHA512:
6
- metadata.gz: a5deb741718100321c6c96bdb789cb73120a1d91a24baeec672da5633805f11cc91c310d32a8bc41aead7f0c5a825bd57544272a0d1a6d1a61041896edd8f265
7
- data.tar.gz: c041100480d8f986c5e2c5a3eb4edebc91e30759f3299c12420d9fe263e22fd359912ff3ad88936c3edb3202d5170cecd2adb3defd4213933b65e0e1214250e9
6
+ metadata.gz: 59b22a7833c745d2416a6c3070f22115305e66a4b5553d3a9e20c7e703ab4c5125f24b5e9d278c81dd755337d015da422c9f32f6ebe7da031a850dce2dd2b7c3
7
+ data.tar.gz: 3f336051180e9e08ee46b11d4f516d8461f006ad882e28015dcaf4f481e5962c661cc7fea3a619090543987b39b80fcbbcbf182c29d38b60272cbc7177aedfe2
data/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## 8.0.7
4
+ - Add retry logic for server errors from providers
5
+
6
+ ## 8.0.6
7
+ - Fix quotes around Cloudflare TXT records
8
+
3
9
  ## 8.0.5
4
10
  - Add IPv6 PTR record validation
5
11
 
@@ -64,16 +64,13 @@ module Cloudflare
64
64
 
65
65
  begin
66
66
  response = conn.request(request)
67
- rescue StandardError => e
68
- raise "HTTP error: #{e.message}"
67
+ response.value
68
+ response
69
+ rescue Net::HTTPRetriableError, Net::HTTPFatalError => e
70
+ raise RecordStore::Provider::RetriableError, e.message
71
+ rescue Net::HTTPClientException, Net::HTTPError => e
72
+ raise RecordStore::Provider::Error, e.message
69
73
  end
70
-
71
- if response.code.to_i >= 300
72
- raise RecordStore::Provider::Error,
73
- "HTTP response code: #{response.code} - #{response.message}; #{response.body}"
74
- end
75
-
76
- response
77
74
  end
78
75
  end
79
76
 
@@ -128,7 +128,7 @@ module RecordStore
128
128
  api_body[:content] = record.exchange
129
129
  api_body[:priority] = record.preference
130
130
  when Record::TXT, Record::SPF
131
- api_body[:content] = record.txtdata.gsub('\;', ';')
131
+ api_body[:content] = Record.quote(record.txtdata.gsub('\;', ';'))
132
132
  when Record::CAA
133
133
  api_body[:data] = record.rdata
134
134
  when Record::SRV
@@ -166,7 +166,8 @@ module RecordStore
166
166
  record.merge!(cname: api_response['content'])
167
167
  end
168
168
  when 'TXT'
169
- record.merge!(txtdata: Record.unescape(api_response['content']).gsub(';', '\;'))
169
+ content = Record.unquote(api_response['content'])
170
+ record.merge!(txtdata: content.gsub(';', '\;'))
170
171
  when 'MX'
171
172
  record.merge!(preference: api_response['priority'], exchange: api_response['content'])
172
173
  when 'PTR'
@@ -6,6 +6,8 @@ module RecordStore
6
6
 
7
7
  class UnparseableBodyError < Error; end
8
8
 
9
+ class RetriableError < Error; end
10
+
9
11
  class << self
10
12
  def provider_for(object)
11
13
  lookup_error = false
@@ -145,6 +147,7 @@ module RecordStore
145
147
  max_timeouts: 5,
146
148
  max_conn_resets: 5,
147
149
  max_retries: 5,
150
+ max_server_errors: 3,
148
151
  delay: 1,
149
152
  backoff_multiplier: 2,
150
153
  max_backoff: 10
@@ -158,7 +161,7 @@ module RecordStore
158
161
 
159
162
  loop do
160
163
  return yield
161
- rescue UnparseableBodyError
164
+ rescue RecordStore::Provider::UnparseableBodyError
162
165
  raise if max_retries <= 0
163
166
 
164
167
  max_retries -= 1
@@ -176,6 +179,12 @@ module RecordStore
176
179
  max_conn_resets -= 1
177
180
 
178
181
  waiter.wait
182
+ rescue RecordStore::Provider::RetriableError
183
+ raise if max_server_errors <= 0
184
+
185
+ max_server_errors -= 1
186
+
187
+ waiter.wait(message: 'Waiting to retry after server error')
179
188
  end
180
189
  end
181
190
  end
@@ -22,7 +22,7 @@ module RecordStore
22
22
 
23
23
  def escaped_semicolons
24
24
  if txtdata =~ /([^\\]|\A);/
25
- errors.add(:txtdata, 'has unescaped semicolons (See RFC 1035).')
25
+ errors.add(:txtdata, 'has unescaped semicolons, which begins comment portion of record per RFC 1035.')
26
26
  end
27
27
  end
28
28
  end
@@ -1,3 +1,3 @@
1
1
  module RecordStore
2
- VERSION = '8.0.5'.freeze
2
+ VERSION = '8.0.7'.freeze
3
3
  end
data/record_store.gemspec CHANGED
@@ -46,7 +46,7 @@ Gem::Specification.new do |spec|
46
46
  spec.add_development_dependency 'mocha'
47
47
  spec.add_development_dependency 'pry'
48
48
  spec.add_development_dependency 'rake'
49
- spec.add_development_dependency 'rubocop', '~> 1.69.0'
49
+ spec.add_development_dependency 'rubocop', '~> 1.75.2'
50
50
  spec.add_development_dependency 'rubocop-shopify', '~> 2.15.1'
51
51
  spec.add_development_dependency 'vcr'
52
52
  spec.add_development_dependency 'webmock'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: record_store
3
3
  version: !ruby/object:Gem::Version
4
- version: 8.0.5
4
+ version: 8.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Willem van Bergen
8
8
  - Emil Stolarsky
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-01-09 00:00:00.000000000 Z
11
+ date: 1980-01-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -304,14 +304,14 @@ dependencies:
304
304
  requirements:
305
305
  - - "~>"
306
306
  - !ruby/object:Gem::Version
307
- version: 1.69.0
307
+ version: 1.75.2
308
308
  type: :development
309
309
  prerelease: false
310
310
  version_requirements: !ruby/object:Gem::Requirement
311
311
  requirements:
312
312
  - - "~>"
313
313
  - !ruby/object:Gem::Version
314
- version: 1.69.0
314
+ version: 1.75.2
315
315
  - !ruby/object:Gem::Dependency
316
316
  name: rubocop-shopify
317
317
  requirement: !ruby/object:Gem::Requirement
@@ -453,7 +453,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
453
453
  - !ruby/object:Gem::Version
454
454
  version: '0'
455
455
  requirements: []
456
- rubygems_version: 3.6.2
456
+ rubygems_version: 3.6.8
457
457
  specification_version: 4
458
458
  summary: Manage DNS using git
459
459
  test_files: []