Advertisement
Guest User

Untitled

a guest
Feb 25th, 2017
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.43 KB | None | 0 0
  1. package com.example.rxjava
  2.  
  3. import org.funktionale.either.Either
  4. import rx.Observable
  5.  
  6. data class ValidationError(val errorMsg: String)
  7.  
  8. class Requirement(val msg: String, val isSatisfiable: (String) -> Boolean) {
  9.  
  10. fun check(password: String): ValidationError? {
  11. return if (isSatisfiable(password)) null
  12. else ValidationError(msg)
  13. }
  14.  
  15. }
  16.  
  17. class PasswordValidator(val requirements: List<Requirement>) {
  18.  
  19. constructor(vararg requirements: Requirement) : this(requirements.toList())
  20.  
  21. fun validate(password: String): List<ValidationError> {
  22. return requirements
  23. .map { requirement -> requirement.check(password) }
  24. .filterNotNull()
  25. }
  26.  
  27. }
  28.  
  29. fun main(args: Array<String>) {
  30.  
  31. val passwordValidator = PasswordValidator(
  32. Requirement("At least 4 characters") { it.length > 3 },
  33. Requirement("At least one character in lower case") { it.any(Char::isLowerCase) }
  34. )
  35.  
  36. Observable.just("12Q")
  37. .map { pswd ->
  38. val errors = passwordValidator.validate(pswd)
  39.  
  40. if (errors.isEmpty()) Either.right(pswd)
  41. else Either.left(errors)
  42. }
  43. .subscribe({ either -> either.fold(
  44. { errors -> println("Weak password: $errors") },
  45. { println("Strong password: $it") })
  46. },
  47. { it.printStackTrace() })
  48.  
  49.  
  50. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement