Class_eval and using a block instead of a String?

Hi,

given the following contrived example I am wondering how to use a
block with class_eval instead of using the string like in the code
below?!

Any ideas?

Cheers,
Mariano

require ‘test/unit’
include Test::Unit::Assertions

class Base
class << self
def enhance(*attributes)
class_eval do
attr_reader *attributes
end

   initializer = "def initialize(#{attributes.join(", ")})"
   attributes.each {|a| initializer << "@#{a}=#{a}\n"}
   initializer << "end"

  # ------
  class_eval initializer # <-------
  # ------
 end

end
end
class Derived < Base; end

Derived.enhance(:a, :b, :c)
d = Derived.new(“a”, “b”, “c”)

assert_equal “a”, d.a
assert_equal “b”, d.b
assert_equal “c”, d.c