Ядром моего приложения является механизм, который принимает спецификацию проблемы, кодируется как структура данных и генерирует необходимые результаты. Существует два способа создания структуры данных spec: путем анализа скрипта или через пользовательский интерфейс Rails. В случае Rails структура данных - это объекты модели в БД, в случае сценария - это экземпляр класса модели в памяти. Движок находится в отдельном геме, так что процесс, управляемый сценариями, может запускаться автономно без необходимости использования Rails.
Мой вопрос заключается в том, как обеспечить, чтобы две структуры данных, модель БД Rails и модель в памяти, выполняли один и тот же контракт. Если бы это была Java, я бы написал интерфейс, который реализовали бы оба класса моделей, но в Ruby я полагаюсь на типизацию утиной утилитой. У меня будут тесты для каждой модели, но было бы более СУХОЕ иметь только один набор тестов. Однако я не понимаю, как разделить тесты между проектом gem и проектом rails.
Основная проблема: предположим, что я добавляю ответственность к модели Rails, как я могу гарантировать, что соответствующая ответственность будет добавлена к модели памяти скриптов, или наоборот?