Если вы разбираете это так, у вас не должно быть проблем
out = {}
CGI::parse(str).each do |k, v|
v, v = (v = v.first), (v if v[/[a-zA-Z]/]) || [v.to_i, v.to_f].max
out.merge!(Hash[k, v])
end
В сочетании с техникой AJcodez это дает
out = {}
CGI::parse(str).each do |k, v|
v, out[k] = (v = v.first), [v.to_i, v.to_f, v].find { |c| c.to_s == v }
end
Или как однострочный
Hash[*CGI::parse(str).map {|k, v| v = v.first; [k, [v.to_i, v.to_f, v].find { |c| c.to_s == v }]}.flatten]
дает
{"a"=>2, "b"=>3.05, "c"=>"testing"}
https://github.com/intuit/karate#ide-support
Я полагаю, что вы найдете нужный плагин на этой странице.