[ruby-core:75471] [Ruby trunk Bug#12370] require 'mkmf' changes Object#respond_to? behaviour

From: danieldasilvaferreira@...
Date: 2016-05-12 10:25:37 UTC
List: ruby-core #75471
Issue #12370 has been updated by Daniel Ferreira.


Hi Nobu.

I discovered due to this bug in capybara-screenshot gem: [[https://github.com/mattheworiordan/capybara-screenshot/issues/162]]

And your right. I also think they should not use 

``` ruby
require 'mkmf'
```

But when I say that Object#respond_to? behaviour was changed it is because of this:

``` ruby
> YAML.respond_to?(:configuration) 
=> true
> YAML.public_method_defined?(:configuration)
=> false
```

When the definition of Object#respond_to? is that it will be true if public method exists.
So the behaviour is different for some reason.
For me that is a bug or we need to update the definition of the method itself.
Do you agree with me?

----------------------------------------
Bug #12370: require 'mkmf' changes Object#respond_to? behaviour 
https://bugs.ruby-lang.org/issues/12370#change-58592

* Author: Daniel Ferreira
* Status: Open
* Priority: Normal
* Assignee: 
* ruby -v: 2.3.0
* Backport: 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN
----------------------------------------
Replication steps:

``` ruby
$ irb
> RUBY_VERSION
=> '2.3.0'
> require 'yaml'
> YAML.public_method_defined?(:configuration)
=> false
> YAML.respond_to?(:configuration)
=> false
> require 'mkmf'
> YAML.public_method_defined?(:configuration)
=> false
> YAML.respond_to?(:configuration)
=> true
```

``` ruby
Object.constants do |constant|
  constant.respond_to?(:configuration) ==> true
end
```

Also there is a different behaviour for core classes over library or gem classes and/or modules under Object namespace.

The changed behaviour is triggered by:

mkmf.rb:2718 => 

``` ruby
include MakeMakefile
```




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

In This Thread

Prev Next