1class Class
2 # Creates a new subclass of self, with a name "under" our own name.
3 # Example:
4 #
5 # x = Foo::Bar.subclass('Zap'){}
6 # x.name # => Foo::Bar::Zap_1
7 # x.superclass.name # => Foo::Bar
8 def subclass(base_name, &body)
9 klass = Class.new(self)
10 class_name = "#{base_name}_#{class_count!}"
11 instance_eval do
12 const_set(class_name, klass)
13 end
14 klass.instance_eval(&body)
15 klass
16 end
17
18 private
19 def class_count!
20 @class_count ||= 0
21 @class_count += 1
22 @class_count
23 end
24end