Issue #16242 has been reported by osyo (manga osyo).

----------------------------------------
Bug #16242: Refinements method call to failed
https://bugs.ruby-lang.org/issues/16242

* Author: osyo (manga osyo)
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 
* ruby -v: 2.7.0
* Backport: 2.5: UNKNOWN, 2.6: UNKNOWN
----------------------------------------
Refinements method call to failed with `prepend`.


## No problem

```ruby
module M
  # Methods that you want to call only within this context
  refine M do
    def refine_method
      "refine_method"
    end
  end
  using M

  def hoge
    # OK: `refine_method` calls the method
    refine_method
  end
end

class X
  include M
end

pp X.new.hoge
# => "refine_method"
```


## No problem

* If `prepend` another module, the search for `refine_method` fails

```ruby
module OtherM
end

module M
  # Added prepend
  prepend OtherM

  refine M do
    def refine_method
      "refine_method"
    end
  end
  using M

  def hoge
    # Error: `hoge': undefined local variable or method `refine_method' for #<X:0x00007fa05a024390> (NameError)
    refine_method
  end
end

class X
  include M
end

# Error
pp X.new.hoge
```


## Environment

Reproduced in the following environment.

```ruby
RUBY_VERSION  # => "2.7.0"
RUBY_REVISION # => "02dfa0f16361c498e0f529054b00e3e09730892b"
RUBY_PLATFORM # => "x86_64-darwin17"
```

You can also confirm that it is reproduced here.
https://wandbox.org/permlink/e73sVBRWQBfXP3zH




-- 
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>