HttpMethodOverrider
object HttpMethodOverrider
- Source:
- HttpMethodOverrider.scala
Type members
Classlikes
final case class FormOverrideStrategy[F[_], G[_]](fieldName: String, naturalTransformation: FunctionK[G, F]) extends OverrideStrategy[F, G]
- Source:
- HttpMethodOverrider.scala
final case class HeaderOverrideStrategy[F[_], G[_]](headerName: CIString) extends OverrideStrategy[F, G]
- Source:
- HttpMethodOverrider.scala
class HttpMethodOverriderConfig[F[_], G[_]](val overrideStrategy: OverrideStrategy[F, G], val overridableMethods: Set[Method])
HttpMethodOverrider middleware config options.
HttpMethodOverrider middleware config options.
- Companion:
- object
- Source:
- HttpMethodOverrider.scala
final case class QueryOverrideStrategy[F[_], G[_]](paramName: String) extends OverrideStrategy[F, G]
- Source:
- HttpMethodOverrider.scala
Value members
Concrete methods
valupdatedVaryHeader:Raw=`resp₂`.headers.get(varyHeaderName).map[Raw](((_$17:NonEmptyList[Raw])=>_$17.head)).map[Raw](((h:Header.Raw)=>Header.Raw.apply(h.name,_root_.scala.StringContext.apply("",",","").s(h.value,headerName.toString)))).getOrElse[Raw](Header.Raw.apply(varyHeaderName,headerName.toString))
`resp₂`.withHeaders(`resp₂`.headers.put(rawToRaw(updatedVaryHeader)))
case_=>
`resp₂`
}
}
defupdateRequestWithMethod(`req₂`:Request[G],`om₂`:Method):Request[G]={
valattrs:Vault=`req₂`.attributes.insert[Method](overriddenMethodAttrKey,`req₂`.method)
`req₂`.withAttributes(attrs).withMethod(`om₂`)
}
defgetUnsafeOverrideMethod(`req₃`:Request[G]):F[Option[String]]=config.overrideStrategymatch{
caseHeaderOverrideStrategy(headerName)=>
F.pure[Option[String]](`req₃`.headers.get(`headerName₂`).map[String](((_$18:NonEmptyList[Raw])=>_$18.head.value)))
caseQueryOverrideStrategy(parameter)=>
F.pure[Option[String]](`req₃`.params.get(parameter))
caseFormOverrideStrategy(field,f)=>
toFunctorOps[F,Option[Map[String,Chain[String]]]](f.apply[Option[Map[String,Chain[String]]]](toFunctorOps[G,Either[DecodeFailure,UrlForm]](UrlForm.entityDecoder[G](F=S,UrlForm.entityDecoder$default$2[G]).decode(`req₃`,strict=true).value)(S).map[Option[Map[String,Chain[String]]]](((_$19:Either[DecodeFailure,UrlForm])=>_$19.toOption.map[Map[String,Chain[String]]](((_$20:UrlForm)=>_$20.values))))))(F).map[Option[String]](((formFields:Option[Map[String,Chain[String]]])=>formFields.flatMap[String](((_$21:Map[String,Chain[String]])=>_$21.get(field).flatMap[String](((_$22:Chain[String])=>_$22.uncons.map[String](((_$23:Tuple2[String,Chain[String]])=>_$23._1))))))))
}
defprocessRequest(`req₄`:Request[G]):F[Response[G]]=toFlatMapOps[F,Option[String]](getUnsafeOverrideMethod(`req₄`))(F).flatMap[Response[G]](((x$1:Option[String])=>x$1match{
caseSome(m:String)=>
parseMethod.andThen[F[Response[G]]](((_$24:ParseResult[Method])=>processRequestWithMethod(`req₄`,_$24))).apply(`m₂`)
caseNone=>
http.apply(`req₄`)
}))
Kleisli.apply[F,Request[G],Response[G]](((`req₅`:Request[G])=>{
valisOverridden:Boolean=config.overridableMethods.contains(`req₅`.method)
if(isOverridden)processRequest(`req₅`)elsehttp.apply(`req₅`)
}))
}" class="documentableAnchor">
def
valupdatedVaryHeader:Raw=`resp₂`.headers.get(varyHeaderName).map[Raw](((_$17:NonEmptyList[Raw])=>_$17.head)).map[Raw](((h:Header.Raw)=>Header.Raw.apply(h.name,_root_.scala.StringContext.apply("",",","").s(h.value,headerName.toString)))).getOrElse[Raw](Header.Raw.apply(varyHeaderName,headerName.toString))
`resp₂`.withHeaders(`resp₂`.headers.put(rawToRaw(updatedVaryHeader)))
case_=>
`resp₂`
}
}
defupdateRequestWithMethod(`req₂`:Request[G],`om₂`:Method):Request[G]={
valattrs:Vault=`req₂`.attributes.insert[Method](overriddenMethodAttrKey,`req₂`.method)
`req₂`.withAttributes(attrs).withMethod(`om₂`)
}
defgetUnsafeOverrideMethod(`req₃`:Request[G]):F[Option[String]]=config.overrideStrategymatch{
caseHeaderOverrideStrategy(headerName)=>
F.pure[Option[String]](`req₃`.headers.get(`headerName₂`).map[String](((_$18:NonEmptyList[Raw])=>_$18.head.value)))
caseQueryOverrideStrategy(parameter)=>
F.pure[Option[String]](`req₃`.params.get(parameter))
caseFormOverrideStrategy(field,f)=>
toFunctorOps[F,Option[Map[String,Chain[String]]]](f.apply[Option[Map[String,Chain[String]]]](toFunctorOps[G,Either[DecodeFailure,UrlForm]](UrlForm.entityDecoder[G](F=S,UrlForm.entityDecoder$default$2[G]).decode(`req₃`,strict=true).value)(S).map[Option[Map[String,Chain[String]]]](((_$19:Either[DecodeFailure,UrlForm])=>_$19.toOption.map[Map[String,Chain[String]]](((_$20:UrlForm)=>_$20.values))))))(F).map[Option[String]](((formFields:Option[Map[String,Chain[String]]])=>formFields.flatMap[String](((_$21:Map[String,Chain[String]])=>_$21.get(field).flatMap[String](((_$22:Chain[String])=>_$22.uncons.map[String](((_$23:Tuple2[String,Chain[String]])=>_$23._1))))))))
}
defprocessRequest(`req₄`:Request[G]):F[Response[G]]=toFlatMapOps[F,Option[String]](getUnsafeOverrideMethod(`req₄`))(F).flatMap[Response[G]](((x$1:Option[String])=>x$1match{
caseSome(m:String)=>
parseMethod.andThen[F[Response[G]]](((_$24:ParseResult[Method])=>processRequestWithMethod(`req₄`,_$24))).apply(`m₂`)
caseNone=>
http.apply(`req₄`)
}))
Kleisli.apply[F,Request[G],Response[G]](((`req₅`:Request[G])=>{
valisOverridden:Boolean=config.overridableMethods.contains(`req₅`.method)
if(isOverridden)processRequest(`req₅`)elsehttp.apply(`req₅`)
}))
}" class="documentableName ">apply[F[_], G[_]](http: Http[F, G], config: HttpMethodOverriderConfig[F, G])(implicit F: Monad[F], S: Concurrent[G]): Http[F, G]
Simple middleware for HTTP Method Override.
Simple middleware for HTTP Method Override.
This middleware lets you use HTTP verbs such as PUT or DELETE in places where the client doesn't support it. Camouflage your request with another HTTP verb(usually POST) and sneak the desired one using a custom header or request parameter. The middleware will '''override''' the original verb with the new one for you, allowing the request the be dispatched properly.
- Value parameters:
- config
http method overrider config
- http
Http to transform
- Source:
- HttpMethodOverrider.scala