class RKit::Override::Base
Attributes
method[RW]
method_name[RW]
pattern[RW]
receiver[RW]
Public Class Methods
new(method_name, method:, pattern:, pattern_args:, receiver:;)
click to toggle source
# File lib/r_kit/override/base.rb, line 10 def initialize method_name, method:, pattern:, pattern_args:, receiver:; @method_name = method_name @method = method @pattern = RKit::Override::Pattern.build(pattern, *pattern_args) @receiver = receiver end
override(*args)
click to toggle source
# File lib/r_kit/override/base.rb, line 3 def self.override *args new(*args).override end
Public Instance Methods
__newdef__()
click to toggle source
# File lib/r_kit/override/base.rb, line 61 def __newdef__ method end
__olddef__()
click to toggle source
# File lib/r_kit/override/base.rb, line 51 def __olddef__ __olddef__ = receiver.instance_method(method_name) proc do |*args, &block| __olddef__.bind(self).call(*args, &block) end rescue NameError Nodef.__nodef__(method_name) end
override()
click to toggle source
# File lib/r_kit/override/base.rb, line 17 def override override_method # TODO: hook_method end
Protected Instance Methods
override_hook()
click to toggle source
# File lib/r_kit/override/base.rb, line 121 def override_hook end
override_method()
click to toggle source
# File lib/r_kit/override/base.rb, line 72 def override_method oneself = self # override_binding = Module.new{ # define_method :__olddef__, oneself.__olddef__ # define_method :__newdef__, oneself.__newdef__ # define_method :override, oneself.pattern # } old_m = oneself.__olddef__ new_m = oneself.__newdef__ ove_m = oneself.pattern override_binding = proc{ define_method :__olddef__, old_m define_method :__newdef__, new_m define_method :override, ove_m } # forget_binding = proc{ # remove_method :__olddef__ # remove_method :__newdef__ # remove_method :override # } receiver.send :define_method, method_name do |*args, &block| #p self.singleton_class.included_modules #p # self.extend override_binding #unless self.singleton_class.include?(override_binding) # p "add" (class << self; self; end).instance_eval &override_binding closure = self.override *args, &block #closure = instance_eval(&ove_m) # p "delete" # (class << self; self; end).class_eval &forget_binding rescue nil closure end end