whois-parser-next 0.1.0

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.
Files changed (354) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +80 -0
  3. data/CODE_OF_CONDUCT.md +30 -0
  4. data/CONTRIBUTING.md +80 -0
  5. data/GOVERNANCE.md +59 -0
  6. data/LICENSE.txt +22 -0
  7. data/MAINTAINERS.md +44 -0
  8. data/README.md +123 -0
  9. data/RELEASING.md +43 -0
  10. data/ROADMAP.md +59 -0
  11. data/SECURITY.md +41 -0
  12. data/lib/whois/parser/contact.rb +56 -0
  13. data/lib/whois/parser/errors.rb +46 -0
  14. data/lib/whois/parser/nameserver.rb +39 -0
  15. data/lib/whois/parser/registrar.rb +25 -0
  16. data/lib/whois/parser/super_struct.rb +50 -0
  17. data/lib/whois/parser/version.rb +6 -0
  18. data/lib/whois/parser.rb +447 -0
  19. data/lib/whois/parser_extensions/whois.rb +83 -0
  20. data/lib/whois/parser_extensions/whois_parser.rb +24 -0
  21. data/lib/whois/parser_extensions/whois_record.rb +236 -0
  22. data/lib/whois/parser_extensions.rb +3 -0
  23. data/lib/whois/parsers/base.rb +413 -0
  24. data/lib/whois/parsers/base_afilias.rb +144 -0
  25. data/lib/whois/parsers/base_afilias2.rb +145 -0
  26. data/lib/whois/parsers/base_cocca.rb +97 -0
  27. data/lib/whois/parsers/base_cocca2.rb +93 -0
  28. data/lib/whois/parsers/base_icann_compliant.rb +158 -0
  29. data/lib/whois/parsers/base_icb.rb +51 -0
  30. data/lib/whois/parsers/base_iisse.rb +113 -0
  31. data/lib/whois/parsers/base_nic_fr.rb +175 -0
  32. data/lib/whois/parsers/base_shared1.rb +112 -0
  33. data/lib/whois/parsers/base_shared2.rb +130 -0
  34. data/lib/whois/parsers/base_shared3.rb +131 -0
  35. data/lib/whois/parsers/base_unsupported_registry.rb +30 -0
  36. data/lib/whois/parsers/base_verisign.rb +106 -0
  37. data/lib/whois/parsers/base_whoisd.rb +150 -0
  38. data/lib/whois/parsers/blank.rb +35 -0
  39. data/lib/whois/parsers/capetown-whois.registry.net.za.rb +25 -0
  40. data/lib/whois/parsers/ccwhois.ksregistry.net.rb +25 -0
  41. data/lib/whois/parsers/ccwhois.verisign-grs.com.rb +25 -0
  42. data/lib/whois/parsers/coza-whois.registry.net.za.rb +25 -0
  43. data/lib/whois/parsers/durban-whois.registry.net.za.rb +25 -0
  44. data/lib/whois/parsers/example.rb +163 -0
  45. data/lib/whois/parsers/joburg-whois.registry.net.za.rb +25 -0
  46. data/lib/whois/parsers/kero.yachay.pe.rb +97 -0
  47. data/lib/whois/parsers/org-whois.registry.net.za.rb +25 -0
  48. data/lib/whois/parsers/registry_response_safety.rb +29 -0
  49. data/lib/whois/parsers/tvwhois.verisign-grs.com.rb +25 -0
  50. data/lib/whois/parsers/vunic.vu.rb +11 -0
  51. data/lib/whois/parsers/whois.1und1.info.rb +28 -0
  52. data/lib/whois/parsers/whois.35.com.rb +23 -0
  53. data/lib/whois/parsers/whois.aeda.net.ae.rb +65 -0
  54. data/lib/whois/parsers/whois.aero.rb +58 -0
  55. data/lib/whois/parsers/whois.afilias-grs.info.rb +33 -0
  56. data/lib/whois/parsers/whois.afilias-srs.net.rb +16 -0
  57. data/lib/whois/parsers/whois.afilias.net.rb +41 -0
  58. data/lib/whois/parsers/whois.amnic.net.rb +81 -0
  59. data/lib/whois/parsers/whois.ascio.com.rb +29 -0
  60. data/lib/whois/parsers/whois.ati.tn.rb +120 -0
  61. data/lib/whois/parsers/whois.auda.org.au.rb +12 -0
  62. data/lib/whois/parsers/whois.audns.net.au.rb +118 -0
  63. data/lib/whois/parsers/whois.ax.rb +64 -0
  64. data/lib/whois/parsers/whois.biz.rb +34 -0
  65. data/lib/whois/parsers/whois.bnnic.bn.rb +77 -0
  66. data/lib/whois/parsers/whois.cat.rb +75 -0
  67. data/lib/whois/parsers/whois.cctld.by.rb +98 -0
  68. data/lib/whois/parsers/whois.cctld.uz.rb +83 -0
  69. data/lib/whois/parsers/whois.cdmon.com.rb +23 -0
  70. data/lib/whois/parsers/whois.centralnic.com.rb +144 -0
  71. data/lib/whois/parsers/whois.cira.ca.rb +227 -0
  72. data/lib/whois/parsers/whois.cmc.iq.rb +25 -0
  73. data/lib/whois/parsers/whois.cnnic.cn.rb +108 -0
  74. data/lib/whois/parsers/whois.co.ca.rb +74 -0
  75. data/lib/whois/parsers/whois.co.pl.rb +82 -0
  76. data/lib/whois/parsers/whois.co.ug.rb +93 -0
  77. data/lib/whois/parsers/whois.comlaude.com.rb +113 -0
  78. data/lib/whois/parsers/whois.corporatedomains.com.rb +28 -0
  79. data/lib/whois/parsers/whois.denic.de.rb +164 -0
  80. data/lib/whois/parsers/whois.dk-hostmaster.dk.rb +88 -0
  81. data/lib/whois/parsers/whois.dns.be.rb +120 -0
  82. data/lib/whois/parsers/whois.dns.hr.rb +119 -0
  83. data/lib/whois/parsers/whois.dns.lu.rb +125 -0
  84. data/lib/whois/parsers/whois.dns.pl.rb +151 -0
  85. data/lib/whois/parsers/whois.dns.pt.rb +92 -0
  86. data/lib/whois/parsers/whois.domain-registry.nl.rb +133 -0
  87. data/lib/whois/parsers/whois.domainregistry.ie.rb +128 -0
  88. data/lib/whois/parsers/whois.domreg.lt.rb +68 -0
  89. data/lib/whois/parsers/whois.donuts.co.rb +59 -0
  90. data/lib/whois/parsers/whois.dot.cf.rb +71 -0
  91. data/lib/whois/parsers/whois.dot.tk.rb +70 -0
  92. data/lib/whois/parsers/whois.dotgov.gov.rb +58 -0
  93. data/lib/whois/parsers/whois.dotmobiregistry.net.rb +21 -0
  94. data/lib/whois/parsers/whois.dotpostregistry.net.rb +25 -0
  95. data/lib/whois/parsers/whois.dreamhost.com.rb +23 -0
  96. data/lib/whois/parsers/whois.educause.edu.rb +198 -0
  97. data/lib/whois/parsers/whois.eenet.ee.rb +72 -0
  98. data/lib/whois/parsers/whois.enom.com.rb +34 -0
  99. data/lib/whois/parsers/whois.eu.org.rb +58 -0
  100. data/lib/whois/parsers/whois.eu.rb +130 -0
  101. data/lib/whois/parsers/whois.fi.rb +119 -0
  102. data/lib/whois/parsers/whois.gandi.net.rb +36 -0
  103. data/lib/whois/parsers/whois.gg.rb +93 -0
  104. data/lib/whois/parsers/whois.godaddy.com.rb +42 -0
  105. data/lib/whois/parsers/whois.gov.za.rb +60 -0
  106. data/lib/whois/parsers/whois.hkirc.hk.rb +71 -0
  107. data/lib/whois/parsers/whois.iana.org.rb +102 -0
  108. data/lib/whois/parsers/whois.id.rb +26 -0
  109. data/lib/whois/parsers/whois.iedr.ie.rb +18 -0
  110. data/lib/whois/parsers/whois.iis.nu.rb +46 -0
  111. data/lib/whois/parsers/whois.iis.se.rb +26 -0
  112. data/lib/whois/parsers/whois.in.ua.rb +75 -0
  113. data/lib/whois/parsers/whois.inregistry.net.rb +27 -0
  114. data/lib/whois/parsers/whois.isnic.is.rb +70 -0
  115. data/lib/whois/parsers/whois.isoc.org.il.rb +75 -0
  116. data/lib/whois/parsers/whois.ja.net.rb +75 -0
  117. data/lib/whois/parsers/whois.je.rb +75 -0
  118. data/lib/whois/parsers/whois.jprs.jp.rb +103 -0
  119. data/lib/whois/parsers/whois.kenic.or.ke.rb +93 -0
  120. data/lib/whois/parsers/whois.kg.rb +77 -0
  121. data/lib/whois/parsers/whois.kr.rb +79 -0
  122. data/lib/whois/parsers/whois.markmonitor.com.rb +36 -0
  123. data/lib/whois/parsers/whois.marnet.mk.rb +20 -0
  124. data/lib/whois/parsers/whois.monic.mo.rb +83 -0
  125. data/lib/whois/parsers/whois.museum.rb +79 -0
  126. data/lib/whois/parsers/whois.mx.rb +16 -0
  127. data/lib/whois/parsers/whois.mynic.my.rb +86 -0
  128. data/lib/whois/parsers/whois.na-nic.com.na.rb +21 -0
  129. data/lib/whois/parsers/whois.nc.rb +122 -0
  130. data/lib/whois/parsers/whois.netcom.cm.rb +54 -0
  131. data/lib/whois/parsers/whois.networksolutions.com.rb +37 -0
  132. data/lib/whois/parsers/whois.nic.ac.rb +33 -0
  133. data/lib/whois/parsers/whois.nic.af.rb +32 -0
  134. data/lib/whois/parsers/whois.nic.ag.rb +33 -0
  135. data/lib/whois/parsers/whois.nic.ai.rb +62 -0
  136. data/lib/whois/parsers/whois.nic.ar.rb +54 -0
  137. data/lib/whois/parsers/whois.nic.art.rb +9 -0
  138. data/lib/whois/parsers/whois.nic.as.rb +73 -0
  139. data/lib/whois/parsers/whois.nic.asia.rb +112 -0
  140. data/lib/whois/parsers/whois.nic.at.rb +68 -0
  141. data/lib/whois/parsers/whois.nic.best.rb +9 -0
  142. data/lib/whois/parsers/whois.nic.bj.rb +127 -0
  143. data/lib/whois/parsers/whois.nic.bo.rb +82 -0
  144. data/lib/whois/parsers/whois.nic.business.rb +8 -0
  145. data/lib/whois/parsers/whois.nic.cat.rb +23 -0
  146. data/lib/whois/parsers/whois.nic.cd.rb +38 -0
  147. data/lib/whois/parsers/whois.nic.cfd.rb +9 -0
  148. data/lib/whois/parsers/whois.nic.ch.rb +109 -0
  149. data/lib/whois/parsers/whois.nic.chat.rb +10 -0
  150. data/lib/whois/parsers/whois.nic.ci.rb +74 -0
  151. data/lib/whois/parsers/whois.nic.cl.rb +76 -0
  152. data/lib/whois/parsers/whois.nic.cloud.rb +15 -0
  153. data/lib/whois/parsers/whois.nic.club.rb +15 -0
  154. data/lib/whois/parsers/whois.nic.co.rb +25 -0
  155. data/lib/whois/parsers/whois.nic.college.rb +25 -0
  156. data/lib/whois/parsers/whois.nic.coop.rb +70 -0
  157. data/lib/whois/parsers/whois.nic.cr.rb +64 -0
  158. data/lib/whois/parsers/whois.nic.cx.rb +25 -0
  159. data/lib/whois/parsers/whois.nic.cz.rb +42 -0
  160. data/lib/whois/parsers/whois.nic.delivery.rb +9 -0
  161. data/lib/whois/parsers/whois.nic.design.rb +30 -0
  162. data/lib/whois/parsers/whois.nic.direct.rb +9 -0
  163. data/lib/whois/parsers/whois.nic.dm.rb +39 -0
  164. data/lib/whois/parsers/whois.nic.domains.rb +8 -0
  165. data/lib/whois/parsers/whois.nic.dz.rb +67 -0
  166. data/lib/whois/parsers/whois.nic.ec.rb +44 -0
  167. data/lib/whois/parsers/whois.nic.es.rb +114 -0
  168. data/lib/whois/parsers/whois.nic.fm.rb +18 -0
  169. data/lib/whois/parsers/whois.nic.fo.rb +69 -0
  170. data/lib/whois/parsers/whois.nic.fr.rb +25 -0
  171. data/lib/whois/parsers/whois.nic.fun.rb +13 -0
  172. data/lib/whois/parsers/whois.nic.games.rb +9 -0
  173. data/lib/whois/parsers/whois.nic.gd.rb +31 -0
  174. data/lib/whois/parsers/whois.nic.gl.rb +49 -0
  175. data/lib/whois/parsers/whois.nic.group.rb +8 -0
  176. data/lib/whois/parsers/whois.nic.gs.rb +31 -0
  177. data/lib/whois/parsers/whois.nic.hn.rb +49 -0
  178. data/lib/whois/parsers/whois.nic.host.rb +37 -0
  179. data/lib/whois/parsers/whois.nic.ht.rb +25 -0
  180. data/lib/whois/parsers/whois.nic.hu.rb +78 -0
  181. data/lib/whois/parsers/whois.nic.icu.rb +12 -0
  182. data/lib/whois/parsers/whois.nic.im.rb +66 -0
  183. data/lib/whois/parsers/whois.nic.ink.rb +12 -0
  184. data/lib/whois/parsers/whois.nic.io.rb +52 -0
  185. data/lib/whois/parsers/whois.nic.ir.rb +70 -0
  186. data/lib/whois/parsers/whois.nic.it.rb +159 -0
  187. data/lib/whois/parsers/whois.nic.jobs.rb +25 -0
  188. data/lib/whois/parsers/whois.nic.ki.rb +25 -0
  189. data/lib/whois/parsers/whois.nic.kz.rb +69 -0
  190. data/lib/whois/parsers/whois.nic.la.rb +32 -0
  191. data/lib/whois/parsers/whois.nic.li.rb +68 -0
  192. data/lib/whois/parsers/whois.nic.life.rb +10 -0
  193. data/lib/whois/parsers/whois.nic.link.rb +13 -0
  194. data/lib/whois/parsers/whois.nic.lk.rb +109 -0
  195. data/lib/whois/parsers/whois.nic.ltd.rb +8 -0
  196. data/lib/whois/parsers/whois.nic.lv.rb +69 -0
  197. data/lib/whois/parsers/whois.nic.ly.rb +78 -0
  198. data/lib/whois/parsers/whois.nic.market.rb +8 -0
  199. data/lib/whois/parsers/whois.nic.md.rb +101 -0
  200. data/lib/whois/parsers/whois.nic.me.rb +85 -0
  201. data/lib/whois/parsers/whois.nic.mg.rb +35 -0
  202. data/lib/whois/parsers/whois.nic.ms.rb +37 -0
  203. data/lib/whois/parsers/whois.nic.mu.rb +25 -0
  204. data/lib/whois/parsers/whois.nic.mw.rb +33 -0
  205. data/lib/whois/parsers/whois.nic.mx.rb +79 -0
  206. data/lib/whois/parsers/whois.nic.name.rb +68 -0
  207. data/lib/whois/parsers/whois.nic.net.bw.rb +11 -0
  208. data/lib/whois/parsers/whois.nic.net.ng.rb +27 -0
  209. data/lib/whois/parsers/whois.nic.net.sa.rb +74 -0
  210. data/lib/whois/parsers/whois.nic.net.sb.rb +35 -0
  211. data/lib/whois/parsers/whois.nic.news.rb +8 -0
  212. data/lib/whois/parsers/whois.nic.nf.rb +50 -0
  213. data/lib/whois/parsers/whois.nic.ninja.rb +8 -0
  214. data/lib/whois/parsers/whois.nic.one.rb +41 -0
  215. data/lib/whois/parsers/whois.nic.online.rb +39 -0
  216. data/lib/whois/parsers/whois.nic.org.uy.rb +75 -0
  217. data/lib/whois/parsers/whois.nic.plus.rb +8 -0
  218. data/lib/whois/parsers/whois.nic.pm.rb +25 -0
  219. data/lib/whois/parsers/whois.nic.pr.rb +84 -0
  220. data/lib/whois/parsers/whois.nic.priv.at.rb +62 -0
  221. data/lib/whois/parsers/whois.nic.pub.rb +8 -0
  222. data/lib/whois/parsers/whois.nic.pw.rb +25 -0
  223. data/lib/whois/parsers/whois.nic.re.rb +29 -0
  224. data/lib/whois/parsers/whois.nic.rocks.rb +8 -0
  225. data/lib/whois/parsers/whois.nic.run.rb +8 -0
  226. data/lib/whois/parsers/whois.nic.sh.rb +25 -0
  227. data/lib/whois/parsers/whois.nic.site.rb +62 -0
  228. data/lib/whois/parsers/whois.nic.sl.rb +80 -0
  229. data/lib/whois/parsers/whois.nic.sm.rb +84 -0
  230. data/lib/whois/parsers/whois.nic.sn.rb +119 -0
  231. data/lib/whois/parsers/whois.nic.so.rb +71 -0
  232. data/lib/whois/parsers/whois.nic.software.rb +9 -0
  233. data/lib/whois/parsers/whois.nic.solutions.rb +9 -0
  234. data/lib/whois/parsers/whois.nic.space.rb +25 -0
  235. data/lib/whois/parsers/whois.nic.st.rb +76 -0
  236. data/lib/whois/parsers/whois.nic.store.rb +15 -0
  237. data/lib/whois/parsers/whois.nic.studio.rb +8 -0
  238. data/lib/whois/parsers/whois.nic.systems.rb +8 -0
  239. data/lib/whois/parsers/whois.nic.tc.rb +25 -0
  240. data/lib/whois/parsers/whois.nic.tech.rb +33 -0
  241. data/lib/whois/parsers/whois.nic.technology.rb +8 -0
  242. data/lib/whois/parsers/whois.nic.tel.rb +25 -0
  243. data/lib/whois/parsers/whois.nic.tg.rb +49 -0
  244. data/lib/whois/parsers/whois.nic.tl.rb +32 -0
  245. data/lib/whois/parsers/whois.nic.tm.rb +101 -0
  246. data/lib/whois/parsers/whois.nic.today.rb +8 -0
  247. data/lib/whois/parsers/whois.nic.tools.rb +9 -0
  248. data/lib/whois/parsers/whois.nic.tr.rb +159 -0
  249. data/lib/whois/parsers/whois.nic.travel.rb +25 -0
  250. data/lib/whois/parsers/whois.nic.tv.rb +15 -0
  251. data/lib/whois/parsers/whois.nic.uk.rb +177 -0
  252. data/lib/whois/parsers/whois.nic.us.rb +25 -0
  253. data/lib/whois/parsers/whois.nic.ve.rb +94 -0
  254. data/lib/whois/parsers/whois.nic.vg.rb +16 -0
  255. data/lib/whois/parsers/whois.nic.video.rb +10 -0
  256. data/lib/whois/parsers/whois.nic.vip.rb +13 -0
  257. data/lib/whois/parsers/whois.nic.website.rb +9 -0
  258. data/lib/whois/parsers/whois.nic.wf.rb +29 -0
  259. data/lib/whois/parsers/whois.nic.win.rb +10 -0
  260. data/lib/whois/parsers/whois.nic.work.rb +10 -0
  261. data/lib/whois/parsers/whois.nic.works.rb +8 -0
  262. data/lib/whois/parsers/whois.nic.world.rb +10 -0
  263. data/lib/whois/parsers/whois.nic.xxx.rb +42 -0
  264. data/lib/whois/parsers/whois.nic.xyz.rb +25 -0
  265. data/lib/whois/parsers/whois.nixiregistry.in.rb +15 -0
  266. data/lib/whois/parsers/whois.norid.no.rb +61 -0
  267. data/lib/whois/parsers/whois.ovh.com.rb +12 -0
  268. data/lib/whois/parsers/whois.pairnic.com.rb +28 -0
  269. data/lib/whois/parsers/whois.pandi.or.id.rb +25 -0
  270. data/lib/whois/parsers/whois.pir.org.rb +90 -0
  271. data/lib/whois/parsers/whois.pnina.ps.rb +31 -0
  272. data/lib/whois/parsers/whois.register.bg.rb +86 -0
  273. data/lib/whois/parsers/whois.register.com.rb +30 -0
  274. data/lib/whois/parsers/whois.register.si.rb +73 -0
  275. data/lib/whois/parsers/whois.registre.ma.rb +65 -0
  276. data/lib/whois/parsers/whois.registro.br.rb +126 -0
  277. data/lib/whois/parsers/whois.registry.co.rb +19 -0
  278. data/lib/whois/parsers/whois.registry.gy.rb +32 -0
  279. data/lib/whois/parsers/whois.registry.hm.rb +72 -0
  280. data/lib/whois/parsers/whois.registry.om.rb +40 -0
  281. data/lib/whois/parsers/whois.registry.qa.rb +25 -0
  282. data/lib/whois/parsers/whois.ricta.org.rw.rb +16 -0
  283. data/lib/whois/parsers/whois.ripe.net.rb +68 -0
  284. data/lib/whois/parsers/whois.rnids.rs.rb +135 -0
  285. data/lib/whois/parsers/whois.rotld.ro.rb +65 -0
  286. data/lib/whois/parsers/whois.rrpproxy.net.rb +32 -0
  287. data/lib/whois/parsers/whois.safenames.net.rb +48 -0
  288. data/lib/whois/parsers/whois.schlund.info.rb +34 -0
  289. data/lib/whois/parsers/whois.sgnic.sg.rb +92 -0
  290. data/lib/whois/parsers/whois.sk-nic.sk.rb +111 -0
  291. data/lib/whois/parsers/whois.smallregistry.net.rb +131 -0
  292. data/lib/whois/parsers/whois.srs.net.nz.rb +177 -0
  293. data/lib/whois/parsers/whois.sx.rb +127 -0
  294. data/lib/whois/parsers/whois.tcinet.ru.rb +114 -0
  295. data/lib/whois/parsers/whois.thnic.co.th.rb +80 -0
  296. data/lib/whois/parsers/whois.tld.ee.rb +134 -0
  297. data/lib/whois/parsers/whois.tld.sy.rb +34 -0
  298. data/lib/whois/parsers/whois.tonic.to.rb +100 -0
  299. data/lib/whois/parsers/whois.tonicregistry.to.rb +12 -0
  300. data/lib/whois/parsers/whois.trabis.gov.tr.rb +58 -0
  301. data/lib/whois/parsers/whois.tucows.com.rb +28 -0
  302. data/lib/whois/parsers/whois.twnic.net.tw.rb +72 -0
  303. data/lib/whois/parsers/whois.tznic.or.tz.rb +36 -0
  304. data/lib/whois/parsers/whois.ua.rb +242 -0
  305. data/lib/whois/parsers/whois.udag.net.rb +28 -0
  306. data/lib/whois/parsers/whois.uniregistry.net.rb +71 -0
  307. data/lib/whois/parsers/whois.usp.ac.fj.rb +72 -0
  308. data/lib/whois/parsers/whois.verisign-grs.com.rb +49 -0
  309. data/lib/whois/parsers/whois.vunic.vu.rb +14 -0
  310. data/lib/whois/parsers/whois.website.ws.rb +79 -0
  311. data/lib/whois/parsers/whois.wildwestdomains.com.rb +37 -0
  312. data/lib/whois/parsers/whois.yoursrs.com.rb +125 -0
  313. data/lib/whois/parsers/whois.za.net.rb +72 -0
  314. data/lib/whois/parsers/whois.za.org.rb +72 -0
  315. data/lib/whois/parsers/whois.zicta.zm.rb +13 -0
  316. data/lib/whois/parsers/whois1.nic.bi.rb +25 -0
  317. data/lib/whois/parsers/za_central_registry.rb +80 -0
  318. data/lib/whois/parsers.rb +1 -0
  319. data/lib/whois/safe_record.rb +170 -0
  320. data/lib/whois/scanners/base.rb +114 -0
  321. data/lib/whois/scanners/base_afilias.rb +51 -0
  322. data/lib/whois/scanners/base_cocca2.rb +58 -0
  323. data/lib/whois/scanners/base_icann_compliant.rb +45 -0
  324. data/lib/whois/scanners/base_iisse.rb +36 -0
  325. data/lib/whois/scanners/base_shared1.rb +31 -0
  326. data/lib/whois/scanners/base_shared2.rb +35 -0
  327. data/lib/whois/scanners/base_shared3.rb +37 -0
  328. data/lib/whois/scanners/base_whoisd.rb +44 -0
  329. data/lib/whois/scanners/iana.rb +89 -0
  330. data/lib/whois/scanners/scannable.rb +65 -0
  331. data/lib/whois/scanners/verisign.rb +100 -0
  332. data/lib/whois/scanners/whois.ati.tn.rb +32 -0
  333. data/lib/whois/scanners/whois.audns.net.au.rb +32 -0
  334. data/lib/whois/scanners/whois.cctld.by.rb +35 -0
  335. data/lib/whois/scanners/whois.centralnic.com.rb +32 -0
  336. data/lib/whois/scanners/whois.cira.ca.rb +72 -0
  337. data/lib/whois/scanners/whois.cnnic.cn.rb +42 -0
  338. data/lib/whois/scanners/whois.denic.de.rb +103 -0
  339. data/lib/whois/scanners/whois.dns.hr.rb +30 -0
  340. data/lib/whois/scanners/whois.domainregistry.ie.rb +51 -0
  341. data/lib/whois/scanners/whois.fi.rb +66 -0
  342. data/lib/whois/scanners/whois.nc.rb +32 -0
  343. data/lib/whois/scanners/whois.nic.cz.rb +22 -0
  344. data/lib/whois/scanners/whois.nic.it.rb +92 -0
  345. data/lib/whois/scanners/whois.pir.org.rb +17 -0
  346. data/lib/whois/scanners/whois.rnids.rs.rb +52 -0
  347. data/lib/whois/scanners/whois.smallregistry.net.rb +50 -0
  348. data/lib/whois/scanners/whois.srs.net.nz.rb +23 -0
  349. data/lib/whois/scanners/whois.sx.rb +37 -0
  350. data/lib/whois/scanners/whois.tld.ee.rb +47 -0
  351. data/lib/whois/scanners/whois.tucows.com.rb +23 -0
  352. data/lib/whois/scanners/whois.yoursrs.com.rb +24 -0
  353. data/lib/whois-parser.rb +10 -0
  354. metadata +507 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 64090073c595bd3cbd6e1a52628cf6d3481de3933b791d9338bf1793922dc6a4
4
+ data.tar.gz: b15050ea47d7662aedb25a2f0e6e0e8997c7c825b2de70e149dce0f85fd7dd8c
5
+ SHA512:
6
+ metadata.gz: 8946d38a18bdb012fc79661fc31fcf67f4e63b7cdd728e14dacf48c77a72317322f145544d89b97725f292d4e1860a2aa9ba4842824378745541aea0e9408eee
7
+ data.tar.gz: 8d10ae4db2cfdf8aee03bc17d4867afd56e03dfa19ddcf4ca31610acbd4957bad49a34a3c6fbbbc2988c77ae42c7f86e1c4ae8e1f2a0bd1342ffe5febd68bbbe
data/CHANGELOG.md ADDED
@@ -0,0 +1,80 @@
1
+ # Changelog
2
+
3
+ This project uses [Semantic Versioning 2.0.0](http://semver.org/).
4
+
5
+
6
+ #### Unreleased 0.1.0
7
+
8
+ - CHANGED: Continued the project as `whois-parser-next`, with the original MIT
9
+ license, attribution, and Git history preserved.
10
+ - CHANGED: Established Ruby 3.2 as the minimum supported version and refreshed
11
+ the maintained dependency range.
12
+ - TESTED: Verified CI support through Ruby 4.0.7; Ruby 3.2 remains the minimum
13
+ supported version.
14
+ - ADDED: Audits and regression fixtures for current registry responses.
15
+ - ADDED: Documented the 2026-09-19 usage-ranked audit through rank 300, using the ICANN DNS
16
+ Magnitude snapshot dated 2026-09-12 and generated 2026-09-18, retaining
17
+ source daily-rank positions and classifying `.arpa` outside registrable-domain
18
+ parser scope.
19
+ - TESTED: The combined audit suite passes 6,640 examples with 0 failures.
20
+ - PACKAGING: The published gem is runtime-only, containing the library and
21
+ essential documentation while excluding tests, fixtures, and repository
22
+ automation.
23
+
24
+
25
+ #### Release 2.0.0
26
+
27
+ - CHANGED: Minimum Ruby version 2.6
28
+
29
+ - FIXED: Addressed security issues with eval and YAML.load. Thanks Francis Beaudoin
30
+
31
+
32
+ #### Release 1.2.0
33
+
34
+ - CHANGED: Updated .ORG parser to the latest response (GH-98, GH-97). [Thanks @talarini]
35
+ - CHANGED: Updated .IO, .AC, .SH, .TM parsers to the latest response.
36
+ - CHANGED: Renamed WhoisDomainKg to WhoisKg (GH-48)
37
+
38
+
39
+ #### Release 1.1.0
40
+
41
+ - NEW: Added .FM parser (GH-74). [Thanks @thomas07vt]
42
+ - NEW: Added .BR parser contacts (GH-31). [Thanks @forain]
43
+
44
+ - CHANGED: Updated WhoisAi to WhoisNicAi.
45
+ - CHANGED: WhoizBiz to the new response (GH-73). [Thanks @thomas07vt]
46
+ - CHANGED: WhoizNicSt to the new response (GH-72). [Thanks @fturmel]
47
+ - CHANGED: WhoisRegistryNetZa to the new response (GH-43). [Thanks @sheldonh]
48
+
49
+ - FIXED: Bug where .EU domain property had double .eu suffix (GH-63).
50
+ - FIXED: Fix scanning issue with .ca when keys have no value (GH-36).
51
+
52
+
53
+ #### Release 1.0.1
54
+
55
+ - CHANGED: Updated GoDaddy parser to the new response (GH-60).
56
+ - CHANGED: Updated Donuts parser to the new response. It looks like Donuts is now more compliant with base ICANN parser.
57
+ - CHANGED: Updated Verisign parser to the new response (GH-57). [Thanks @phcyso]
58
+ - CHANGED: Updated .BR parser to the new response (GH-51). [Thanks @otaviojr]
59
+ - CHANGED: Add support for :expires_on to base_nic_fr (GH-54). [Thanks @yastupin]
60
+
61
+
62
+ #### Release 1.0
63
+
64
+ **1.0.0-beta2**
65
+
66
+ - NEW: Added whois.cdmon.com parser (GH-27). [Thanks @sfumanal]
67
+
68
+ - FIXED: Fix for Record#respond_to?(:available?) (GH-28, GH-29, GH-30). Thanks [@marcandre]
69
+
70
+ **1.0.0-beta1**
71
+
72
+ Initial import from the `whois` library.
73
+
74
+ - NEW: whois.dk-hostmaster.dk parser now recognizes throttled responses (whois/GH-382). [Thanks @troelskn]
75
+ - NEW: Safer time parsing (GH-18). [Thanks @davidcornu]
76
+ - NEW: Detect reserved .INFO domains (whois/GH-468).
77
+
78
+ - CHANGED: whois.audns.net.au removed the registrar ID field (GH-20, GH-21). Thanks [@afoster]
79
+ - CHANGED: Updated .JOBS from obswhois.verisign-grs.com to whois.nic.jobs (GH-23).
80
+ - CHANGED: Updated .PRO from whois.dotproregistry.net to whois.afilias.net (GH-24).
@@ -0,0 +1,30 @@
1
+ # Code of Conduct
2
+
3
+ `whois-parser-next` is a welcoming technical project. We expect contributors,
4
+ maintainers, and users to treat one another with patience, respect, and good
5
+ faith.
6
+
7
+ ## Expected behavior
8
+
9
+ - Be respectful and constructive.
10
+ - Welcome questions and different levels of experience.
11
+ - Focus criticism on code, evidence, and decisions, not people.
12
+ - Explain disagreements clearly and assume good intentions.
13
+ - Protect private, personal, and security-sensitive information.
14
+
15
+ ## Unacceptable behavior
16
+
17
+ Harassment, discrimination, personal attacks, intimidation, threats,
18
+ deliberate disruption, unwanted private contact, publishing personal
19
+ information, and any other conduct that would make participation unsafe or
20
+ unwelcoming are not acceptable.
21
+
22
+ ## Enforcement
23
+
24
+ Maintainers may edit, close, or remove contributions and may restrict
25
+ participation when necessary to protect the project and its community. Serious
26
+ or repeated violations may result in removal from project spaces.
27
+
28
+ For a conduct concern that cannot be handled publicly, use the private
29
+ reporting path documented in [SECURITY.md](SECURITY.md). Do not publish
30
+ security-sensitive details in a public issue.
data/CONTRIBUTING.md ADDED
@@ -0,0 +1,80 @@
1
+ # Contributing to whois-parser-next
2
+
3
+ Thank you for helping maintain `whois-parser-next`. The project is sponsored
4
+ and supported by [DomScan](https://domscan.net/whois-api), but it is an independent
5
+ community project. Contributions are welcome from everyone who treats
6
+ maintainers, users, and other contributors with respect.
7
+
8
+ WHOIS behavior changes over time. Reliable evidence and focused pull requests
9
+ help us keep the parser useful.
10
+
11
+ ## Getting started
12
+
13
+ Fork and clone the repository, then install its dependencies:
14
+
15
+ ```shell
16
+ git clone git@github.com:your-username/whois-parser-next.git
17
+ cd whois-parser-next
18
+ bundle install
19
+ ```
20
+
21
+ Create a focused branch, add fixtures and tests with your change, then run:
22
+
23
+ ```shell
24
+ bundle exec rspec
25
+ ```
26
+
27
+ Open a pull request against
28
+ [`estevecastells/whois-parser-next`](https://github.com/estevecastells/whois-parser-next/compare/).
29
+
30
+ ## Pull request rules
31
+
32
+ Please follow these rules for every behavior change:
33
+
34
+ 1. Keep one focused registry or server-family change per pull request.
35
+ 2. Add exact, current raw-response fixtures for registered and
36
+ likely-unregistered cases where applicable.
37
+ 3. Never include personal registrant data in fixtures. If a current response
38
+ contains personal data, provide a minimally redacted fixture that preserves
39
+ the parser-relevant structure and document the redaction.
40
+ 4. Never interpret rate limits, blocks, timeouts, malformed responses, or
41
+ ambiguous responses as either available or absent. Unknown must remain
42
+ unknown.
43
+ 5. Add tests for every behavior change, including successful parsing, expected
44
+ absence, errors, and important unknown states.
45
+ 6. Document the date of live verification and the source or server used.
46
+ 7. Do not add paid, private, authenticated, or otherwise inaccessible source
47
+ dependencies.
48
+ 8. Preserve the existing loading path and public API where possible. Discuss
49
+ proposed breaking changes in an issue before opening the implementation PR.
50
+ 9. Run the full test suite before requesting review and report the result in the
51
+ pull request.
52
+ 10. Keep changes understandable and avoid unrelated cleanup in a focused pull
53
+ request.
54
+
55
+ A parser result is not an availability guarantee. Registry policy, rate limits,
56
+ server changes, and the distinction between WHOIS and RDAP all matter.
57
+
58
+ ## Fixtures and privacy
59
+
60
+ Fixtures should represent current server behavior, not invented examples. Do
61
+ not commit names, email addresses, telephone numbers, postal addresses, or
62
+ other personal registrant information. Preserve the fields and response
63
+ structure needed to reproduce the behavior while removing personal data.
64
+
65
+ Never commit credentials, private endpoints, paid-service responses, or data
66
+ that you are not allowed to redistribute.
67
+
68
+ ## Licensing
69
+
70
+ Contributions are made under the MIT license. This project does not require a
71
+ Contributor License Agreement. By submitting a contribution, you confirm that
72
+ you have the right to submit it under those terms.
73
+
74
+ ## Review
75
+
76
+ Maintainers may request narrower scope, stronger evidence, additional fixtures,
77
+ or clearer handling of unknown results. Review is about correctness, evidence,
78
+ privacy, compatibility, and maintainability.
79
+
80
+ Please follow the project's [Code of Conduct](CODE_OF_CONDUCT.md).
data/GOVERNANCE.md ADDED
@@ -0,0 +1,59 @@
1
+ # Governance
2
+
3
+ ## Project status
4
+
5
+ `whois-parser-next` is an independent, community-maintained successor to
6
+ `weppos/whois-parser`. It is sponsored and supported by
7
+ [DomScan](https://domscan.net/whois-api), which helps fund maintenance and operational
8
+ work.
9
+
10
+ DomScan sponsorship does not make DomScan the owner of parser truth. It does
11
+ not buy favorable classifications, priority for private requirements, or the
12
+ ability to make the parser report availability or absence when the evidence is
13
+ unknown.
14
+
15
+ ## Maintainer model
16
+
17
+ The project uses a benevolent-maintainer model. Maintainers are responsible for
18
+ reviewing contributions, protecting compatibility, enforcing project
19
+ standards, and making decisions when consensus is not practical.
20
+
21
+ Maintainers should explain important decisions in public issues or pull
22
+ requests. Decisions should be based on evidence, correctness, privacy,
23
+ security, compatibility, and the long-term health of the project.
24
+
25
+ A maintainer may ask for more evidence, narrow a pull request, defer a change,
26
+ or decline it. Substantive decisions should remain visible in the relevant
27
+ issue or pull request whenever doing so does not expose private or
28
+ security-sensitive information.
29
+
30
+ ## Sponsorship boundary
31
+
32
+ DomScan may propose work, fund maintenance, and contribute code. Sponsorship
33
+ does not permit result manipulation, hidden behavior, preferential parser
34
+ outcomes, or suppression of inconvenient registry evidence.
35
+
36
+ The same standards apply to contributions from DomScan and from every other
37
+ contributor.
38
+
39
+ ## Security reports
40
+
41
+ Do not publish suspected vulnerabilities, credentials, private responses, or
42
+ other sensitive security details in public issues or pull requests. Follow the
43
+ private reporting instructions in [SECURITY.md](SECURITY.md).
44
+
45
+ ## Future maintainers
46
+
47
+ Additional maintainers may be invited based on sustained, high-quality
48
+ contributions, sound technical judgment, respectful collaboration, and
49
+ consistent care for the project's users and evidence standards.
50
+
51
+ Maintainer status is a responsibility, not a reward. It may be reviewed if a
52
+ maintainer becomes inactive or repeatedly fails to uphold this governance and
53
+ the Code of Conduct.
54
+
55
+ ## Changes to governance
56
+
57
+ Proposed governance changes should be discussed publicly in an issue or pull
58
+ request. Maintainers may adopt changes after considering community feedback
59
+ and documenting the decision.
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2009-2022 Simone Carletti
4
+ Copyright (c) 2026 Esteve Castells and whois-parser-next contributors
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ of this software and associated documentation files (the "Software"), to deal
8
+ in the Software without restriction, including without limitation the rights
9
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ copies of the Software, and to permit persons to whom the Software is
11
+ furnished to do so, subject to the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be included in all
14
+ copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ SOFTWARE.
data/MAINTAINERS.md ADDED
@@ -0,0 +1,44 @@
1
+ # Maintainers
2
+
3
+ ## Project owner and lead maintainer
4
+
5
+ Esteve Castells ([@estevecastells](https://github.com/estevecastells)) is the
6
+ project owner and lead maintainer of `whois-parser-next`.
7
+
8
+ Responsibilities include:
9
+
10
+ - Setting project direction and maintaining the public roadmap
11
+ - Reviewing code, fixtures, issues, and pull requests
12
+ - Protecting API compatibility and evidence standards
13
+ - Coordinating releases, security response, and maintainer access
14
+ - Ensuring parser results do not turn uncertain evidence into availability or
15
+ absence
16
+ - Maintaining clear attribution to the original project and its contributors
17
+
18
+ The project is sponsored and supported by
19
+ [DomScan](https://domscan.net/whois-api). Sponsorship supports maintenance and
20
+ does not give any sponsor control over parser results or review decisions.
21
+
22
+ ## Contributor to maintainer
23
+
24
+ Contributors may be invited to become maintainers after sustained,
25
+ high-quality work that demonstrates:
26
+
27
+ - Reliable registry or server-family contributions
28
+ - Strong tests and current, privacy-safe fixtures
29
+ - Careful treatment of unknown and ambiguous responses
30
+ - Respectful, constructive collaboration
31
+ - Sound judgment during issue and pull request review
32
+
33
+ There is no fixed contribution count or automatic promotion process. Maintainer
34
+ invitations are based on demonstrated responsibility and project needs.
35
+
36
+ ## Original-project attribution
37
+
38
+ `whois-parser-next` is an independent, community-maintained successor to
39
+ [`weppos/whois-parser`](https://github.com/weppos/whois-parser).
40
+
41
+ The original project was created and maintained by Simone Carletti, known as
42
+ `weppos`, together with its contributors. This project preserves the original
43
+ MIT license heritage and attribution. It is not affiliated with or endorsed by
44
+ Simone Carletti or `weppos`.
data/README.md ADDED
@@ -0,0 +1,123 @@
1
+ # whois-parser-next
2
+
3
+ `whois-parser-next` is an independent, community-maintained successor to
4
+ [`weppos/whois-parser`](https://github.com/weppos/whois-parser).
5
+
6
+ The original project was created and maintained by Simone Carletti, known as
7
+ `weppos`, together with its contributors. We are grateful for that work and
8
+ for the foundation it provides. This project preserves the original MIT
9
+ license heritage, attribution, notices, and Git history while continuing
10
+ development under a new name.
11
+
12
+ This project is independent and is not affiliated with or endorsed by Simone
13
+ Carletti or `weppos`.
14
+
15
+ [![Tests](https://github.com/estevecastells/whois-parser-next/actions/workflows/tests.yml/badge.svg)](https://github.com/estevecastells/whois-parser-next/actions/workflows/tests.yml)
16
+
17
+ ## Sponsored and supported by DomScan
18
+
19
+ `whois-parser-next` is sponsored and supported by
20
+ [DomScan](https://domscan.net/whois-api), which uses domain intelligence in production
21
+ and helps fund maintenance, testing, and registry-format research.
22
+
23
+ The project remains independent from DomScan and independent from the original
24
+ `weppos/whois-parser` maintainer. DomScan sponsorship does not imply
25
+ endorsement by Simone Carletti or `weppos`, and it does not give any sponsor
26
+ the right to influence parser results.
27
+
28
+ WHOIS formats drift. Parsers should keep up.
29
+
30
+ Project owner and lead maintainer:
31
+ [Esteve Castells](https://github.com/estevecastells). See
32
+ [MAINTAINERS.md](MAINTAINERS.md) and [GOVERNANCE.md](GOVERNANCE.md).
33
+
34
+ ## Status
35
+
36
+ The project is under active development. The initial focus is reliable parsing
37
+ of current WHOIS responses, explicit unknown states, registry-specific
38
+ fixtures, and safe handling of malformed, rate-limited, retired, or changed
39
+ server responses.
40
+
41
+ The current development gem name is `whois-parser-next`. It has not yet been
42
+ published to RubyGems.
43
+
44
+ ## Compatibility
45
+
46
+ The compatibility target is the existing `whois-parser` loading path and
47
+ namespace:
48
+
49
+ ```ruby
50
+ require "whois-parser"
51
+
52
+ Whois::Parser
53
+ ```
54
+
55
+ Existing applications can retain `require "whois-parser"` and their
56
+ `Whois::Parser` integrations while changing the dependency source:
57
+
58
+ ```ruby
59
+ gem "whois-parser-next",
60
+ github: "estevecastells/whois-parser-next",
61
+ require: "whois-parser"
62
+ ```
63
+
64
+ ## Requirements
65
+
66
+ - Ruby 3.2 or newer
67
+
68
+ ## Scope
69
+
70
+ The project parses and normalizes WHOIS responses. It does not guarantee domain
71
+ availability. Registry policies, server responses, rate limits, endpoint
72
+ changes, and the distinction between WHOIS and RDAP can all affect the result.
73
+
74
+ Unknown, malformed, unsupported, rate-limited, and ambiguous responses must
75
+ remain distinguishable from an authoritative availability result.
76
+
77
+ ## Development
78
+
79
+ ```shell
80
+ bundle install
81
+ bundle exec rspec
82
+ ```
83
+
84
+ ## Coverage evidence
85
+
86
+ The 2026-09-19 live audit covers the ICANN DNS Magnitude ordering through rank
87
+ 300. Start with the [Top 20 review](docs/audits/top-20-tlds-2026-09-19.md) and
88
+ [Top 100 audit](docs/audits/top-100-tlds-2026-09-19.md); the same directory
89
+ contains the contiguous 25-TLD reports for ranks 101 through 300. Each report
90
+ separates verified parsing from unavailable, retired, restricted, web-only,
91
+ and unresolved WHOIS paths.
92
+
93
+ ## Join the work
94
+
95
+ We want this to be useful to people who maintain domain tools, registry
96
+ integrations, security services, and developer libraries. Small, focused
97
+ contributions are welcome. You do not need to be a long-time Ruby contributor
98
+ or a WHOIS expert to help.
99
+
100
+ Useful contributions include current registry fixtures, parser corrections,
101
+ tests, documentation, and careful reports of changed server behavior. If you
102
+ are unsure whether an observation is a bug, open an issue with the TLD, source,
103
+ date, sanitized response shape, and expected interpretation. We would rather
104
+ help shape an investigation than lose a useful report because it was not
105
+ perfectly packaged.
106
+
107
+ Please read [CONTRIBUTING.md](CONTRIBUTING.md) before opening a pull request.
108
+ The [public roadmap](ROADMAP.md) lists current priorities, non-goals, and the
109
+ evidence gate for any optional Rust work.
110
+ Maintainers should also follow [RELEASING.md](RELEASING.md), including the
111
+ package smoke test and trusted-publishing checks.
112
+
113
+ ## License and attribution
114
+
115
+ This project continues work derived from the MIT-licensed
116
+ [`weppos/whois-parser`](https://github.com/weppos/whois-parser) project.
117
+
118
+ Original author: Simone Carletti (`weppos`)
119
+
120
+ Original project: <https://github.com/weppos/whois-parser>
121
+
122
+ See [LICENSE.txt](LICENSE.txt) and the retained attribution notices for the
123
+ applicable terms. New contributions remain available under the MIT license.
data/RELEASING.md ADDED
@@ -0,0 +1,43 @@
1
+ # Releasing whois-parser-next
2
+
3
+ Releases are made from a reviewed commit on `main` and published to RubyGems
4
+ through GitHub's trusted-publishing flow. Maintainers must not add a long-lived
5
+ RubyGems API key to the repository or its Actions secrets.
6
+
7
+ ## Before tagging
8
+
9
+ 1. Confirm the version in `lib/whois/parser/version.rb` and prepare a dated
10
+ changelog entry.
11
+ 2. Run the complete test suite with `bundle exec rspec`.
12
+ 3. Run `./script/package-smoke` and inspect the built gem's file list.
13
+ 4. Confirm the GitHub Actions matrix passes on every supported Ruby version.
14
+ 5. Confirm the RubyGems trusted publisher names this repository,
15
+ `.github/workflows/release.yml`, and the `release` environment.
16
+ 6. Review the diff from the previous release for fixtures containing personal
17
+ data, credentials, or unneeded registry response content.
18
+
19
+ ## Publish
20
+
21
+ Create and push the annotated release tag only after the checks above pass:
22
+
23
+ ```shell
24
+ git tag -a v0.1.0 -m "whois-parser-next 0.1.0"
25
+ git push origin v0.1.0
26
+ ```
27
+
28
+ The release workflow repeats the full suite and package smoke test before it
29
+ requests a short-lived RubyGems publishing credential through OIDC.
30
+
31
+ ## Verify
32
+
33
+ After the workflow succeeds:
34
+
35
+ 1. Confirm the version and metadata on RubyGems.
36
+ 2. Install the released gem into an empty gem home.
37
+ 3. Verify `require "whois-parser"` and `Whois::Parser`.
38
+ 4. Parse at least one registered and one available fixture.
39
+ 5. Publish release notes that describe only tested behavior.
40
+
41
+ If a release is wrong, stop downstream upgrades and document the issue before
42
+ yanking. A yank does not remove code already downloaded by users, so follow it
43
+ with a corrected release and a clear changelog entry.
data/ROADMAP.md ADDED
@@ -0,0 +1,59 @@
1
+ # Roadmap
2
+
3
+ This roadmap is a direction, not a promise of dates. Registry behavior changes
4
+ without notice, so correctness and current evidence take priority over a fixed
5
+ feature calendar.
6
+
7
+ ## Current release
8
+
9
+ - Establish a safe, maintained successor with Ruby 3.2 through Ruby 4 support.
10
+ - Audit the first 300 rows of a dated, reproducible TLD-usage snapshot.
11
+ - Replace unsafe fallback classifications with explicit unknown or unavailable
12
+ outcomes when a response lacks authoritative evidence.
13
+ - Keep the gem compatible with `require "whois-parser"` and `Whois::Parser`.
14
+ - Publish through short-lived RubyGems trusted-publishing credentials.
15
+
16
+ ## Next priorities
17
+
18
+ 1. Continue evidence-backed TLD coverage in reproducible, non-overlapping
19
+ batches.
20
+ 2. Add regression fixtures when registries change format, server, policy, or
21
+ availability wording.
22
+ 3. Reduce avoidable runtime dependencies without changing public behavior.
23
+ 4. Improve contributor tooling for fixture privacy, server-mapping drift, and
24
+ ambiguous-response safety.
25
+ 5. Document parser confidence and provenance without pretending that a parsed
26
+ WHOIS response is an availability guarantee.
27
+
28
+ ## Performance and Rust
29
+
30
+ The Ruby parser is already small compared with the network request that
31
+ produces a WHOIS response. We will profile real workloads before adding native
32
+ code or attempting a rewrite.
33
+
34
+ If parsing becomes a measured bottleneck, the preferred experiment is a small,
35
+ optional Rust-backed parser for one high-volume server family behind the
36
+ existing Ruby API. It must pass the same fixtures and differential tests as the
37
+ Ruby implementation. A full rewrite is not planned without evidence that it
38
+ would improve user-visible performance enough to justify the maintenance,
39
+ packaging, and compatibility cost.
40
+
41
+ ## Non-goals
42
+
43
+ - Guessing availability from an empty, blocked, throttled, or malformed reply.
44
+ - Hiding registry limitations or converting unknown evidence into certainty.
45
+ - Adding paid, private, or authenticated data sources to the parser.
46
+ - Breaking the established Ruby API merely to modernize internal style.
47
+ - Combining WHOIS transport, RDAP policy, billing, or product-specific routing
48
+ into this parsing library.
49
+
50
+ ## How to help
51
+
52
+ Good first contributions include a current sanitized fixture, a focused parser
53
+ regression, a server-mapping correction, or an adversarial unknown-response
54
+ test. Larger proposals should start in a public issue so contributors and
55
+ maintainers can agree on the evidence, compatibility boundary, and test plan
56
+ before implementation.
57
+
58
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for the rules and
59
+ [GOVERNANCE.md](GOVERNANCE.md) for how decisions are made.
data/SECURITY.md ADDED
@@ -0,0 +1,41 @@
1
+ # Security Policy
2
+
3
+ ## Supported versions
4
+
5
+ Until the first release, only the current main branch is supported.
6
+
7
+ | Version | Supported |
8
+ |---|---|
9
+ | main | Yes |
10
+ | Released versions | No released versions yet |
11
+
12
+ ## Reporting a vulnerability
13
+
14
+ Please use [GitHub private vulnerability reporting](https://github.com/estevecastells/whois-parser-next/security/advisories/new).
15
+
16
+ Do not open a public issue or pull request for a suspected vulnerability.
17
+
18
+ Please include:
19
+
20
+ - A clear description of the issue and its impact
21
+ - A minimal reproduction or proof of concept
22
+ - The affected commit, branch, or dependency version
23
+ - The Ruby version and relevant environment details
24
+ - The TLD, WHOIS server, and observed date where relevant
25
+ - Expected behavior and actual behavior
26
+ - Sanitized response examples where needed
27
+ - Any suggested mitigation
28
+
29
+ Remove credentials, access tokens, private endpoints, personal registrant data,
30
+ and other sensitive information before submitting a report. Do not include
31
+ secrets or private source responses in public fixtures.
32
+
33
+ ## Disclosure
34
+
35
+ Please do not disclose a vulnerability publicly before the maintainers have had
36
+ an opportunity to investigate, coordinate a fix or mitigation, and agree on
37
+ disclosure timing.
38
+
39
+ We expect to acknowledge reports after they reach the maintainers and provide
40
+ follow-up after triage. Workload and severity vary, so no exact response or
41
+ remediation timeline is promised.
@@ -0,0 +1,56 @@
1
+ require_relative 'super_struct'
2
+
3
+
4
+ module Whois
5
+ class Parser
6
+
7
+ # Holds the details of a contact extracted from the WHOIS response.
8
+ #
9
+ # A contact is composed by the several attributes,
10
+ # accessible through corresponding getter / setter methods.
11
+ #
12
+ # Please note that a response is not required to provide
13
+ # all the attributes. When an attribute is not available,
14
+ # the corresponding value is set to nil.
15
+ #
16
+ # @attr [String] id
17
+ # @attr [String] type
18
+ # @attr [String] name
19
+ # @attr [String] organization
20
+ # @attr [String] address
21
+ # @attr [String] city
22
+ # @attr [String] zip
23
+ # @attr [String] state
24
+ # @attr [String] country
25
+ # @attr [String] country_code
26
+ # @attr [String] phone
27
+ # @attr [String] fax
28
+ # @attr [String] email
29
+ # @attr [String] url - e. g. to the contact form
30
+ # @attr [Time] created_on
31
+ # @attr [Time] updated_on
32
+ #
33
+ class Contact < SuperStruct.new(:id, :type, :name, :organization,
34
+ :address, :city, :zip, :state, :country, :country_code,
35
+ :phone, :fax, :email, :url,
36
+ :created_on, :updated_on)
37
+
38
+ TYPE_REGISTRANT = 1
39
+ TYPE_ADMINISTRATIVE = 2
40
+ TYPE_TECHNICAL = 3
41
+
42
+
43
+ def self.const_missing(name)
44
+ case name
45
+ when :TYPE_ADMIN
46
+ Whois.deprecate("Whois::Record::Contact::TYPE_ADMIN is now Whois::Record::Contact::TYPE_ADMINISTRATIVE")
47
+ const_set(name, TYPE_ADMINISTRATIVE)
48
+ else
49
+ super
50
+ end
51
+ end
52
+
53
+ end
54
+
55
+ end
56
+ end