File: class_intercepter.rb

Project: CI: Class Interception

#!/usr/bin/env ruby

class ClassProxy
  attr_accessor :proxied_class
  def initialize(default_class)
    @proxied_class = default_class
  end
  def new(*args, &block)
    @proxied_class.new(*args, &block)
  end
end

class Class
  def use_class(class_name, class_ref)
    proxy = const_get(class_name)
    unless ClassProxy === proxy
      self.const_set(class_name, ClassProxy.new(proxy))
      proxy = const_get(class_name)
    end
    if ! block_given?
      proxy.proxied_class = class_ref
    else
      old_proxied = proxy.proxied_class
      proxy.proxied_class = class_ref
      begin
	yield
      ensure
	proxy.proxied_class = old_proxied
      end
    end
  end
end

Used by: test_class_intercepter


[ Index ][ Presentation ]
Generated by [ source2html ]