classes/RestMethod/RestMethodQueryParams.psm1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
using module .\RestQueryKvp.psm1

class RestMethodQueryParams {
    
    #####################
    # HIDDEN PROPERTIES #
    #####################
    
    #####################
    # PUBLIC PROPERTIES #
    #####################

    [RestQueryKvp[]]
    $Params

    ################
    # CONSTRUCTORS #
    ################

    RestMethodQueryParams(){
        $this.Params = @()
    }

    RestMethodQueryParams(
        [RestQueryKvp[]]$Params
    ){
        $this.Params = $Params
    }

    RestMethodQueryParams(
        [hashtable]$Params
    ){
        foreach( $kv in $Params.GetEnumerator() | Sort-Object Name,Value) {
            if($kv.Name) {$this.Add($kv.Name, $kv.Value)}
        }
    }

    ##################
    # HIDDEN METHODS #
    ##################

    ##################
    # PUBLIC METHODS #
    ##################

    [bool]
    Equals(
        [object]$obj
    ){
        return ($obj.PSobject.Properties.Name -contains "Params") -and ($obj.Params -eq $this.Params)
    }

    [void]
    Add(
        [string]$Key,
        [object]$Value
    ){
        $this.Params += New-Object RestQueryKvp @($Key, $Value)
    }
    
    [string]
    ToString(){
        $joined = ([RestQueryKvp]::JoinKvp($this.Params,'&','='))
        return '?' + $joined
    }
}