Extract a validation chain: the else-if version
The complete source of forAI_validation_chain_before.ek9, compiled by the EK9 compiler. Shown on forAI.html.
#!ek9 defines module site.forAI.validationbefore defines class User authenticated as Boolean: false User() -> authenticated as Boolean this.authenticated :=: authenticated isAuthenticated() as pure <- rtn as Boolean: authenticated default operator ? Request user as User: User() permissions as List of String: List() payload as String: String() Request() -> user as User permissions as List of String payload as String this.user: user this.permissions: permissions this.payload :=: payload hasUser() as pure <- rtn as Boolean: user? user() as pure <- rtn as User: user hasPermission() as pure -> permission as String <- rtn as Boolean: permission in permissions payload() as pure <- rtn as String: payload default operator ? Response message as String: String() Response() as pure -> message as String this.message :=: message operator $ as pure <- rtn as String: message default operator ? defines function errorResponse() as pure -> reason as String <- response as Response: Response(reason) doProcess() as pure -> request as Request <- response as Response: Response(`Processed ${request.payload()}`) validateAndProcess() -> request as Request <- response as Response? if not request? response: errorResponse("Null request") else if not request.hasUser() response: errorResponse("Missing user") else if not request.user().isAuthenticated() response: errorResponse("Not authenticated") else if not request.hasPermission("write") response: errorResponse("No permission") else if not request.payload()? response: errorResponse("Missing payload") else response: doProcess(request) defines program Validate() stdout <- Stdout() allowed <- Request(user: User(true), permissions: ["write"], payload: "data") refused <- Request(user: User(true), permissions: ["read"], payload: "data") stdout.println($validateAndProcess(allowed)) stdout.println($validateAndProcess(refused))
Download forAI_validation_chain_before.ek9
Output
Processed data No permission