Skip to content

Commit

Permalink
Extract shared parsers.
Browse files Browse the repository at this point in the history
  • Loading branch information
weppos committed Sep 18, 2012
1 parent 0e7c68b commit c37586c
Show file tree
Hide file tree
Showing 9 changed files with 137 additions and 248 deletions.
120 changes: 120 additions & 0 deletions lib/whois/record/parser/base_shared1.rb
@@ -0,0 +1,120 @@
#--
# 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/base_shared1'


module Whois
class Record
class Parser

# Shared parser 1.
#
# @abstract
#
# @since RELEASE
class BaseShared1 < Base
include Scanners::Ast

property_not_supported :disclaimer


property_supported :domain do
node('Domain Name')
end

property_not_supported :domain_id


property_not_supported :referral_whois

property_not_supported :referral_url


property_supported :status do
Array.wrap(node("Status"))
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_not_supported :expires_on


property_supported :registrar do
node('Registrar Name') do |name|
Record::Registrar.new(
:id => node('Registrar ID'),
:name => node('Registrar Name'),
:organization => node('Registrar Name')
)
end
end


property_supported :registrant_contacts do
build_contact('Registrant', Whois::Record::Contact::TYPE_REGISTRANT)
end

property_not_supported :admin_contacts

property_supported :technical_contacts do
build_contact('Tech', Whois::Record::Contact::TYPE_TECHNICAL)
end


property_supported :nameservers do
node('Name Server') do |value|
ipv4s = node('Name Server IP') || Array.new(value.size)
value.zip(ipv4s).map do |name, ipv4|
Nameserver.new(:name => name, :ipv4 => ipv4)
end
end
end


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


private

def build_contact(element, type)
node("#{element} Contact ID") do
Record::Contact.new(
:type => type,
:id => node("#{element} Contact ID"),
:name => node("#{element} Contact Name"),
:email => node("#{element} Contact Email")
)
end
end

end

end
end
end
101 changes: 2 additions & 99 deletions lib/whois/record/parser/whois.registry.om.rb
Expand Up @@ -7,8 +7,7 @@
#++


require 'whois/record/parser/base'
require 'whois/record/scanners/whois.registry.om.rb'
require 'whois/record/parser/base_shared1'


module Whois
Expand All @@ -21,103 +20,7 @@ class Parser
# The Example parser for the list of all available methods.
#
# @since 2.6.0
class WhoisRegistryOm < Base
include Scanners::Ast

property_not_supported :disclaimer


property_supported :domain do
node('Domain Name')
end

property_not_supported :domain_id


property_not_supported :referral_whois

property_not_supported :referral_url


property_supported :status do
case (s = node('Status'))
when nil
:available
when 'ok'
:registered
else
Whois.bug!(ParserError, "Unknown status `#{s}'.")
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_not_supported :expires_on


property_supported :registrar do
node('Registrar Name') do |name|
Record::Registrar.new(
:name => name
)
end
end


property_supported :registrant_contacts do
build_contact('Registrant', Whois::Record::Contact::TYPE_REGISTRANT)
end

property_not_supported :admin_contacts

property_supported :technical_contacts do
build_contact('Tech', Whois::Record::Contact::TYPE_TECHNICAL)
end


property_supported :nameservers do
node('Name Server') do |names|
names.map do |name|
Record::Nameserver.new(:name => name)
end
end
end


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


private

def build_contact(element, type)
node("#{element} Contact ID") do
Record::Contact.new(
:type => type,
:id => node("#{element} Contact ID"),
:name => node("#{element} Contact Name"),
:email => node("#{element} Contact Email")
)
end
end

class WhoisRegistryOm < BaseShared1
end

end
Expand Down
96 changes: 2 additions & 94 deletions lib/whois/record/parser/whois.registry.qa.rb
Expand Up @@ -7,8 +7,7 @@
#++


require 'whois/record/parser/base'
require 'whois/record/scanners/whois.registry.qa.rb'
require 'whois/record/parser/base_shared1'


module Whois
Expand All @@ -18,98 +17,7 @@ class Parser
# Parser for the whois.registry.qa server.
#
# @since 2.1.0
class WhoisRegistryQa < Base
include Scanners::Ast

property_not_supported :disclaimer


property_supported :domain do
node("Domain Name")
end

property_not_supported :domain_id


property_not_supported :referral_whois

property_not_supported :referral_url


property_supported :status do
Array.wrap(node("Status"))
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_not_supported :expires_on


property_supported :registrar do
node("Registrar ID") do |raw|
Record::Registrar.new(
:id => node("Registrar ID"),
:name => node("Registrar Name"),
:organization => node("Registrar Name")
)
end
end

property_supported :registrant_contacts do
build_contact("Registrant Contact", Whois::Record::Contact::TYPE_REGISTRANT)
end

property_not_supported :admin_contacts

property_supported :technical_contacts do
build_contact("Tech Contact", Whois::Record::Contact::TYPE_TECHNICAL)
end


property_supported :nameservers do
node("Name Server") do |value|
ipv4s = node("Name Server IP") || Array.new(value.size)
value.zip(ipv4s).map do |name, ipv4|
Nameserver.new(:name => name, :ipv4 => ipv4)
end
end
end


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


private

def build_contact(element, type)
node("#{element} ID") do |raw|
Record::Contact.new(
:type => type,
:id => node("#{element} ID"),
:name => node("#{element} Name"),
:email => node("#{element} Email")
)
end
end

class WhoisRegistryQa < BaseShared1
end

end
Expand Down
Expand Up @@ -14,10 +14,7 @@ module Whois
class Record
module Scanners

# Scanner for the whois.registry.om record.
#
# @since 2.6.0
class WhoisRegistryOm < Base
class BaseShared1 < Base

self.tokenizers += [
:skip_empty_line,
Expand Down
39 changes: 0 additions & 39 deletions lib/whois/record/scanners/whois.registry.qa.rb

This file was deleted.

0 comments on commit c37586c

Please sign in to comment.