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
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
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
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
paramshash directly to methods with keyword arguments.Bug test
Workaround
VERSIONS