FluidValidator 0.1.6

FluidValidator 0.1.6

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布上次发布2017年3月
SwiftSwift版本3.0
SPM支持SPM

FrogRain维护。



  • FrogRain

FluidValidator

描述

FluidValidator旨在封装验证逻辑。API设计时参考了FluentValidation (https://github.com/JeremySkinner/FluentValidation) 和Rails Validation。目前支持简单对象、复杂对象(对象图)、可枚举对象的验证。支持本地化错误消息。您可以轻松地覆盖基本行为和/或构建自己的可重用验证规则。

使用方法

要运行示例项目,请克隆仓库,然后首先从Example目录运行pod install命令。

要求

没有特殊要求

安装

您可以通过CocoaPods获取FluidValidator。要安装它,只需将以下行添加到您的Podfile中

pod "FluidValidator"

使用方法

简单对象

给定此对象

import Foundation

class Home {
    var isLocked:Bool?
    var number:Int?
    var ownerName:String?
}

创建一个扩展AbstractValidator的自定义验证器,指定目标类Example

import Foundation
import FluidValidator

class HomeValidator : AbstractValidator<Home> {
    override init() {
        super.init()

        self.addValidation(withName: "number") { (context) -> (Any?) in
            context.number
        }.addRule(GreaterThan(limit: 3, includeLimit: false))

        self.addValidation(withName: "ownerName") { (context) -> (Any?) in
            context.ownerName
        }.addRule(BeNotEmpty())

        self.addValidation(withName: "isLocked") { (context) -> (Any?) in
            context.isLocked
        }.addRule(BeTrue())
    }
}

嵌套对象

给定一个更复杂的对象

import Foundation

class Home {
    var isLocked:Bool?
    var number:Int?
    var ownerName:String?
    var garage: Garage?
}
class Garage {
  var isOpen: Bool?
  var maxCars: Int?
}

相应的验证器将按此方式实现

import Foundation
import FluidValidator

class GarageValidator: AbstractValidator<Garage> {
    override init() {
        super.init()

        self.addValidation(withName: "isOpen") { (context) -> Any? in
            context.isOpen
        }.addRule(BeTrue())

        self.addValidation(withName: "maxCars") { (context) -> Any? in
            context.maxCars
        }.addRule(LessThan(limit: 2, includeLimit: true))
    }
}

class HomeValidator : AbstractValidator<Home> {
    override init() {
        super.init()

        ...
        self.addValidation(withName: "garage") { (context) -> (Any?) in
            context.garage
        }.addRule(GarageValidator())
    }
}

运行验证并获取结果

无论您的验证器多么复杂,您都可以运行验证过程并提取错误消息(如果有的话),如下所示

    let garage = Garage()
    garage.isOpen = false

    let home = Home()
    home.isLocked = true
    home.ownerName = "John Doe"
    home.number = 2
    home.garage = garage

    let homeValidator = HomeValidator()
    let result = homeValidator.validate(home)
    let failMessage = homeValidator.allErrors()

获取失败消息

failMessage.failMessageForPath("number")?.errors.first?.compact
failMessage.failMessageForPath("number")?.errors.first?.extended

failMessage.failMessageForPath("garage")?.errors.first?.compact
failMessage.failMessageForPath("garage.isOpen")?.errors.first?.extended

错误数组包含ErrorMessage对象,后者又包含简短和扩展的错误消息。

查看单元测试类以了解其他功能

作者

青蛙雨,[email protected]

许可证

FluidValidator可在MIT许可证下使用。有关更多信息,请参阅LICENSE文件。