Skip to content

Instantly share code, notes, and snippets.

@y-yagi
Last active June 2, 2018 00:02
Show Gist options
  • Save y-yagi/941eb6e54d48df7dab1aef44292a4e77 to your computer and use it in GitHub Desktop.
Save y-yagi/941eb6e54d48df7dab1aef44292a4e77 to your computer and use it in GitHub Desktop.
module Thor
module ClassMethods
def attr_reader(*)
super
end
def attr_writer(*)
super
end
def attr_accessor(*)
super
end
end
end
class Foo
extend Thor::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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment