O Ruby possui classes abertas
que podem ser modi cadas a
qualquer momento.
Slide 11
Slide 11 text
O Ruby é extremamente
exível.
Slide 12
Slide 12 text
O Ruby é muito mais difícil do
que as pessoas assumem.
Slide 13
Slide 13 text
DUCK TYPING, PROTOCOLOS
E CONTRATOS
Slide 14
Slide 14 text
O Duck Typing permite
estabelecer interfaces com um
contrato informal.
Slide 15
Slide 15 text
class SimpleLogger
def initialize(storage = [])
unless storage.is_a?(Array)
raise "you need to pass an array"
end
@storage = storage
end
def log(message)
@storage << message
end
end
Slide 16
Slide 16 text
def initialize(storage = [])
unless storage.is_a?(Array)
raise "you need to pass an array"
end
@storage = storage
end
Estendendo métodos sem ter
que criar uma nova classe.
Slide 62
Slide 62 text
class Hellobits
def cool
# do something
end
end
Slide 63
Slide 63 text
class Hellobits
alias_method :original_cool, :cool
def cool
# do something before
original_cool
# do something after
end
end
Slide 64
Slide 64 text
class Hellobits
cool_method = instance_method(:cool)
define_method :cool do
# do something before
cool_method.bind(self).call
# do something after
end
end
Slide 65
Slide 65 text
SPLATTING
Slide 66
Slide 66 text
*args
Slide 67
Slide 67 text
class Module
def attr_dsl(*args)
args.each do |arg|
# do something
end
end
end
Slide 68
Slide 68 text
class Settings
names = %w[path size locale]
attr_dsl *names
end
Slide 69
Slide 69 text
def coords(*)
# do something
-23.598737, -46.674685
end
latitude, longitude = coords