rockspec_format = '3.0' package = 'tnt-date' version = 'scm-1' source = { url = 'git+https://github.com/tnt-skein/tnt-date.git', branch = 'main', } description = { summary = 'Даты: виды записи HTTP, письма и ISO, арифметика, вид по-русски', detailed = [[ Тонкий фасад поверх встроенного datetime, а не своя библиотека дат: встроенного хватает на разбор и сборку ISO 8601, на шаблоны strftime, на интервалы и на часовые пояса. Пакет закрывает то, чего встроенный не делает. Главное — перевод в UTC до сборки. format('%a, %d %b %Y %H:%M:%S GMT') подписывает GMT любое время, в том числе московское, и ошибка не видна ни глазом, ни проверкой: строка собралась, вид правильный, время чужое на величину пояса узла. Сверх того: HTTP-дата по RFC 9110 с двумя устаревшими видами, которые спецификация велит принимать; Date: письма по RFC 5322 со смещением и устаревшими обозначениями поясов; ISO 8601, отвергающий запись без пояса; метки времени в секундах и миллисекундах; арифметика с проверкой полей интервала, сравнение и начало суток; «3 минуты назад» и «вчера в 14:05» по-русски. Это стенные часы, а не сроки: перевод часов назад посреди ожидания продлил бы его на разницу. Длительности меряются монотонными часами из tnt-clock. Зависит от tnt-must (проверка аргументов), tnt-external (подмена часов в проверках) и tnt-str (согласование слова с числом). Покрытие строк и убитых мутантов — 100 %. ]], homepage = 'https://github.com/tnt-skein/tnt-date', issues_url = 'https://github.com/tnt-skein/tnt-date/issues', maintainer = 'tnt-skein', license = 'MIT', labels = { 'tarantool', 'date', 'datetime', 'http', 'rfc9110', 'rfc5322', 'iso8601' }, } dependencies = { 'lua >= 5.1', -- Проверка аргументов и бросок отказа настройки без места. 'tnt-must', -- Подмена часов в проверках: «три минуты назад» без неё не проверить. 'tnt-external', -- Только ради согласования слова с числом: правило русского языка -- («11 минут», а не «11 минута») написано в tnt-str и проверено там -- же, а второе его место разошлось бы с первым молча. 'tnt-str', } build = { type = 'builtin', modules = { ['tnt.date'] = 'tnt/date.lua', ['tnt.date.arith'] = 'tnt/date/arith.lua', ['tnt.date.explain'] = 'tnt/date/explain.lua', ['tnt.date.http'] = 'tnt/date/http.lua', ['tnt.date.human'] = 'tnt/date/human.lua', ['tnt.date.iso'] = 'tnt/date/iso.lua', ['tnt.date.mail'] = 'tnt/date/mail.lua', ['tnt.date.moment'] = 'tnt/date/moment.lua', }, }