From: nobu@... Date: 2015-03-30T23:11:53+00:00 Subject: [ruby-core:68702] [Ruby trunk - Bug #11017] [Rejected] overridden method Hash#[]= doesn't return correct data Issue #11017 has been updated by Nobuyoshi Nakada. Description updated Status changed from Open to Rejected ---------------------------------------- Bug #11017: overridden method Hash#[]= doesn't return correct data https://bugs.ruby-lang.org/issues/11017#change-51988 * Author: Vladislav Zubov * Status: Rejected * Priority: Normal * Assignee: * ruby -v: ruby 2.1.1p76 (2014-02-24 revision 45161) [x86_64-darwin12.0] * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN ---------------------------------------- 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 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#[]=` return `Hash` object but should `HashWithIndifferentAccess`. This is a bug? -- https://bugs.ruby-lang.org/