record_store 8.0.10 → 8.0.11

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: bcaa697157000cc1bf04fd72aee445d2ecd8b8b34352eb99d8e5544903c92146
4
- data.tar.gz: 453b90bf06d3555904e3d60177979a09cdaca5370a63aa5634fc3322f8527ea2
3
+ metadata.gz: 43d93495d6304ff99a4c2335be9452a7dd8a222580d702536e21d3cf836e0607
4
+ data.tar.gz: f1f948d4136c09ecca1a6199eda17aea70bb726a3a75e8aa224d0ee3b2df13a3
5
5
  SHA512:
6
- metadata.gz: 1386094b965dc6309249f816dc509fcfb6810e5dc2ae3601709a3ccddfb9a6ab1e6315cc8e5b5ac62c0edc09ad02cdfa428d2a593df8c5975bd6d35929254235
7
- data.tar.gz: b927d38959ed6496c65e6fcb98525b9a189c96621b159ece23ec06b382b6df87c9b5b78da996d2fbe6524cad03c95e8d0cb6376b4627bf83c0be6c17a7d0c441
6
+ metadata.gz: 7e143587f1505ee799b3849d1fdcec2e58563fd5ffb9e75154e4277bef465bf8e76aec116aeb9e418eb81441a46132ab34c8806c39266cc4c7db4f92c6125907
7
+ data.tar.gz: c92a3b36d67f4cec13ba82aa3c7679803188c1e56e79917fadccc82cd0c856d6bdefd0beb4892ca050c7005579d4e0ec888fe35cc5e9850c464d3cde23a5c542
@@ -14,7 +14,7 @@ jobs:
14
14
  ruby: [ 3.2, 3.3, 3.4 ]
15
15
  name: Test Ruby ${{ matrix.ruby }}
16
16
  steps:
17
- - uses: actions/checkout@v5
17
+ - uses: actions/checkout@v6
18
18
  - name: Install dependencies
19
19
  run: |
20
20
  sudo apt-get update && sudo apt-get install build-essential libcurl4-openssl-dev
data/CHANGELOG.md CHANGED
@@ -1,5 +1,8 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## 8.0.11
4
+ - Modified Zone#fetch_authority to handle SOA answer sections from authoritative servers
5
+
3
6
  ## 8.0.10
4
7
  - Fix Cloudflare provider to skip empty changesets
5
8
  - Add TXT record denormalization for DNSimple provider
@@ -1,3 +1,3 @@
1
1
  module RecordStore
2
- VERSION = '8.0.10'.freeze
2
+ VERSION = '8.0.11'.freeze
3
3
  end
@@ -143,6 +143,12 @@ module RecordStore
143
143
 
144
144
  def fetch_authority(nameserver = ROOT_SERVERS.sample)
145
145
  authority = fetch_soa(nameserver) do |reply, _name|
146
+ # If we get a valid SOA answer, the nameserver is authoritative, so fetch NS records directly
147
+ if reply.answer.any? && reply.answer.first[0].to_s == unrooted_name
148
+ break fetch_ns_records(nameserver)
149
+ end
150
+
151
+ # For NXDOMAIN or referral responses, continue with authority section
146
152
  break if reply.answer.any?
147
153
 
148
154
  raise "No authority found (#{name})" if reply.authority.none?
@@ -151,7 +157,16 @@ module RecordStore
151
157
  end
152
158
 
153
159
  # candidate DNS name is returned instead when NXDomain or other error
154
- return if unrooted_name.casecmp?(Array(authority).first.to_s)
160
+ # In this case, query the parent domain's NS records
161
+ if authority.is_a?(Array) && authority.first.is_a?(Resolv::DNS::Name) &&
162
+ unrooted_name.casecmp?(authority.first.to_s)
163
+ # Extract parent domain from unrooted_name (e.g., "sub.example.com" -> "example.com")
164
+ parts = unrooted_name.split('.')
165
+ return if parts.length <= 1 # No parent domain available (TLD)
166
+
167
+ parent_domain = parts[1..-1].join('.') + '.'
168
+ return fetch_ns_records_for_domain(parent_domain, nameserver)
169
+ end
155
170
 
156
171
  authority
157
172
  end
@@ -164,6 +179,21 @@ module RecordStore
164
179
  end
165
180
  end
166
181
 
182
+ def fetch_ns_records(nameserver)
183
+ fetch_ns_records_for_domain(name, nameserver)
184
+ end
185
+
186
+ def fetch_ns_records_for_domain(domain, nameserver)
187
+ Resolv::DNS.open(nameserver: nameserver) do |resolv|
188
+ resources = resolv.getresources(domain, Resolv::DNS::Resource::IN::NS)
189
+ return nil if resources.empty?
190
+
191
+ resources.map.with_index do |ns, index|
192
+ Record::NS.new(ttl: ns.ttl, fqdn: domain, nsdname: ns.name.to_s, record_id: index)
193
+ end
194
+ end
195
+ end
196
+
167
197
  def resolve_authority(authority)
168
198
  nameservers = authority.map { |a| a.last.name.to_s }
169
199
 
data/record_store.gemspec CHANGED
@@ -28,6 +28,7 @@ Gem::Specification.new do |spec|
28
28
 
29
29
  spec.add_runtime_dependency 'activemodel', '>= 4.2'
30
30
  spec.add_runtime_dependency 'activesupport', '>= 4.2'
31
+ spec.add_runtime_dependency 'csv'
31
32
  spec.add_runtime_dependency 'ejson'
32
33
  spec.add_runtime_dependency 'thor', '>= 1.4.0'
33
34
 
@@ -46,7 +47,7 @@ Gem::Specification.new do |spec|
46
47
  spec.add_development_dependency 'mocha'
47
48
  spec.add_development_dependency 'pry'
48
49
  spec.add_development_dependency 'rake'
49
- spec.add_development_dependency 'rubocop', '~> 1.81.1'
50
+ spec.add_development_dependency 'rubocop', '~> 1.82.1'
50
51
  spec.add_development_dependency 'rubocop-shopify', '~> 2.15.1'
51
52
  spec.add_development_dependency 'vcr'
52
53
  spec.add_development_dependency 'webmock'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: record_store
3
3
  version: !ruby/object:Gem::Version
4
- version: 8.0.10
4
+ version: 8.0.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Willem van Bergen
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '4.2'
41
+ - !ruby/object:Gem::Dependency
42
+ name: csv
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: ejson
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -298,14 +312,14 @@ dependencies:
298
312
  requirements:
299
313
  - - "~>"
300
314
  - !ruby/object:Gem::Version
301
- version: 1.81.1
315
+ version: 1.82.1
302
316
  type: :development
303
317
  prerelease: false
304
318
  version_requirements: !ruby/object:Gem::Requirement
305
319
  requirements:
306
320
  - - "~>"
307
321
  - !ruby/object:Gem::Version
308
- version: 1.81.1
322
+ version: 1.82.1
309
323
  - !ruby/object:Gem::Dependency
310
324
  name: rubocop-shopify
311
325
  requirement: !ruby/object:Gem::Requirement