ps/Modules/Cole.PowerShell.Developer/Public/ConvertTo-ScrumTeam.ps1
2023-05-30 22:51:22 -07:00

67 lines
3.4 KiB
PowerShell

function ConvertTo-ScrumTeam {
<#
.SYNOPSIS
Converts a list of teams to a list of ScrumTeam objects (better for formatting, querying).
The data is driven dynamically off either the Confluence page via Get-ScrumTeamsFromConfluence or from a cached file once retrieved.
.PARAMETER Team
Dynamic team data. Should be a table, a-la the Confluence page.
#>
param (
[Parameter(Mandatory = $true, Position = 0, ValueFromPipeline = $true)]
[System.Collections.Hashtable[]]$Team
)
begin {
$logLead = (Get-LogLeadName)
$checkedHeadersAlready = $false
$expectedHeaders = @('Team','Product Owner','Strategic Product Manager','Scrum Master','Tech Lead','Eng Manager','JIRA Board','Team Slack Channel') | Sort-Object -Unique
$defaultTypeName = 'ScrumTeam'
$defaultKeys = @('Team')
$defaultDisplaySet = @()
foreach ($header in $expectedHeaders) {
# Remove spaces so that the property names don't have spaces.
# This makes typing property names much easier.
$defaultDisplaySet += $header.Replace(' ','')
}
$defaultDisplayPropertySet = New-Object System.Management.Automation.PSPropertySet('DefaultDisplayPropertySet',[string[]]$defaultDisplaySet)
$defaultKeyPropertySet = New-Object System.Management.Automation.PSPropertySet('DefaultKeyPropertySet',[string[]]$defaultKeys)
$PSStandardMembers = [System.Management.Automation.PSMemberInfo[]]@($defaultDisplayPropertySet,$defaultKeyPropertySet)
}
process {
if (!$checkedHeadersAlready) {
$headers = @($Team.Keys | Sort-Object -Unique)
$spacedHeadersEqual = ((Compare-Object -ReferenceObject $expectedHeaders -DifferenceObject $headers).Count -eq 0)
$unspacedHeadersEqual = ((Compare-Object -ReferenceObject $defaultDisplaySet -DifferenceObject $headers).Count -eq 0)
if (!$spacedHeadersEqual -and !$unspacedHeadersEqual) {
Write-Warning "$logLead : The headers provided in the input object don't match the expected (hard-coded) headers from Confluence.$([System.Environment]::NewLine)This will make output printing seem to be missing data.$([System.Environment]::NewLine)Please update the format.ps1xml and $((Format-UnderlineText "{function:ConvertTo-ScrumTeam}")) with the new Confluence table headers."
Write-Host "$logLead : [Actual Headers] : $($headers -join ',')"
Write-Host "$logLead : [Expected Headers] : $($expectedHeaders -join ',')"
$checkedHeadersAlready = $true
} else {
$checkedHeadersAlready = $true
}
}
$return = @()
foreach ($teamObject in $Team) {
try {
$properties = @{}
foreach ($key in $teamObject.Keys) {
$properties[$key.Replace(' ','')] = $teamObject.$key
}
$scrumTeam = New-Object PSCustomObject -Property $properties
$scrumTeam.PSObject.TypeNames.Insert(0,$defaultTypeName)
$scrumTeam | Add-Member -MemberType MemberSet -Name PSStandardMembers -Value $PSStandardMembers
$return += $scrumTeam
} catch {
Write-Warning "$logLead : Could not convert item to ScrumTeam object. Check error below."
Write-ErrorObject -ErrorItem $PSItem
}
}
return $return
}
}