Packages

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

com.github.vickumar1981.svalidate.ValidationResult

Holds the return value from a validation

com.github.vickumar1981.svalidate.ValidationDsl

Provides DSL syntax for validations

com.github.vickumar1981.svalidate.ValidatableResult

Interface to implement for defining a validation

Linear Supertypes
AnyRef, Any
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. svalidate
  2. AnyRef
  3. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. All

Type Members

  1. 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

  2. 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

  3. 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

  4. 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

  5. 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

  6. trait ValidationDsl[T] extends AnyRef
  7. 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

  8. 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

  9. 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

  1. 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

  2. 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

  3. 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.")
  4. 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.

Inherited from AnyRef

Inherited from Any

Ungrouped