Project

General

Profile

Actions

Feature #22297

open

Module#method_defined? should have an `include_private` argument

Feature #22297: Module#method_defined? should have an `include_private` argument

Added by byroot (Jean Boussier) about 9 hours ago.

Status:
Open
Assignee:
-
Target version:
-
[ruby-core:126584]

Description

Active Record generate methods during boot time based on the database schema. However before defining every one of these methods it first check if it
already exists, regardless of visibility, as to avoid overwriting use defined code.

As a result, the following pattern is in a few hot spots:

if method_defined?(name) || private_method_defined?(name)
  # ...
end

On our Rails monolith, private_method_defined? account for 1% of boot time, that's not massive, but it could very easily be eliminated if there was a way to check for a method existence regardless of its visibility.

Proposal

Currently Module#method_defined? signature is:

method_defined?(symbol, inherit=true)

I think we could make it:

method_defined?(symbol, inherit=true, include_all=false)

No data to display

Actions

Also available in: PDF Atom