Перейти к документации
Ruby

Журнал изменений

Все выпуски гема, сначала новые.

0.0.1

Первый выпуск. Он охватывает весь TypeScript SDK в том виде, в каком тот был на момент выпуска, то есть 0.0.8 плюс изменения, накопленные после него: 430 методов в 41 пространстве имён, каждый под именем из TypeScript в snake_case, и каждый из них отправляет побайтно тот же запрос, что и его двойник на TypeScript.

  • У OpenEmail::Client есть метод чтения для каждого пространства имён, от emails, threads и templates до provider_imports, dns_connections и account. listAll становится list_all, getActive становится get_active, а tempMail становится temp_mail.
  • Тело запроса передаётся именованными аргументами или одним Hash, а его ключи сохраняют имена API в camelCase. Ответ возвращается как Hash с ключами типа Symbol.
  • У каждого постраничного ресурса есть list, который возвращает одну OpenEmail::Page, list_all, который возвращает все элементы как Array, и iterate, который передаёт каждый элемент в блок или возвращает Enumerator, запрашивающий следующую страницу, только когда до неё доходит. PeoplePage, TempMessagesPage, AddressBookPage, AddressBook, BatchResult и TemplateSends несут ответы, в которых есть что-то кроме списка.
  • Отказ API выбрасывает OpenEmail::ApiError или его подкласс для типа ошибки с status, type, code, param, doc_url, request_id, retry_after_seconds, fields и body и с предикатами вроде validation? и step_up_required?. Полное отсутствие ответа выбрасывает OpenEmail::NetworkError с timeout?, если истёк срок ожидания. Ошибка в самом вызове выбрасывает ArgumentError ещё до отправки.
  • OpenEmail.create_client собирает клиент из OPENEMAIL_API_KEY, OPENEMAIL_ACCESS_TOKEN и OPENEMAIL_BASE_URL, а OpenEmail.init, OpenEmail.client и OpenEmail.reset_client управляют одним общим клиентом, через который работают OpenEmail.emails и все остальные пространства имён. OpenEmail.create_temp_mail открывает одноразовые ящики без учётных данных.
  • access_token: принимает токен доступа OAuth или любой объект, который отвечает на call и возвращает токен, и такой объект вызывается перед каждым запросом. Каждый метод принимает api_key:, чтобы действовать с другим ключом в одном вызове, а методы temp_mail принимают inbox_token:.
  • OpenEmail.verify_webhook_signature проверяет доставку за постоянное время, отклоняет доставку старше пяти минут и возвращает разобранное событие. Подпись читается из Hash с заголовком в любом регистре, из окружения Rack или из request.headers в Rails.
  • OpenEmail.to_base64, api_key?, access_token?, sealed?, resolve_language, language_by_code и rtl_language? являются вспомогательными функциями TypeScript SDK, а каждый набор значений, который экспортирует корень его пакета, является замороженным Hash в OpenEmail.
  • У него нет зависимостей во время выполнения. Запросы идут через Net::HTTP с пулом постоянных соединений, который один клиент разделяет между потоками и пересоздаёт после форка, а timeout: ограничивает всю попытку целиком.
  • Чтения, отправки и каждая запись, которую безопасно повторять, повторяются с нарастающей задержкой при 408, 500, 502, 503 и 504, а при 429 только тогда, когда его Retry-After не больше минуты. Каждая отправка несёт ключ идемпотентности, который переиспользуют её повторы.
  • Клиент отказывается отправлять учётные данные по обычному http: куда-либо, кроме этой машины, отклоняет base_url на 0.0.0.0, отклоняет заголовок, который разделил бы запрос, и никогда не позволяет raw.request выйти за пределы источника базового URL.