Why is `target_dir` an arg passed here and then passed around to other methods rather than being an `initialize` arg that is then available as an instance variable to any method that needs it?  The latter approach feels much cleaner to me.