Issue #5940 has been updated by Mario Lanza.


Thanks for the feedback and the suggestions.
Will be watching for the arrival of Module#prepend. :)
----------------------------------------
Bug #5940: Resolve conflict between inheritance and mixins
https://bugs.ruby-lang.org/issues/5940

Author: Mario Lanza
Status: Open
Priority: Normal
Assignee: 
Category: 
Target version: 
ruby -v: 1.9.2


Some in the Ruby community (like Chad Fowler) have noticed issues around how Ruby attempts to transverse a method's pipeline up the inheritance chain.  When you inherit a class from another class and then add a mixin, the mixin is not able to supercede the methods defined in the inherited-from class.

I've demonstrated the issue here:
https://gist.github.com/515856

It would be nice if Ruby were to change its default inheritance behavior so that mixin do override a class's methods.  Essentially, the behavior would treat inheritance in nearly the same manner that it treats mixins.

  class Person < ActiveRecord::Base
  end

would be effectively treated, in a manner of speaking, as:

  class Person
    include ActiveRecord::Base
  end

(I would go so far as to say that we get rid of direct inheritance in favor of always using mixins to accomplish our inheritance goals.  I do have a reservation for how this would affect backwards compatibility.)

I dunno if Ruby's current behavior is intentional (having purposeful benefits) but I find it annoying as it makes it difficult to override a behavior in third-party libraries.  When I own the classes, I can simply refactor them to prefer mixins as to avoid this issue, but this doesn't solve the dilemma when dealing with vendor libraries.


-- 
http://bugs.ruby-lang.org/