Delegator
class Person < Struct.new(:name)
end
person = Person.new('John')
Slide 45
Slide 45 text
Delegator
class Person < Struct.new(:name)
end
person = Person.new('John')
redditor = Reddittor.new(person)
Slide 46
Slide 46 text
Delegator
class Person < Struct.new(:name)
end
person = Person.new('John')
redditor = Reddittor.new(person)
redditor.name # => 'John'
Slide 47
Slide 47 text
Delegator
class Person < Struct.new(:name)
end
person = Person.new('John')
redditor = Reddittor.new(person)
redditor.name # => 'John'
redditor.submit_link # => 'Link by John'
Slide 48
Slide 48 text
Delegator
require 'delegate'
Slide 49
Slide 49 text
Delegator
class Redditor < Delegator
def initialize(person)
end
end
Slide 50
Slide 50 text
Delegator
class Redditor < Delegator
def initialize(person)
end
def __setobj__(person)
@person = person
end
def __getobj__
@person
end
end
Slide 51
Slide 51 text
Delegator
class Redditor < Delegator
def initialize(person)
__setobj__(person)
end
def __setobj__(person)
@person = person
end
def __getobj__
@person
end
end
Slide 52
Slide 52 text
Delegator
class Redditor < Delegator
def initialize(person)
__setobj__(person)
end
def __setobj__(person)
@person = person
end
def __getobj__
@person
end
def submit_link
"Link by #{name}"
end
end
Slide 53
Slide 53 text
Delegator
person = Person.new('John')
redditor = Redditor.new(person)
redditor.name # => 'John'
redditor.submit_link # => 'Link by John'
Slide 54
Slide 54 text
tl;dr
Slide 55
Slide 55 text
Delegator
class Redditor < SimpleDelegator
def initialize(person)
super(person)
end
def submit_link
"Link by #{name}"
end
end
Delegator
class Redditor < DelegateClass(Person)
def initialize(person)
super(person)
end
def submit_link
"Link by #{name}"
end
end
Slide 60
Slide 60 text
Delegator
class Redditor < DelegateClass(Person)
def initialize(person)
super(person)
end
def submit_link
"Link by #{name}"
end
end
Redditor.instance_methods.grep(/name/)
# => [:name, :name=]