# File lib/delegate.rb, line 272
def DelegateClass(superclass)
  klass = Class.new
  methods = superclass.public_instance_methods(true)
  methods -= [
    :__id__, :object_id, :__send__, :public_send, :respond_to?, :send,
    :==, :equal?, :initialize, :method_missing, :__getobj__, :__setobj__,
    :clone, :dup, :marshal_dump, :marshal_load, :instance_eval, :instance_exec,
    :extend,
  ]
  klass.module_eval {
    include Delegator::MethodDelegation
    def __getobj__  # :nodoc:
      @delegate_dc_obj
    end
    def __setobj__(obj)  # :nodoc:
      raise ArgumentError, "cannot delegate to self" if self.equal?(obj)
      @delegate_dc_obj = obj
    end
  }
  klass.module_eval do
    methods.each do |method|
      define_method(method, Delegator.delegating_block(method))
    end
  end
  return klass
end