aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_controller/metal/strong_parameters.rb
diff options
context:
space:
mode:
authorSean Griffin <sean@seantheprogrammer.com>2016-03-09 09:47:46 -0700
committerSean Griffin <sean@seantheprogrammer.com>2016-03-09 09:49:23 -0700
commit5cd2beb0135faf18c978507a4be272dfc1499bb8 (patch)
treebfb5b95cd9679fd34e3448987d1e70f314125b6d /actionpack/lib/action_controller/metal/strong_parameters.rb
parent20f2727ba4de36f8c98091340e8a89327013912f (diff)
downloadrails-5cd2beb0135faf18c978507a4be272dfc1499bb8.tar.gz
rails-5cd2beb0135faf18c978507a4be272dfc1499bb8.tar.bz2
rails-5cd2beb0135faf18c978507a4be272dfc1499bb8.zip
Add `ActionController::Parameters#dig`
This method will only be added when used with Ruby 2.3.0 or greater. This method has the same behavior as `Hash#dig`, except it will convert hashes to `ActionController::Parameters`, similar to `#[]` and `#fetch`.
Diffstat (limited to 'actionpack/lib/action_controller/metal/strong_parameters.rb')
-rw-r--r--actionpack/lib/action_controller/metal/strong_parameters.rb15
1 files changed, 15 insertions, 0 deletions
diff --git a/actionpack/lib/action_controller/metal/strong_parameters.rb b/actionpack/lib/action_controller/metal/strong_parameters.rb
index a01110d474..6d59e32c68 100644
--- a/actionpack/lib/action_controller/metal/strong_parameters.rb
+++ b/actionpack/lib/action_controller/metal/strong_parameters.rb
@@ -430,6 +430,21 @@ module ActionController
)
end
+ if Hash.method_defined?(:dig)
+ # Extracts the nested parameter from the given +keys+ by calling +dig+
+ # at each step. Returns +nil+ if any intermediate step is +nil+.
+ #
+ # params = ActionController::Parameters.new(foo: { bar: { baz: 1 } })
+ # params.dig(:foo, :bar, :baz) # => 1
+ # params.dig(:foo, :zot, :xyz) # => nil
+ #
+ # params2 = ActionController::Parameters.new(foo: [10, 11, 12])
+ # params2.dig(:foo, 1)
+ def dig(*keys)
+ convert_value_to_parameters(@parameters.dig(*keys))
+ end
+ end
+
# Returns a new <tt>ActionController::Parameters</tt> instance that
# includes only the given +keys+. If the given +keys+
# don't exist, returns an empty hash.