Public/Add-PsmFunction.ps1

function Add-PsmFunction {
  <#
    .Synopsis
      A function that creates a function.ps1 and function.Tests.ps1 file stub
    .DESCRIPTION
      A function that creates a function.ps1 and function.Tests.ps1 file stub for
      an easy start to creating powershell modules/function in a TDD manner
    .EXAMPLE
      Add-PsmFunction "Write-HereWeGo"
      Add-PsmFunction "Write-HereWeGo" -Whatif
  #>

  [CmdletBinding(SupportsShouldProcess=$true)]
  param(
    [Parameter(
        Mandatory=$true, 
        ValueFromPipeline=$true,
        ValueFromPipelineByPropertyName=$true)]
    [ValidatePattern("^[a-zA-Z]{3,}-[a-zA-Z]{3,}$")]
    [string]$functionName,
    [Parameter(
        Mandatory=$false, 
        ValueFromPipeline=$true,
        ValueFromPipelineByPropertyName=$true)]
    [string]$alias
  )
  
  BEGIN{
    Write-Verbose "Starting Add-PsmFunction..."
    Confirm-IsInitializedModulePath
    $packageXml = Import-CliXml .\module-psd1.xml
  }#begin

  PROCESS{
    if ($psCmdlet.ShouldProcess(<# on target --> #>"$($packageXml.RootModule)", <# What if: Performing operation --> #>"Adding new public function $functionName")) { 
      
      Show-IsApprovedVerb $functionName

      if (Test-Path -Path .\Public -PathType Container) {
        Get-PsmFunctionContent $functionName | Set-Content .\Public\$functionName.ps1

        $packageXml.FunctionsToExport += "$functionName"

        if ($alias) {
          $packageXml.AliasesToExport += "$alias"
        }

        $packageXml | Export-CliXml  .\module-psd1.xml
        
        Write-Verbose ".\Public\$functionName.ps1 file written and $functionName has been added to the psd1's FunctionsToExport list"
      } else {
        Write-Error "No .\Public folder found, this is not an initialized module folder... Run: ``Initialize-Psm``"
      }
    }
  }#process
  END{
    Write-Verbose "Finished Add-PsmFunction..."
  }#end
}