PSJira.psm1

$moduleRoot = Split-Path -Path $MyInvocation.MyCommand.Path -Parent
$functions = Join-Path -Path $moduleRoot -ChildPath 'Functions'
$internal = Join-Path -Path $moduleRoot -ChildPath 'Functions\Internal'

# Import all .ps1 files that aren't Pester tests, and export the names of each one as a module function
$items = Resolve-Path "$functions\*.ps1" | Where-Object -FilterScript { -not ($_.ProviderPath.Contains(".Tests.")) }
foreach ($i in $items)
{
    Write-Verbose "Importing file '$($i.ProviderPath)'"
    . $i.ProviderPath

    # This folder has public functions, so export them as module members
    $name = Get-Item $i.ProviderPath | Select-Object -ExpandProperty BaseName
    Export-ModuleMember -Function $name
}

# Same logic here, but don't export these. These functions should be private.
$items = Resolve-Path "$internal\*.ps1" | Where-Object -FilterScript { -not ($_.ProviderPath.Contains(".Tests.")) }
foreach ($i in $items)
{
    Write-Verbose "Importing file '$($i.ProviderPath)'"
    . $i.ProviderPath
}

# Apparently, PowerShell only automatically loads format files from modules within PSModulePath.
# This line forces the current PowerShell session to load the module format file, even if the module is saved in an unusual location.
# If this module lives somewhere in your PSModulePath, this line is unnecessary (but it doesn't do any harm either).
$formatFile = Join-Path -Path $moduleRoot -ChildPath 'PSJira.format.ps1xml'
Write-Verbose "Updating format data with file '$formatFile'"
Update-FormatData -AppendPath $formatFile -ErrorAction Continue