Skip to content

Commit bc5e3c2

Browse files
committed
14.5.0
- Added 'useBaseUrl' and 'transformUrl' to Config for better composability - Fixed some extension methods
1 parent 31fd23a commit bc5e3c2

File tree

5 files changed

+47
-13
lines changed

5 files changed

+47
-13
lines changed

Diff for: Directory.Build.props

+5-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project>
22

33
<PropertyGroup>
4-
<Version>14.4.2</Version>
4+
<Version>14.5.0</Version>
55

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

1818
<PackageReleaseNotes>
19+
14.5.0
20+
- Added 'useBaseUrl' and 'transformUrl' to Config for better composability
21+
- Fixed some extension methods
22+
1923
14.4.2
2024
- Thanks @bartelink
2125
Pinned FSharp.Core to 5.0.2 in all library projects

Diff for: docs/Composability.fsx

+7-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,13 @@ let httpForMySpecialEnvironment =
2727
let baseUrl = "http://my-special-environment"
2828
http {
2929
// we would like to have a fixed URL prefix for all requests.
30-
// So we define a new builder that actually transforms the header.
30+
// So we define a new builder that actually uses a base url, like so:
31+
config_useBaseUrl baseUrl
32+
33+
// ...in case you need more control, you can also transform the URL:
34+
config_transformUrl (fun url -> baseUrl </> url)
35+
36+
// ...or you can transform the header in a similar way.
3137
// Since the description of method is a special thing,
3238
// we have to change the URL for any method using a header transformer,
3339
// like so:

Diff for: src/FsHttp/Dsl.CE.fs

+8
Original file line numberDiff line numberDiff line change
@@ -441,6 +441,14 @@ type IRequestContext<'self> with
441441
member this.TransformHeader(context: IRequestContext<#IUpdateConfig<_>>, transformer) =
442442
Config.transformHeader transformer context.Self
443443

444+
[<CustomOperation("config_transformUrl")>]
445+
member this.TransformUrl(context: IRequestContext<#IUpdateConfig<_>>, transformer) =
446+
Config.transformUrl transformer context.Self
447+
448+
[<CustomOperation("config_useBaseUrl")>]
449+
member this.UseBaseUrl(context: IRequestContext<#IUpdateConfig<_>>, baseUrl) =
450+
Config.useBaseUrl baseUrl context.Self
451+
444452
[<CustomOperation("config_setHttpClientFactory")>]
445453
member this.SetHttpClientFactory(context: IRequestContext<#IUpdateConfig<_>>, httpClientFactory) =
446454
Config.setHttpClientFactory httpClientFactory context.Self

Diff for: src/FsHttp/Dsl.fs

+8
Original file line numberDiff line numberDiff line change
@@ -480,6 +480,14 @@ module Config =
480480
context.UpdateConfig(fun config ->
481481
{ config with headerTransformers = config.headerTransformers @ [ transformer ] })
482482

483+
let transformUrl transformer (context: IUpdateConfig<_>) =
484+
context |> transformHeader (fun header ->
485+
let address = transformer header.target.address.Value
486+
{ header with target.address = Some address })
487+
488+
let useBaseUrl (baseUrl: string) (context: IUpdateConfig<_>) =
489+
context |> transformUrl (fun url -> Url.combine baseUrl url)
490+
483491
let setHttpClientFactory httpClientFactory (context: IUpdateConfig<_>) =
484492
context.UpdateConfig(fun config ->
485493
{ config with httpClientFactory = httpClientFactory })

Diff for: src/FsHttp/Extensions.fs

+19-11
Original file line numberDiff line numberDiff line change
@@ -454,47 +454,55 @@ type ConfigExtensions =
454454

455455
[<Extension>]
456456
static member TimeoutInSeconds(fluent: FluentConfig<_>, value) =
457-
Config.timeoutInSeconds value
457+
Config.timeoutInSeconds value fluent.Context
458458

459459
[<Extension>]
460460
static member TransformHeader(fluent: FluentConfig<_>, transformer) =
461-
Config.transformHeader transformer
461+
Config.transformHeader transformer fluent.Context
462+
463+
[<Extension>]
464+
static member TransformUrl(fluent: FluentConfig<_>, transformer) =
465+
Config.transformUrl transformer fluent.Context
466+
467+
[<Extension>]
468+
static member UseBaseUrl(fluent: FluentConfig<_>, baseUrl) =
469+
Config.useBaseUrl baseUrl fluent.Context
462470

463471
[<Extension>]
464472
static member SetHttpClientFactory(fluent: FluentConfig<_>, httpClientFactory) =
465-
Config.setHttpClientFactory httpClientFactory
473+
Config.setHttpClientFactory httpClientFactory fluent.Context
466474

467475
[<Extension>]
468476
static member TransformHttpClient(fluent: FluentConfig<_>, transformer) =
469-
Config.transformHttpClient transformer
477+
Config.transformHttpClient transformer fluent.Context
470478

471479
[<Extension>]
472480
static member TransformHttpRequestMessage(fluent: FluentConfig<_>, transformer) =
473-
Config.transformHttpRequestMessage transformer
481+
Config.transformHttpRequestMessage transformer fluent.Context
474482

475483
[<Extension>]
476484
static member TransformHttpClientHandler(fluent: FluentConfig<_>, transformer) =
477-
Config.transformHttpClientHandler transformer
485+
Config.transformHttpClientHandler transformer fluent.Context
478486

479487
[<Extension>]
480488
static member Proxy(fluent: FluentConfig<_>, url) =
481-
Config.proxy url
489+
Config.proxy url fluent.Context
482490

483491
[<Extension>]
484492
static member Proxy(fluent: FluentConfig<_>, url, credentials) =
485-
Config.proxyWithCredentials url credentials
493+
Config.proxyWithCredentials url credentials fluent.Context
486494

487495
[<Extension>]
488496
static member DecompressionMethods(fluent: FluentConfig<_>, decompressionMethods) =
489-
Config.decompressionMethods decompressionMethods
497+
Config.decompressionMethods decompressionMethods fluent.Context
490498

491499
[<Extension>]
492500
static member NoDecompression(fluent: FluentConfig<_>) =
493-
Config.noDecompression
501+
Config.noDecompression fluent.Context
494502

495503
[<Extension>]
496504
static member CancellationToken(fluent: FluentConfig<_>, cancellationToken) =
497-
Config.cancellationToken cancellationToken
505+
Config.cancellationToken cancellationToken fluent.Context
498506

499507

500508
// ---------

0 commit comments

Comments
 (0)