Advertisement
Guest User

Untitled

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