feels weird to have so much going on in `initialize` could you do this stuff with `#method_missing`?