Functions/GenXdev.Coding.PowerShell.Modules/Search-NextGenXdevCmdlet.ps1

################################################################################
function Search-NextGenXdevCmdlet {

    [CmdletBinding(DefaultParameterSetName = "Default")]
    [Alias("nextcmdlet")]

    param(
        ########################################################################
        [Alias("Name", "Module")]
        [parameter(
            ParameterSetName = "Default",
            Mandatory = $false,
            Position = 0,
            ValueFromPipeline = $true,
            ValueFromPipelineByPropertyName = $true,
            HelpMessage = "Optional module name to filter cmdlets by"
        )]
        [ValidateNotNullOrEmpty()]
        [SupportsWildcards()]
        [string] $ModuleName = "GenXdev.*",
        ########################################################################
        [parameter(
            Mandatory = $false,
            Position = 3,
            HelpMessage = "Key for storing the last cmdlet index"
        )]
        [AllowEmptyString()]
        [string] $Key = "",

        ########################################################################
        [parameter(
            ParameterSetName = "FromScripts",
            HelpMessage = "Switch to scripts from the script folder"
        )]
        [switch] $FromScripts,

        ########################################################################
        [parameter(
            Mandatory = $false,
            HelpMessage = "Indicates to skip cmdlets that already have unit-tests"
        )]
        [switch] $OnlyNonExisting
    )

    begin {

        # initialize cmdlet variable to track current cmdlet being processed
        $cmdlet = $null

        # build parameter hashtable for Get-GenXDevNextCmdLet
        $getNextParams = @{
            ModuleName      = $ModuleName
            Reset           = $Reset
            RedoLast        = $RedoLast
            Key             = $Key
            OnlyNonExisting = $OnlyNonExisting
        }

        # conditionally add FromScripts parameter based on switches
        if ($Integrate -or $FromScripts) {

            $null = $getNextParams.Add('FromScripts', $true)
        }

        # get next cmdlet to process using constructed parameters
        $cmdlet = Get-GenXDevNextCmdLet @getNextParams

        Write-Verbose "Processing cmdlet: $($cmdlet.Name)"

        # prepare parameters for Assert-GenXdevCmdlet
        $params = @{
            CmdletName = ($cmdlet.Name)
        }

        if ($FromScripts) {
            $null = $params.Add('FromScripts', $true)
        }
    }

    process {

        # search the current cmdlet with prepared parameters
        Search-GenXdevCmdlet @params
    }

    end {
    }
}
################################################################################