Skip to content
This repository
Fetching contributors…

Cannot retrieve contributors at this time

file 133 lines (98 sloc) 3.115 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
#--
# Ruby Whois
#
# An intelligent pure Ruby WHOIS client and parser.
#
# Copyright (c) 2009-2012 Simone Carletti <weppos@weppos.net>
#++


require 'whois/record/parser/base'
require 'whois/record/scanners/whois.domainregistry.ie.rb'


module Whois
  class Record
    class Parser

      # Parser for the whois.domainregistry.ie server.
      #
      # @see Whois::Record::Parser::Example
      # The Example parser for the list of all available methods.
      #
      class WhoisDomainregistryIe < Base
        include Scanners::Ast

        property_supported :disclaimer do
          node("field:disclaimer")
        end


        property_supported :domain do
          node("domain")
        end

        property_not_supported :domain_id


        property_not_supported :referral_whois

        property_not_supported :referral_url


        property_supported :status do
          case node("status", &:downcase)
          when /^active/
            :registered
          when nil
            if node("status:pending")
              :registered
            else
              :available
            end
          else
            Whois.bug!(ParserError, "Unknown status `#{node("status")}'.")
          end
        end

        property_supported :available? do
          !!node("status:available")
        end

        property_supported :registered? do
          !available?
        end


        property_not_supported :created_on

        property_not_supported :updated_on

        property_supported :expires_on do
          node("renewal") { |value| Time.parse(value) }
        end


        property_not_supported :registrar


        property_supported :registrant_contacts do
          node("descr") do |array|
            Record::Contact.new(
              :type => Whois::Record::Contact::TYPE_REGISTRANT,
              :id => nil,
              :name => array[0]
            )
          end
        end

        property_supported :admin_contacts do
          build_contact("admin-c", Whois::Record::Contact::TYPE_ADMIN)
        end

        property_supported :technical_contacts do
          build_contact("tech-c", Whois::Record::Contact::TYPE_TECHNICAL)
        end


        property_supported :nameservers do
          Array.wrap(node("nserver")).map do |line|
            name, ipv4 = line.split(/\s+/)
            Record::Nameserver.new(:name => name, :ipv4 => ipv4)
          end
        end


        # Initializes a new {Scanners::WhoisDomainregistryIe} instance
        # passing the {#content_for_scanner}
        # and calls +parse+ on it.
        #
        # @return [Hash]
        def parse
          Scanners::WhoisDomainregistryIe.new(content_for_scanner).parse
        end


      private

        def build_contact(element, type)
          Array.wrap(node(element)).map do |id|
            contact = node("field:#{id}")
            Record::Contact.new(
              :type => type,
              :id => id,
              :name => contact["person"]
            )
          end
        end

      end

    end
  end
end
Something went wrong with that request. Please try again.