Assim como no post do Rails Summit 2009 eu ia começar o post com uma resenha do evento, mas acho que os posts do Marcelo Castellani e do Rodrigo Ribeiro já atacaram todos os pontos e não tenho mais nada a acrescentar a não ser os meus parabéns e meus agradecimentos a todos os envolvidos.
Fotos do evento podem ser vistas no album do GURU-SP
Sobre a minha palestra com o Leonardo Bessa, infelizmente demos uma atrasadinha na primeira metade da palestra e não conseguimos falar de tudo o que queríamos, mas pelo feedback que tivemos acredito que os presentes gostaram e aprenderam. O que não deu tempo de falar no dia com certeza vai virar post aqui no futuro. Para os que não puderam ir, felizmente o pessoal da organização gravou o evento e o vídeo da nossa apresentação pode ser visto aqui:
Para aqueles que foram ou apenas viram o vídeo, aqui estão os slides da palestra:
E aqui o código gerado durante a apresentação:
class Picapau
def voa
"voando..."
end
def anda
"andando..."
end
end
woody = Picapau.new
amigo = Picapau.new
#
# woody.voa
# amigo.voa
# woody.anda
# amigo.anda
#
# def woody.hehehe
# p "hehehe-hehehe-hehehehehe"
#
# end
#
# woody.hehehe
#
# # amigo.hehehe
#
#
# p woody.class
# p amigo.class
# p woody.class == amigo.class
class Object
def singleton_class
# p self
class << self
# p self
self
end
end
end
# p woody.singleton_class
# p amigo.singleton_class
# p amigo.singleton_class == woody.singleton_class
#
# class Picapau
# alias :metodo_voa :voa
# def voa(param='')
# result = metodo_voa(param)
# p "Chamando metodo voa com #{param.inspect} retornou #{result.inspect}"
# result
# end
# end
#
# class Picapau
# def self.log(metodo)
# metodo_velho = self.instance_method(metodo)
# define_method(metodo) do |*arg|
# result = metodo_velho.bind(self).call(arg)
# p "Chamando metodo voa com #{arg.inspect} retornou #{result.inspect}"
# end
# end
# log :voa
# end
#
# class Picapau
# def self.log(*metodos)
# metodos.each do |metodo|
# metodo_velho = self.instance_method(metodo)
# define_method(metodo) do |*arg|
# result = metodo_velho.bind(self).call(arg)
# p "Chamando metodo voa com #{arg.inspect} retornou #{result.inspect}"
# end
# end
# end
# log :voa, :anda
# end
module Logger
def log(*nome_do_metodos)
nome_do_metodos.each do |nome_do_metodo|
metodo_velho = self.instance_method(nome_do_metodo)
define_method(nome_do_metodo) do
result = metodo_velho.bind(self).call
p "Chamando metodo #{nome_do_metodo} e retornou #{result}"
result
end
end
end
end
module Andador
def anda2
p "novo metodo que anda"
end
end
class Picapau
extend Logger
include Andador
log :voa, :anda
end
woody.voa
woody.anda
woody2 = Picapau.new
woody2.anda2