/
whois.nc.rb
130 lines (98 loc) · 2.98 KB
/
whois.nc.rb
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
#--
# 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.nc.rb'
module Whois
class Record
class Parser
# Parser for the whois.nc server.
#
# @see Whois::Record::Parser::Example
# The Example parser for the list of all available methods.
#
# @since 2.4.0
class WhoisNc < Base
include Scanners::Nodable
property_not_supported :disclaimer
property_supported :domain do
node("Domain")
end
property_not_supported :domain_id
property_supported :status do
if available?
:available
else
:registered
end
end
property_supported :available? do
!!node("status:available")
end
property_supported :registered? do
!available?
end
property_supported :created_on do
node("Created on") { |value| Time.parse(value) }
end
property_supported :updated_on do
node("Last updated on") { |value| Time.parse(value) }
end
property_supported :expires_on do
node("Expires on") { |value| Time.parse(value) }
end
property_not_supported :registrar
property_supported :registrant_contacts do
node("Registrant name") do |str|
address = []
index = 1
while line = node("Registrant address #{index}")
address << line
index += 1
end
zip, city = address[-2].match(/(\d+) (.+)/)[1, 2]
Record::Contact.new(
:type => Whois::Record::Contact::TYPE_REGISTRANT,
:id => nil,
:name => node("Registrant name"),
:organization => nil,
:address => address[0..-3].join("\n"),
:city => city,
:zip => zip,
:state => nil,
:country => address[-1],
:phone => nil,
:fax => nil,
:email => nil
)
end
end
property_not_supported :admin_contacts
property_not_supported :technical_contacts
property_supported :nameservers do
nameservers = []
index = 1
while line = node("Domain server #{index}")
nameservers << line
index += 1
end
nameservers.map do |name|
Record::Nameserver.new(:name => name)
end
end
# Initializes a new {Scanners::WhoisNc} instance
# passing the {#content_for_scanner}
# and calls +parse+ on it.
#
# @return [Hash]
def parse
Scanners::WhoisNc.new(content_for_scanner).parse
end
end
end
end
end