Skip to content

Commit

Permalink
14.5.0
Browse files Browse the repository at this point in the history
- Added 'useBaseUrl' and 'transformUrl' to Config for better composability
- Fixed some extension methods
  • Loading branch information
SchlenkR committed Mar 5, 2024
1 parent 31fd23a commit bc5e3c2
Show file tree
Hide file tree
Showing 5 changed files with 47 additions and 13 deletions.
6 changes: 5 additions & 1 deletion Directory.Build.props
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project>

<PropertyGroup>
<Version>14.4.2</Version>
<Version>14.5.0</Version>

<Authors>Ronald Schlenker</Authors>
<Copyright>Copyright 2024 Ronald Schlenker</Copyright>
Expand All @@ -16,6 +16,10 @@
<FsDocsReleaseNotesLink>https://www.nuget.org/packages/FsHttp#release-body-tab</FsDocsReleaseNotesLink>

<PackageReleaseNotes>
14.5.0
- Added 'useBaseUrl' and 'transformUrl' to Config for better composability
- Fixed some extension methods

14.4.2
- Thanks @bartelink
Pinned FSharp.Core to 5.0.2 in all library projects
Expand Down
8 changes: 7 additions & 1 deletion docs/Composability.fsx
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,13 @@ let httpForMySpecialEnvironment =
let baseUrl = "http://my-special-environment"
http {
// we would like to have a fixed URL prefix for all requests.
// So we define a new builder that actually transforms the header.
// So we define a new builder that actually uses a base url, like so:
config_useBaseUrl baseUrl

// ...in case you need more control, you can also transform the URL:
config_transformUrl (fun url -> baseUrl </> url)

// ...or you can transform the header in a similar way.
// Since the description of method is a special thing,
// we have to change the URL for any method using a header transformer,
// like so:
Expand Down
8 changes: 8 additions & 0 deletions src/FsHttp/Dsl.CE.fs
Original file line number Diff line number Diff line change
Expand Up @@ -441,6 +441,14 @@ type IRequestContext<'self> with
member this.TransformHeader(context: IRequestContext<#IUpdateConfig<_>>, transformer) =
Config.transformHeader transformer context.Self

[<CustomOperation("config_transformUrl")>]
member this.TransformUrl(context: IRequestContext<#IUpdateConfig<_>>, transformer) =
Config.transformUrl transformer context.Self

[<CustomOperation("config_useBaseUrl")>]
member this.UseBaseUrl(context: IRequestContext<#IUpdateConfig<_>>, baseUrl) =
Config.useBaseUrl baseUrl context.Self

[<CustomOperation("config_setHttpClientFactory")>]
member this.SetHttpClientFactory(context: IRequestContext<#IUpdateConfig<_>>, httpClientFactory) =
Config.setHttpClientFactory httpClientFactory context.Self
Expand Down
8 changes: 8 additions & 0 deletions src/FsHttp/Dsl.fs
Original file line number Diff line number Diff line change
Expand Up @@ -480,6 +480,14 @@ module Config =
context.UpdateConfig(fun config ->
{ config with headerTransformers = config.headerTransformers @ [ transformer ] })

let transformUrl transformer (context: IUpdateConfig<_>) =
context |> transformHeader (fun header ->
let address = transformer header.target.address.Value
{ header with target.address = Some address })

let useBaseUrl (baseUrl: string) (context: IUpdateConfig<_>) =
context |> transformUrl (fun url -> Url.combine baseUrl url)

let setHttpClientFactory httpClientFactory (context: IUpdateConfig<_>) =
context.UpdateConfig(fun config ->
{ config with httpClientFactory = httpClientFactory })
Expand Down
30 changes: 19 additions & 11 deletions src/FsHttp/Extensions.fs
Original file line number Diff line number Diff line change
Expand Up @@ -454,47 +454,55 @@ type ConfigExtensions =

[<Extension>]
static member TimeoutInSeconds(fluent: FluentConfig<_>, value) =
Config.timeoutInSeconds value
Config.timeoutInSeconds value fluent.Context

[<Extension>]
static member TransformHeader(fluent: FluentConfig<_>, transformer) =
Config.transformHeader transformer
Config.transformHeader transformer fluent.Context

[<Extension>]
static member TransformUrl(fluent: FluentConfig<_>, transformer) =
Config.transformUrl transformer fluent.Context

[<Extension>]
static member UseBaseUrl(fluent: FluentConfig<_>, baseUrl) =
Config.useBaseUrl baseUrl fluent.Context

[<Extension>]
static member SetHttpClientFactory(fluent: FluentConfig<_>, httpClientFactory) =
Config.setHttpClientFactory httpClientFactory
Config.setHttpClientFactory httpClientFactory fluent.Context

[<Extension>]
static member TransformHttpClient(fluent: FluentConfig<_>, transformer) =
Config.transformHttpClient transformer
Config.transformHttpClient transformer fluent.Context

[<Extension>]
static member TransformHttpRequestMessage(fluent: FluentConfig<_>, transformer) =
Config.transformHttpRequestMessage transformer
Config.transformHttpRequestMessage transformer fluent.Context

[<Extension>]
static member TransformHttpClientHandler(fluent: FluentConfig<_>, transformer) =
Config.transformHttpClientHandler transformer
Config.transformHttpClientHandler transformer fluent.Context

[<Extension>]
static member Proxy(fluent: FluentConfig<_>, url) =
Config.proxy url
Config.proxy url fluent.Context

[<Extension>]
static member Proxy(fluent: FluentConfig<_>, url, credentials) =
Config.proxyWithCredentials url credentials
Config.proxyWithCredentials url credentials fluent.Context

[<Extension>]
static member DecompressionMethods(fluent: FluentConfig<_>, decompressionMethods) =
Config.decompressionMethods decompressionMethods
Config.decompressionMethods decompressionMethods fluent.Context

[<Extension>]
static member NoDecompression(fluent: FluentConfig<_>) =
Config.noDecompression
Config.noDecompression fluent.Context

[<Extension>]
static member CancellationToken(fluent: FluentConfig<_>, cancellationToken) =
Config.cancellationToken cancellationToken
Config.cancellationToken cancellationToken fluent.Context


// ---------
Expand Down

0 comments on commit bc5e3c2

Please sign in to comment.