Project

General

Profile

Feature #14079

Validate argument list without calling method

Added by nate00 (Nate Sullivan) almost 3 years ago. Updated almost 3 years ago.

Status:
Open
Priority:
Normal
Assignee:
-
Target version:
-
[ruby-core:83675]

Description

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 perform_async.

Perhaps a respond_to_arguments_missing? method would be required also.

Maybe respond_to_arguments? is a bad name. You could reasonably assume that it takes the same optional second parameter as respond_to? (i.e., include_all), but my proposal doesn't support an optional second parameter.

Thank you for your consideration!

Also available in: Atom PDF