class EacRubyUtils::Ruby::OnReplaceObjects
def add_replacement(method_name, *args, &block)
def add_replacement(method_name, *args, &block) @replacements << replacement_class(method_name).new(*args, &block).apply end
def clear_replacements
def clear_replacements @replacements = [] end
def on_replacement(&block)
def on_replacement(&block) clear_replacements block.call(self) ensure restore_replacements end
def replace_instance_method(a_module, method_name, &block)
def replace_instance_method(a_module, method_name, &block) add_replacement(__method__, a_module, method_name, &block) end
def replace_self_method(object, method_name, &block)
def replace_self_method(object, method_name, &block) add_replacement(:replace_instance_method, object.singleton_class, method_name, &block) end
def replacement_class(method_name)
def replacement_class(method_name) self.class.const_get(::ActiveSupport::Inflector.camelize(method_name)) end
def restore_replacements
def restore_replacements @replacements.reverse.each(&:restore) end