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

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

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

Бэк: Добавить resend в Logux Rails

Для новичков, задача на неделю

У Logux есть WebSocket-сервер, который посылает новые сообщения в Rails-приложение. Сейчас новое сообщение проходит 2 стадии — проверку прав доступа и сохранение данных в БД. Нужно добавить третий шаг — определение того, в какие каналы нужно переслать сообщение.

Обработка сообщений от Logux идет в Logux::ActionController:

module Actions
  class Comment < Logux::ActionController
    def add
      respond :processed
    end
  end
end

Нужно добавить метод resend, который будет принимать хэш:

    def add
      resend channel: 'users'
      respond :processed
    end

Этот метод будет писать в ответ Logux-серверу:

["resend", @meta.id, { "channel": "users" }]

Польза: получить open source портфолио в Ruby, научиться работать с Logux.

  1. Форкнуть logux-rack.
  2. Сделать новую ветку.
  3. Добавить в action_controller.rb метод resend, который будет сохранять переданные данные о том, куда надо переслать событие.
  4. Исправить action_caller.rb и action.rb, чтобы они писали в ответ ["resend",…],["processed",…].
  5. Задача максимум — переделать архитектуру так, чтобы ["resend",…] писался в поток, как только будет вызван resend в контроллере. Так можно будет начать пересылку событий еще до сохранения сообщения в базе.
  6. Добавить тесты.