-rw-r--r-- 1.4K 4 апр. 2024 · 0427246 · ~1 мин

Middleware для роутинга в Vapor 4 для обрезания слеша в url

vapor code snippets шпаргалки swift server side swift

Для веб-сайта или бэкенда — обычное дело, когда такие URL, как mySite.com/webpage и mySite.Com/webpage/, ведут на одну и ту же страницу. Для поисковых систем это разные адреса. Чтобы избежать дублирования контента, можно добавить простую middleware, которая будет удалять завершающий слеш и перенаправлять пользователя.

Вот пример кода для такого класса middleware в Vapor 4:

final class TrimSlashInPathMiddleware: Middleware {
    func respond(to request: Request, chainingTo next: Responder) -> EventLoopFuture<Response> {
        if request.url.path.count > 1, request.url.path.hasSuffix("/") {
            let newPath = String(request.url.path.trimmingSuffix(while: { $0 == "/" }))
            let response = request.redirect(to: newPath, redirectType: .permanent)
            return request.eventLoop.makeSucceededFuture(response)
        }
        return next.respond(to: request)
    }
}

Просто добавьте его в файл configure.swift:

import Vapor

public func configure(_ app: Application) throws {
    app.middleware.use(TrimSlashInPathMiddleware())

    app.http.server.configuration.port = 8081

    try routes(app)
}

Работает с Vapor 4.92.5.

[↵] открыть пост a-middleware-for-vapor4-to-trim-a-slash-in-url-path.md
-rw-r--r-- 703B 3 апр. 2024 · BC252B6 · ~1 мин

Модульбанк информер 1.3

macos приложения модульбанк open source

Модульбанк информер 1.3

Выпустил небольшое обновление для Модульбанк инфомера. Обновил иконку в статусбаре (тепер узнаваемая), и добавил чекбокс для скрытия счетов с нулевым балансом. Ну и немного рефакторинга.

Исходный код на GitHub: https://github.com/makoni/ModulbankInformer
Скачать можно тут: https://github.com/makoni/ModulbankInformer/releases

[↵] открыть пост modulbank-informer-1-3.md
-rw-r--r-- 2.8K 30 марта 2024 · E0344BE · ~2 мин

Как получить выделенный текст внутри TextEditor в SwiftUI на macOS

swiftui macos

Как получить выделенный текст внутри TextEditor в SwiftUI на macOS

TextEditor в SwiftUI все еще не имеет API для получения выделения пользователя. Но так как внутри используется NSTextView, мы можем подписаться на его уведомления.

Вот пример того, как получить подстроку из пользовательского выделения:

[↵] открыть пост how-to-get-selected-text-inside-of-texteditor-in-swiftui-on-macos.md
-rw-r--r-- 1.3K 29 марта 2024 · EA452FF · ~1 мин

Swift клиент для CouchDB 1.3.2

swift couchdb swift package vapor open source

Клиент Swift для CouchDB

Недавно вышло несколько новых версий моей библиотеки Swift CouchDB. Вот последние изменения:

  • dateDecodingStrategy и dateEncodingStrategy теперь можно передавать в качестве параметров для методов get, update и insert.
  • Добавлена проверка для обработки истекших cookie аутентификации.
  • Сравнение заголовка set-cookie в ответе теперь выполняется в нижнем регистре.
  • Представлены новые методы для использования API _find, позволяющие искать документы с помощью декларативного синтаксиса JSON-запросов.
  • Исправлена ошибка, из-за которой метод update не использовал параметр dateEncodingStrategy.

CouchDB Client на GitHub | Документация с примерами и руководствами.

[↵] открыть пост swift-couchdb-client-1-3-2.md
-rw-r--r-- 1.7K 10 окт. 2023 · d68e288 · ~1 мин

AppMetric 1.8

macos приложения appmetric appmetrica

AppMetric 1.8

Обновил AppMetric для macOS - клиент для сервиса AppMetrica от Яндекса. Предыдущая версия, увы, уже перестала работать, т.к. они изменили формат ответа.

Судя по дошедшей до меня информации, я использовал что-то незадокументированное из их ответа. И, судя по текущим ответам их API - это было количество крэшей. Увы, пришлось выпилить и заменить на количество устройств.

Решил, что раз уж руки дошли, надо осовременить. Переделал всё на SwiftUI, но пришлось сам попап обернуть в старый добрый NSPopover, т.к. MenuBarExtra из SwiftUI уж больно ограничен. Может быть, дойдут руки написать пост об этом. Заодно перевёл всё на Swift Concurrency и графику из SF Symbols. Правда, теперь всё это работает на macOS 13+, но, думаю, те, кому оно полезно, обновляют макось тоже. Ну и, естственно, наконец-то нативная работа на Apple Silicon.

Обновление сегодня прошло ревью и доступно для скачивания. Планирую в будущем добавить всё-таки графики по дням/неделям.

Загрузить

[↵] открыть пост appmetric-1-8.md
-rw-r--r-- 623B 10 окт. 2023 · d68e288 · ~1 мин

Модульбанк информер 1.2

macos приложения модульбанк open source

Модульбанк информер 1.2

Обнаружил досадный баг в Модульбанк Информере - если был счёт в турецких лирах, то JSON не парсился и данных не было совсем. Исправил в обновлении.

Исходный код на GitHub: https://github.com/makoni/ModulbankInformer
Скачать можно тут: https://github.com/makoni/ModulbankInformer/releases

[↵] открыть пост modulbank-informer-1-2.md
-rw-r--r-- 1.0K 29 марта 2023 · 88035de · ~1 мин

Модульбанк информер

macos приложения модульбанк open source

Модульбанк информер

Недавно увидел, что у Модульбанка, которым я пользуюсь, есть публичный API. Поскольку у них для macOS нет приложения, а приложение для iOS не работает на Apple Silicon (их ограничение в целях безопасности), я сделал небольшой информер, который показывает в статус баре список счетов и баланс.

Приложение macOS 13+, т.к. хотелось выжать из SwiftUI всё самое актуальное, заодно попрактиковаться.

Исходный код на GitHub: https://github.com/makoni/ModulbankInformer
Скачать можно тут: https://github.com/makoni/ModulbankInformer/releases

[↵] открыть пост modulbank-informer.md
makoni@arm1:~/blog$ cd ../page-5/ // ← предыдущая cd ./page-7/ // ещё посты →