`attr_writer` is the idiomatic way of writing setters. Can you give me a concrete example of how using it would make your code harder to test?

P.S. talk about premature optimisation. Have you considered the costs of parsing the manifest twice? Are they tangible (i.e. do they affect anything we care about in a significant way?)

Have you considered the human costs of making a custom getter / setter and caching the variable? In terms of complexity, lines of code, making people jump around to codebase to understand what's going on?