package svalidate
Provides classes for doing simple validations in Java and Scala.
Overview
The validation wrapper is provided as a simple wrapper around a list
Results of a validation are stored in a com.github.vickumar1981.svalidate.ValidationResult A com.github.vickumar1981.svalidate.ValidationResult can be chained to make rules using the syntax provided from com.github.vickumar1981.svalidate.ValidationDsl.
A validator for a class is defined by implicitly implementing a com.github.vickumar1981.svalidate.ValidatableResult
Importing com.github.vickumar1981.svalidate.util.ValidationSyntax._ will add validate and validateWith methods to a class if a validator for that class is implicitly defined.
Analogous classes for Java can be found in the com.github.vickumar1981.svalidate.util package
Class | Description |
---|---|
Holds the return value from a validation | |
Provides DSL syntax for validations | |
Interface to implement for defining a validation |
- Alphabetic
- By Inheritance
- svalidate
- AnyRef
- Any
- Hide All
- Show All
- Public
- All
Type Members
-
trait
Validatable[-A] extends ValidatableResult[A, String]
A Validatable[A] extends ValidatableResult[A][String] and using it defaults the ValidationDsl to use a String return type.
A Validatable[A] extends ValidatableResult[A][String] and using it defaults the ValidationDsl to use a String return type. This can be changed by implementing ValidatableResult[A][B] directly where B is return type instead.
object TestValidation { case class Address(street: String, city: String, state: String, zipCode: String) implicit object AddressValidator extends Validatable[Address] { override def validate(value: Address): Validation = { (value.street.nonEmpty orElse "Street addr. is required") ++ (value.city.nonEmpty orElse "City is required") ++ (value.zipCode.matches("\\d{5}") orElse "Zip code must be 5 digits") ++ (value.state.matches("[A-Z]{2}") orElse "State abbr must be 2 letters") } } }
- A
the class to validate
-
trait
ValidatableResult[-A, B] extends ValidationDsl[B]
A generic interface that defines which class to validate and what type of validation to return.
A generic interface that defines which class to validate and what type of validation to return. Creating an implicit that extends this class creates a validator for that class
object TestValidation { case class Password(password: String) case class CustomError(errorCode: String, errorMessage: String) implicit object PasswordValidator extends ValidatableResult[Password, CustomError] { override def validate(value: Password): Validation = (value.nonEmpty orElse CustomError("password.empty", "Password cannot be empty")) } }
- A
the class to validate
- B
the type of ValidationResult to use with ValidationDsl
-
trait
ValidatableWith[-A, B] extends ValidatableWithResult[A, B, String]
A ValidatableWith[A][B] extends ValidatableWithResult[A][B][String] and using it defaults the DSL to use a String return type.
A ValidatableWith[A][B] extends ValidatableWithResult[A][B][String] and using it defaults the DSL to use a String return type. This can be changed by implementing ValidatableWithResult[A][B] directly where B is return type instead.
object TestValidation { case class Contacts(facebook: Option[List[String]] = None, twitter: Option[List[String]] = None) case class ContactSettings(hasFacebookContacts: Option[Boolean] = Some(true), hasTwitterContacts: Option[Boolean] = Some(true)) implicit object ContactInfoValidator extends ValidatableWith[Contacts, ContactSettings] { override def validateWith(value: Contacts, contactSettings: ContactSettings): Validation = Validation.success } }
- A
the class to validate
-
trait
ValidatableWithResult[-A, B, C] extends ValidationDsl[C]
A generic interface that defines which class to use validateWith and what type of validation to return
A generic interface that defines which class to use validateWith and what type of validation to return
- A
the class to validate
- B
the class to pass into validateWith
- C
the type of ValidationResult to use with ValidationDsl
-
type
Validation = ValidationResult[String]
Validation is the same as ValidationResult[String].
Validation is the same as ValidationResult[String]. Allows the default return type to be a list of strings
- trait ValidationDsl[T] extends AnyRef
-
case class
ValidationFailure[+T](errorList: Seq[T]) extends ValidationResult[T] with Product with Serializable
A case class that represents a validation failure of type T.
A case class that represents a validation failure of type T. Extends a ValidationResult[T] and implements errors with the list of errors passed in
A ValidationFailure[T] can be created by using the fail mathod in the Validation object
val failed: ValidationFailure[String] = Validation.fail("validation failed.")
- T
the type of ValidationResult
-
sealed
trait
ValidationResult[+T] extends AnyRef
A generic interface that holds a validation result of type T, interoperable with Seq[T]
A generic interface that holds a validation result of type T, interoperable with Seq[T]
- T
the type of ValidationResult
-
case class
ValidationSuccess[+T]() extends ValidationResult[T] with Product with Serializable
A case class that represents a validation success of type T.
A case class that represents a validation success of type T. Extends a ValidationResult[T] and implements the errors function with an empty list
A ValidationSuccess[T] can be created by using the success method in the Validation object
val success: ValidationSuccess[Int] = Validation.success[Int]
- T
the type of ValidationResult
Value Members
-
implicit
def
seqToValidation[T](seq: Seq[T]): ValidationResult[T]
Implicit conversion from Seq[T] to ValidationResult[T].
Implicit conversion from Seq[T] to ValidationResult[T]. Allows Seq[T] to be substituted for ValidationResult[T]
- T
the type of ValidationResult
- seq
the input Seq
- returns
a ValidationFailure containing errors from the input Seq
-
implicit
def
validationToSeq[T](v: ValidationResult[T]): Seq[T]
Implicit conversion from ValidationResult[T] to Seq[T].
Implicit conversion from ValidationResult[T] to Seq[T]. Allows ValidationResult[T] to be substituted for Seq[T]
- T
the type of ValidatableResult
- v
the input ValidationResult[T]
- returns
a Seq[T] returned the errors of the input validation
-
object
Validation
Companion object containing factory methods to create a ValidationSuccess[T] or a ValidationFailure[T]
Companion object containing factory methods to create a ValidationSuccess[T] or a ValidationFailure[T]
val validationSuccess = Validation.success[Int] val validationFailure = Validation.fail("The validation failed.")
-
object
ValidationSyntax
Importing ValidationSyntax extends validate and validateWith methods to a class A if an implicit ValidatableResult[A][_] or ValidatableWithResult[A][_][_] is defined for that class.
Importing ValidationSyntax extends validate and validateWith methods to a class A if an implicit ValidatableResult[A][_] or ValidatableWithResult[A][_][_] is defined for that class.
Import this object alongside the validator to add methods to a class
import test.example.Address object TestValidation { import test.example.ModelValidations.AddressValidator import com.github.vickumar1981.svalidate.ValidationSyntax._ def main(args: Array[String]): Unit = { val addr = Address("", "", "", "") val errors = addr.validate() // Calls AddressValidator.validate() // Depending on the validator, a class can have // .validate(), .validate(b: B), or both functions extended to it } }
Because this object contains implicits, it is suggested to limit the scope of the import.