[ruby-core:119964] [Ruby master Bug#20871] Including methods in Enumerable doesn't make them available in Array
From:
"tdeo (Thierry Deo) via ruby-core" <ruby-core@...>
Date:
2024-11-19 08:43:18 UTC
List:
ruby-core #119964
Issue #20871 has been updated by tdeo (Thierry Deo).
I'm running into a similar situation which I managed to reproduce with a plain ruby console and no external dependencies:
```ruby
$ irb
irb(main):001>
module Bar; def bar; 'bar'; end; end
module Foo; def foo; 'foo'; end; end
Enumerable.prepend Bar
Class.new { include Enumerable }
Enumerable.include Foo
puts [].foo
(irb):9:in `<main>': undefined method `foo' for an instance of Array (NoMethodError)
puts [].foo
^^^^
from <internal:kernel>:187:in `loop'
from /Users/thierry/.asdf/installs/ruby/3.3.6/lib/ruby/gems/3.3.0/gems/irb-1.14.1/exe/irb:9:in `<top (required)>'
from /Users/thierry/.asdf/installs/ruby/3.3.6/bin/irb:25:in `load'
from /Users/thierry/.asdf/installs/ruby/3.3.6/bin/irb:25:in `<main>'
```
Removing either of the `Enumerable.prepend` or `Class.new` lines makes the bug go away
----------------------------------------
Bug #20871: Including methods in Enumerable doesn't make them available in Array
https://bugs.ruby-lang.org/issues/20871#change-110700
* Author: sanderd17 (Sander Deryckere)
* Status: Feedback
* ruby -v: 3.3.6
* Backport: 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN
----------------------------------------
Today, our CI pipeline started failing after the automatic update from v3.3.5 to v3.3.6.
After researching, it turned out that our core extensions to the `Array` class weren't loaded anymore.
The core-extensions code looks like this:
```ruby
module CoreExt
module Enumerable
def average
sum(&:to_f) / count if any?
end
# def ...
end
end
Enumerable.include CoreExt::Enumerable
```
After some debugging, it turned out that the `average` method was included in the `instance_methods` of `Enumerable`, but not in the `instance_methods` of `Array`.
Explicitly adding `Array.include CoreExt::Enumerable` fixes CI for our case.
The very strange thing is that it only happens on a release branch we are still maintaining. It doesn't happen on our main development branch (which also updated to v3.3.6 today). I have been unable to find the difference between both branches so far (they diverged a couple of months ago, but the base system is still regularly updated on both, and pretty similar).
After some digging around, I assume this commit is related to our issue: https://github.com/ruby/ruby/commit/edeb0319f7a95dfe3f9b895bcf32371dd8514726
--
https://bugs.ruby-lang.org/
______________________________________________
ruby-core mailing list -- ruby-core@ml.ruby-lang.org
To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/