Feature #15049
closed[Request] Easily access all keyword arguments within a method
Description
As a developer, I'd like to leverage the power of keyword arguments (requirements, defaults, etc) and then be able to access a hash of all the arguments supplied.
This is currently possible by leveraging the RubyVM debug inspector and some meta programming to retrieve the binding and name of the calling method. There is a gem https://github.com/banister/binding_of_caller that abstracts away the logic of crawling through the frame bindings in the debug inspector to find the binding of the caller, but I feel like this functionality would be useful in Ruby.
With the binding_of_caller gem, you can hack together a kargs method like so:
def kargs
method(caller_locations(1,1)[0].label).parameters.map do |(_type, name)|
[name, binding.of_caller(2).local_variable_get(name)]
end.to_h
end
This gets the name of the calling method, pulls the local variables from the method, retrieves the binding, and then retrieves the variables from the binding. By exposing a simpler API to retrieve the caller binding, a kargs method could be added to Ruby fairly easily I would think.