From: yuuji.yaginuma@... Date: 2018-06-05T05:57:57+00:00 Subject: [ruby-core:87406] [Ruby trunk Misc#14825] When redefining `attr_xx` methods the visibility becomes `public` Issue #14825 has been reported by y-yagi (Yuji Yaginuma). ---------------------------------------- Misc #14825: When redefining `attr_xx` methods the visibility becomes `public` https://bugs.ruby-lang.org/issues/14825 * Author: y-yagi (Yuji Yaginuma) * Status: Open * Priority: Normal * Assignee: ---------------------------------------- Hi. If redefine `attr_xx` methods, the original visibility is lost and all visibility is public. ~~~ ruby # 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? -- https://bugs.ruby-lang.org/ Unsubscribe: