Нам нужны твои мозги

Хотите расти как разработчик и найти крутую работу? Не протирайте штаны — займитесь Open Source проектами. Так легче всего попасть в лучшие команды разработчиков и положить себе в резюме настоящий проект, вместо нелепых «примеров кода». Но найти подходящий проект для участия сложно. Начинаются лень и отговорки, а за ними — отсутствие профессионального роста, критики по-настоящему крутых программистов, уныние и застой.

На Cult of Martians мы собираем интересные задачи для современных веб-программистов. Можно выбрать подходящую по сложности, продолжительности и специализации. Задачи не выдуманы «из воздуха» — каждая решает насущную проблему, и решить ее можно через создание нового Open Source проекта или улучшение существующего. Решайте задачи, прокачивайтесь, присылайте решение на оценку. Лучших могут пригласить к себе на работу компании, программистам которых понравится ваше решение.

Бэк: Поддержка ассоциаций belongs_to в Ruby gem Clowne

Для новичков, задача на несколько дней

Clowne — это Ruby gem для гибкого клонирования моделей, поддерживающий несколько ORM адаптеров.

На данный момент ActiveRecord адаптер реализует клонирование следующих ассоциаций: has_one, has_many, has_and_belongs_to_many. В первой версии это было сделано специально, чтобы избежать возможных избыточных клонирований и неверного результата в конечном итоге.

Но бывают ситуации, когда к клонируемой модели добавляют связь belongs_to, и для ее поддержки необходимо переделывать весь стек клонера, что требует много изменений. Проще добавить клонирование лишь этой одной новой связи.

Для покрытия подобного рода кейсов нужно добавить в gem поддерку belongs_to связей (только для ActiveRecord адаптера).

Польза: прокачаться в Ruby, получить опыт работы со сложными Ruby библиотеками.

Советы по реализации

Ключевой точкой изменений будет класс поддерживаемых ассоциаций ActiveRecord. Сама же реализация будет очень похожа на класс HasOne.

Подробную информацию о том, как работает Clowne, смотрите в документации.

Важно

  1. Необходимо добавить интеграционный тест (лучше — отдельным файлом), проверяющий поддержку клонирования ассоциаций belongs_to.
  2. Добавить в интеграционный тест из п. 1 случай, когда belongs_to приводит к избыточному клонированию (подсказка: обратить вниание на модели Topic, Post, Image).
  3. Добавить в документацию примечание об опасности использования belongs_to. Можно со ссылкой на интеграционный тест.

Инструкции по выполнению

  1. Сделать форк Clowne.
  2. Реализовать необходимый функционал и тесты.
  3. Отправить pull request.