Private/Validators.ps1
using namespace System.Management.Automation; . "$PSScriptRoot\Validators.Exceptions.ps1" <#Fully Tested#> function ValidateModuleProjectExists { param($ModuleProject) if ($ModuleProject) { $ExistingModuleProject = GetModuleProjectInfo -ModuleProject $ModuleProject if (!($ExistingModuleProject)) { throw (New-Object ModuleProjectDoesNotExistException "Enter a valid ModuleProject!") } } return $true } <#Fully Tested#> function ValidateModuleProjectDoesNotExist { param($ModuleProject) if ($ModuleProject) { $ExistingModuleProject = GetModuleProjectInfo -ModuleProject $ModuleProject if ($ExistingModuleProject) { throw (New-Object ModuleProjectExistsException "Parameter must not be one of the following choices: $(GetModuleProjectInfo)") } } return $True } <#Fully Tested -- todo: Test with new addition of Get-EnvironmentalModuleDirectories#> function ValidateModuleDoesNotExist { param ($ModuleProject) if ($ModuleProject) { if (Get-Module $moduleProject) { throw (New-Object ModuleExistsException "Module already exists by the name '$moduleProject'") } $ModuleDirectories = Get-EnvironmentModuleDirectories foreach($Directory in $ModuleDirectories) { if ((Get-ChildItem $Directory -Directory).Name -Contains $ModuleProject) { throw (New-Object ModuleExistsException "Module already exists by the name '$moduleProject'") } } } return $True } <#Fully Tested#> function ValidateCommandExistsInModule { param( [String] $ModuleProject, [String] $CommandName ) if (!((GetCommandsInModuleProject -ModuleProject $ModuleProject) -Contains $CommandName)) { throw (New-Object ModuleCommandDoesNotExistException "'$CommandName' does not exist as a command in $ModuleProject!") } } <#TODO: Test #> function ValidateModuleCommandExists { param($CommandName) if ($CommandName) { if (!(GetCommandsInModuleProject) -Contains $CommandName){ throw (New-Object ModuleCommandDoesNotExistException "'$CommandName' does not exist as a command in any ModuleProject!") } } return $True } <#TODO: Test#> function ValidateCommandExists { param($CommandName) if ($CommandName) { if ((GetCommandsInModuleProject) -contains $CommandName) { return $True } } if (!(Get-Command -Name $CommandName -ErrorAction 'SilentlyContinue')) { throw (New-Object CommandDoesNotExistException "'$CommandName' does not exist") } return $True } <#Fully Tested#> function ValidateModuleCommandDoesNotExist { param($CommandName) if ($CommandName) { if ((GetCommandsInModuleProject) -Contains $CommandName){ throw (New-Object ModuleCommandExistsException "'$CommandName' already exists as a command!") } } return $True } <#Fully Tested#> function ValidateCommandStartsWithApprovedVerb { param([String]$Command) if ($Command) { $chosenVerbParts = $Command.Split('-') $chosenVerb = $chosenVerbParts[0] $ApprovedVerbs = Get-ApprovedVerbs; if (!$ApprovedVerbs.Contains($chosenVerb) -or $chosenVerbParts.Length -ne 2) { throw (New-Object ParameterStartsWithUnapprovedVerbException "$chosenVerb is not a common accepted verb. Please find an appropriate verb by using the command 'Get-Verb'.") } } return $True } #TODO: Test function ValidateModuleProjectExportDestinationIsValid { param([String]$Destination) $LimitationsText = 'Export-ModuleProject should be used to export your ModuleProject without clobber. If you wish to package the module for import as a separate module, use the command Split-ModuleProject instead.' if ($Destination -eq $ModuleProjectsFolder) { throw (New-Object ModuleProjectExportDestinationIsInvalidException "Cannot export module to ModuleProjects directory. $LimitationsText") } if ((Get-EnvironmentModuleDirectories) -contains $Destination) { throw (New-Object ModuleProjectExportDestinationIsInvalidException "Cannot export module to a PSModule directory. $LimitationsText") } return $True } #TODO: Test function ValidateModuleCommandMoveDestinationIsValid { param( [String]$SourceModuleProject, [String]$DestinationModuleProject ) if ($SourceModuleProject -eq $DestinationModuleProject) { throw (New-Object ModuleCommandMoveDestinationIsInvalidException 'SourceModuleProject must not be the same as DestinationModuleProject') } return $True } <#Todo: Test#> function ValidateModuleProjectForImportIsValid { param( [String] $Path ) if (!(Test-Path $Path)) { throw (New-Object 'ItemNotFoundException' 'Please enter a valid Module path for import') } $ModuleProjectItem = Get-Item $Path $ModuleName = $ModuleProjectItem.Name ValidateModuleProjectDoesNotExist -ModuleProject $ModuleName | Out-Null ValidateModuleDoesNotExist -ModuleProject $ModuleName | Out-Null if (!(Test-Path "$Path\$ModuleName.psd1") ` -or !(Test-Path "$Path\$ModuleName.psm1") ` -or !(Test-Path "$Path\Functions") ` -or !(Test-Path "$Path\Aliases")) { #todo -- add more validation, like do all the functions and Aliases only hold 1 base function or alias? Does psd1 have DefaultPrefix? throw ModuleProjectUnsupportedForImportException "This module is not supported for import by QuickModuleCLI" } return $True } |