Как создать гем для работы с API

Illustration of a construction site with a barrier, warning lights, a pile of dirt, and a shovel, suggesting an area under repair or development. Illustration of a construction site with a barrier, warning lights, a pile of dirt, and a shovel, suggesting an area under repair or development.

Я, возможно (а, возможно, и нет), открою тебе небольшой секрет: не все гемы доступны на http://rubygems.org. Многие гемы являются внутренними продуктами компании, решают одну специфичную для компании задачу и никогда не выходят в публичный репозиторий. Поэтому многие разработчики написали за свою карьеру пачку библиотек, которые так и не попали на суд open source сообщества ввиду своей узконаправленности и отсутствия ресурсов на дальнейшей развитие.

Такие внутренние гемы можно распространять при помощи своего gem сервера или используя сервис вроде gemfury.

Но иногда встречаются задачи, с которыми точно столкнутся другие разработчики. В таком случае имеет смысл или сразу начинать разработку в публичном репозитории, или открыть исходный код ближе к релизу версии 1.0. Самая популярная из таких задач: клиентская библиотека для работы с API какого-нибудь сервиса.

В этой серии статей я буду писать gem для работы с API сервиса GrooveHQ, сама библиотека будет доступна на GitHub и rubygems и, надеюсь, её будут использовать другие разработчики, использующие этот сервис. Мы на mkdev используем GrooveHQ, чтобы отвечать на анкеты тех, кто нуждается в бесплатной консультации опытного разрабочтика.

Признаюсь сразу: это будет мой первый open source гем. Его создание будет происходить на твоих глазах. Ты даже можешь сделать пулл реквесты к нему и улучшить мой код (на самом деле, я сильно на это надеюсь). Считай это такими дневниками разработчика (привет, любители видеоигр), только нацеленными на то, чтобы ты узнал много-много нового.

К концу серии ты научишься создавать гемы с нуля, я решу свою задачу (нам для mkdev очень нужна такая библиотека), а компании, использующие GrooveHQ и ruby, смогут использовать этот гем для своих целей. Погнали!