Actions
Misc #14825
openWhen redefining `attr_xx` methods the visibility becomes `public`
Status:
Open
Assignee:
-
Description
Hi.
If redefine attr_xx
methods, the original visibility is lost and all visibility is public.
# attr.rb
module ClassMethods
def attr_reader(*)
super
end
def attr_writer(*)
super
end
def attr_accessor(*)
super
end
end
class Foo
extend ClassMethods
class << self
def method_visibility(method)
case
when private_method_defined?(method)
:private
when protected_method_defined?(method)
:protected
else
:public
end
end
end
attr_reader :pub
protected
attr_reader :prot
alias protalias prot
alias_method :protaliasmethod, :prot
private
attr_reader :priv
alias privalias priv
alias_method :privaliasmethod, :priv
end
f = Foo.new
puts "Public"
f.pub
puts
puts "Protected"
puts "prot: #{Foo.method_visibility(:prot)}"
puts "protalias: #{Foo.method_visibility(:protalias)}"
puts "protaliasmethod #{Foo.method_visibility(:protaliasmethod)}"
puts
puts "Private"
puts "priv: #{Foo.method_visibility(:priv)}"
puts "privalias: #{Foo.method_visibility(:privalias)}"
puts "privaliasmethod: #{Foo.method_visibility(:privaliasmethod)}"
$ ruby -v attr.rb
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]
Public
Protected
prot: public
protalias: public
protaliasmethod public
Private
priv: public
privalias: public
privaliasmethod: public
Is this intentional?
No data to display
Actions
Like0