1) Ну, вы могли бы обернуть Hash[*CSV.open...]
в некоторый вспомогательный класс или модуль, скажем, DataLoader
, покрыть его тестами и затем вызвать как XYZ = DataLoader.do_stuff(filename)
в вашем инициализаторе.
Но есть один «недостаток» при таком подходе: класс будет действительно «тупым» (без добавления пользовательских логи c вообще, просто обернув пару методов из stdlib) и будет использоваться в только инициализатор - так будет называться только один раз . Я сомневаюсь, что все эти дополнительные шаблоны стоят того.
Итак, я бы, наверное, подумал о чем-то попроще:
2) Просто проигнорируйте (отключите) этого конкретного полицейского для этого конкретного случая. Соглашения хороши, а rubocop
просто великолепны, но иногда нарушение правил приводит к более чистому коду, чем слепое следование им. Например, я иногда добавляю тесты для деструктивных рейковых задач - в этом случае мне тоже приходится нарушать это соглашение, и я делаю это, когда это необходимо, потому что это все же лучше, чем искусственные обходные пути ради соглашений ... Нужно протестировать второстепенный кусок логики инициализатора c? Просто сделай это:)