jm81-ruby-whois 0.5.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/LICENSE +1020 -0
 - data/README +4 -0
 - data/Rakefile +43 -0
 - data/VERSION +1 -0
 - data/lib/whois.rb +9 -0
 - data/lib/whois/domain.rb +18 -0
 - data/lib/whois/domain/aero.rb +27 -0
 - data/lib/whois/domain/afilias.rb +26 -0
 - data/lib/whois/domain/base.rb +114 -0
 - data/lib/whois/domain/cat.rb +30 -0
 - data/lib/whois/domain/coop.rb +31 -0
 - data/lib/whois/domain/educause.rb +51 -0
 - data/lib/whois/domain/gov.rb +35 -0
 - data/lib/whois/domain/int.rb +41 -0
 - data/lib/whois/domain/mobi.rb +26 -0
 - data/lib/whois/domain/museum.rb +28 -0
 - data/lib/whois/domain/name.rb +36 -0
 - data/lib/whois/domain/neustar.rb +42 -0
 - data/lib/whois/domain/pro.rb +32 -0
 - data/lib/whois/domain/public_interest.rb +25 -0
 - data/lib/whois/domain/verisign_grs.rb +36 -0
 - data/lib/whois/domain/ws.rb +58 -0
 - data/ruby-whois.gemspec +95 -0
 - data/test/test_helper.rb +59 -0
 - data/test/whois/domain/aero_test.rb +24 -0
 - data/test/whois/domain/afilias_test.rb +24 -0
 - data/test/whois/domain/cat_test.rb +28 -0
 - data/test/whois/domain/coop_test.rb +28 -0
 - data/test/whois/domain/educause_test.rb +24 -0
 - data/test/whois/domain/gov_test.rb +28 -0
 - data/test/whois/domain/int_test.rb +24 -0
 - data/test/whois/domain/mobi_test.rb +24 -0
 - data/test/whois/domain/museum_test.rb +28 -0
 - data/test/whois/domain/name_test.rb +24 -0
 - data/test/whois/domain/neustar_test.rb +134 -0
 - data/test/whois/domain/pro_test.rb +27 -0
 - data/test/whois/domain/public_interest_test.rb +75 -0
 - data/test/whois/domain/verisign_grs_test.rb +90 -0
 - data/test/whois/domain/ws_test.rb +24 -0
 - data/test/whois/domain_test.rb +15 -0
 - metadata +110 -0
 
| 
         @@ -0,0 +1,26 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class Whois::Domain::Mobi < Whois::Domain::Base
         
     | 
| 
      
 2 
     | 
    
         
            +
              HOST = "whois.dotmobiregistry.net"
         
     | 
| 
      
 3 
     | 
    
         
            +
              ATTR_MATCH = /^([^:]+):(\S.*)\r$/
         
     | 
| 
      
 4 
     | 
    
         
            +
              responds_to :mobi
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
              ATTR_NAMES = {
         
     | 
| 
      
 7 
     | 
    
         
            +
                :registrar_name => "Sponsoring Registrar",
         
     | 
| 
      
 8 
     | 
    
         
            +
                :created_on => "Created On",
         
     | 
| 
      
 9 
     | 
    
         
            +
                :updated_on => "Last Updated On",
         
     | 
| 
      
 10 
     | 
    
         
            +
                :expires_on => "Expiration Date"
         
     | 
| 
      
 11 
     | 
    
         
            +
              }
         
     | 
| 
      
 12 
     | 
    
         
            +
              
         
     | 
| 
      
 13 
     | 
    
         
            +
              # I couldn't find any database updated information for .org
         
     | 
| 
      
 14 
     | 
    
         
            +
              def database_updated_at
         
     | 
| 
      
 15 
     | 
    
         
            +
                nil
         
     | 
| 
      
 16 
     | 
    
         
            +
              end
         
     | 
| 
      
 17 
     | 
    
         
            +
              
         
     | 
| 
      
 18 
     | 
    
         
            +
              # No whois server listed for .org domains, so always return the whois server used here.
         
     | 
| 
      
 19 
     | 
    
         
            +
              def whois_server
         
     | 
| 
      
 20 
     | 
    
         
            +
                HOST
         
     | 
| 
      
 21 
     | 
    
         
            +
              end
         
     | 
| 
      
 22 
     | 
    
         
            +
              
         
     | 
| 
      
 23 
     | 
    
         
            +
              def available?
         
     | 
| 
      
 24 
     | 
    
         
            +
                @raw =~ /NOT FOUND/
         
     | 
| 
      
 25 
     | 
    
         
            +
              end
         
     | 
| 
      
 26 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,28 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class Whois::Domain::Museum < Whois::Domain::Base
         
     | 
| 
      
 2 
     | 
    
         
            +
              HOST = "whois.museum"
         
     | 
| 
      
 3 
     | 
    
         
            +
              ATTR_MATCH = /^([^:]+):\s(.*)\r$/
         
     | 
| 
      
 4 
     | 
    
         
            +
              responds_to :museum
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
              ATTR_NAMES = {
         
     | 
| 
      
 7 
     | 
    
         
            +
                :registrar_name => "Registrar ID",
         
     | 
| 
      
 8 
     | 
    
         
            +
                :created_on => "Created On",
         
     | 
| 
      
 9 
     | 
    
         
            +
                :updated_on => "Last Updated On",
         
     | 
| 
      
 10 
     | 
    
         
            +
                :expires_on => "Expiration Date"
         
     | 
| 
      
 11 
     | 
    
         
            +
              }
         
     | 
| 
      
 12 
     | 
    
         
            +
              
         
     | 
| 
      
 13 
     | 
    
         
            +
              def database_updated_at
         
     | 
| 
      
 14 
     | 
    
         
            +
                nil
         
     | 
| 
      
 15 
     | 
    
         
            +
              end
         
     | 
| 
      
 16 
     | 
    
         
            +
              
         
     | 
| 
      
 17 
     | 
    
         
            +
              def whois_server
         
     | 
| 
      
 18 
     | 
    
         
            +
                HOST
         
     | 
| 
      
 19 
     | 
    
         
            +
              end
         
     | 
| 
      
 20 
     | 
    
         
            +
              
         
     | 
| 
      
 21 
     | 
    
         
            +
              def available?
         
     | 
| 
      
 22 
     | 
    
         
            +
                @raw =~ /NOT FOUND/
         
     | 
| 
      
 23 
     | 
    
         
            +
              end
         
     | 
| 
      
 24 
     | 
    
         
            +
              
         
     | 
| 
      
 25 
     | 
    
         
            +
              def register_url
         
     | 
| 
      
 26 
     | 
    
         
            +
                "http://about.museum/register/"
         
     | 
| 
      
 27 
     | 
    
         
            +
              end
         
     | 
| 
      
 28 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,36 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class Whois::Domain::Name < Whois::Domain::Base
         
     | 
| 
      
 2 
     | 
    
         
            +
              HOST = "whois.nic.name"
         
     | 
| 
      
 3 
     | 
    
         
            +
              ATTR_MATCH = /^([^:]+):\s(.*)\r$/
         
     | 
| 
      
 4 
     | 
    
         
            +
              responds_to :name
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
              ATTR_NAMES = {
         
     | 
| 
      
 7 
     | 
    
         
            +
                :registrar_name => "Sponsoring Registrar",
         
     | 
| 
      
 8 
     | 
    
         
            +
                :created_on => "Created On",
         
     | 
| 
      
 9 
     | 
    
         
            +
                :updated_on => "Updated On",
         
     | 
| 
      
 10 
     | 
    
         
            +
                :expires_on => "Expires On",
         
     | 
| 
      
 11 
     | 
    
         
            +
                :status => "Domain Status"
         
     | 
| 
      
 12 
     | 
    
         
            +
              }
         
     | 
| 
      
 13 
     | 
    
         
            +
              
         
     | 
| 
      
 14 
     | 
    
         
            +
              def database_updated_at
         
     | 
| 
      
 15 
     | 
    
         
            +
                nil
         
     | 
| 
      
 16 
     | 
    
         
            +
              end
         
     | 
| 
      
 17 
     | 
    
         
            +
              
         
     | 
| 
      
 18 
     | 
    
         
            +
              def whois_server
         
     | 
| 
      
 19 
     | 
    
         
            +
                HOST
         
     | 
| 
      
 20 
     | 
    
         
            +
              end
         
     | 
| 
      
 21 
     | 
    
         
            +
              
         
     | 
| 
      
 22 
     | 
    
         
            +
              def available?
         
     | 
| 
      
 23 
     | 
    
         
            +
                @raw =~ /No match/
         
     | 
| 
      
 24 
     | 
    
         
            +
              end
         
     | 
| 
      
 25 
     | 
    
         
            +
              
         
     | 
| 
      
 26 
     | 
    
         
            +
              # whois.nic.name uses a query in the format
         
     | 
| 
      
 27 
     | 
    
         
            +
              # object = name. e.g. domain = john.smith.name
         
     | 
| 
      
 28 
     | 
    
         
            +
              def query
         
     | 
| 
      
 29 
     | 
    
         
            +
                s = TCPsocket.open(host, 43)
         
     | 
| 
      
 30 
     | 
    
         
            +
                s.write("domain = #{@name}\n")
         
     | 
| 
      
 31 
     | 
    
         
            +
                ret = ""
         
     | 
| 
      
 32 
     | 
    
         
            +
                while s.gets do ret += $_ end
         
     | 
| 
      
 33 
     | 
    
         
            +
                s.close
         
     | 
| 
      
 34 
     | 
    
         
            +
                @raw = ret
         
     | 
| 
      
 35 
     | 
    
         
            +
              end
         
     | 
| 
      
 36 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,42 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class Whois::Domain::Neustar < Whois::Domain::Base
         
     | 
| 
      
 2 
     | 
    
         
            +
              ATTR_MATCH = /^([^:]+):\s{2,}(.*)$/
         
     | 
| 
      
 3 
     | 
    
         
            +
              responds_to :biz, :us, :travel
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
              ATTR_NAMES = {
         
     | 
| 
      
 6 
     | 
    
         
            +
                :registrar_name => "Sponsoring Registrar",
         
     | 
| 
      
 7 
     | 
    
         
            +
                :created_on => "Domain Registration Date",
         
     | 
| 
      
 8 
     | 
    
         
            +
                :updated_on => "Domain Last Updated Date",
         
     | 
| 
      
 9 
     | 
    
         
            +
                :expires_on => "Domain Expiration Date",
         
     | 
| 
      
 10 
     | 
    
         
            +
                :status => "Domain Status"
         
     | 
| 
      
 11 
     | 
    
         
            +
              }
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
              def host
         
     | 
| 
      
 14 
     | 
    
         
            +
                case @name.match(/.*\.([^\.]+)$/)[1]
         
     | 
| 
      
 15 
     | 
    
         
            +
                when 'biz' then 'whois.biz'
         
     | 
| 
      
 16 
     | 
    
         
            +
                when 'us'  then 'whois.nic.us'
         
     | 
| 
      
 17 
     | 
    
         
            +
                when 'travel' then 'whois.nic.travel'
         
     | 
| 
      
 18 
     | 
    
         
            +
                end
         
     | 
| 
      
 19 
     | 
    
         
            +
              end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
              def database_updated_at
         
     | 
| 
      
 22 
     | 
    
         
            +
                if(@raw =~ /Whois database was last updated on: ([^<]*)/)
         
     | 
| 
      
 23 
     | 
    
         
            +
                  Time.parse($1)
         
     | 
| 
      
 24 
     | 
    
         
            +
                end
         
     | 
| 
      
 25 
     | 
    
         
            +
              end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
              def whois_server
         
     | 
| 
      
 28 
     | 
    
         
            +
                host
         
     | 
| 
      
 29 
     | 
    
         
            +
              end
         
     | 
| 
      
 30 
     | 
    
         
            +
              
         
     | 
| 
      
 31 
     | 
    
         
            +
              def available?
         
     | 
| 
      
 32 
     | 
    
         
            +
                @raw =~ /Not found:/
         
     | 
| 
      
 33 
     | 
    
         
            +
              end
         
     | 
| 
      
 34 
     | 
    
         
            +
              
         
     | 
| 
      
 35 
     | 
    
         
            +
              def register_url
         
     | 
| 
      
 36 
     | 
    
         
            +
                if @name.match(/.*\.([^\.]+)$/)[1] == "travel"
         
     | 
| 
      
 37 
     | 
    
         
            +
                  "http://www.travel.travel/authenticationframe.htm"
         
     | 
| 
      
 38 
     | 
    
         
            +
                else
         
     | 
| 
      
 39 
     | 
    
         
            +
                  super
         
     | 
| 
      
 40 
     | 
    
         
            +
                end
         
     | 
| 
      
 41 
     | 
    
         
            +
              end
         
     | 
| 
      
 42 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,32 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class Whois::Domain::Pro < Whois::Domain::Base
         
     | 
| 
      
 2 
     | 
    
         
            +
              HOST = "whois.registrypro.pro"
         
     | 
| 
      
 3 
     | 
    
         
            +
              ATTR_MATCH = /^([^:]+):\W*(.*)\r$/
         
     | 
| 
      
 4 
     | 
    
         
            +
              responds_to :pro
         
     | 
| 
      
 5 
     | 
    
         
            +
              
         
     | 
| 
      
 6 
     | 
    
         
            +
              ATTR_NAMES = {
         
     | 
| 
      
 7 
     | 
    
         
            +
                :registrar_name => "Sponsoring Registrar",
         
     | 
| 
      
 8 
     | 
    
         
            +
                :created_on => "Created On",
         
     | 
| 
      
 9 
     | 
    
         
            +
                :updated_on => "Last Updated On",
         
     | 
| 
      
 10 
     | 
    
         
            +
                :expires_on => "Expiration Date"
         
     | 
| 
      
 11 
     | 
    
         
            +
              }
         
     | 
| 
      
 12 
     | 
    
         
            +
              
         
     | 
| 
      
 13 
     | 
    
         
            +
              def database_updated_at
         
     | 
| 
      
 14 
     | 
    
         
            +
                nil
         
     | 
| 
      
 15 
     | 
    
         
            +
              end
         
     | 
| 
      
 16 
     | 
    
         
            +
              
         
     | 
| 
      
 17 
     | 
    
         
            +
              def status
         
     | 
| 
      
 18 
     | 
    
         
            +
                attrs["Status"] ? attrs["Status"][0].split(",").collect{|d| d.strip} : nil
         
     | 
| 
      
 19 
     | 
    
         
            +
              end
         
     | 
| 
      
 20 
     | 
    
         
            +
              
         
     | 
| 
      
 21 
     | 
    
         
            +
              def whois_server
         
     | 
| 
      
 22 
     | 
    
         
            +
                HOST
         
     | 
| 
      
 23 
     | 
    
         
            +
              end
         
     | 
| 
      
 24 
     | 
    
         
            +
              
         
     | 
| 
      
 25 
     | 
    
         
            +
              def register_url
         
     | 
| 
      
 26 
     | 
    
         
            +
                "http://www.registrypro.pro/partners_findaregistrar.htm"
         
     | 
| 
      
 27 
     | 
    
         
            +
              end
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
              def available?
         
     | 
| 
      
 30 
     | 
    
         
            +
                @raw =~ /^No match/
         
     | 
| 
      
 31 
     | 
    
         
            +
              end
         
     | 
| 
      
 32 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,25 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class Whois::Domain::PublicInterest < Whois::Domain::Base
         
     | 
| 
      
 2 
     | 
    
         
            +
              HOST = "whois.pir.org"
         
     | 
| 
      
 3 
     | 
    
         
            +
              ATTR_MATCH = /^([^:]+):(\S.*)\r$/
         
     | 
| 
      
 4 
     | 
    
         
            +
              responds_to :org
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
              ATTR_NAMES = {
         
     | 
| 
      
 7 
     | 
    
         
            +
                :registrar_name => "Sponsoring Registrar",
         
     | 
| 
      
 8 
     | 
    
         
            +
                :created_on => "Created On",
         
     | 
| 
      
 9 
     | 
    
         
            +
                :updated_on => "Last Updated On"
         
     | 
| 
      
 10 
     | 
    
         
            +
              }
         
     | 
| 
      
 11 
     | 
    
         
            +
              
         
     | 
| 
      
 12 
     | 
    
         
            +
              # I couldn't find any database updated information for .org
         
     | 
| 
      
 13 
     | 
    
         
            +
              def database_updated_at
         
     | 
| 
      
 14 
     | 
    
         
            +
                nil
         
     | 
| 
      
 15 
     | 
    
         
            +
              end
         
     | 
| 
      
 16 
     | 
    
         
            +
              
         
     | 
| 
      
 17 
     | 
    
         
            +
              # No whois server listed for .org domains, so always return the whois server used here.
         
     | 
| 
      
 18 
     | 
    
         
            +
              def whois_server
         
     | 
| 
      
 19 
     | 
    
         
            +
                HOST
         
     | 
| 
      
 20 
     | 
    
         
            +
              end
         
     | 
| 
      
 21 
     | 
    
         
            +
              
         
     | 
| 
      
 22 
     | 
    
         
            +
              def available?
         
     | 
| 
      
 23 
     | 
    
         
            +
                @raw =~ /NOT FOUND/
         
     | 
| 
      
 24 
     | 
    
         
            +
              end
         
     | 
| 
      
 25 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,36 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class Whois::Domain::VerisignGrs < Whois::Domain::Base
         
     | 
| 
      
 2 
     | 
    
         
            +
              HOST = "whois.verisign-grs.com"
         
     | 
| 
      
 3 
     | 
    
         
            +
              ATTR_MATCH = /^   ([^:]+):\W*(.*)$/
         
     | 
| 
      
 4 
     | 
    
         
            +
              responds_to :com, :net, :jobs, :tv
         
     | 
| 
      
 5 
     | 
    
         
            +
              
         
     | 
| 
      
 6 
     | 
    
         
            +
              def host
         
     | 
| 
      
 7 
     | 
    
         
            +
                case @name.match(/.*\.([^\.]+)$/)[1]
         
     | 
| 
      
 8 
     | 
    
         
            +
                when 'jobs' then "jobswhois.verisign-grs.com"
         
     | 
| 
      
 9 
     | 
    
         
            +
                when 'tv'   then "tvwhois.verisign-grs.com"  
         
     | 
| 
      
 10 
     | 
    
         
            +
                else             "whois.verisign-grs.com"
         
     | 
| 
      
 11 
     | 
    
         
            +
                end
         
     | 
| 
      
 12 
     | 
    
         
            +
              end
         
     | 
| 
      
 13 
     | 
    
         
            +
              
         
     | 
| 
      
 14 
     | 
    
         
            +
              # For best results, this use object = name format.
         
     | 
| 
      
 15 
     | 
    
         
            +
              # e.g. domain = john.smith.name
         
     | 
| 
      
 16 
     | 
    
         
            +
              def query
         
     | 
| 
      
 17 
     | 
    
         
            +
                s = TCPsocket.open(host, 43)
         
     | 
| 
      
 18 
     | 
    
         
            +
                s.write("domain = #{@name}\n")
         
     | 
| 
      
 19 
     | 
    
         
            +
                ret = ""
         
     | 
| 
      
 20 
     | 
    
         
            +
                while s.gets do
         
     | 
| 
      
 21 
     | 
    
         
            +
                  ret += $_
         
     | 
| 
      
 22 
     | 
    
         
            +
                end
         
     | 
| 
      
 23 
     | 
    
         
            +
                s.close
         
     | 
| 
      
 24 
     | 
    
         
            +
                @raw = ret
         
     | 
| 
      
 25 
     | 
    
         
            +
              end
         
     | 
| 
      
 26 
     | 
    
         
            +
              
         
     | 
| 
      
 27 
     | 
    
         
            +
              def database_updated_at
         
     | 
| 
      
 28 
     | 
    
         
            +
                if(@raw =~ /Last update of whois database: ([^<]*)/)
         
     | 
| 
      
 29 
     | 
    
         
            +
                  Time.parse($1)
         
     | 
| 
      
 30 
     | 
    
         
            +
                end
         
     | 
| 
      
 31 
     | 
    
         
            +
              end
         
     | 
| 
      
 32 
     | 
    
         
            +
              
         
     | 
| 
      
 33 
     | 
    
         
            +
              def available?
         
     | 
| 
      
 34 
     | 
    
         
            +
                @raw =~ /^No match for/
         
     | 
| 
      
 35 
     | 
    
         
            +
              end
         
     | 
| 
      
 36 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,58 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class Whois::Domain::Ws < Whois::Domain::Base
         
     | 
| 
      
 2 
     | 
    
         
            +
              HOST = "whois.website.ws"
         
     | 
| 
      
 3 
     | 
    
         
            +
              ATTR_MATCH = /\s*([^:]+):\s+(.*)$/
         
     | 
| 
      
 4 
     | 
    
         
            +
              responds_to :ws
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
              ATTR_NAMES = {
         
     | 
| 
      
 7 
     | 
    
         
            +
                :registrar_name => "Registrar Name",
         
     | 
| 
      
 8 
     | 
    
         
            +
                :whois_server => "Registrar Whois",
         
     | 
| 
      
 9 
     | 
    
         
            +
                :created_on => "Domain created on",
         
     | 
| 
      
 10 
     | 
    
         
            +
                :updated_on => "Domain last updated on"
         
     | 
| 
      
 11 
     | 
    
         
            +
              }
         
     | 
| 
      
 12 
     | 
    
         
            +
              
         
     | 
| 
      
 13 
     | 
    
         
            +
              def database_updated_at
         
     | 
| 
      
 14 
     | 
    
         
            +
                nil
         
     | 
| 
      
 15 
     | 
    
         
            +
              end
         
     | 
| 
      
 16 
     | 
    
         
            +
              
         
     | 
| 
      
 17 
     | 
    
         
            +
              def available?
         
     | 
| 
      
 18 
     | 
    
         
            +
                @raw =~ /^No match/
         
     | 
| 
      
 19 
     | 
    
         
            +
              end
         
     | 
| 
      
 20 
     | 
    
         
            +
              
         
     | 
| 
      
 21 
     | 
    
         
            +
              def name_servers
         
     | 
| 
      
 22 
     | 
    
         
            +
                found = false
         
     | 
| 
      
 23 
     | 
    
         
            +
                ns_ary = []
         
     | 
| 
      
 24 
     | 
    
         
            +
                @raw.each_line do |l|
         
     | 
| 
      
 25 
     | 
    
         
            +
                  if l =~ /Current Nameservers:/
         
     | 
| 
      
 26 
     | 
    
         
            +
                    found = true
         
     | 
| 
      
 27 
     | 
    
         
            +
                  elsif found && l =~ /^\s*(\S+)/
         
     | 
| 
      
 28 
     | 
    
         
            +
                    ns_ary << $1
         
     | 
| 
      
 29 
     | 
    
         
            +
                  end
         
     | 
| 
      
 30 
     | 
    
         
            +
                end
         
     | 
| 
      
 31 
     | 
    
         
            +
                ns_ary
         
     | 
| 
      
 32 
     | 
    
         
            +
              end
         
     | 
| 
      
 33 
     | 
    
         
            +
              
         
     | 
| 
      
 34 
     | 
    
         
            +
              def created_on
         
     | 
| 
      
 35 
     | 
    
         
            +
                if @raw =~ /Domain Created: (.*)$/
         
     | 
| 
      
 36 
     | 
    
         
            +
                  Date.parse($1)
         
     | 
| 
      
 37 
     | 
    
         
            +
                else
         
     | 
| 
      
 38 
     | 
    
         
            +
                  nil
         
     | 
| 
      
 39 
     | 
    
         
            +
                end
         
     | 
| 
      
 40 
     | 
    
         
            +
              end
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
              def updated_on
         
     | 
| 
      
 43 
     | 
    
         
            +
                if @raw =~ /Domain Last Updated: (.*)$/
         
     | 
| 
      
 44 
     | 
    
         
            +
                  Date.parse($1)
         
     | 
| 
      
 45 
     | 
    
         
            +
                else
         
     | 
| 
      
 46 
     | 
    
         
            +
                  nil
         
     | 
| 
      
 47 
     | 
    
         
            +
                end
         
     | 
| 
      
 48 
     | 
    
         
            +
              end
         
     | 
| 
      
 49 
     | 
    
         
            +
              
         
     | 
| 
      
 50 
     | 
    
         
            +
              def expires_on
         
     | 
| 
      
 51 
     | 
    
         
            +
                if @raw =~ /Domain Currently Expires: (.*)$/
         
     | 
| 
      
 52 
     | 
    
         
            +
                  Date.parse($1)
         
     | 
| 
      
 53 
     | 
    
         
            +
                else
         
     | 
| 
      
 54 
     | 
    
         
            +
                  nil
         
     | 
| 
      
 55 
     | 
    
         
            +
                end
         
     | 
| 
      
 56 
     | 
    
         
            +
              end
         
     | 
| 
      
 57 
     | 
    
         
            +
              
         
     | 
| 
      
 58 
     | 
    
         
            +
            end
         
     | 
    
        data/ruby-whois.gemspec
    ADDED
    
    | 
         @@ -0,0 +1,95 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # Generated by jeweler
         
     | 
| 
      
 2 
     | 
    
         
            +
            # DO NOT EDIT THIS FILE
         
     | 
| 
      
 3 
     | 
    
         
            +
            # Instead, edit Jeweler::Tasks in Rakefile, and run `rake gemspec`
         
     | 
| 
      
 4 
     | 
    
         
            +
            # -*- encoding: utf-8 -*-
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            Gem::Specification.new do |s|
         
     | 
| 
      
 7 
     | 
    
         
            +
              s.name = %q{ruby-whois}
         
     | 
| 
      
 8 
     | 
    
         
            +
              s.version = "0.5.0"
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
              s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
         
     | 
| 
      
 11 
     | 
    
         
            +
              s.authors = ["Jared Morgan"]
         
     | 
| 
      
 12 
     | 
    
         
            +
              s.date = %q{2009-09-22}
         
     | 
| 
      
 13 
     | 
    
         
            +
              s.email = %q{jmorgan@morgancreative.net}
         
     | 
| 
      
 14 
     | 
    
         
            +
              s.extra_rdoc_files = [
         
     | 
| 
      
 15 
     | 
    
         
            +
                "LICENSE",
         
     | 
| 
      
 16 
     | 
    
         
            +
                 "README"
         
     | 
| 
      
 17 
     | 
    
         
            +
              ]
         
     | 
| 
      
 18 
     | 
    
         
            +
              s.files = [
         
     | 
| 
      
 19 
     | 
    
         
            +
                "LICENSE",
         
     | 
| 
      
 20 
     | 
    
         
            +
                 "README",
         
     | 
| 
      
 21 
     | 
    
         
            +
                 "Rakefile",
         
     | 
| 
      
 22 
     | 
    
         
            +
                 "VERSION",
         
     | 
| 
      
 23 
     | 
    
         
            +
                 "lib/whois.rb",
         
     | 
| 
      
 24 
     | 
    
         
            +
                 "lib/whois/domain.rb",
         
     | 
| 
      
 25 
     | 
    
         
            +
                 "lib/whois/domain/aero.rb",
         
     | 
| 
      
 26 
     | 
    
         
            +
                 "lib/whois/domain/afilias.rb",
         
     | 
| 
      
 27 
     | 
    
         
            +
                 "lib/whois/domain/base.rb",
         
     | 
| 
      
 28 
     | 
    
         
            +
                 "lib/whois/domain/cat.rb",
         
     | 
| 
      
 29 
     | 
    
         
            +
                 "lib/whois/domain/coop.rb",
         
     | 
| 
      
 30 
     | 
    
         
            +
                 "lib/whois/domain/educause.rb",
         
     | 
| 
      
 31 
     | 
    
         
            +
                 "lib/whois/domain/gov.rb",
         
     | 
| 
      
 32 
     | 
    
         
            +
                 "lib/whois/domain/int.rb",
         
     | 
| 
      
 33 
     | 
    
         
            +
                 "lib/whois/domain/mobi.rb",
         
     | 
| 
      
 34 
     | 
    
         
            +
                 "lib/whois/domain/museum.rb",
         
     | 
| 
      
 35 
     | 
    
         
            +
                 "lib/whois/domain/name.rb",
         
     | 
| 
      
 36 
     | 
    
         
            +
                 "lib/whois/domain/neustar.rb",
         
     | 
| 
      
 37 
     | 
    
         
            +
                 "lib/whois/domain/pro.rb",
         
     | 
| 
      
 38 
     | 
    
         
            +
                 "lib/whois/domain/public_interest.rb",
         
     | 
| 
      
 39 
     | 
    
         
            +
                 "lib/whois/domain/verisign_grs.rb",
         
     | 
| 
      
 40 
     | 
    
         
            +
                 "lib/whois/domain/ws.rb",
         
     | 
| 
      
 41 
     | 
    
         
            +
                 "ruby-whois.gemspec",
         
     | 
| 
      
 42 
     | 
    
         
            +
                 "test/test_helper.rb",
         
     | 
| 
      
 43 
     | 
    
         
            +
                 "test/whois/domain/aero_test.rb",
         
     | 
| 
      
 44 
     | 
    
         
            +
                 "test/whois/domain/afilias_test.rb",
         
     | 
| 
      
 45 
     | 
    
         
            +
                 "test/whois/domain/cat_test.rb",
         
     | 
| 
      
 46 
     | 
    
         
            +
                 "test/whois/domain/coop_test.rb",
         
     | 
| 
      
 47 
     | 
    
         
            +
                 "test/whois/domain/educause_test.rb",
         
     | 
| 
      
 48 
     | 
    
         
            +
                 "test/whois/domain/gov_test.rb",
         
     | 
| 
      
 49 
     | 
    
         
            +
                 "test/whois/domain/int_test.rb",
         
     | 
| 
      
 50 
     | 
    
         
            +
                 "test/whois/domain/mobi_test.rb",
         
     | 
| 
      
 51 
     | 
    
         
            +
                 "test/whois/domain/museum_test.rb",
         
     | 
| 
      
 52 
     | 
    
         
            +
                 "test/whois/domain/name_test.rb",
         
     | 
| 
      
 53 
     | 
    
         
            +
                 "test/whois/domain/neustar_test.rb",
         
     | 
| 
      
 54 
     | 
    
         
            +
                 "test/whois/domain/pro_test.rb",
         
     | 
| 
      
 55 
     | 
    
         
            +
                 "test/whois/domain/public_interest_test.rb",
         
     | 
| 
      
 56 
     | 
    
         
            +
                 "test/whois/domain/verisign_grs_test.rb",
         
     | 
| 
      
 57 
     | 
    
         
            +
                 "test/whois/domain/ws_test.rb",
         
     | 
| 
      
 58 
     | 
    
         
            +
                 "test/whois/domain_test.rb"
         
     | 
| 
      
 59 
     | 
    
         
            +
              ]
         
     | 
| 
      
 60 
     | 
    
         
            +
              s.has_rdoc = true
         
     | 
| 
      
 61 
     | 
    
         
            +
              s.homepage = %q{http://github.com/jm81/ruby-whois}
         
     | 
| 
      
 62 
     | 
    
         
            +
              s.rdoc_options = ["--charset=UTF-8"]
         
     | 
| 
      
 63 
     | 
    
         
            +
              s.require_paths = ["lib"]
         
     | 
| 
      
 64 
     | 
    
         
            +
              s.rubygems_version = %q{1.3.1}
         
     | 
| 
      
 65 
     | 
    
         
            +
              s.summary = %q{Ruby library for accessing Whois information}
         
     | 
| 
      
 66 
     | 
    
         
            +
              s.test_files = [
         
     | 
| 
      
 67 
     | 
    
         
            +
                "test/test_helper.rb",
         
     | 
| 
      
 68 
     | 
    
         
            +
                 "test/whois/domain/aero_test.rb",
         
     | 
| 
      
 69 
     | 
    
         
            +
                 "test/whois/domain/afilias_test.rb",
         
     | 
| 
      
 70 
     | 
    
         
            +
                 "test/whois/domain/cat_test.rb",
         
     | 
| 
      
 71 
     | 
    
         
            +
                 "test/whois/domain/coop_test.rb",
         
     | 
| 
      
 72 
     | 
    
         
            +
                 "test/whois/domain/educause_test.rb",
         
     | 
| 
      
 73 
     | 
    
         
            +
                 "test/whois/domain/gov_test.rb",
         
     | 
| 
      
 74 
     | 
    
         
            +
                 "test/whois/domain/int_test.rb",
         
     | 
| 
      
 75 
     | 
    
         
            +
                 "test/whois/domain/mobi_test.rb",
         
     | 
| 
      
 76 
     | 
    
         
            +
                 "test/whois/domain/museum_test.rb",
         
     | 
| 
      
 77 
     | 
    
         
            +
                 "test/whois/domain/name_test.rb",
         
     | 
| 
      
 78 
     | 
    
         
            +
                 "test/whois/domain/neustar_test.rb",
         
     | 
| 
      
 79 
     | 
    
         
            +
                 "test/whois/domain/pro_test.rb",
         
     | 
| 
      
 80 
     | 
    
         
            +
                 "test/whois/domain/public_interest_test.rb",
         
     | 
| 
      
 81 
     | 
    
         
            +
                 "test/whois/domain/verisign_grs_test.rb",
         
     | 
| 
      
 82 
     | 
    
         
            +
                 "test/whois/domain/ws_test.rb",
         
     | 
| 
      
 83 
     | 
    
         
            +
                 "test/whois/domain_test.rb"
         
     | 
| 
      
 84 
     | 
    
         
            +
              ]
         
     | 
| 
      
 85 
     | 
    
         
            +
             
     | 
| 
      
 86 
     | 
    
         
            +
              if s.respond_to? :specification_version then
         
     | 
| 
      
 87 
     | 
    
         
            +
                current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
         
     | 
| 
      
 88 
     | 
    
         
            +
                s.specification_version = 2
         
     | 
| 
      
 89 
     | 
    
         
            +
             
     | 
| 
      
 90 
     | 
    
         
            +
                if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
         
     | 
| 
      
 91 
     | 
    
         
            +
                else
         
     | 
| 
      
 92 
     | 
    
         
            +
                end
         
     | 
| 
      
 93 
     | 
    
         
            +
              else
         
     | 
| 
      
 94 
     | 
    
         
            +
              end
         
     | 
| 
      
 95 
     | 
    
         
            +
            end
         
     | 
    
        data/test/test_helper.rb
    ADDED
    
    | 
         @@ -0,0 +1,59 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'test/unit'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'whois'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            class Test::Unit::TestCase
         
     | 
| 
      
 5 
     | 
    
         
            +
              
         
     | 
| 
      
 6 
     | 
    
         
            +
              # +exp+ expects a hash representing expected results (although +name+ also indicates
         
     | 
| 
      
 7 
     | 
    
         
            +
              # the domain to be queried if +d+ is not passed.) with the following keys:
         
     | 
| 
      
 8 
     | 
    
         
            +
              #  - name: domain name to be queried
         
     | 
| 
      
 9 
     | 
    
         
            +
              #  - kind: string identifying the name of the expected class
         
     | 
| 
      
 10 
     | 
    
         
            +
              #          (only the class name, namespace is assumed to be Whois::Domain)
         
     | 
| 
      
 11 
     | 
    
         
            +
              #  - created_on: Date created as string (YYYY-MM-DD)
         
     | 
| 
      
 12 
     | 
    
         
            +
              #  - updated_on: Date updated as string (YYYY-MM-DD) 
         
     | 
| 
      
 13 
     | 
    
         
            +
              #  - expires_on: Expiration date as string (YYYY-MM-DD)
         
     | 
| 
      
 14 
     | 
    
         
            +
              #  - database_updated_at: false iff this server does not have such a value.
         
     | 
| 
      
 15 
     | 
    
         
            +
              #  - status: Array of statuses.
         
     | 
| 
      
 16 
     | 
    
         
            +
              #  - registrar_name: Name of Registrar
         
     | 
| 
      
 17 
     | 
    
         
            +
              #  - name_servers: Array of name servers
         
     | 
| 
      
 18 
     | 
    
         
            +
              #  - whois_server: Whois server domain
         
     | 
| 
      
 19 
     | 
    
         
            +
              #  - raw_match: A string to match against the raw data.
         
     | 
| 
      
 20 
     | 
    
         
            +
              #  - to_s: Expected to_s
         
     | 
| 
      
 21 
     | 
    
         
            +
              def assert_whois_data(exp, d = nil)
         
     | 
| 
      
 22 
     | 
    
         
            +
                d ||= Whois::Domain.new(exp[:name])
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                assert_kind_of Whois::Domain.const_get(exp[:kind]), d, "#{exp[:name]} should be an instance of Whois::Domain::#{exp[:kind]}"
         
     | 
| 
      
 25 
     | 
    
         
            +
                assert_equal exp[:name], d.name, "Verify that name returns same as name given"
         
     | 
| 
      
 26 
     | 
    
         
            +
                
         
     | 
| 
      
 27 
     | 
    
         
            +
                assert_equal(Date.parse(exp[:expires_on]).to_s, d.expires_on.to_s, "expiration date") unless exp[:expires_on].nil?
         
     | 
| 
      
 28 
     | 
    
         
            +
                assert_equal(Date.parse(exp[:created_on]).to_s, d.created_on.to_s, "creation date") unless exp[:created_on].nil?
         
     | 
| 
      
 29 
     | 
    
         
            +
                assert_equal(Date.parse(exp[:updated_on]).to_s, d.updated_on.to_s, "updated date") unless exp[:updated_on].nil?
         
     | 
| 
      
 30 
     | 
    
         
            +
                
         
     | 
| 
      
 31 
     | 
    
         
            +
                if exp[:database_updated_at] == false
         
     | 
| 
      
 32 
     | 
    
         
            +
                  assert_nil d.database_updated_at, "no database_updated_at expected on this server"
         
     | 
| 
      
 33 
     | 
    
         
            +
                else
         
     | 
| 
      
 34 
     | 
    
         
            +
                  assert_kind_of Time, d.database_updated_at, "database_updated_at should return a time object"
         
     | 
| 
      
 35 
     | 
    
         
            +
                end
         
     | 
| 
      
 36 
     | 
    
         
            +
              
         
     | 
| 
      
 37 
     | 
    
         
            +
                assert_kind_of Array, d.status, "status should return an Array"
         
     | 
| 
      
 38 
     | 
    
         
            +
                assert_equal exp[:status], d.status
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                assert_kind_of Array, d.name_servers, "name_server should return an Array"
         
     | 
| 
      
 41 
     | 
    
         
            +
                unless exp[:name_servers].nil? # see CatTest
         
     | 
| 
      
 42 
     | 
    
         
            +
                  assert_equal exp[:name_servers], d.name_servers
         
     | 
| 
      
 43 
     | 
    
         
            +
                  assert_equal d.name_servers, d.ns, "ns is an alias for name_servers"
         
     | 
| 
      
 44 
     | 
    
         
            +
                end
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
                assert_equal exp[:registrar_name], d.registrar_name
         
     | 
| 
      
 47 
     | 
    
         
            +
                assert_equal exp[:whois_server], d.whois_server
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                assert_kind_of String, d.raw
         
     | 
| 
      
 50 
     | 
    
         
            +
                assert_match exp[:raw_match], d.raw
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
                if exp[:to_s]
         
     | 
| 
      
 53 
     | 
    
         
            +
                  assert_equal exp[:to_s], d.to_s
         
     | 
| 
      
 54 
     | 
    
         
            +
                end
         
     | 
| 
      
 55 
     | 
    
         
            +
                
         
     | 
| 
      
 56 
     | 
    
         
            +
                assert !d.available?
         
     | 
| 
      
 57 
     | 
    
         
            +
                assert d.registered?
         
     | 
| 
      
 58 
     | 
    
         
            +
              end
         
     | 
| 
      
 59 
     | 
    
         
            +
            end
         
     |