class Whois::Record
Attributes
@return [Array<Whois::Record::Part>] The parts that compose this record.
@return [Whois::Server] The server that originated this record.
Public Class Methods
Initializes a new instance with given server
and
parts
.
@param [Whois::Server] server @param [Array<Whois::Record::Part>] parts
# File lib/whois/record.rb, line 32 def initialize(server, parts) @parts = parts @server = server end
Private Class Methods
@api private
# File lib/whois/record.rb, line 312 def self.define_method_method(method) class_eval " def #{method}(*args, &block) if parser.respond_to?(:#{method}) parser.#{method}(*args, &block) end end ", __FILE__, __LINE__ + 1 end
@api private
# File lib/whois/record.rb, line 301 def self.define_property_method(method) class_eval " def #{method}(*args, &block) if property_any_supported?(:#{method}) parser.#{method}(*args, &block) end end ", __FILE__, __LINE__ + 1 end
@api private
# File lib/whois/record.rb, line 323 def self.define_question_method(method) class_eval " def #{method}? !#{method}.nil? end ", __FILE__, __LINE__ + 1 end
Public Instance Methods
Returns true if the object
is the same object, or is a string
and has the same content.
@param [Whois::Record] other The record to compare. @return [Boolean]
# File lib/whois/record.rb, line 71 def ==(other) if equal?(other) true elsif other.is_a?(self.class) to_s == other.to_s else false end end
Shortcut for #admin_contacts.first
.
@return [Whois::Record::Contact]
If the property is supported and a contact exists.
@return [nil]
If the property is not supported or the contact doesn't exist.
@see Whois::Record#admin_contacts
# File lib/whois/record.rb, line 191 def admin_contact if property_any_supported?(:admin_contacts) parser.admin_contacts.first end end
Checks whether this {Whois::Record} is different than other
.
Comparing the {Whois::Record} content is not as trivial as you may think. WHOIS servers can inject into the WHOIS response strings that changes at every request, such as the timestamp the request was generated or the number of requests left for your current IP.
These strings causes a simple equal comparison to fail even if the registry data is the same.
This method should provide a bulletproof way to detect whether this record
changed compared with other
.
@param [Whois::Record] other The other record instance to compare. @return [Boolean]
@see Whois::Record::Parser#changed?
# File lib/whois/record.rb, line 245 def changed?(other) !unchanged?(other) end
Collects and returns all the contacts.
@return [Array<Whois::Record::Contact>]
@see Whois::Record::Parser#contacts
# File lib/whois/record.rb, line 218 def contacts parser.contacts end
Joins and returns all record parts into a single string and separates each response with a newline character.
@example Record with one part
record = Whois::Record.new([Whois::Record::Part.new(:body => "First record.")]) record.content # => "First record."
@example Record with multiple parts
record = Whois::Record.new([Whois::Record::Part.new(:body => "First record."), Whois::Record::Part.new(:body => "Second record.")]) record.content # => "First record.\nSecond record."
@return [String] The content of this record.
# File lib/whois/record.rb, line 124 def content @content ||= parts.map(&:body).join("\n") end
Returns a human-readable representation of this record.
@return [String] The result of {#inspect} on content.
# File lib/whois/record.rb, line 61 def inspect content.inspect end
Invokes {#match} on record {#content} and returns the match as
MatchData
or nil
.
@param [Regexp, String] pattern The regex pattern to match. @return [MatchData] If pattern matches content @return [nil] If pattern doesn't match content
@see String#match
# File lib/whois/record.rb, line 93 def match(pattern) content.match(pattern) end
Invokes {#match} and returns true
if pattern
matches {#content}, false
otherwise.
@param [Regexp, String] pattern The regex pattern to match. @return [Boolean]
@see match
# File lib/whois/record.rb, line 105 def match?(pattern) !content.match(pattern).nil? end
Lazy-loads and returns the parser proxy for current record.
@return [Whois::Record::Parser]
# File lib/whois/record.rb, line 132 def parser @parser ||= Parser.new(self) end
Returns a Hash containing all supported properties for this record along with corresponding values.
@return [{ Symbol => Object }]
# File lib/whois/record.rb, line 156 def properties hash = {} Parser::PROPERTIES.each { |property| hash[property] = send(property) } hash end
Checks if the property
passed as symbol is supported in any of
the parsers.
@param [Symbol] property The name of the property to check. @return [Boolean]
@see Whois::Record::Parser#property_any_supported?
# File lib/whois/record.rb, line 144 def property_any_supported?(property) parser.property_any_supported?(property) end
Shortcut for #registrant_contacts.first
.
@return [Whois::Record::Contact]
If the property is supported and a contact exists.
@return [nil]
If the property is not supported or the contact doesn't exist.
@see Whois::Record#registrant_contacts
# File lib/whois/record.rb, line 176 def registrant_contact if property_any_supported?(:registrant_contacts) parser.registrant_contacts.first end end
Checks if this class respond to given method.
Overrides the default implementation to add support for {Parser::PROPERTIES} and {Parser::METHODS}.
@return [Boolean]
# File lib/whois/record.rb, line 45 def respond_to?(symbol, include_private = false) respond_to_parser_method?(symbol) || super end
Checks whether this is an incomplete response.
@return [Boolean]
@see Whois::Record::Parser#response_incomplete?
# File lib/whois/record.rb, line 271 def response_incomplete? parser.response_incomplete? end
Checks whether this is a throttle response.
@return [Boolean]
@see Whois::Record::Parser#response_throttled?
# File lib/whois/record.rb, line 281 def response_throttled? parser.response_throttled? end
Shortcut for #technical_contacts.first
.
@return [Whois::Record::Contact]
If the property is supported and a contact exists.
@return [nil]
If the property is not supported or the contact doesn't exist.
@see Whois::Record#technical_contacts
# File lib/whois/record.rb, line 206 def technical_contact if property_any_supported?(:technical_contacts) parser.technical_contacts.first end end
Returns a String representation of this record.
@return [String] The record content.
# File lib/whois/record.rb, line 53 def to_s content.to_s end
The opposite of {#changed?}.
@param [Whois::Record] other The other record instance to compare. @return [Boolean]
@see Whois::Record::Parser#unchanged?
# File lib/whois/record.rb, line 256 def unchanged?(other) unless other.is_a?(self.class) raise(ArgumentError, "Can't compare `#{self.class}' with `#{other.class}'") end equal?(other) || parser.unchanged?(other.parser) end
Private Instance Methods
Delegates all method calls to the internal parser.
# File lib/whois/record.rb, line 337 def method_missing(method, *args, &block) if Parser::PROPERTIES.include?(method) self.class.define_property_method(method) send(method, *args, &block) elsif Parser::METHODS.include?(method) self.class.define_method_method(method) send(method, *args, &block) elsif method.to_s =~ /([a-z_]+)\?/ and (Parser::PROPERTIES + Parser::METHODS).include?($1.to_sym) self.class.define_question_method($1) send(method) else super end end
# File lib/whois/record.rb, line 331 def respond_to_parser_method?(symbol) name = symbol.to_s =~ /\?$/ ? symbol.to_s[0..-2] : symbol Parser::PROPERTIES.include?(name.to_sym) || Parser::METHODS.include?(name.to_sym) end