private/Helper-NewModuleV3.ps1


# function Get-ModulePath{
# [CmdletBinding()]
# param(
# [Parameter()][string]$Name,
# [Parameter()][string]$Path
# )

# # Asumes current as the default path
# $path = [string]::IsNullOrWhiteSpace($Path) ? (Get-Location | Convert-Path) : $Path

# # Use dot local path
# $modulePath = [string]::IsNullOrWhiteSpace($Name) ? $path : ($path | Join-Path -ChildPath $Name)

# return $modulePath
# }

# function Get-ModulePath{
# [CmdletBinding()]
# param(
# [Parameter()][string]$Name,
# [Parameter()][string]$Path
# )

# # | path/name | null | Name |
# # | --------- | ----- | ----------- |
# # | null | Error | Name |
# # | Path | Path | Path + Name |

# if ([string]::IsNullOrWhiteSpace($Path) -and [string]::IsNullOrWhiteSpace($Name)) {
# write-Error "Path and Name cannot be null or empty at the same time."
# return $null
# }

# $modulePath = [string]::IsNullOrWhiteSpace($Path) ? (Get-Location | Convert-Path) : $Path

# $ret = ([string]::IsNullOrWhiteSpace($Name)) ? $modulePath : ($modulePath | Join-Path -ChildPath $Name)

# return $ret
# }

# function Get-ModulePath{
# [CmdletBinding()]
# param(
# [Parameter()][string]$Name,
# [Parameter()][string]$Path
# )

# # | path/name | null | Name |
# # | --------- | ----- | ----------- |
# # | null | Error | Name |
# # | Path | Path | Path |

# if ([string]::IsNullOrWhiteSpace($Path) -and [string]::IsNullOrWhiteSpace($Name)) {
# write-Error "Path and Name cannot be null or empty at the same time."
# return $null
# }

# $ret = [string]::IsNullOrWhiteSpace($Path) ? $Name : $Path

# return $ret
# }

function Get-ModulePath{
    [CmdletBinding()]
    param(
        [Parameter()][string]$Name,
        [Parameter()][string]$Path,
        [Parameter()][switch]$AppendName
    )

    # | path/name | null | Name |
    # | --------- | ----- | ----------- |
    # | null | Error | Name |
    # | Path | Path | Path |

    if ([string]::IsNullOrWhiteSpace($Path) -and [string]::IsNullOrWhiteSpace($Name)) {
        write-Error "Path and Name cannot be null or empty at the same time."
        return $null
    } 

    $ret =  ([string]::IsNullOrWhiteSpace($Path) ? $Name : `
            ([string]::IsNullOrWhiteSpace($Name) ? $Path : `
            ( !$AppendName                       ? $Path :  `
            ($Path | Join-Path -ChildPath $Name))))


    return $ret
}

function Get-TestModulePath{
    [CmdletBinding()]
    param(
        [Parameter()][string]$Name,
        [Parameter()][string]$Path
    )

    $modulepath = Get-ModulePath -Name $Name -Path $Path
    $moduleName = Get-ModuleName -Name $Name -ModulePath $Path

    $testModuleName = Get-TestModuleName -Name $moduleName
    $tesModulePath = $modulepath | Join-Path -ChildPath $testModuleName

    return $tesModulePath
}

function Get-ModuleName{
    [CmdletBinding()]
    param(
        [Parameter()][string]$Name,
        [Parameter()][string]$ModulePath
    )

    #Return Name if provided
    if(![string]::IsNullOrWhiteSpace($Name)){
        return $Name
    }

    # extract name from path
    $retName = Get-ModulePath -Name $Name -Path $ModulePath | Split-Path -Leaf

    return $retName
}

function Get-TestModuleName {
    [CmdletBinding()]
    param (
        [parameter(Mandatory)] [string] $Name
    )
    
    return ($Name + "Test") 
} 

function Add-Folder{
    [CmdletBinding(SupportsShouldProcess)]
    param(
        [Parameter(Mandatory,ValueFromPipeline)][string]$Path
    )

    process {

        try {
            #test if path exists
            if($Path | Test-Path){
                Write-Error "Path already exists."
                return $false
            } else {
                if ($PSCmdlet.ShouldProcess($Path, "New-Item -ItemType Directory")) {
                    $null = New-Item -ItemType Directory -Path $Path
                }
                
                return $true
            }
        } 
        catch {
            Write-Error -Message "Failed to add path."
            return $false
        }
    }

}