# -*- coding: utf-8 -*-
module Inertia
def self.included(mod)
def mod.method_added(m)
return if (@__once__ ||= {})[[self, m]]
@__once__[[self, m]] = true
self.instance_eval do
alias_method :orig_update, :update
define_method(:update) do
p("B")
orig_update
end
end
end
end
end
class Base
include Inertia
def update
p("A")
end
end
Base.new.update
IyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCm1vZHVsZSBJbmVydGlhCiAgZGVmIHNlbGYuaW5jbHVkZWQobW9kKQogICAgZGVmIG1vZC5tZXRob2RfYWRkZWQobSkKICAgICAgcmV0dXJuIGlmIChAX19vbmNlX18gfHw9IHt9KVtbc2VsZiwgbV1dCiAgICAgIEBfX29uY2VfX1tbc2VsZiwgbV1dID0gdHJ1ZQogICAgICBzZWxmLmluc3RhbmNlX2V2YWwgZG8KICAgICAgICBhbGlhc19tZXRob2QgOm9yaWdfdXBkYXRlLCA6dXBkYXRlCiAgICAgICAgZGVmaW5lX21ldGhvZCg6dXBkYXRlKSBkbwogICAgICAgICAgcCgiQiIpCiAgICAgICAgICBvcmlnX3VwZGF0ZQogICAgICAgIGVuZAogICAgICBlbmQKICAgIGVuZAogIGVuZAplbmQKCmNsYXNzIEJhc2UKICBpbmNsdWRlIEluZXJ0aWEKICBkZWYgdXBkYXRlCiAgICBwKCJBIikKICBlbmQKZW5kCgpCYXNlLm5ldy51cGRhdGUK