Public/Set-Gist.ps1

Function Set-Gist {
    [CmdletBinding(
        ConfirmImpact = 'Low',
        HelpUri = 'http://dotps1.github.io/PSGist',
        SupportsShouldProcess = $true
    )]
    [OutputType()]
    
    Param (
        [Parameter(
            HelpMessage = 'The Id of the Gist Object.',
            Mandatory = $true, 
            ValueFromPipelineByPropertyName = $true
        )]
        [String[]]
        $Id,

        [Parameter(
            HelpMessage = 'Description of the Gist Object.',
            ParameterSetName = 'Description'
        )]
        [String]
        $Description,

        [Parameter(
            HelpMessage = 'The Starred state of a Gist Object.',
            ParameterSetName = 'Star'
        )]
        [Bool]
        $Star
    )

    Process {
        foreach ($item in $Id) {
            if ($PSCmdlet.ShouldProcess($item)) {
                switch ($PSCmdlet.ParameterSetName) {
                    'Description' {
                        [HashTable]$body = @{
                            description = $Description
                        }

                        $apiCall = @{
                            Body = ConvertTo-Json -InputObject $body -Compress
                            RestMethod = 'gists/{0}' -f $item
                            Method = 'PATCH'
                        }

                        [Gist]::new(
                            (Invoke-GistApi @apiCall)
                        )
                    }

                    'Star' {
                        if ($Star -eq $true) {
                            $method = 'PUT'
                        } else {
                            $method = 'DELETE' 
                        }

                        $apiCall = @{
                            #Body = ''
                            RestMethod = 'gists/{0}/star' -f $item
                            Method = $method
                        }

                        Invoke-GistApi @apiCall
                    }
                }
            }
        }
    }
}