weppos/whois
64.8
Adequate · 20 September 2026
1.7k
lines of production code
Ruby
primary language
1
measurement over time
What this system is
This system is a pure Ruby WHOIS client library that executes network queries against domain, IP, and ASN registries. It parses raw server responses into structured records, supporting complex scenarios like multi-fragment replies and referral resolution across various TLDs. The library provides a command-line interface for direct terminal usage and includes extensive tooling for managing server definitions and testing adapter logic.
How it got here
2009 — Ruby Whois 6.0.3 initial release
4 changes.
This period marks the initial release of Ruby Whois version 6.0.3, establishing the core architecture with a pure Ruby WHOIS client, parser, and a comprehensive error hierarchy. The work involved refactoring server adapters into an object-oriented structure to replace YAML-based configurations, thereby improving maintainability and handling unique WHOIS protocols. Additionally, convenience methods were deprecated in favor of explicit parser usage, and the project repository was initialized with standard configuration and documentation files.
2010 — RSpec migration and dependency updates
4 changes.
The project migrated its test infrastructure from Test::Unit to RSpec, establishing a new spec directory and helper configuration. Comprehensive test suites were added for the Whois core components and server adapters to ensure robust coverage of client, record, and lookup behaviors. Development dependencies were also updated to enforce consistent environments with Ruby 3.2 and specific gem versions.
2011–2014 — CLI tool and multi-response support
8 changes.
This period focused on enhancing the library's usability and parsing capabilities by introducing a new command-line interface and supporting multi-fragment WHOIS responses. Significant effort was also dedicated to improving test reliability, expanding coverage for server and client components, and creating utility scripts for TLD definition management.
Features
Add whoisrb command-line interface
Users can now perform WHOIS lookups directly from the terminal using the new \whoisrb\ executable. This command-line tool accepts domain names or IP addresses as arguments and supports options to configure connection timeouts, specify custom hosts, and control referral query behavior, providing a convenient way to query WHOIS servers without writing Ruby code.
bin · high confidence
Initial release of Ruby Whois 6.0.3
This change introduces the initial implementation of the Ruby Whois library (version 6.0.3), providing a pure Ruby WHOIS client and parser. The release establishes the core architecture, including the \Whois::Client\ for executing queries with configurable timeouts and binding settings, the \Whois::Server\ class for managing server definitions loaded from JSON data, and the \Whois::Record\ class for handling responses. It also defines a comprehensive error hierarchy (\Whois::Error\, \ConnectionError\, \ServerError\, etc.) and includes adapters for various query types such as TLDs, IPv4, IPv6, and ASNs.
lib/whois · high confidence
Introduce Whois::Record::Part for multi-response handling
The library now supports parsing WHOIS responses that consist of multiple fragments from different hosts. A new Whois::Record::Part struct has been added to represent individual response bodies and their originating hosts, allowing the main Record to aggregate data from sources like thin servers that return multiple responses.
lib/whois/record · high confidence
New utility scripts for TLD definition management and testing
Added several new executable scripts in the utils directory to support development and maintenance workflows. The \deftld.rb\ tool provides a command-line interface for managing TLD definitions stored in \data/tld.json\, supporting operations like adding, updating, and validating definitions according to schema version 2. The \compare-whois.rb\ script compares local TLD server definitions against an external IANA source to highlight discrepancies. Additional utilities include \mkwhois.rb\ and \fixupd.rb\ for generating and updating test fixtures from live WHOIS responses, \defutils.rb\ for automating new gTLD tagging, and \matrix.rb\ for generating parser capability matrices.
utils · high confidence
Behavioural changes
Deprecation of convenience methods and introduction of deprecation warnings
The \Whois.available?\ and \Whois.registered?\ methods are now deprecated; calling them issues a warning and directs users to use \Whois.whois(...).parser.available?\ or \registered?\ instead, while also requiring the \whois-parser\ gem. The \Whois.lookup\ method remains the primary entry point, aliased as \whois\, and a new \deprecate\ helper is introduced to standardize deprecation warnings across the library.
lib · high confidence
Move SocketHandler under Whois::Server
The SocketHandler class, which performs synchronous WHOIS queries via TCP sockets, has been moved into the Whois::Server namespace. This change reorganizes the library's internal structure by placing the default query handler directly under the Server module, improving code organization without altering the external API or query behavior.
lib/whois/server · high confidence
Refactored WHOIS server adapters to use a new object-oriented structure
The WHOIS server adapters have been rewritten to use an object-oriented definition, replacing the previous YAML-based configuration with Ruby syntax. This change introduces a new \Base\ adapter class that manages the query lifecycle, including socket handling, buffer management, and referral resolution. Specific adapters like \Afilias\, \Arin\, \Verisign\, and \Arpa\ now implement their own \request\ methods to handle unique WHOIS protocols, such as ARIN's referral server parsing and Afilias/Verisign's referral logic. The \Standard\ adapter handles basic queries, while \Formatted\ allows custom query string formatting. New adapters \None\ and \NotImplemented\ provide explicit error handling for unsupported interfaces, and the \Web\ adapter now raises a \WebInterfaceError\ with the URL. This refactoring improves code maintainability and allows for more flexible adapter configuration.
lib/whois/server/adapters · high confidence
Test coverage
Add RSpec support helpers for connectivity and definition management; Added RSpec test suite for WHOIS server adapters; Added RSpec test suite for Whois core components; Added integration tests for WHOIS client query options; Added tests for Whois::Record::Part initialization; Added tests for Whois::Server::SocketHandler; Migrate test suite to RSpec.
Dependencies
Add Gemfile and update gemspec for Rubocop and RSpec dependencies
The project now includes a Gemfile that explicitly declares development dependencies for Rubocop (\~\> 1.89.0) and Rubocop-RSpec (\~\> 3.10.2), alongside the gemspec. The gemspec has been updated to require Ruby version 3.2 or higher and lists rake, rspec, and yard as development dependencies, ensuring consistent local development environments.
(dependencies) · high confidence
Housekeeping
Project initialization and configuration scaffolding
The repository has been initialized with essential configuration files, including \.gitignore\, \.rspec\, \.rubocop.yml\ (targeting Ruby 3.0), \.simplecov\, \.tool-versions\ (specifying Ruby 3.4.2), and \.yardopts\. Documentation has been standardized with \README.md\, \CONTRIBUTING.md\, \LICENSE.txt\, and \SECURITY.md\. The \Rakefile\ defines default tasks for testing (\rspec\) and linting (\rubocop\), while the \CHANGELOG.md\ indicates the current unreleased version requires a minimum of Ruby 3.2.
(repo-wide) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Baseline
- First survey — no prior run to compare against. CAI 65.
Lenses
- Code Health 100
- Architecture 82
- Maturity 49
- Readiness 74
- Security 80
Changes since last survey
- 300 commits — 267 feature/other, 33 fixes
By area
- (root) — 178 commits
- data/tld.json — 55 commits
- lib/whois — 25 commits
- .github/workflows — 19 commits
- spec/whois — 9 commits
- .github/FUNDING.yml — 5 commits
- .github/dependabot.yml — 3 commits
- (repo) — 1 commit
- data/ipv4.json — 1 commit
- lib/whois.rb — 1 commit
- spec/fixtures — 1 commit
- spec/integration — 1 commit
- utils/deftld.rb — 1 commit
Notable commits
- fix: Fix .CAT adapter
- fix: Fix RSpec/HookArgument
- fix: Fix RSpec/ReceiveNever
- fix: Fix Style/Alias
- fix: Fix Style/HashEachMethods
- fix: Fix Style/IfUnlessModifier
- fix: Fix Style/NumericPredicate
- fix: Fix Style/PerlBackrefs
- fix: Fix Style/RedundantParentheses
- fix: Fix Style/RedundantSelf
- fix: Fix Style/RegexpLiteral
- fix: Fix Style/ZeroLengthPredicate
- fix: Fix detection of whois server for Verisign thin queries (#559)
- fix: Fix incorrect changelog
- fix: Fix path
- fix: Fix referrals for afilias and verisign
- fix: Fix rubocop offenses
- fix: Fix rubocop offenses
- fix: Fix the .link tld (#543)
- fix: Fix whois.nic.beauty (#541)
- …and 280 more
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
weppos/whois was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 20 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 5e0f0058313297b385046a42ac10a3d52b777460 — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-b51f968c9b10.