private/Get-PhpVersionFromUrl.ps1
function Get-PhpVersionFromUrl { <# .Synopsis Gets an instance of PhpVersion by parsing its download URL. .Parameter Url The PHP download URL (eventually relative to PageUrl). .Parameter ReleaseState One of the $Script:RELEASESTATE_... constants. .Parameter PageUrl The URL of the page where the download link has been retrieved from. .Outputs PhpVersionDownloadable #> [OutputType([psobject])] param ( [Parameter(Mandatory = $true, Position = 0)] [ValidateNotNull()] [ValidateLength(1, [int]::MaxValue)] [string]$Url, [Parameter(Mandatory = $true, Position = 1)] [ValidateNotNull()] [ValidateSet('QA', 'Release', 'Archive')] [string] $ReleaseState, [Parameter(Mandatory = $false, Position = 2)] [string]$PageUrl ) begin { $result = $null } process { $match = $Url | Select-String -CaseSensitive -Pattern ('/' + $Script:RX_ZIPARCHIVE + '$') if ($null -eq $match) { throw "Unrecognized PHP ZIP archive url: $Url" } $data = @{} $data.Version = $match.Matches.Groups[1].Value; $data.UnstabilityLevel = $match.Matches.Groups[2].Value; $data.UnstabilityVersion = $match.Matches.Groups[3].Value; $data.Architecture = $match.Matches.Groups[6].Value; $data.ThreadSafe = $match.Matches.Groups[4].Value -ne '-nts'; $data.VCVersion = $match.Matches.Groups[5].Value; $data.ReleaseState = $ReleaseState; if ($null -ne $PageUrl -and $PageUrl -ne '') { $data.DownloadUrl = [Uri]::new([Uri]$PageUrl, $Url).AbsoluteUri } else { $data.DownloadUrl = $Url } $result = [PhpVersionDownloadable]::new($data) } end { $result } } |