public/EnvironmentForScript.ps1


function Clear-EnvironmentForScript{
    [CmdletBinding()]
    param(
    )

    $script:GHDEVTRTCHSCPT_ENV = $null

} Export-ModuleMember -Function Clear-EnvironmentForScript

function Set-EnvironmentForScript{
    [CmdletBinding(SupportsShouldProcess)]
    param(
        [Parameter()][string]$ApiUrl='api.github.com',
        [Parameter()][string]$HostUrl='github.com',
        [Parameter()][string]$Owner='ps-developers-sandbox'
    )

    $environment = [PSCustomObject]@{
        ApiUrl = $ApiUrl
        HostUrl = $HostUrl
        Owner = $Owner
    }

    if(Test-EnvironmentForScript -EnvironmentObject $environment){
        $ret = $environment
 
        if ($PSCmdlet.ShouldProcess('$script:GHDEVTRTCHSCPT_ENV', 'Update value')) {
            $script:GHDEVTRTCHSCPT_ENV = $environment
        } else {
            Write-Information "$ApiUrl, $HostUrl, $Owner"
        }

    } else {
        $ret = $script:GHDEVTRTCHSCPT_ENV
    }

    return $ret

} Export-ModuleMember -Function Set-EnvironmentForScript

function Get-EnvironmentForScript{
    [CmdletBinding()]
    param(
    )

    $environment = $(Test-EnvironmentForScript) ?  $script:GHDEVTRTCHSCPT_ENV : $(Set-EnvironmentForScript)

    return $environment

} Export-ModuleMember -Function Get-EnvironmentForScript

function Get-OwnerFromEnvironment{
    [CmdletBinding()]
    param(
    )

    $environment = Get-EnvironmentForScript

    $environment.Owner

}

function Test-EnvironmentForScript{
    [CmdletBinding()]
    param(
        [parameter()][PSCustomObject]$EnvironmentObject
    )

    $environmentObject = $EnvironmentObject ? $EnvironmentObject : $script:GHDEVTRTCHSCPT_ENV

    #check that $script:GHDEVTRTCHSCPT_ENV is not null
    if(! $environmentObject){
        Write-Warning "EnvironmentObject is Null"
        return $false
    }

    #checkif $EnvironmentObject.ApiUrl is null or white spaces
    if([string]::IsNullOrWhiteSpace($EnvironmentObject.ApiUrl)){
        Write-Warning "ApiUrl is not set"
        return $false
    }

    #checkif $EnvironmentObject.HostUrl is null or white spaces
    if([string]::IsNullOrWhiteSpace($EnvironmentObject.HostUrl)){
        Write-Warning "HostUrl is not set"
        return $false
    }

    #checkif $EnvironmentObject.Owner is null or white spaces
    if([string]::IsNullOrWhiteSpace($EnvironmentObject.Owner)){
        Write-Warning "Owner is not set"
        return $false
    }

    return $true
}

function Resolve-Owner{
    [CmdletBinding()]
    param(
        [Parameter()][string]$Owner
    )

    if([string]::IsNullOrWhiteSpace($Owner)){
        return Get-OwnerFromEnvironment
    }

    return $Owner
}