[x86.bison:695]gfb> ruby -v
ruby 1.6.7 (2002-03-01) [i386-solaris2.8]


I have a module that I will use as a mixin:

module Original
  def foo
    pust "Original#foo()"
  end
end

include Original

foo # => Original#foo()

Everything is OK so far. Then I would like to mix another module into
Original that redefines method foo:

module Another
  def foo
    puts "Another#foo()"
  end
end

module Original
  include Another
end

foo # => Original#foo()

Here I have a problem -- Original's foo is still being called (and I expect
Another's). The only way to achieve what I want is to redefine module
Another above to:

module Another
  def self.append_features(mod)
    super mod
    mod.module_eval %Q{
      def foo
        puts "Another#foo()"
      end
    }
  end
end

Am I missing something? Is there a way to go without eval?

Thanks in advance,
Gennady.