{ value: "Это *курсив* и это тоже _курсив_" },{ value: "Это **жирный** и это тоже __жирный__" },{ value: "Это `важный` текст" },{ value: "Это [пример ссылки](https://ritfest.ru//)" },
func FormatJSON(content string, template *template.Template) string { contentBlocks := []Decorator{} var buffer bytes.Buffer for i, block := range contentBlocks { block.render(&buffer, template, i) } return buffer.String()}
Сайт life.ru (клиент, CoffeeScript)
window.formatJSON = (content) -> result = '' try contentBlocks = JSON.parse content return result if not contentBlocks for block, i in contentBlocks try result += BLOCK_TEMPLATES[block.type]?(block) || '' result
Мобильные приложения (этап I)
Мобильные приложения (этап II)
RSS-ленты (Ruby)
items.select {|el| %w(TEXT).include?(el[:type]) }.each do |item| element = nil case item[:type] when 'TEXT' element = export(item[:value]) end result << element if elementend
📆 Нормальный план
🤔 Продумать формат контента
📄 Написать документацию по формату
🛠 Реализовать редактор
🔗 Встроить редактор в админку
👴 Мигрировать базу данных
👨🎨 Вывести новый контент в приложения
🆙 Выпустить новый редактор в продакшен
Post-release Beta
🆙 Схема миграции
➕ Добавляем новый редактор отдельной фичей
🔁 Два редактора работают одновременно
🛠 Новый редактор дорабатывается
📉 Процент использования старого редактора уменьшается
✂ Старый редактор выпиливается
Старый контент превращается в новый
Поддержка старого контента убирается
Обратно несовместимые изменения контента ⚠
MAJOR.MINOR.PATCH
Семантическое версионирование (SemVer)
МАЖОРНАЯ, когда сделаны обратно несовместимые изменения API
МИНОРНАЯ, когда вы добавляете новую функциональность, не нарушая обратной
совместимости
ПАТЧ, когда вы делаете обратно совместимые исправления
MODEL-REVISION-ADDITION
SchemaVer
МОДЕЛЬ, когда вы вносите критическое изменение схемы, которое предотвратит
взаимодействие с любыми историческими данными
РЕВИЗИЯ, когда вы вносите изменение схемы, которое может помешать взаимодействию с
некоторыми историческими данными
ДОПОЛНЕНИЕ при внесении изменений в схему, совместимых со всеми историческими
данными