whois-parser-next 0.3.1 → 0.3.2

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: 1ac79159293403464f7e386fd283634642e6eda102d7e486e105b399089e34cf
4
- data.tar.gz: 0fb55415df4c88415bac870059b30f25fbf5f488526241b1358ce15257b8bcb9
3
+ metadata.gz: 4dd7f05a922301b74d2dccf983d9712ac9611198244bb84bf7da9d3106eb6985
4
+ data.tar.gz: 474233b88fad6dad201ca87d0d5c91e5a15a8abab76904192710d644a74420db
5
5
  SHA512:
6
- metadata.gz: 58999ed26705e0ee3ff4e78428b70ee0f20f45e184693debdee4a899617274662ba2f1074f8ca0bb6109ac7c6c702a81ed88ee32138a29e68dd7a1391cd13ffa
7
- data.tar.gz: c537956618e781da069518bc6428e39f7953368f001c833582b349f19c3d4d6a7cc7a73e1e85f93d3973c978083497c2fc424c616ad660dcd4ffaf5d8669be92
6
+ metadata.gz: 0f041533d14ae1f57dfe6ea92e1967bb1ef5fdfb40379f4eea079c2bf37c58adadf53e8ed0685e0e55076ba9df44341b5a91f9115e59478a67f1c178d66fae76
7
+ data.tar.gz: 762d431b3ec1aa9b967a68b74f346ed41fbb37adbbb4f5304fb8e615dec298308f5f276f54a06e57da5b8a1bc217f6dd4b5f57c0df5e62c6142f1202d1069c41
data/CHANGELOG.md CHANGED
@@ -2,6 +2,29 @@
2
2
 
3
3
  This project uses [Semantic Versioning 2.0.0](http://semver.org/).
4
4
 
5
+ #### Release 0.3.2 (2026-09-25)
6
+
7
+ - ADDED: Added host-keyed parsers for the current IANA-listed WHOIS hosts for
8
+ `.mu` (`whois.tld.mu`), `.africa` (`whois.nic.africa`), and `.sr`
9
+ (`whois.sr`). These parsers recognize the documented current registered and
10
+ authoritative-absence response shapes, while empty, denied, throttled, and
11
+ ambiguous responses remain non-positive.
12
+ - LIMITATION: The pinned `whois` 6.0.3 client routes `.mu` and `.africa` to
13
+ different hosts and has no `.sr` mapping. The new parsers are selected only
14
+ for response parts keyed to their IANA-listed hosts; this release does not
15
+ add default-client routing or claim effective application coverage for
16
+ these TLDs.
17
+ - CORRECTION (2026-09-25): The corrected top-1,000 scorecard retracts the
18
+ previously published 175-pair total. Its bounded rowwise crosswalk
19
+ reproduces 130 directly traceable report-pair observations, with 31 package
20
+ rows remaining detail-insufficient. The later `.top`, `.uz`, and `.sa`
21
+ scorecard follow-ups, and the `.mu`, `.africa`, and `.sr` host-specific
22
+ reports in this release, remain outside that pinned baseline. These are
23
+ audit-evidence counts, not parser coverage or an effective-coverage rate.
24
+ - EVIDENCE: [`.mu` and `.africa` current-host report](docs/audits/top-201-250-current-host-followup-2026-09-25.md),
25
+ [`.sr` current-host report](docs/audits/topdomains-251-275-sr-followup-2026-09-25.md),
26
+ and [corrected scorecard](docs/audits/top-1000-effective-coverage-scorecard-2026-09-25.md).
27
+
5
28
  #### Release 0.3.1 (2026-09-25)
6
29
 
7
30
  - ADDED: Added paired registered and exact authoritative-absence parsing for
@@ -35,12 +58,17 @@ This project uses [Semantic Versioning 2.0.0](http://semver.org/).
35
58
  added unavailable-only handling for explicit unsupported responses from
36
59
  `.digital`, `.email`, `.live`, `.media`, `.network`, and `.services`.
37
60
  - DOCS: Added a scorecard for 1,000 observed TLD strings from the ICANN DNS
38
- Magnitude snapshot dated 2026-09-12. Its strict count of 175 paired rows is
39
- pinned to parser baseline `f2c822c` and excludes the Top 100, whose summary
40
- labels do not expose row-level evidence pairs. The scorecard does not claim
41
- 1,000 effective WHOIS integrations or a single effective-coverage rate.
42
- Later `.uz`/`.sa` evidence and `.pk`/`.ge` parsers are follow-ups, not
43
- additions to that pinned count.
61
+ Magnitude snapshot dated 2026-09-12. The original scorecard stated 175
62
+ paired rows and excluded the Top 100, whose summary labels do not expose
63
+ row-level evidence pairs. See the dated correction below; the scorecard
64
+ does not claim 1,000 effective WHOIS integrations or a single
65
+ effective-coverage rate.
66
+ - CORRECTION (2026-09-25): A rowwise crosswalk could not reproduce the
67
+ originally published 175-pair claim. The corrected scorecard and bounded
68
+ evidence ledger identify 130 directly traceable snapshot pair observations
69
+ and 31 package rows with insufficient row-level detail; later `.top`,
70
+ `.uz`, and `.sa` pairs are recorded separately. These are report evidence
71
+ counts, not effective parser coverage.
44
72
  - SOURCES: The audit notes link to the [ICANN DNS Magnitude
45
73
  snapshot](https://magnitude.research.icann.org/historic/20260912.full.html),
46
74
  [IANA `.top`](https://www.iana.org/domains/root/db/top.html),
data/README.md CHANGED
@@ -38,7 +38,7 @@ of current WHOIS responses, explicit unknown states, registry-specific
38
38
  fixtures, and safe handling of malformed, rate-limited, retired, or changed
39
39
  server responses.
40
40
 
41
- The current source version is `0.3.1`. Check the [RubyGems project
41
+ The current source version is `0.3.2`. Check the [RubyGems project
42
42
  page](https://rubygems.org/gems/whois-parser-next) for its publication status
43
43
  and the latest published version.
44
44
 
@@ -54,10 +54,10 @@ Whois::Parser
54
54
  ```
55
55
 
56
56
  Existing applications can retain `require "whois-parser"` and their
57
- `Whois::Parser` integrations. To install version 0.3.1, pin it as follows:
57
+ `Whois::Parser` integrations. To install version 0.3.2, pin it as follows:
58
58
 
59
59
  ```ruby
60
- gem "whois-parser-next", "= 0.3.1", require: "whois-parser"
60
+ gem "whois-parser-next", "= 0.3.2", require: "whois-parser"
61
61
  ```
62
62
 
63
63
  ## Requirements
@@ -86,18 +86,23 @@ The [2026-09-25 scorecard](docs/audits/top-1000-effective-coverage-scorecard-202
86
86
  summarizes evidence for 1,000 observed TLD strings from the
87
87
  [ICANN DNS Magnitude snapshot dated 2026-09-12](https://magnitude.research.icann.org/historic/20260912.full.html).
88
88
  These strings are not 1,000 guaranteed working WHOIS registries or
89
- domain-availability results. Its strict paired count is pinned to baseline
90
- `f2c822c`, excludes the Top 100 whose summary labels do not expose row-level
91
- evidence pairs, and does not claim an effective-coverage percentage. The
92
- scorecard keeps verified parser evidence, explicit unavailable or unsupported
93
- responses, unknown or unresolved endpoints, and classification-only rows
94
- distinct. Later `.uz`/`.sa` paired evidence and `.pk`/`.ge` parsers are
95
- follow-ups, not changes to the pinned scorecard counts. The `.pk` parser does
96
- not make the default `whois` 6.0.3 Web adapter use port 43; `Whois::Client`
97
- host configuration does not override that adapter. The `.ge` parser targets
98
- IANA's `whois.nic.ge`, while the default `whois` route is
99
- `whois.registration.ge`. Both require explicit fixed-host routing before an
100
- application can count them as effective coverage.
89
+ domain-availability results. A dated correction retracts the previously
90
+ published 175 paired count: the hand-audited report crosswalk reproduces 130
91
+ direct row-pair observations (61 at ranks 101–300 and 69 at 301–1000), with 31
92
+ package rows remaining detail-insufficient. Three later pairs (`.top`, `.uz`,
93
+ `.sa`) are tracked separately from that pinned baseline. See the [corrected
94
+ scorecard](docs/audits/top-1000-effective-coverage-scorecard-2026-09-25.md),
95
+ [methodology](docs/audits/top1000-evidence-ledger-methodology-2026-09-25.md),
96
+ and [bounded machine-readable subset](docs/audits/data/whois-parser-top1000-evidence-ledger-subset-2026-09-25.csv).
97
+ No effective-coverage percentage is asserted. Summary-only, unsupported,
98
+ unknown, one-sided, and classification-only evidence is not promoted to a
99
+ pair. The `.pk` parser does not make the default `whois` 6.0.3 Web adapter use
100
+ port 43; `Whois::Client` host configuration does not override that adapter.
101
+ The `.ge` parser targets IANA's `whois.nic.ge`, while the default `whois` route
102
+ is `whois.registration.ge`. The `.mu` and `.africa` parsers also target IANA
103
+ hosts that differ from the default `whois` 6.0.3 mappings, and `.sr` has no
104
+ default mapping. These host-keyed parsers require separately verified routing
105
+ before an application can count them as effective coverage.
101
106
 
102
107
  Start with the [source verification report](docs/audits/top-1000-source-verification-2026-09-19.md),
103
108
  the [Top 20 review](docs/audits/top-20-tlds-2026-09-19.md), and the [Top 100
data/RELEASING.md CHANGED
@@ -21,8 +21,8 @@ RubyGems API key to the repository or its Actions secrets.
21
21
  Create and push the annotated release tag only after the checks above pass:
22
22
 
23
23
  ```shell
24
- git tag -a v0.3.0 -m "whois-parser-next 0.3.0"
25
- git push origin v0.3.0
24
+ git tag -a v0.3.2 -m "whois-parser-next 0.3.2"
25
+ git push origin v0.3.2
26
26
  ```
27
27
 
28
28
  The release workflow repeats the full suite and package smoke test before it
@@ -1,6 +1,6 @@
1
1
  module Whois
2
2
  class Parser
3
3
  # The current library version.
4
- VERSION = "0.3.1".freeze
4
+ VERSION = "0.3.2".freeze
5
5
  end
6
6
  end
@@ -0,0 +1,23 @@
1
+ require_relative 'base_icann_compliant'
2
+
3
+ module Whois
4
+ class Parsers
5
+ # Parser for IANA's current .africa WHOIS endpoint, whois.nic.africa.
6
+ #
7
+ # The registry's exact `No information was found matching that query.`
8
+ # response is treated as absence. Other unrecognised responses remain
9
+ # unknown, and inherited response-safety checks preserve denials and
10
+ # throttling as errors.
11
+ class WhoisNicAfrica < BaseIcannCompliant
12
+ property_supported :available? do
13
+ content_for_scanner.match?(
14
+ /^[ \t]*No information was found matching that query\.[ \t]*$/i
15
+ )
16
+ end
17
+
18
+ property_supported :expires_on do
19
+ node("Registry Expiry Date") { |value| parse_time(value) }
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,44 @@
1
+ require_relative 'base_top1000_icann'
2
+
3
+ module Whois
4
+ class Parsers
5
+ # Parser for the IANA-listed WHOIS server for .SR.
6
+ #
7
+ # IANA's delegation record and current server responses were checked on
8
+ # 2026-09-25. The generated-name response uses an exact Message marker;
9
+ # other incomplete responses must remain unknown.
10
+ class WhoisSr < BaseTop1000Icann
11
+ property_supported :domain do
12
+ node("Domain", &:downcase)
13
+ end
14
+
15
+ property_supported :status do
16
+ if reserved?
17
+ :reserved
18
+ elsif available?
19
+ :available
20
+ elsif !node("Domain").to_s.strip.empty? &&
21
+ node("Status").to_s.casecmp("active").zero? &&
22
+ !node("Creation Date").to_s.strip.empty?
23
+ :registered
24
+ else
25
+ :unknown
26
+ end
27
+ end
28
+
29
+ property_supported :available? do
30
+ content_for_scanner.match?(/^Message: No Object Found\s*$/i)
31
+ end
32
+
33
+ property_supported :registered? do
34
+ status == :registered
35
+ end
36
+
37
+ property_supported :nameservers do
38
+ Array.wrap(node("Name server")).reject(&:empty?).map do |name|
39
+ Parser::Nameserver.new(name: name.downcase)
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,20 @@
1
+ require_relative 'base_icann_compliant'
2
+
3
+ module Whois
4
+ class Parsers
5
+ # Parser for the IANA-listed .mu WHOIS server, whois.tld.mu.
6
+ #
7
+ # Captures from 2026-09-25 expose ICANN-style records and the exact
8
+ # `Domain not found.` absence marker. This host is distinct from the
9
+ # legacy whois.nic.mu mapping in whois 6.0.3.
10
+ class WhoisTldMu < BaseIcannCompliant
11
+ self.scanner = Scanners::BaseIcannCompliant, {
12
+ pattern_available: /^[ \t]*Domain not found\.[ \t]*$/i,
13
+ }
14
+
15
+ property_supported :expires_on do
16
+ node("Registry Expiry Date") { |value| parse_time(value) }
17
+ end
18
+ end
19
+ end
20
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: whois-parser-next
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Simone Carletti
@@ -299,6 +299,7 @@ files:
299
299
  - lib/whois/parsers/whois.nic.accountant.rb
300
300
  - lib/whois/parsers/whois.nic.actor.rb
301
301
  - lib/whois/parsers/whois.nic.af.rb
302
+ - lib/whois/parsers/whois.nic.africa.rb
302
303
  - lib/whois/parsers/whois.nic.ag.rb
303
304
  - lib/whois/parsers/whois.nic.agency.rb
304
305
  - lib/whois/parsers/whois.nic.ai.rb
@@ -701,12 +702,14 @@ files:
701
702
  - lib/whois/parsers/whois.sgnic.sg.rb
702
703
  - lib/whois/parsers/whois.sk-nic.sk.rb
703
704
  - lib/whois/parsers/whois.smallregistry.net.rb
705
+ - lib/whois/parsers/whois.sr.rb
704
706
  - lib/whois/parsers/whois.srs.net.nz.rb
705
707
  - lib/whois/parsers/whois.sx.rb
706
708
  - lib/whois/parsers/whois.tcinet.ru.rb
707
709
  - lib/whois/parsers/whois.teleinfo.cn.rb
708
710
  - lib/whois/parsers/whois.thnic.co.th.rb
709
711
  - lib/whois/parsers/whois.tld.ee.rb
712
+ - lib/whois/parsers/whois.tld.mu.rb
710
713
  - lib/whois/parsers/whois.tld.sy.rb
711
714
  - lib/whois/parsers/whois.tonic.to.rb
712
715
  - lib/whois/parsers/whois.tonicregistry.to.rb