dynamicIf

Enforces that the code constructing the inner route is run for every request if the condition is true.

Signature

def dynamicIf(enabled: Boolean): ByNameDirective0 

Description

The effect of dynamicIf(true) is the same as for dynamic. The effect of dynamicIf(false) is the same as just the nested block.

dynamicIf is a special directive because, in fact, it doesn’t implement Directive at all. That means you cannot use it in combination with the usual directive operators.

Use dynamic to run the inner route constructor dynamically unconditionally.

Example

def countDynamically(dyn: Boolean) = {
  var value = 0
  dynamicIf(dyn) {
    value += 1 /// executed for each request
    complete(s"Result is now $value") // route executed in future
  }
}

val route =
  path("dynamic")(countDynamically(true)) ~
  path("static")(countDynamically(false))

Get("/dynamic") ~> route ~> check {
  responseAs[String] === "Result is now 1"
}
Get("/dynamic") ~> route ~> check {
  responseAs[String] === "Result is now 2"
}
Get("/dynamic") ~> route ~> check {
  responseAs[String] === "Result is now 3"
}

Get("/static") ~> route ~> check {
  responseAs[String] === "Result is now 1"
}
Get("/static") ~> route ~> check {
  responseAs[String] === "Result is now 1"
}
Get("/static") ~> route ~> check {
  responseAs[String] === "Result is now 1"
}