Validate argument list without calling method
I would find it useful to check whether a list of arguments matches a method signature, but without calling the method.
I'd like to check the arguments list using a method called, for example,
respond_to_arguments?. Here's an example:
class Foobar def self.baz(str) end end # Foobar.baz accepts 1 argument, not 0 or 2: Foobar.respond_to_arguments?(:baz, "one", "two") # => false Foobar.respond_to_arguments?(:baz, "one") # => true Foobar.respond_to_arguments?(:baz) # => false # Indeed, we get an ArgumentError if we pass 0 or 2 arguments: Foobar.baz("one", "two") # raises ArgumentError Foobar.baz("one") # success! Foobar.baz # raises ArgumentError
My use case is a background job processing system. It works like this: I call
MyWorker.perform_async with some arguments; the arguments are serialized and put into a queue; and then a background worker takes those arguments from the queue, deserializes them and passes them to
MyWorker.perform. If I passed invalid arguments, I don't know they were invalid until the background worker tries to call
perform. But I'd like to know immediately when I call
respond_to_arguments_missing? method would be required also.
respond_to_arguments? is a bad name. You could reasonably assume that it takes the same optional second parameter as
include_all), but my proposal doesn't support an optional second parameter.
Thank you for your consideration!