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: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>