@davetron5000 I am also fond of class level methods on collaborators so the client class does *not* need to now if the collaborator object is a class and how to initialize it.
The less they know about each other the easier it gets to change _just_ one of them
@davetron5000 here the injected dependencies may be classes or modules, this orchestator class does not now (or need to).
And I can use a placeholder for reporter until it is implemented.
@oinak I worked in a large Java Spring app for several years. I liked a lot about this style, but I definitely did not like the flexibility it allowed and having to chase down across several files what code was actually running in production. It's a tradeoff and for me, flexibility is usually bad and not something to strive for. I think the “call .new, then call a named method" is a decent seam and I'm fine with classes being coupled in that way. It makes debugging a lot easier IME.
@davetron5000 a lot of our preferences are based on whatever did hurt to each one of us. I have found RSpec mocking abuse and high class coupling a lot in my job life, and used Minitest and enthusiastic DI in my free time and fun pet projects, and that most probably shaped my biases.
Thanks for sharing the context of your choices, I am sure I will grasp BrutRB better now. 🙇🏼