Feature #21555
closedAdd support for predicate attribute reader names
Description
After manually aliasing predicate methods many times, I wanted to propose letting attr_reader take predicate method names that correspond to instance variables of the base name without a trailing question mark. https://github.com/ruby/ruby/pull/14391
If the base name method doesn't already exist, a predicate name defines a base name method attribute reader to alias then undefines the base name.
For example, this creates an enabled? method that reads @enabled:
attr_reader :enabled?
This feature is only supported for attr_reader and attr, not attr_writer or attr_accessor, since setter methods cannot have question marks.
Example:
class Example
attr_reader :valid?, :meaning
def initialize
@valid = [true, false].sample
@meaning = 42
end
end
Example.new.valid? #=> true
Updated by nobu (Nobuyoshi Nakada) about 2 months ago
- Related to Feature #16817: attr_predicate or attr_query or attr_something for ? methods added
Updated by Dan0042 (Daniel DeLorme) about 2 months ago
Updated by byroot (Jean Boussier) about 2 months ago
This feature is only supported for attr_reader and attr, not attr_writer or attr_accessor, since setter methods cannot have question marks.
Using the same logic, attr_accessor :enabled? could generate #enabled? and #enabled= without problem. attr_writer :enabled? would be weird though.
Updated by nobu (Nobuyoshi Nakada) about 2 months ago
- Is duplicate of Feature #5781: Query attributes (attribute methods ending in `?` mark) added
Updated by nobu (Nobuyoshi Nakada) about 2 months ago
- Is duplicate of Feature #11167: Allow an attr_ variant for query-methods that end with a question mark '?' character, such as: def foo? returning @foo added
Updated by nobu (Nobuyoshi Nakada) about 2 months ago
- Is duplicate of Feature #12046: Allow attr_reader :foo? to define instance method foo? for accessing @foo added
Updated by nobu (Nobuyoshi Nakada) about 2 months ago
- Related to Feature #15991: Allow questionmarks in variable names added
Updated by nobu (Nobuyoshi Nakada) about 2 months ago
- Is duplicate of Feature #19708: Support `attr_reader :foo?` added
Updated by shan (Shannon Skipper) about 2 months ago
Dan0042 (Daniel DeLorme) wrote in #note-2:
Also related to #5781 #11167 #12046 #15991 #19708
Popular eh?
Wow! There's already an open ticket for this exact issue even. I apologize for not properly searching before filing. I should have just added a PR link there in retrospect.
byroot (Jean Boussier) wrote in #note-3:
This feature is only supported for attr_reader and attr, not attr_writer or attr_accessor, since setter methods cannot have question marks.
Using the same logic,
attr_accessor :enabled?could generate#enabled?and#enabled=without problem.attr_writer :enabled?would be weird though.
I was thinking of attr_writer :enabled? being weird and dismissed attr_accessor :enabled?. I didn't think of the case where you want attr_reader :enabled? and attr_writer :enabled without attr_writer :enabled. I wouldn't mind doing an attr_reader :enabled? with attr_writer :enabled but agree attr_accessor :enabled? makes sense based on the pattern.
Updated by matz (Yukihiro Matsumoto) about 1 month ago
- Status changed from Open to Rejected
I still ask you to define def valid? = @valid manually. It is not much worse than attr_reader :valid?.
Matz.
Updated by Dan0042 (Daniel DeLorme) about 1 month ago
I think Matz's position is clear and will not change, so what about closing the related tickets that are still open?