lostisland / faraday

Simple, but flexible HTTP client library, with support for multiple backends.
https://lostisland.github.io/faraday
MIT License
5.71k stars 972 forks source link

Fix "method redefined" warnings introduced in Faraday 2.7.5 #1506

Closed mattbrictson closed 1 year ago

mattbrictson commented 1 year ago

Description

Faraday 2.7.5 prints warnings about redefined methods. This was reported in #1505.

faraday-2.7.5/lib/faraday/options.rb:177: warning: method redefined; discarding old user
faraday-2.7.5/lib/faraday/options.rb:177: warning: method redefined; discarding old password
faraday-2.7.5/lib/faraday/options.rb:177: warning: method redefined; discarding old request
faraday-2.7.5/lib/faraday/options.rb:177: warning: method redefined; discarding old ssl
faraday-2.7.5/lib/faraday/options.rb:177: warning: method redefined; discarding old builder_class
faraday-2.7.5/lib/faraday/request.rb:48: warning: method redefined; discarding old params=
faraday-2.7.5/lib/faraday/request.rb:59: warning: method redefined; discarding old headers=
faraday-2.7.5/lib/faraday/request/instrumentation.rb:10: warning: method redefined; discarding old name
faraday-2.7.5/lib/faraday/request/instrumentation.rb:15: warning: method redefined; discarding old instrumenter

The underlying problem is that these methods are implicitly defined by Struct. When Faraday attempts to redefine them to alter the default Struct behavior, the warnings are printed.

Fix by using remove_method to remove the default Struct implementation before Faraday's are declared.

I tested that the warnings are no longer printed on Ruby 2.6 and 2.7 (via Docker) and 3.0, 3.1, and 3.2 (on macOS via rbenv).

Fixes #1505