Mientras seguía trasteando con ruby me percaté de que no existen determinadas características de la programación orientada a objetos que sí ofrece Java como son las clases abstractas. Así que como siempre, para seguir aprendiendo me puse a picar un poco de código para poder utilizar dicha funcionalidad en mis clases.
Como quería poder definir cualquier clase como abstracta de manera más o menos transparente, lo único que tenía que hacer era añadir un poco de código extra a la clase Class que aportase las siguientes funciones:
- Poder marcar una clase como abstracta.
- Poder definir dentro de la clase qué métodos serán abstractos.
- Lanzar una excepción en caso de instanciar una clase abstracta.
- Lanzar una excepción si se implementó un método abstracto dentro de la clase abstracta.
- Lanzar una excepción si no se implementaron los métodos abstractos heredados de la clase abstracta.
Y esta es la solución a la que llegúe: http://svn.dagi3d.net/rails/abstract_class/trunk/lib/abstract_class.rb
Para marcar una clase como abstracta, basta con llamar al método abstract_class y para definir un método como abstracto, a abstract_method :método:
class Foo
abstract_class
abstract_method :foo
end
# clase concreta
class Bar < Foo
def foo
end
end
Por si a alguien le interesa, el código está disponible en un repositorio de subversion en http://svn.dagi3d.net/rails/abstract_class/trunk/ y una gema ya preparada para instalar en http://dagi3d.net/temp/abstract_class-0.1.0.gem

No acabo de ver clara la necesidad de tener clases abstractas en Ruby. Échale un vistazo a este hilo de ruby-talk: http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/139545
Un saludo.