Last active
June 2, 2018 00:02
-
-
Save y-yagi/941eb6e54d48df7dab1aef44292a4e77 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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)}" | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$ 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