Issue #12834 has been updated by Samuel Williams.


I feel like this is a bug, and should be fixed. Prepending the same thing multiple times should be a warning IMHO. I'm not even sure what situation this is useful.

```
2.4.0 :001 > module M
2.4.0 :002?>   end
 => nil 
2.4.0 :003 > module N
2.4.0 :004?>   end
 => nil 
2.4.0 :005 > class C
2.4.0 :006?>   prepend M, N, M
2.4.0 :007?>   end
 => C 
2.4.0 :008 > C.included_modules
 => [N, M, Kernel] 
2.4.0 :009 > D = C.dup.prepend(M)
 => D 
2.4.0 :010 > D.included_modules
 => [N, M, Kernel] 
2.4.0 :011 > class E < D
2.4.0 :012?>   prepend M
2.4.0 :013?>   end
 => E 
2.4.0 :014 > E.included_modules
 => [M, N, M, Kernel] 
2.4.0 :015 > 
```

----------------------------------------
Bug #12834: `prepend` getting prepended even if it already exists in the ancestors chain
https://bugs.ruby-lang.org/issues/12834#change-63283

* Author: Nikola Nenkov
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 
* ruby -v: 2.3.1
* Backport: 2.3: UNKNOWN
----------------------------------------
```
module M; end
class A; prepend M; end
class B < A; prepend M; end

B.ancestors # => [M, B, M, A, Object, Kernel, BasicObject]
```

Even though I find this behaviour to be more intuitive, it is inconsistent with `Module#include` and is potentially breaking.
I didn't see a mention on the [[release notes]](https://www.ruby-lang.org/en/news/2015/12/25/ruby-2-3-0-released/) and the [[documentation]](https://ruby-doc.org/core-2.3.1/Module.html#method-i-prepend_features) is now outdated. 



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

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>