I stumbled upon what I believe to be a weird bug in Ruby (I'm using 2.2.2).
When I define a method like so:
def test(value, **kw)
puts value
puts kw
end
I get the expected output:
> test(1)
1
{}
=> nil
> test(1, channel: 'active')
1
{:channel=>"active"}
=> nil
> test(1, channel_s: 'active')
1
{:channel_s=>"active"}
=> nil
> test(1, channel_st: 'active')
1
{:channel_st=>"active"}
=> nil
> test(1, channel_sta: 'active')
1
{:channel_sta=>"active"}
=> nil
> test(1, channel_stat: 'active')
1
{:channel_stat=>"active"}
=> nil
> test(1, channel_state: 'active')
1
{:channel_state=>"active"}
=> nil
But when I define an equivalent method with define_singleton_method:
define_singleton_method(:test_2) do |value, **kw|
puts value
puts kw
end
I get a very peculiar result when a keyword is exactly 'channel_type':
> test_2(1)
1
{}
=> nil
> test_2(1, channel_state: 'active')
{:channel_state=>"active"}
=> nil
> test_2(1, channel_stat: 'active')
1
{:channel_stat=>"active"}
=> nil
> test_2(1, channel_states: 'active')
1
{:channel_states=>"active"}
=> nil
> test_2(1, channel_state: nil)
{:channel_state=>nil}
=> nil
Has anyone seen this before? Maybe with a different keyword?
Edit: This appears to only be affecting my ruby on rails application being run within a docker container. If someone can reproduce, please comment below!