factory_bot
factory_bot copied to clipboard
singleton_method_added is being forwarded by FactoryBot::Evaluator
Due to https://github.com/thoughtbot/factory_bot/blob/b223c275191985f776ff294825660fce98b3c0cc/lib/factory_bot/evaluator.rb#L10
methods like singleton_method_added
(coming from BasicObject) are undefined.
And then https://github.com/thoughtbot/factory_bot/blob/b223c275191985f776ff294825660fce98b3c0cc/lib/factory_bot/evaluator.rb#L81 will actually call singleton_method_added
, and since the method is not there, will end up in method_missing
:
https://github.com/thoughtbot/factory_bot/blob/b223c275191985f776ff294825660fce98b3c0cc/lib/factory_bot/evaluator.rb#L47-L51
which will forward it to SyntaxRunner.new
.
singleton_method_added
does nothing by default so that's probably why this was never noticed.
It's not necessarily a problem, but it also seems surprising.
Maybe FactoryBot::Evaluator should inherit from BasicObject, rather than undefine many methods, some of them which might have quite subtle effects like this?
I noticed this while investigating https://github.com/oracle/truffleruby/issues/2258.
Thanks! Definitely worth exploring if we can inherit from BasicObject. I went down that path once with the DefinitionProxy (https://github.com/thoughtbot/factory_bot/pull/1144) and ended up turning back because it was going to break other things. Not sure what the situation is with the Evaluator.