southbridgeio / tdlib-ruby

Ruby bindings and client for TDLib
MIT License
94 stars 45 forks source link

Typeization #14

Closed yurijmi closed 5 years ago

yurijmi commented 6 years ago

Добавил типизацию, этого очень не хватало.

Постарался максимально понятно все реализовать, самая главная фишка - нормальная документация. Легче использовать чем доки самого TDLib.

Рекомендую перед мерджем ознакомится, ничего сложного нет. Тестов нет, не умею писать тесты (да и вообще профи себя не считаю, если есть тупые ошибки - простите, старался изо всех сил).

Еще рекомендую пройтись самому по код базе, там все генерируется из схемы TDLib, в некоторых местах стоит добавить ссылки и так далее.

И третья рекомендация - так как схема идет из самой библиотеки - нужно как то енфорсить версию и стоит поставить версию гема равной версии библиотеки для удобства

vladislav-yashin commented 6 years ago

Вот это да. Я сам хотел написать генератор, но времени не хватало. Большое спасибо и респект за такую работу. Я посмотрю и тесты поправлю в ближайшее время.

yurijmi commented 6 years ago

В парсере конечно черт ногу сломит с первого взгляда, но в самых таких непонятных местах есть комментарии. Стоило бы прям вылизать, чтобы он не просто проверял на optional, но и выдирал такие вещи как валидации и исправлял комментарии - но это слишком много работы для того, что и так работает.

Главное, что в случаи обновления TDLib эту штуку можно запустить и потом diffнуть с HEAD. А дальше вручную править все те изменения, что товарищи из телеграма навертели.

Мне очень приятно, что оценил. Я довольно стеснительно отношусь к своему труду. Особенно после того как один мудак отклонил мой пулл и закомитил тоже самое, написав "своими" словами. Осадочек остался.

yurijmi commented 6 years ago

Будут вопросы - я на связи)

Еще стоит при выкатывании гема с изменениями сделать deprecation warning насчет простых broadcast и так далее. Скорее всего есть обратная совместимость, ибо dry types позволяет работать с классами как с хешем - но это лишние циклы и кто его знает. На примере старом работало

yurijmi commented 6 years ago

Поправил косяки в документации и методах

yurijmi commented 6 years ago

Так, исправил Client#on он там требовал либо строку либо тип TD::Types::Update, поставил вместо него просто проверку на тип TD::Types.

Исправил тесты, прогонял на своей машине - все зеленое. Травис кстати выдает везде TimeoutError почему то. Если этот билд не пройдет - косяк в трависе или его настройке.

Кстати то что он каждый раз по новой собирает tdlibjson это не есть хорошо, пол часа ждать интеграционные тесты не айс. Может есть другое решение?

vladislav-yashin commented 6 years ago

В travis падает, потому что используются зашифрованные переменные, а они в пулл-реквестах не от мейнтейнеров недоступны.

Кстати то что он каждый раз по новой собирает tdlibjson это не есть хорошо, пол часа ждать интеграционные тесты не айс. Может есть другое решение?

Там используется ccache, не всегда билды долгие.

yurijmi commented 6 years ago

Ха, значит пол-часа только для пулл-риквестов. Каждый билд из моих коммитов - 30 минут сборка

vladislav-yashin commented 5 years ago

Спасибо! Мержу в develop, после подготовлю релиз

yurijmi commented 5 years ago

Круто! Долго вы конечно 😀 Надеюсь будет польза от моих наработок