When I started programming Ruby and I wanted abstract classes I would raise an exception in the initialize method telling the client that they were trying to instantiate an abstract class. That was my best attempt at self-documenting code at the time.

Nowadays, however, when I have behaviour that is abstract, I just put it in a module. That feels like much more idiomatic Ruby.

On 4 Apr 2010, at 05:00, David Chelimsky wrote:

On Sat, Apr 3, 2010 at 10:45 PM, Julian Leviston <jul...@leviston.net> wrote:

On 04/04/2010, at 7:32 AM, David Chelimsky wrote:

On Sat, Apr 3, 2010 at 8:56 AM, Vojto Rinik <zero0...@gmail.com> wrote:
Hello RSpec users!
I have one abstract class and a few classes that inherit from that abstract
one.

Ruby doesn't have abstract classes. You can have a base class that you
don't _intend_ to instantiate directly, but there's nothing stopping
you from doing so, so it's not like an abstract class in java, which
you actually can't instantiate directly.

I've seen some cases where the initialize method is made private so
you can't just call Foo.new, so it sort of feels like an abstract
class, but even in that case you can still use send() to instantiate
one in a test:

 AbstractIshClass.send(:new)


How about if you overrode new and __new__ ?

Then override the override. AFAIK, there's really no preventing a
client from using an object however it chooses in Ruby. You can make
it difficult, but I'm pretty sure there's always a way around it.
_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

cheers,
Matt

http://mattwynne.net
+447974 430184

_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to