#
# http://q...content-available-to-author-only...e.jp/1370659386
#
module Foo
def initialize
@original_update = self.method(:update)
def self.update
@original_update.call
puts "!!! Extended Implementation !!!"
end
end
end
class Bar
def update
puts "Bar : update"
end
end
class Baz < Bar
def update
super
puts "Baz : update"
end
end
#
# Test
#
def test msg
puts "\n--------------------------------\n#{msg}\n--------------------------------"
puts "-- Bar.update"
f = Bar.new
f.update
puts "-- Baz.update"
f = Baz.new
f.update
end
test "Normal"
class Baz
include Foo
end
test "Baz include Foo"
class Bar
include Foo
end
test "Bar include Foo"
IwojICAgaHR0cDovL3EuLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLmUuanAvMTM3MDY1OTM4NgojCgptb2R1bGUgRm9vCiAgICBkZWYgaW5pdGlhbGl6ZQogICAgICAgIEBvcmlnaW5hbF91cGRhdGUgPSBzZWxmLm1ldGhvZCg6dXBkYXRlKQogICAgICAgIGRlZiBzZWxmLnVwZGF0ZQogICAgICAgICAgICBAb3JpZ2luYWxfdXBkYXRlLmNhbGwKICAgICAgICAgICAgcHV0cyAiISEhIEV4dGVuZGVkIEltcGxlbWVudGF0aW9uICEhISIKICAgICAgICBlbmQKICAgIGVuZAplbmQKCmNsYXNzIEJhcgogICAgZGVmIHVwZGF0ZQogICAgICAgIHB1dHMgIkJhciA6IHVwZGF0ZSIKICAgIGVuZAplbmQKCmNsYXNzIEJheiA8IEJhcgogICAgZGVmIHVwZGF0ZQogICAgICAgIHN1cGVyCiAgICAgICAgcHV0cyAiQmF6IDogdXBkYXRlIgogICAgZW5kCmVuZAoKCiMKIyAgIFRlc3QKIwpkZWYgdGVzdCBtc2cKICAgIHB1dHMgIlxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiN7bXNnfVxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCiAgICBwdXRzICItLSBCYXIudXBkYXRlIgogICAgZiA9IEJhci5uZXcKICAgIGYudXBkYXRlCgogICAgcHV0cyAiLS0gQmF6LnVwZGF0ZSIKICAgIGYgPSBCYXoubmV3CiAgICBmLnVwZGF0ZQoKZW5kCgp0ZXN0ICJOb3JtYWwiCgpjbGFzcyBCYXoKICAgIGluY2x1ZGUgRm9vCmVuZAoKdGVzdCAiQmF6IGluY2x1ZGUgRm9vIgoKY2xhc3MgQmFyCiAgICBpbmNsdWRlIEZvbwplbmQKCnRlc3QgIkJhciBpbmNsdWRlIEZvbyIK