|
| 1 | +# Changelog |
| 2 | + |
| 3 | +All notable changes to the `ipwhois` gem will be documented in this file. |
| 4 | + |
| 5 | +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), |
| 6 | +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). |
| 7 | + |
| 8 | +## [1.2.0] - 2026-05-12 |
| 9 | + |
| 10 | +### Added |
| 11 | + |
| 12 | +- Initial public release of the `ipwhois` gem. |
| 13 | +- `Ipwhois::Client#lookup` — single IP lookup (IPv4 / IPv6, or current IP). |
| 14 | +- `Ipwhois::Client#bulk_lookup` — up to 100 IPs in a single GET request |
| 15 | + (paid plan). |
| 16 | +- Free plan (no API key, `ipwho.is`) and paid plan (with API key, |
| 17 | + `ipwhois.pro`) served by the same `Client` class. |
| 18 | +- HTTPS by default; `ssl: false` constructor option to fall back to HTTP. |
| 19 | +- Localisation (`:lang`), field filtering (`:fields`), threat detection |
| 20 | + (`:security`), rate-limit info (`:rate`). |
| 21 | +- Fluent client-wide defaults: `set_language`, `set_fields`, `set_security`, |
| 22 | + `set_rate`, `set_timeout`, `set_connect_timeout`, `set_user_agent` — each |
| 23 | + returns `self` and is chainable. |
| 24 | +- **The library never raises.** All errors — invalid input, network failure, |
| 25 | + API-level errors (bad IP, bad key, rate limit, …) — are returned in the |
| 26 | + response hash with `'success' => false` and a `'message'`. HTTP error |
| 27 | + responses are additionally enriched with `'http_status'`, and HTTP 429 |
| 28 | + responses on the free plan with `'retry_after'`. |
| 29 | +- Every error response carries an `'error_type'` field: one of `'api'`, |
| 30 | + `'network'`, or `'invalid_argument'`, so callers can branch on the failure |
| 31 | + category with a single `info['error_type']` check. |
| 32 | +- Minitest test suite covering URL construction, IPv6 path encoding, and |
| 33 | + input validation. No real HTTP request is sent — the suite runs anywhere |
| 34 | + without an API key or network access. |
| 35 | +- No runtime dependencies — uses only the Ruby stdlib (`net/http`, `uri`, |
| 36 | + `json`, `openssl`). |
| 37 | +- Ruby `>= 3.0` requirement. |
0 commit comments