On Thursday 23 April 2009 16:18:57 Damjan Rems wrote:
> And I want the third class to subclass class A or B dependent on
> parameter passed.

On loading the file? That might not be the best way...

> Finally I have a method to load my class and do something with it.
> def run_class(filename, parm)
>   src = File.read(filename + '.rb')
>   src.sub!('Abstract', parm)
> # Evaluate is equal to load
>   eval src.to_s
>   obj = eval( File.basename(filename).capitalize + '.new' )
>   obj.do_something
> end
> run_class('my_src')

Ok...  First of all, that method is too long... you probably don't want 
obj.do_something in there. You probably want it to return obj so you can do 
something with it.

Second: Do A and B have to be classes? Can they be modules instead?
How about Myclass? Can it be a module instead of a class?

Let's say A and B are modules:

class MyClass < Abstract
  ...
end
def run_class type
  obj = MyClass.new
  obj.extend type
  obj
end
run_class(A)
run_class(B)

Or, let's say MyClass is actually MyModule:

class A < Abstract
  include MyModule
end
class B < Abstract
  include MyModule
end
# not sure why you still need this, but here you go:
def run_class type
  type.new
end

Or, if you don't know which classes MyModule might be mixed into, you could do 
something like this:

def run_class type
  obj = type.new
  obj.extend MyModule
end

Or, you could even do hacks like this:

[A, B].each do |type|
  type.send :include, MyModule
end

Which of these routes makes sense depends very much on what you're trying to 
build. I don't know what that is. For example, several people have suggested 
using const_get, but I don't see why you can't just pass the module/class 
itself as a parameter -- they're objects, too!