Created
April 1, 2014 18:18
-
-
Save thatrubylove/9919891 to your computer and use it in GitHub Desktop.
Polymorphism over conditionals
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
# Conditional reach-around | |
User = Struct.new(:name, :role) do; end | |
def greet(user) | |
if user.name && user.role | |
"Hello, I am an #{user.role} user. My name is #{user.name}." | |
elsif user.name | |
"Hello, my name is #{user.name}." | |
else | |
"Hello, I am a guest user. I have no name." | |
end | |
end | |
puts greet User.new | |
puts greet User.new('james') | |
puts greet User.new('james','admin') | |
# Polymorphism | |
class GuestUser | |
def greet | |
"Hello, I am a guest user. I have no name." | |
end | |
end | |
NormalUser = Struct.new(:name) do | |
def greet | |
"Hello, my name is #{name}." | |
end | |
end | |
AdminUser = Struct.new(:name) do | |
def role | |
'admin' | |
end | |
def greet | |
"Hello, I am an #{role} user. My name is #{name}." | |
end | |
end | |
def greet(user) | |
user.greet | |
end | |
puts greet GuestUser.new | |
puts greet NormalUser.new('james') | |
puts greet AdminUser.new('james') |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment