whois 1.2.2 → 1.3.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.
- data/CHANGELOG.rdoc +23 -0
- data/README.rdoc +24 -7
- data/lib/core_ext.rb +4 -3
- data/lib/whois/answer/contact.rb +1 -1
- data/lib/whois/answer/nameserver.rb +41 -0
- data/lib/whois/answer/parser/base.rb +1 -0
- data/lib/whois/answer/parser/jobswhois.verisign-grs.com.rb +2 -2
- data/lib/whois/answer/parser/scanners/iana.rb +145 -0
- data/lib/whois/answer/parser/scanners/verisign.rb +15 -15
- data/lib/whois/answer/parser/whois.crsnic.net.rb +2 -2
- data/lib/whois/answer/parser/whois.denic.de.rb +27 -22
- data/lib/whois/answer/parser/whois.iana.org.rb +56 -16
- data/lib/whois/answer/parser/whois.nic.cc.rb +1 -1
- data/lib/whois/answer/parser/whois.nic.hu.rb +12 -8
- data/lib/whois/answer/parser/whois.nic.it.rb +1 -1
- data/lib/whois/answer/parser/whois.nic.tv.rb +1 -1
- data/lib/whois/answer/parser/whois.publicinterestregistry.net.rb +11 -9
- data/lib/whois/answer/registrar.rb +5 -5
- data/lib/whois/client.rb +0 -1
- data/lib/whois/errors.rb +19 -19
- data/lib/whois/server.rb +119 -47
- data/lib/whois/server/adapters/base.rb +44 -2
- data/lib/whois/version.rb +4 -3
- data/whois.gemspec +9 -18
- metadata +26 -713
- data/Manifest +0 -541
- data/Rakefile +0 -82
- data/data/ip6_del_list +0 -47
- data/data/ip_del_list +0 -245
- data/data/make_ip6_del.pl +0 -38
- data/data/make_ip_del.pl +0 -25
- data/data/make_servers_charset.pl +0 -21
- data/data/make_tld_serv.pl +0 -23
- data/data/servers_charset_list +0 -38
- data/data/tld_serv_list +0 -377
- data/tasks/server.rake +0 -109
- data/test/list_tld +0 -324
- data/test/test_helper.rb +0 -56
- data/test/testcases/referrals/afilias.bz.txt +0 -40
- data/test/testcases/referrals/crsnic.com.txt +0 -210
- data/test/testcases/referrals/crsnic.com_more_servers.txt +0 -210
- data/test/testcases/referrals/crsnic.com_one_server.txt +0 -57
- data/test/testcases/referrals/niccc.cc.txt +0 -59
- data/test/testcases/referrals/pir.org.txt +0 -84
- data/test/testcases/responses/UTF8.txt +0 -10
- data/test/testcases/responses/jobswhois.verisign-grs.com/available.txt +0 -44
- data/test/testcases/responses/jobswhois.verisign-grs.com/property_registrar.txt +0 -54
- data/test/testcases/responses/jobswhois.verisign-grs.com/registered.txt +0 -54
- data/test/testcases/responses/whois.adamsnames.tc/gd/available.txt +0 -2
- data/test/testcases/responses/whois.adamsnames.tc/gd/registered.txt +0 -26
- data/test/testcases/responses/whois.adamsnames.tc/tc/available.txt +0 -2
- data/test/testcases/responses/whois.adamsnames.tc/tc/registered.txt +0 -28
- data/test/testcases/responses/whois.adamsnames.tc/vg/available.txt +0 -2
- data/test/testcases/responses/whois.adamsnames.tc/vg/registered.txt +0 -28
- data/test/testcases/responses/whois.aeda.net.ae/available.txt +0 -1
- data/test/testcases/responses/whois.aeda.net.ae/registered.txt +0 -15
- data/test/testcases/responses/whois.aero/available.txt +0 -1
- data/test/testcases/responses/whois.aero/registered.txt +0 -102
- data/test/testcases/responses/whois.afilias-grs.info/bz/available.txt +0 -1
- data/test/testcases/responses/whois.afilias-grs.info/bz/registered.txt +0 -122
- data/test/testcases/responses/whois.afilias-grs.info/gi/available.txt +0 -1
- data/test/testcases/responses/whois.afilias-grs.info/gi/registered.txt +0 -98
- data/test/testcases/responses/whois.afilias-grs.info/hn/available.txt +0 -1
- data/test/testcases/responses/whois.afilias-grs.info/hn/registered.txt +0 -85
- data/test/testcases/responses/whois.afilias-grs.info/lc/available.txt +0 -1
- data/test/testcases/responses/whois.afilias-grs.info/lc/registered.txt +0 -83
- data/test/testcases/responses/whois.afilias-grs.info/mn/available.txt +0 -1
- data/test/testcases/responses/whois.afilias-grs.info/mn/registered.txt +0 -100
- data/test/testcases/responses/whois.afilias-grs.info/sc/available.txt +0 -1
- data/test/testcases/responses/whois.afilias-grs.info/sc/registered.txt +0 -85
- data/test/testcases/responses/whois.afilias-grs.info/vc/available.txt +0 -1
- data/test/testcases/responses/whois.afilias-grs.info/vc/registered.txt +0 -100
- data/test/testcases/responses/whois.afilias.info/available.txt +0 -1
- data/test/testcases/responses/whois.afilias.info/registered.txt +0 -104
- data/test/testcases/responses/whois.ai/available.txt +0 -2
- data/test/testcases/responses/whois.ai/registered.txt +0 -59
- data/test/testcases/responses/whois.arnes.si/available.txt +0 -29
- data/test/testcases/responses/whois.arnes.si/registered.txt +0 -55
- data/test/testcases/responses/whois.audns.net.au/available.txt +0 -1
- data/test/testcases/responses/whois.audns.net.au/registered.txt +0 -23
- data/test/testcases/responses/whois.biz/available.txt +0 -25
- data/test/testcases/responses/whois.biz/registered.txt +0 -89
- data/test/testcases/responses/whois.cat/available.txt +0 -18
- data/test/testcases/responses/whois.cat/registered.txt +0 -83
- data/test/testcases/responses/whois.cctld.uz/available.txt +0 -12
- data/test/testcases/responses/whois.cctld.uz/registered.txt +0 -123
- data/test/testcases/responses/whois.cira.ca/available.txt +0 -9
- data/test/testcases/responses/whois.cira.ca/registered.txt +0 -47
- data/test/testcases/responses/whois.cnnic.cn/available.txt +0 -1
- data/test/testcases/responses/whois.cnnic.cn/registered.txt +0 -19
- data/test/testcases/responses/whois.crsnic.net/MULTIPLE.txt +0 -3
- data/test/testcases/responses/whois.crsnic.net/available.txt +0 -43
- data/test/testcases/responses/whois.crsnic.net/nameservers_with_no_nameserver.txt +0 -67
- data/test/testcases/responses/whois.crsnic.net/registered.txt +0 -57
- data/test/testcases/responses/whois.crsnic.net/registered_with_multiple_entries.txt +0 -235
- data/test/testcases/responses/whois.denic.de/1-10-0_available.txt +0 -30
- data/test/testcases/responses/whois.denic.de/1-10-0_registered.txt +0 -77
- data/test/testcases/responses/whois.denic.de/available.txt +0 -42
- data/test/testcases/responses/whois.denic.de/error_invalid_domain_name.txt +0 -37
- data/test/testcases/responses/whois.denic.de/property_nameservers_with_ip.txt +0 -67
- data/test/testcases/responses/whois.denic.de/property_technical_contact.txt +0 -70
- data/test/testcases/responses/whois.denic.de/registered.txt +0 -70
- data/test/testcases/responses/whois.dk-hostmaster.dk/available.txt +0 -15
- data/test/testcases/responses/whois.dk-hostmaster.dk/registered.txt +0 -47
- data/test/testcases/responses/whois.dns.be/available.txt +0 -41
- data/test/testcases/responses/whois.dns.be/registered.txt +0 -66
- data/test/testcases/responses/whois.dns.lu/available.txt +0 -26
- data/test/testcases/responses/whois.dns.lu/property_nameservers_with_ip.txt +0 -55
- data/test/testcases/responses/whois.dns.lu/registered.txt +0 -57
- data/test/testcases/responses/whois.dns.pt/available.txt +0 -1
- data/test/testcases/responses/whois.dns.pt/registered.txt +0 -32
- data/test/testcases/responses/whois.domain-registry.nl/available.txt +0 -21
- data/test/testcases/responses/whois.domain-registry.nl/registered.txt +0 -67
- data/test/testcases/responses/whois.domainregistry.ie/available.txt +0 -7
- data/test/testcases/responses/whois.domainregistry.ie/registered.txt +0 -26
- data/test/testcases/responses/whois.domreg.lt/available.txt +0 -18
- data/test/testcases/responses/whois.domreg.lt/property_nameservers_with_ip.txt +0 -32
- data/test/testcases/responses/whois.domreg.lt/registered.txt +0 -37
- data/test/testcases/responses/whois.dot.tk/available.txt +0 -1
- data/test/testcases/responses/whois.dot.tk/registered.txt +0 -28
- data/test/testcases/responses/whois.dotmobiregistry.net/available.txt +0 -25
- data/test/testcases/responses/whois.dotmobiregistry.net/registered.txt +0 -81
- data/test/testcases/responses/whois.educause.edu/available.txt +0 -28
- data/test/testcases/responses/whois.educause.edu/registered.txt +0 -66
- data/test/testcases/responses/whois.eenet.ee/available.txt +0 -6
- data/test/testcases/responses/whois.eenet.ee/registered.txt +0 -27
- data/test/testcases/responses/whois.eu.org/available.txt +0 -1
- data/test/testcases/responses/whois.eu.org/registered.txt +0 -19
- data/test/testcases/responses/whois.eu/available.txt +0 -47
- data/test/testcases/responses/whois.eu/property_nameservers_with_ip.txt +0 -61
- data/test/testcases/responses/whois.eu/registered.txt +0 -63
- data/test/testcases/responses/whois.hkdnr.net.hk/available.txt +0 -1
- data/test/testcases/responses/whois.hkdnr.net.hk/registered.txt +0 -96
- data/test/testcases/responses/whois.iana.org/MULTIPLE.txt +0 -3
- data/test/testcases/responses/whois.iana.org/available.txt +0 -7
- data/test/testcases/responses/whois.iana.org/registered.txt +0 -89
- data/test/testcases/responses/whois.in.ua/available.txt +0 -4
- data/test/testcases/responses/whois.in.ua/registered.txt +0 -16
- data/test/testcases/responses/whois.isnic.is/available.txt +0 -7
- data/test/testcases/responses/whois.isnic.is/registered.txt +0 -57
- data/test/testcases/responses/whois.jprs.jp/jp/available.txt +0 -17
- data/test/testcases/responses/whois.jprs.jp/jp/registered.txt +0 -30
- data/test/testcases/responses/whois.jprs.jp/ne.jp/available.txt +0 -17
- data/test/testcases/responses/whois.jprs.jp/ne.jp/registered.txt +0 -19
- data/test/testcases/responses/whois.meregistry.net/available.txt +0 -1
- data/test/testcases/responses/whois.meregistry.net/registered.txt +0 -94
- data/test/testcases/responses/whois.museum/available.txt +0 -18
- data/test/testcases/responses/whois.museum/registered.txt +0 -92
- data/test/testcases/responses/whois.net.ua/available.txt +0 -7
- data/test/testcases/responses/whois.net.ua/property_nameservers_uppercase.txt +0 -29
- data/test/testcases/responses/whois.net.ua/redirect_to_whois.in.ua.txt +0 -29
- data/test/testcases/responses/whois.net.ua/registered.txt +0 -58
- data/test/testcases/responses/whois.nic-se.se/available.txt +0 -21
- data/test/testcases/responses/whois.nic-se.se/property_nameservers_with_ip.txt +0 -37
- data/test/testcases/responses/whois.nic-se.se/registered.txt +0 -37
- data/test/testcases/responses/whois.nic.ac/available.txt +0 -2
- data/test/testcases/responses/whois.nic.ac/registered.txt +0 -2
- data/test/testcases/responses/whois.nic.af/available.txt +0 -13
- data/test/testcases/responses/whois.nic.af/registered.txt +0 -56
- data/test/testcases/responses/whois.nic.ag/available.txt +0 -1
- data/test/testcases/responses/whois.nic.ag/registered.txt +0 -100
- data/test/testcases/responses/whois.nic.am/available.txt +0 -3
- data/test/testcases/responses/whois.nic.am/registered.txt +0 -42
- data/test/testcases/responses/whois.nic.as/available.txt +0 -12
- data/test/testcases/responses/whois.nic.as/registered.txt +0 -18
- data/test/testcases/responses/whois.nic.asia/available.txt +0 -1
- data/test/testcases/responses/whois.nic.asia/registered.txt +0 -159
- data/test/testcases/responses/whois.nic.at/available.txt +0 -25
- data/test/testcases/responses/whois.nic.at/registered.txt +0 -65
- data/test/testcases/responses/whois.nic.cc/available.txt +0 -44
- data/test/testcases/responses/whois.nic.cc/registered.txt +0 -58
- data/test/testcases/responses/whois.nic.cd/available.txt +0 -1
- data/test/testcases/responses/whois.nic.cd/registered.txt +0 -85
- data/test/testcases/responses/whois.nic.ch/available.txt +0 -2
- data/test/testcases/responses/whois.nic.ch/property_nameservers_with_ip.txt +0 -27
- data/test/testcases/responses/whois.nic.ch/registered.txt +0 -28
- data/test/testcases/responses/whois.nic.co/available.txt +0 -28
- data/test/testcases/responses/whois.nic.co/registered.txt +0 -82
- data/test/testcases/responses/whois.nic.coop/available.txt +0 -33
- data/test/testcases/responses/whois.nic.coop/registered.txt +0 -123
- data/test/testcases/responses/whois.nic.ec/available.txt +0 -1
- data/test/testcases/responses/whois.nic.ec/registered.txt +0 -40
- data/test/testcases/responses/whois.nic.fr/fr/available.txt +0 -19
- data/test/testcases/responses/whois.nic.fr/fr/registered.txt +0 -98
- data/test/testcases/responses/whois.nic.fr/pm/available.txt +0 -19
- data/test/testcases/responses/whois.nic.fr/pm/registered.txt +0 -88
- data/test/testcases/responses/whois.nic.fr/re/available.txt +0 -19
- data/test/testcases/responses/whois.nic.fr/re/registered.txt +0 -83
- data/test/testcases/responses/whois.nic.fr/wf/available.txt +0 -19
- data/test/testcases/responses/whois.nic.fr/wf/registered.txt +0 -88
- data/test/testcases/responses/whois.nic.fr/yt/available.txt +0 -19
- data/test/testcases/responses/whois.nic.fr/yt/registered.txt +0 -88
- data/test/testcases/responses/whois.nic.gl/available.txt +0 -23
- data/test/testcases/responses/whois.nic.gl/registered.txt +0 -40
- data/test/testcases/responses/whois.nic.gov/available.txt +0 -1
- data/test/testcases/responses/whois.nic.gov/registered.txt +0 -5
- data/test/testcases/responses/whois.nic.ht/available.txt +0 -23
- data/test/testcases/responses/whois.nic.ht/registered.txt +0 -59
- data/test/testcases/responses/whois.nic.hu/current/available.txt +0 -3
- data/test/testcases/responses/whois.nic.hu/current/registered.txt +0 -9
- data/test/testcases/responses/whois.nic.hu/v1.99/available.txt +0 -12
- data/test/testcases/responses/whois.nic.hu/v1.99/in_progress.txt +0 -13
- data/test/testcases/responses/whois.nic.hu/v1.99/property_registrant_as_company.txt +0 -65
- data/test/testcases/responses/whois.nic.hu/v1.99/property_registrant_as_private_person.txt +0 -58
- data/test/testcases/responses/whois.nic.hu/v1.99/property_registrant_without_address.txt +0 -58
- data/test/testcases/responses/whois.nic.hu/v1.99/registered.txt +0 -65
- data/test/testcases/responses/whois.nic.im/available.txt +0 -2
- data/test/testcases/responses/whois.nic.im/registered.txt +0 -45
- data/test/testcases/responses/whois.nic.io/available.txt +0 -2
- data/test/testcases/responses/whois.nic.io/registered.txt +0 -2
- data/test/testcases/responses/whois.nic.it/available.txt +0 -2
- data/test/testcases/responses/whois.nic.it/property_admin_contact.txt +0 -53
- data/test/testcases/responses/whois.nic.it/property_registrant_contact.txt +0 -58
- data/test/testcases/responses/whois.nic.it/property_status_active.txt +0 -53
- data/test/testcases/responses/whois.nic.it/property_status_available.txt +0 -2
- data/test/testcases/responses/whois.nic.it/property_technical_contact.txt +0 -53
- data/test/testcases/responses/whois.nic.it/registered.txt +0 -53
- data/test/testcases/responses/whois.nic.kz/available.txt +0 -4
- data/test/testcases/responses/whois.nic.kz/registered.txt +0 -37
- data/test/testcases/responses/whois.nic.la/available.txt +0 -1
- data/test/testcases/responses/whois.nic.la/registered.txt +0 -70
- data/test/testcases/responses/whois.nic.lv/available.txt +0 -7
- data/test/testcases/responses/whois.nic.lv/registered.txt +0 -33
- data/test/testcases/responses/whois.nic.ly/available.txt +0 -1
- data/test/testcases/responses/whois.nic.ly/registered.txt +0 -65
- data/test/testcases/responses/whois.nic.mu/ki/available.txt +0 -20
- data/test/testcases/responses/whois.nic.mu/ki/registered.txt +0 -30
- data/test/testcases/responses/whois.nic.mu/mu/available.txt +0 -9
- data/test/testcases/responses/whois.nic.mu/mu/registered.txt +0 -22
- data/test/testcases/responses/whois.nic.mx/available.txt +0 -11
- data/test/testcases/responses/whois.nic.mx/registered.txt +0 -58
- data/test/testcases/responses/whois.nic.name/available.txt +0 -29
- data/test/testcases/responses/whois.nic.name/registered.txt +0 -36
- data/test/testcases/responses/whois.nic.name/reserved.txt +0 -30
- data/test/testcases/responses/whois.nic.net.sa/available.txt +0 -5
- data/test/testcases/responses/whois.nic.net.sa/registered.txt +0 -17
- data/test/testcases/responses/whois.nic.nu/available.txt +0 -19
- data/test/testcases/responses/whois.nic.nu/registered.txt +0 -35
- data/test/testcases/responses/whois.nic.or.kr/available.txt +0 -10
- data/test/testcases/responses/whois.nic.or.kr/registered.txt +0 -48
- data/test/testcases/responses/whois.nic.org.uy/available.txt +0 -10
- data/test/testcases/responses/whois.nic.org.uy/registered.txt +0 -48
- data/test/testcases/responses/whois.nic.sn/available.txt +0 -3
- data/test/testcases/responses/whois.nic.sn/registered.txt +0 -14
- data/test/testcases/responses/whois.nic.st/available.txt +0 -1
- data/test/testcases/responses/whois.nic.st/registered.txt +0 -47
- data/test/testcases/responses/whois.nic.tel/available.txt +0 -59
- data/test/testcases/responses/whois.nic.tel/registered.txt +0 -111
- data/test/testcases/responses/whois.nic.tl/available.txt +0 -21
- data/test/testcases/responses/whois.nic.tl/registered.txt +0 -29
- data/test/testcases/responses/whois.nic.tr/available.txt +0 -1
- data/test/testcases/responses/whois.nic.tr/property_nameservers_with_trailing_space.txt +0 -42
- data/test/testcases/responses/whois.nic.tr/registered.txt +0 -48
- data/test/testcases/responses/whois.nic.travel/available.txt +0 -25
- data/test/testcases/responses/whois.nic.travel/registered.txt +0 -75
- data/test/testcases/responses/whois.nic.tv/available.txt +0 -44
- data/test/testcases/responses/whois.nic.tv/registered.txt +0 -54
- data/test/testcases/responses/whois.nic.uk/available.txt +0 -20
- data/test/testcases/responses/whois.nic.uk/invalid.txt +0 -22
- data/test/testcases/responses/whois.nic.uk/registered.txt +0 -50
- data/test/testcases/responses/whois.nic.us/available.txt +0 -29
- data/test/testcases/responses/whois.nic.us/registered.txt +0 -99
- data/test/testcases/responses/whois.nic.ve/available.txt +0 -10
- data/test/testcases/responses/whois.nic.ve/registered.txt +0 -48
- data/test/testcases/responses/whois.norid.no/available.txt +0 -5
- data/test/testcases/responses/whois.norid.no/registered.txt +0 -34
- data/test/testcases/responses/whois.pandi.or.id/available.txt +0 -9
- data/test/testcases/responses/whois.pandi.or.id/registered.txt +0 -33
- data/test/testcases/responses/whois.publicinterestregistry.net/available.txt +0 -1
- data/test/testcases/responses/whois.publicinterestregistry.net/registered.txt +0 -85
- data/test/testcases/responses/whois.publicinterestregistry.net/throttle.txt +0 -1
- data/test/testcases/responses/whois.register.bg/available.txt +0 -1
- data/test/testcases/responses/whois.register.bg/property_nameservers_with_ip.txt +0 -42
- data/test/testcases/responses/whois.register.bg/registered.txt +0 -44
- data/test/testcases/responses/whois.registro.br/available.txt +0 -22
- data/test/testcases/responses/whois.registro.br/registered.txt +0 -23
- data/test/testcases/responses/whois.registry.in/available.txt +0 -1
- data/test/testcases/responses/whois.registry.in/registered.txt +0 -83
- data/test/testcases/responses/whois.registrypro.pro/available.txt +0 -20
- data/test/testcases/responses/whois.registrypro.pro/registered.txt +0 -62
- data/test/testcases/responses/whois.ripe.net/fo/available.txt +0 -11
- data/test/testcases/responses/whois.ripe.net/fo/registered.txt +0 -45
- data/test/testcases/responses/whois.ripe.net/gm/available.txt +0 -11
- data/test/testcases/responses/whois.ripe.net/gm/registered.txt +0 -37
- data/test/testcases/responses/whois.ripe.net/mc/available.txt +0 -11
- data/test/testcases/responses/whois.ripe.net/mc/registered.txt +0 -36
- data/test/testcases/responses/whois.ripe.net/sm/available.txt +0 -11
- data/test/testcases/responses/whois.ripe.net/sm/registered.txt +0 -60
- data/test/testcases/responses/whois.ripe.net/va/available.txt +0 -11
- data/test/testcases/responses/whois.ripe.net/va/registered.txt +0 -48
- data/test/testcases/responses/whois.ripn.net/ru/available.txt +0 -9
- data/test/testcases/responses/whois.ripn.net/ru/property_nameservers_with_ip.txt +0 -22
- data/test/testcases/responses/whois.ripn.net/ru/registered.txt +0 -24
- data/test/testcases/responses/whois.ripn.net/su/available.txt +0 -9
- data/test/testcases/responses/whois.ripn.net/su/registered.txt +0 -20
- data/test/testcases/responses/whois.rotld.ro/available.txt +0 -16
- data/test/testcases/responses/whois.rotld.ro/registered.txt +0 -27
- data/test/testcases/responses/whois.samoanic.ws/available.txt +0 -12
- data/test/testcases/responses/whois.samoanic.ws/registered.txt +0 -34
- data/test/testcases/responses/whois.srs.net.nz/available.txt +0 -28
- data/test/testcases/responses/whois.srs.net.nz/invalid.txt +0 -28
- data/test/testcases/responses/whois.srs.net.nz/registered.txt +0 -72
- data/test/testcases/responses/whois.tonic.to/1.txt +0 -1
- data/test/testcases/responses/whois.tonic.to/available.txt +0 -2
- data/test/testcases/responses/whois.tonic.to/incomplete.txt +0 -1
- data/test/testcases/responses/whois.tonic.to/registered.txt +0 -3
- data/test/testcases/responses/whois.za.net/available.txt +0 -9
- data/test/testcases/responses/whois.za.net/registered.txt +0 -42
- data/test/testcases/responses/whois.za.org/available.txt +0 -9
- data/test/testcases/responses/whois.za.org/registered.txt +0 -44
- data/test/whois/answer/contact_test.rb +0 -14
- data/test/whois/answer/parser/base_test.rb +0 -84
- data/test/whois/answer/parser/blank_test.rb +0 -19
- data/test/whois/answer/parser/jobswhois.verisign-grs.com_test.rb +0 -161
- data/test/whois/answer/parser/saudinic.net.sa_test.rb +0 -12
- data/test/whois/answer/parser/whois.adamsnames.tc_test.rb +0 -162
- data/test/whois/answer/parser/whois.aeda.net.ae_test.rb +0 -63
- data/test/whois/answer/parser/whois.aero_test.rb +0 -84
- data/test/whois/answer/parser/whois.afilias-grs.info_test.rb +0 -438
- data/test/whois/answer/parser/whois.afilias.info_test.rb +0 -64
- data/test/whois/answer/parser/whois.ai_test.rb +0 -58
- data/test/whois/answer/parser/whois.arnes.si_test.rb +0 -72
- data/test/whois/answer/parser/whois.audns.net.au_test.rb +0 -70
- data/test/whois/answer/parser/whois.ausregistry.net.au_test.rb +0 -12
- data/test/whois/answer/parser/whois.biz_test.rb +0 -64
- data/test/whois/answer/parser/whois.cat_test.rb +0 -64
- data/test/whois/answer/parser/whois.cctld.uz_test.rb +0 -91
- data/test/whois/answer/parser/whois.cira.ca_test.rb +0 -64
- data/test/whois/answer/parser/whois.cnnic.cn_test.rb +0 -73
- data/test/whois/answer/parser/whois.cnnic.net.cn_test.rb +0 -11
- data/test/whois/answer/parser/whois.crsnic.net_test.rb +0 -186
- data/test/whois/answer/parser/whois.denic.de_test.rb +0 -414
- data/test/whois/answer/parser/whois.dk-hostmaster.dk_test.rb +0 -57
- data/test/whois/answer/parser/whois.dns.be_test.rb +0 -65
- data/test/whois/answer/parser/whois.dns.lu_test.rb +0 -77
- data/test/whois/answer/parser/whois.dns.pt_test.rb +0 -84
- data/test/whois/answer/parser/whois.domain-registry.nl_test.rb +0 -62
- data/test/whois/answer/parser/whois.domainregistry.ie_test.rb +0 -60
- data/test/whois/answer/parser/whois.domreg.lt_test.rb +0 -67
- data/test/whois/answer/parser/whois.dot.tk_test.rb +0 -77
- data/test/whois/answer/parser/whois.dotmobiregistry.net_test.rb +0 -64
- data/test/whois/answer/parser/whois.educause.edu_test.rb +0 -64
- data/test/whois/answer/parser/whois.eenet.ee_test.rb +0 -91
- data/test/whois/answer/parser/whois.eu.org_test.rb +0 -51
- data/test/whois/answer/parser/whois.eu_test.rb +0 -65
- data/test/whois/answer/parser/whois.hkdnr.net.hk_test.rb +0 -77
- data/test/whois/answer/parser/whois.iana.org_test.rb +0 -63
- data/test/whois/answer/parser/whois.in.ua_test.rb +0 -91
- data/test/whois/answer/parser/whois.isnic.is_test.rb +0 -62
- data/test/whois/answer/parser/whois.jprs.jp_test.rb +0 -165
- data/test/whois/answer/parser/whois.meregistry.net_test.rb +0 -64
- data/test/whois/answer/parser/whois.museum_test.rb +0 -64
- data/test/whois/answer/parser/whois.net.ua_test.rb +0 -98
- data/test/whois/answer/parser/whois.nic-se.se_test.rb +0 -71
- data/test/whois/answer/parser/whois.nic.ac_test.rb +0 -126
- data/test/whois/answer/parser/whois.nic.af_test.rb +0 -84
- data/test/whois/answer/parser/whois.nic.ag_test.rb +0 -84
- data/test/whois/answer/parser/whois.nic.am_test.rb +0 -84
- data/test/whois/answer/parser/whois.nic.as_test.rb +0 -63
- data/test/whois/answer/parser/whois.nic.asia_test.rb +0 -69
- data/test/whois/answer/parser/whois.nic.at_test.rb +0 -65
- data/test/whois/answer/parser/whois.nic.cc_test.rb +0 -133
- data/test/whois/answer/parser/whois.nic.cd_test.rb +0 -62
- data/test/whois/answer/parser/whois.nic.ch_test.rb +0 -65
- data/test/whois/answer/parser/whois.nic.co_test.rb +0 -64
- data/test/whois/answer/parser/whois.nic.coop_test.rb +0 -64
- data/test/whois/answer/parser/whois.nic.ec_test.rb +0 -98
- data/test/whois/answer/parser/whois.nic.fr_test.rb +0 -281
- data/test/whois/answer/parser/whois.nic.gl_test.rb +0 -64
- data/test/whois/answer/parser/whois.nic.gov_test.rb +0 -51
- data/test/whois/answer/parser/whois.nic.ht_test.rb +0 -98
- data/test/whois/answer/parser/whois.nic.hu_test.rb +0 -321
- data/test/whois/answer/parser/whois.nic.im_test.rb +0 -60
- data/test/whois/answer/parser/whois.nic.io_test.rb +0 -51
- data/test/whois/answer/parser/whois.nic.it_test.rb +0 -298
- data/test/whois/answer/parser/whois.nic.kz_test.rb +0 -91
- data/test/whois/answer/parser/whois.nic.la_test.rb +0 -98
- data/test/whois/answer/parser/whois.nic.lv_test.rb +0 -65
- data/test/whois/answer/parser/whois.nic.ly_test.rb +0 -64
- data/test/whois/answer/parser/whois.nic.mu_test.rb +0 -123
- data/test/whois/answer/parser/whois.nic.mx_test.rb +0 -84
- data/test/whois/answer/parser/whois.nic.name_test.rb +0 -51
- data/test/whois/answer/parser/whois.nic.net.sa_test.rb +0 -84
- data/test/whois/answer/parser/whois.nic.nu_test.rb +0 -59
- data/test/whois/answer/parser/whois.nic.or.kr_test.rb +0 -64
- data/test/whois/answer/parser/whois.nic.org.uy_test.rb +0 -91
- data/test/whois/answer/parser/whois.nic.sn_test.rb +0 -190
- data/test/whois/answer/parser/whois.nic.st_test.rb +0 -77
- data/test/whois/answer/parser/whois.nic.tel_test.rb +0 -64
- data/test/whois/answer/parser/whois.nic.tl_test.rb +0 -84
- data/test/whois/answer/parser/whois.nic.tr_test.rb +0 -98
- data/test/whois/answer/parser/whois.nic.travel_test.rb +0 -64
- data/test/whois/answer/parser/whois.nic.tv_test.rb +0 -132
- data/test/whois/answer/parser/whois.nic.uk_test.rb +0 -76
- data/test/whois/answer/parser/whois.nic.us_test.rb +0 -64
- data/test/whois/answer/parser/whois.nic.ve_test.rb +0 -91
- data/test/whois/answer/parser/whois.norid.no_test.rb +0 -49
- data/test/whois/answer/parser/whois.pandi.or.id_test.rb +0 -79
- data/test/whois/answer/parser/whois.publicinterestregistry.net_test.rb +0 -284
- data/test/whois/answer/parser/whois.register.bg_test.rb +0 -69
- data/test/whois/answer/parser/whois.registro.br_test.rb +0 -51
- data/test/whois/answer/parser/whois.registry.in_test.rb +0 -69
- data/test/whois/answer/parser/whois.registrypro.pro_test.rb +0 -84
- data/test/whois/answer/parser/whois.ripe.net_test.rb +0 -266
- data/test/whois/answer/parser/whois.ripn.net_test.rb +0 -127
- data/test/whois/answer/parser/whois.rotld.ro_test.rb +0 -63
- data/test/whois/answer/parser/whois.samoanic.ws_test.rb +0 -64
- data/test/whois/answer/parser/whois.srs.net.nz_test.rb +0 -79
- data/test/whois/answer/parser/whois.tonic.to_test.rb +0 -125
- data/test/whois/answer/parser/whois.za.net_test.rb +0 -62
- data/test/whois/answer/parser/whois.za.org_test.rb +0 -62
- data/test/whois/answer/parser_test.rb +0 -219
- data/test/whois/answer/super_struct_test.rb +0 -24
- data/test/whois/answer_test.rb +0 -180
- data/test/whois/client_test.rb +0 -96
- data/test/whois/errors_test.rb +0 -23
- data/test/whois/integration_test.rb +0 -31
- data/test/whois/server/adapters/afilias_test.rb +0 -37
- data/test/whois/server/adapters/base_test.rb +0 -15
- data/test/whois/server/adapters/formatted_test.rb +0 -29
- data/test/whois/server/adapters/none_test.rb +0 -22
- data/test/whois/server/adapters/not_implemented_test.rb +0 -16
- data/test/whois/server/adapters/pir_test.rb +0 -37
- data/test/whois/server/adapters/standard_test.rb +0 -36
- data/test/whois/server/adapters/verisign_test.rb +0 -51
- data/test/whois/server/adapters/web_test.rb +0 -17
- data/test/whois/server_test.rb +0 -105
- data/utils/bm_delegation_vs_inheritance.rb +0 -150
- data/utils/bm_shell_vs_pure.rb +0 -14
data/CHANGELOG.rdoc
CHANGED
|
@@ -1,5 +1,28 @@
|
|
|
1
1
|
= Changelog
|
|
2
2
|
|
|
3
|
+
== Release 1.3.0
|
|
4
|
+
|
|
5
|
+
* ADDED: Ability to query IANA for TLD WHOIS information. [aadlani]
|
|
6
|
+
|
|
7
|
+
Whois.query(".com")
|
|
8
|
+
# => IANA WHOIS response for .com TLD
|
|
9
|
+
|
|
10
|
+
Whois.query(".invalid")
|
|
11
|
+
# => IANA WHOIS response for unassigned TLD
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
* ADDED: Ability to compare two Server adapters for equality.
|
|
15
|
+
|
|
16
|
+
Whois::Server.factory(:ipv4, "192.168.1.0/10", "whois.foo") == Whois::Server.factory(:ipv4, "192.168.1.0/10", "whois.foo")
|
|
17
|
+
# => true
|
|
18
|
+
|
|
19
|
+
Whois::Server.factory(:ipv4, "192.168.1.0", "whois.foo") == Whois::Server.factory(:ipv4, "192.168.1.0/10", "whois.foo")
|
|
20
|
+
# => false
|
|
21
|
+
|
|
22
|
+
* CHANGED: Renamed Scanners::VerisignScanner to Scanners::Verisign.
|
|
23
|
+
|
|
24
|
+
* CHANGED: Excluded test folder from the packaged .gem file to reduce the size of the final packaged library.
|
|
25
|
+
|
|
3
26
|
|
|
4
27
|
== Release 1.2.2
|
|
5
28
|
|
data/README.rdoc
CHANGED
|
@@ -15,7 +15,7 @@ An extensive test suite is available to verify the library correctness but you m
|
|
|
15
15
|
* Intelligent Ruby client
|
|
16
16
|
* Flexible and extensible configuration with support for user-defined servers
|
|
17
17
|
* Powerful whois response parser
|
|
18
|
-
* Support for IPv6, IPv4 and
|
|
18
|
+
* Support for IPv6, IPv4, TLD and domain WHOIS queries
|
|
19
19
|
* Object oriented design
|
|
20
20
|
* Compatible with Ruby 1.8.6 and newer, including Ruby 1.9
|
|
21
21
|
|
|
@@ -48,21 +48,26 @@ Note. This section covers only the essentials for getting started with the Whois
|
|
|
48
48
|
|
|
49
49
|
=== Querying the Server
|
|
50
50
|
|
|
51
|
-
Whois provides the ability to get WHOIS information for
|
|
51
|
+
Whois provides the ability to get WHOIS information for TLD, domain names, IPv4 and IPv6 addresses. The client is smart enough to guess the best WHOIS server according to given query, send the request and return the response.
|
|
52
52
|
|
|
53
53
|
Check out the following examples:
|
|
54
54
|
|
|
55
|
-
# Domain
|
|
55
|
+
# Domain WHOIS
|
|
56
56
|
w = Whois::Client.new
|
|
57
57
|
w.query("google.com")
|
|
58
58
|
# => #<Whois::Answer>
|
|
59
59
|
|
|
60
|
-
#
|
|
60
|
+
# TLD WHOIS
|
|
61
|
+
w = Whois::Client.new
|
|
62
|
+
w.query(".com")
|
|
63
|
+
# => #<Whois::Answer>
|
|
64
|
+
|
|
65
|
+
# IPv4 WHOIS
|
|
61
66
|
w = Whois::Client.new
|
|
62
67
|
w.query("74.125.67.100")
|
|
63
68
|
# => #<Whois::Answer>
|
|
64
69
|
|
|
65
|
-
# IPv6
|
|
70
|
+
# IPv6 WHOIS
|
|
66
71
|
w = Whois::Client.new
|
|
67
72
|
w.query("2001:db8::1428:57ab")
|
|
68
73
|
# => #<Whois::Answer>
|
|
@@ -71,6 +76,7 @@ The query method is stateless. For this reason, you can safely re-use the same c
|
|
|
71
76
|
|
|
72
77
|
w = Whois::Client.new
|
|
73
78
|
w.query("google.com")
|
|
79
|
+
w.query(".com")
|
|
74
80
|
w.query("74.125.67.100")
|
|
75
81
|
w.query("2001:db8::1428:57ab")
|
|
76
82
|
w.query("google.it")
|
|
@@ -80,6 +86,17 @@ If you just need a WHOIS response and you don't care about a full control of the
|
|
|
80
86
|
Whois.whois("google.com")
|
|
81
87
|
# => #<Whois::Answer>
|
|
82
88
|
|
|
89
|
+
Did I mention you can even use blocks?
|
|
90
|
+
|
|
91
|
+
Whois::Client.new do |w|
|
|
92
|
+
w.query("google.com")
|
|
93
|
+
w.query(".com")
|
|
94
|
+
w.query("74.125.67.100")
|
|
95
|
+
w.query("2001:db8::1428:57ab")
|
|
96
|
+
w.query("google.it")
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
|
|
83
100
|
=== Consuming the Answer
|
|
84
101
|
|
|
85
102
|
As of release 0.8, a WHOIS query no longer returns a simple string. Instead, you get a full <tt>Whois::Answer</tt> instance and this is just the beginning of the story.
|
|
@@ -166,9 +183,9 @@ Bug reports and Feature suggestions {are welcomed}[http://github.com/weppos/whoi
|
|
|
166
183
|
|
|
167
184
|
== More
|
|
168
185
|
|
|
169
|
-
* {Homepage}[http://ruby-whois.org]
|
|
186
|
+
* {Homepage}[http://www.ruby-whois.org]
|
|
170
187
|
* {GitHub Repository}[http://github.com/weppos/whois]
|
|
171
|
-
* {API Documentation}[http://whois.
|
|
188
|
+
* {API Documentation}[http://www.ruby-whois.org/api/]
|
|
172
189
|
* {Discussion Group}[http://groups.google.com/group/ruby-whois]
|
|
173
190
|
|
|
174
191
|
|
data/lib/core_ext.rb
CHANGED
|
@@ -2,7 +2,6 @@ unless :to_proc.respond_to?(:to_proc)
|
|
|
2
2
|
class Symbol
|
|
3
3
|
# Turns the symbol into a simple proc,
|
|
4
4
|
# which is especially useful for enumerations.
|
|
5
|
-
# Extracted from ActiveSupport.
|
|
6
5
|
#
|
|
7
6
|
# Examples
|
|
8
7
|
#
|
|
@@ -12,6 +11,8 @@ unless :to_proc.respond_to?(:to_proc)
|
|
|
12
11
|
# # The same as people.select { |p| p.manager? }.collect { |p| p.salary }
|
|
13
12
|
# people.select(&:manager?).collect(&:salary)
|
|
14
13
|
#
|
|
14
|
+
# Extracted from ActiveSupport.
|
|
15
|
+
#
|
|
15
16
|
# Returns a Proc which incapsulates the method business logic.
|
|
16
17
|
def to_proc
|
|
17
18
|
Proc.new { |*args| args.shift.__send__(self, *args) }
|
|
@@ -27,9 +28,9 @@ class DateTime
|
|
|
27
28
|
# See http://github.com/weppos/whois/issues#issue/24
|
|
28
29
|
unless method_defined?(:to_time)
|
|
29
30
|
# Attempts to convert self to a Ruby Time object; returns self if out of range of Ruby Time class
|
|
30
|
-
# Extracted from ActiveSupport.
|
|
31
|
-
#
|
|
32
31
|
# If self has an offset other than 0, self will just be returned unaltered, since there's no clean way to map it to a Time.
|
|
32
|
+
#
|
|
33
|
+
# Extracted from ActiveSupport.
|
|
33
34
|
def to_time
|
|
34
35
|
self.offset == 0 ? ::Time.utc(year, month, day, hour, min, sec) : self
|
|
35
36
|
end
|
data/lib/whois/answer/contact.rb
CHANGED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
#
|
|
2
|
+
# = Ruby Whois
|
|
3
|
+
#
|
|
4
|
+
# An intelligent pure Ruby WHOIS client and parser.
|
|
5
|
+
#
|
|
6
|
+
#
|
|
7
|
+
# Category:: Net
|
|
8
|
+
# Package:: Whois
|
|
9
|
+
# Author:: Simone Carletti <weppos@weppos.net>
|
|
10
|
+
# License:: MIT License
|
|
11
|
+
#
|
|
12
|
+
#--
|
|
13
|
+
#
|
|
14
|
+
#++
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
require 'whois/answer/super_struct'
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
module Whois
|
|
21
|
+
class Answer
|
|
22
|
+
|
|
23
|
+
#
|
|
24
|
+
# = Nameserver
|
|
25
|
+
#
|
|
26
|
+
# Holds the details of the Name Servers extracted from the WHOIS answer.
|
|
27
|
+
#
|
|
28
|
+
# A Nameserver is composed by the following attributes:
|
|
29
|
+
#
|
|
30
|
+
# * <tt>:name</tt>:
|
|
31
|
+
# * <tt>:ipv4</tt>:
|
|
32
|
+
# * <tt>:ipv6</tt>:
|
|
33
|
+
#
|
|
34
|
+
# Be aware that every WHOIS server can return a different number of details
|
|
35
|
+
# or no details at all.
|
|
36
|
+
#
|
|
37
|
+
class Nameserver < SuperStruct.new(:name, :ipv4, :ipv6)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -95,10 +95,10 @@ module Whois
|
|
|
95
95
|
protected
|
|
96
96
|
|
|
97
97
|
def parse
|
|
98
|
-
Scanners::
|
|
98
|
+
Scanners::Verisign.new(content_for_scanner).parse
|
|
99
99
|
end
|
|
100
100
|
|
|
101
|
-
# In case of "Response
|
|
101
|
+
# In case of "SPAM Response", the response contains more than one item
|
|
102
102
|
# for the same value and the value becomes an Array.
|
|
103
103
|
def last_useful_item(values)
|
|
104
104
|
values.is_a?(Array) ? values.last : values
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
#
|
|
2
|
+
# = Ruby Whois
|
|
3
|
+
#
|
|
4
|
+
# An intelligent pure Ruby WHOIS client and parser.
|
|
5
|
+
#
|
|
6
|
+
#
|
|
7
|
+
# Category:: Net
|
|
8
|
+
# Package:: Whois
|
|
9
|
+
# Author:: Simone Carletti <weppos@weppos.net>
|
|
10
|
+
# License:: MIT License
|
|
11
|
+
#
|
|
12
|
+
#--
|
|
13
|
+
#
|
|
14
|
+
#++
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
module Whois
|
|
18
|
+
class Answer
|
|
19
|
+
class Parser
|
|
20
|
+
module Scanners
|
|
21
|
+
|
|
22
|
+
class Iana
|
|
23
|
+
|
|
24
|
+
def initialize(content)
|
|
25
|
+
@input = StringScanner.new(content)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def parse
|
|
29
|
+
@ast = {}
|
|
30
|
+
while !@input.eos?
|
|
31
|
+
trim_newline ||
|
|
32
|
+
parse_content
|
|
33
|
+
end
|
|
34
|
+
@ast
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
private
|
|
38
|
+
|
|
39
|
+
def parse_content
|
|
40
|
+
parse_disclaimer ||
|
|
41
|
+
parse_section ||
|
|
42
|
+
error("Unexpected token")
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def trim_newline
|
|
46
|
+
@input.scan(/\n/)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def parse_section
|
|
50
|
+
if @input.scan(/^(.+):(.+)\n/)
|
|
51
|
+
|
|
52
|
+
# Adapt the section's name depending on the first line
|
|
53
|
+
section = case @input[1].strip
|
|
54
|
+
when 'contact'
|
|
55
|
+
@input[2].strip # use the contact type name as identifier
|
|
56
|
+
when 'created', 'changed'
|
|
57
|
+
'dates'
|
|
58
|
+
when 'nserver'
|
|
59
|
+
'nameservers'
|
|
60
|
+
else
|
|
61
|
+
@input[1].strip # Default name is the first label found
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
content = parse_section_pairs
|
|
65
|
+
@input.match?(/\n+/) || error("Unexpected end of section")
|
|
66
|
+
@ast[section] = content
|
|
67
|
+
else
|
|
68
|
+
false
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def parse_section_pairs
|
|
73
|
+
# Sets by default the firsts values found in the section parsing bellow
|
|
74
|
+
section_name, section_value = @input[1].strip, @input[2].strip
|
|
75
|
+
#contents = {section_name => section_value}
|
|
76
|
+
|
|
77
|
+
contents = {}
|
|
78
|
+
|
|
79
|
+
while content = parse_section_pair
|
|
80
|
+
contents.merge!(content)
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
if contents.has_key? section_name
|
|
84
|
+
contents[section_name].insert(0, "#{section_value}\n")
|
|
85
|
+
else
|
|
86
|
+
contents[section_name] = section_value
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
if !contents.empty?
|
|
90
|
+
contents
|
|
91
|
+
else
|
|
92
|
+
false
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
def parse_section_pair
|
|
98
|
+
if @input.scan(/^(.+):\s*(.+)\n/)
|
|
99
|
+
key = @input[1].strip
|
|
100
|
+
values = [@input[2].strip]
|
|
101
|
+
|
|
102
|
+
while value = parse_section_pair_newlinevalue(key)
|
|
103
|
+
values << value
|
|
104
|
+
end
|
|
105
|
+
{ key => values.join("\n") }
|
|
106
|
+
else
|
|
107
|
+
false
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
def parse_section_pair_newlinevalue(key)
|
|
113
|
+
if @input.scan(/^#{key}:\s*(.+)\n/)
|
|
114
|
+
@input[1].strip
|
|
115
|
+
else
|
|
116
|
+
false
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def parse_disclaimer
|
|
121
|
+
if @input.match?(/^\%(.*?)\n/)
|
|
122
|
+
disclaimer = []
|
|
123
|
+
while @input.scan(/\%(.*?)\n/)
|
|
124
|
+
matched = @input[1].strip
|
|
125
|
+
disclaimer << matched if matched =~ /\w+/
|
|
126
|
+
end
|
|
127
|
+
@ast["Disclaimer"] = disclaimer.join(" ")
|
|
128
|
+
else
|
|
129
|
+
false
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
def error(message)
|
|
134
|
+
if @input.eos?
|
|
135
|
+
raise "Unexpected end of input."
|
|
136
|
+
else
|
|
137
|
+
raise "#{message}: #{@input.peek(@input.string.length)}"
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
end
|
|
@@ -19,7 +19,7 @@ module Whois
|
|
|
19
19
|
class Parser
|
|
20
20
|
module Scanners
|
|
21
21
|
|
|
22
|
-
class
|
|
22
|
+
class Verisign
|
|
23
23
|
|
|
24
24
|
def initialize(content)
|
|
25
25
|
@input = StringScanner.new(content)
|
|
@@ -36,7 +36,7 @@ module Whois
|
|
|
36
36
|
private
|
|
37
37
|
|
|
38
38
|
def parse_content
|
|
39
|
-
|
|
39
|
+
trim_empty_line ||
|
|
40
40
|
parse_not_found ||
|
|
41
41
|
parse_disclaimer ||
|
|
42
42
|
parse_notice ||
|
|
@@ -44,13 +44,23 @@ module Whois
|
|
|
44
44
|
skip_iana_service ||
|
|
45
45
|
trim_last_update ||
|
|
46
46
|
trim_fuffa ||
|
|
47
|
+
|
|
47
48
|
error("Unexpected token")
|
|
48
49
|
end
|
|
49
50
|
|
|
50
|
-
def
|
|
51
|
-
@input.
|
|
51
|
+
def trim_empty_line
|
|
52
|
+
@input.skip(/^\n/)
|
|
52
53
|
end
|
|
53
54
|
|
|
55
|
+
def error(message)
|
|
56
|
+
if @input.eos?
|
|
57
|
+
raise "Unexpected end of input."
|
|
58
|
+
else
|
|
59
|
+
raise "#{message}: `#{@input.peek(@input.string.length)}'"
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
|
|
54
64
|
def trim_last_update
|
|
55
65
|
@input.scan(/>>>(.*?)<<<\n/)
|
|
56
66
|
end
|
|
@@ -81,8 +91,6 @@ module Whois
|
|
|
81
91
|
lines << @input[1].strip
|
|
82
92
|
end
|
|
83
93
|
@ast["Notice"] = lines.join(" ")
|
|
84
|
-
else
|
|
85
|
-
false
|
|
86
94
|
end
|
|
87
95
|
end
|
|
88
96
|
|
|
@@ -93,8 +101,6 @@ module Whois
|
|
|
93
101
|
lines << @input[1].strip
|
|
94
102
|
end
|
|
95
103
|
@ast["Disclaimer"] = lines.join(" ")
|
|
96
|
-
else
|
|
97
|
-
false
|
|
98
104
|
end
|
|
99
105
|
end
|
|
100
106
|
|
|
@@ -107,18 +113,12 @@ module Whois
|
|
|
107
113
|
@ast[key].is_a?(Array) || @ast[key] = [@ast[key]]
|
|
108
114
|
@ast[key] << value
|
|
109
115
|
end
|
|
110
|
-
else
|
|
111
|
-
false
|
|
112
116
|
end
|
|
113
117
|
end
|
|
114
118
|
|
|
115
|
-
def error(message)
|
|
116
|
-
raise "#{message}: #{@input.peek(@input.string.length)}"
|
|
117
|
-
end
|
|
118
|
-
|
|
119
119
|
end
|
|
120
120
|
|
|
121
121
|
end
|
|
122
122
|
end
|
|
123
123
|
end
|
|
124
|
-
end
|
|
124
|
+
end
|
|
@@ -100,10 +100,10 @@ module Whois
|
|
|
100
100
|
protected
|
|
101
101
|
|
|
102
102
|
def parse
|
|
103
|
-
Scanners::
|
|
103
|
+
Scanners::Verisign.new(content_for_scanner).parse
|
|
104
104
|
end
|
|
105
105
|
|
|
106
|
-
# In case of "Response
|
|
106
|
+
# In case of "SPAM Response", the response contains more than one item
|
|
107
107
|
# for the same value and the value becomes an Array.
|
|
108
108
|
def last_useful_item(values)
|
|
109
109
|
values.is_a?(Array) ? values.last : values
|