Project

General

Profile

Bug #10857

Updated by nobu (Nobuyoshi Nakada) about 9 years ago

~~~ruby 
 require 'resolv' 

 resolver = Resolv::DNS.new(:nameserver => ['8.8.8.8'], 
                 :search => [], 
                 :ndots => 1) 

 hosts = resolver.getresources('ruby.org', Resolv::DNS::Resource::IN::A) 
 returned_record = hosts.first 

 a = Resolv::DNS::Resource::IN::A 

 #create an identical record 
 new_record = a.new(returned_record.address) 

 new_record == returned_record 
 =>false #but should return true 

 #If I change this 
 class Resolv::DNS::Resource 
 def ==(other) # :nodoc: 
         return false unless self.class == other.class 
         s_ivars = self.instance_variables 
         s_ivars.sort! 
         **s_ivars.delete "@ttl"** 
         o_ivars = other.instance_variables 
         o_ivars.sort! 
         **o_ivars.delete "@ttl"** 
         return s_ivars == o_ivars && 
           s_ivars.collect {|name| self.instance_variable_get name} == 
             o_ivars.collect {|name| other.instance_variable_get name} 
       end 
 end 

 #To this 
 class Resolv::DNS::Resource 
 def ==(other) # :nodoc: 
         return false unless self.class == other.class 
         s_ivars = self.instance_variables 
         s_ivars.sort! 
         **s_ivars.delete(:@ttl)** 
         o_ivars = other.instance_variables 
         o_ivars.sort! 
         **o_ivars.delete(:@ttl)** 
         return s_ivars == o_ivars && 
           s_ivars.collect {|name| self.instance_variable_get name} == 
             o_ivars.collect {|name| other.instance_variable_get name} 
       end 
 end 

 new_record == returned_record 
 =>true 
 ~~~ 

Back