Respect Kernel#require
's duck-type
#396
Closed
+27
−1
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Kernel#require
turns its argument into a path by callingto_path
if it responds to it, and then into a String (the argument or the return value ofto_path
) by using implicit conversion (to_str
).We can see this in the spec: https://github.com/ruby/spec/blob/97364ff1f90e63ba0159216f9563318a0d97dceb/core/kernel/shared/require.rb#L51
Or in MRI, in
rb_get_path
, called fromrequire_internal
:https://github.com/ruby/ruby/blob/5e3a32021849718ae483eaaa9fbf155f91828039/file.c#L219-L221
I used a fork because I noticed none of the tests were loading the core ext (even the test below this one supposedly testing
load
, I'll follow-up on that) and wanted to avoid leaks for other tests.