Skip to content

Commit 3a885c8

Browse files
committed
issue #1405 - params hash keys
- the `params` variable is converted into a HashWithIndifferentAccess object - fixes #1405
1 parent 00b3054 commit 3a885c8

File tree

4 files changed

+33
-2
lines changed

4 files changed

+33
-2
lines changed

padrino-core/lib/padrino-core/application/routing.rb

+4-1
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,7 @@ def to_code
172172
env['router.request'] = request
173173
env['router.params'] ||= {}
174174
#{"env['router.params'].merge!(Hash[#{param_names.inspect}.zip(request.params)])" if dynamic?}
175+
env['router.params'] = env['router.params'].with_indifferent_access
175176
@router.rewrite#{"_partial" if route.match_partially}_path_info(env, request)
176177
response = @router.process_destination_path(#{path_ivar}, env)
177178
return response unless router.pass_on_response(response)
@@ -959,10 +960,12 @@ def recognize_path(path)
959960
#
960961
def current_path(*path_params)
961962
if path_params.last.is_a?(Hash)
962-
path_params[-1] = params.merge(path_params[-1])
963+
path_params[-1] = params.merge(path_params[-1].with_indifferent_access)
963964
else
964965
path_params << params
965966
end
967+
968+
path_params[-1] = path_params[-1].symbolize_keys
966969
@route.path(*path_params)
967970
end
968971

padrino-core/lib/padrino-core/support_lite.rb

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
require 'active_support/core_ext/module/aliasing' # alias_method_chain
55
require 'active_support/core_ext/hash/keys' # symbolize_keys
66
require 'active_support/core_ext/hash/reverse_merge' # reverse_merge
7+
require 'active_support/core_ext/hash/indifferent_access'
78
require 'active_support/core_ext/hash/slice' # slice
89
require 'active_support/core_ext/object/blank' # present?
910
require 'active_support/core_ext/array/extract_options' # extract_options

padrino-core/test/test_reloader_complex.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@
6565
assert_equal 200, status
6666

6767
get "/complex_2_demo/var/destroy/variable"
68-
assert_equal '{:id=>"variable"}', body
68+
assert_equal '{"id"=>"variable"}', body
6969
ensure
7070
# Now we need to prevent to commit a new changed file so we revert it
7171
File.open(Complex1Demo.app_file, "w") { |f| f.write(buffer) }

padrino-core/test/test_routing.rb

+27
Original file line numberDiff line numberDiff line change
@@ -1790,6 +1790,33 @@ def authorize(username, password)
17901790
assert ok?
17911791
end
17921792

1793+
should 'return params as a HashWithIndifferentAccess object via GET' do
1794+
mock_app do
1795+
get('/foo/:bar') { "#{params["bar"]} #{params[:bar]}" }
1796+
get(:foo, :map => '/prefix/:var') { "#{params["var"]} #{params[:var]}" }
1797+
end
1798+
1799+
get('/foo/some_text')
1800+
assert_equal "some_text some_text", body
1801+
1802+
get('/prefix/var')
1803+
assert_equal "var var", body
1804+
end
1805+
1806+
should 'return params as a HashWithIndifferentAccess object via POST' do
1807+
mock_app do
1808+
post('/user') do
1809+
"#{params["user"]["full_name"]} #{params[:user][:full_name]}"
1810+
end
1811+
end
1812+
1813+
post '/user', {:user => {:full_name => 'example user'}}
1814+
assert_equal "example user example user", body
1815+
1816+
post '/user', {"user" => {"full_name" => 'example user'}}
1817+
assert_equal "example user example user", body
1818+
end
1819+
17931820
should 'have MethodOverride middleware with more options' do
17941821
mock_app do
17951822
put('/hi', :provides => [:json]) { 'hi' }

0 commit comments

Comments
 (0)