Project

General

Profile

Bug #11017

Updated by nobu (Nobuyoshi Nakada) about 9 years ago

Hello all.  
 I took the code from the active_support and its simplified 
 ### hash_with_indifferent_access.rb 

 ```ruby ``` 
 class HashWithIndifferentAccess < Hash 

   def initialize(constructor = {}) 
     if constructor.is_a?(Hash) 
       super() 
       update(constructor) 
     else 
       super(constructor) 
     end 
   end 

   alias_method :hash_writer, :[]= 

   def []=(key, value) 
     result = hash_writer(key, convert_value(value)) 
     puts "result class is #{result.class}" 
     result 
   end 

   def convert_value(value, options = {}) 
     if value.is_a? Hash 
       HashWithIndifferentAccess.new(value) 
     else 
       value 
     end 
   end 
 end 
 ``` 

 If run this is code that it return incorrect incorrent data: 

 ~~~ruby ~~~ 
 > ps = HashWithIndifferentAccess.new({ first: 'first', second: 'second' }) 
 # => {:first=>"first", :second=>"second"} 
 > temp_hash = ps[:test] = {} 
 result class is HashWithIndifferentAccess 
 # => {} 
 > temp_hash.class 
 # => Hash  
 ~~~ 
 I see what method `HashWithIndifferentAccess#[]=` HashWithIndifferentAccess#[]= return `Hash` Hash object but should `HashWithIndifferentAccess`. HashWithIndifferentAccess. 

 This is a bug?

Back