From: mame@... Date: 2014-04-11T16:31:01+00:00 Subject: [ruby-core:61985] [ruby-trunk - Bug #9731] Rails' HashWithIndifferentAccess is incompatible with Ruby's keyword arguments Issue #9731 has been updated by Yusuke Endoh. Duplicated by Bug #9735: Rails' HashWithIndifferentAccess is incompatible with Ruby's keyword arguments added ---------------------------------------- Bug #9731: Rails' HashWithIndifferentAccess is incompatible with Ruby's keyword arguments https://bugs.ruby-lang.org/issues/9731#change-46176 * Author: Konstantinos Karachalios * Status: Open * Priority: Normal * Assignee: * Category: * Target version: * ruby -v: 2.1.1 * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN ---------------------------------------- Origin: https://github.com/rails/rails/issues/14643 In Ruby it is possible to use a POR Hash in place of keyword arguments, making the transition between using an `options = {}` to keyword arguments easy. The same is not true for HashWithIndifferentAccess and this makes it difficult to pass the `params` hash directly to methods with keyword arguments. ### Bug test ```ruby require 'active_support/hash_with_indifferent_access' require 'minitest/autorun' def sum(a: 0, b: 0) a + b end class BugTest < MiniTest::Unit::TestCase def setup @normal_hash = {a: 18, b: 24} # just a hash @indiff_hash = ActiveSupport::HashWithIndifferentAccess.new(@normal_hash) end def test_ruby_hash assert_equal 42, sum(@normal_hash) end def test_hash_with_indifferent_access assert_equal 42, sum(@indiff_hash) end end ``` ### Workaround ```ruby sum(@indiff_args.symbolize_keys) ``` ### VERSIONS * ruby 2.0.0-p353 & activesupport 4.0.1 * ruby 2.1.0-p0 & activesupport 4.0.3 * ruby 2.1.1-p76 & activesupport 4.0.4, 3.2.17 -- https://bugs.ruby-lang.org/