diff --git a/PSSwagger/PSSwagger.psm1 b/PSSwagger/PSSwagger.psm1 index 3c94963..36a3fff 100644 --- a/PSSwagger/PSSwagger.psm1 +++ b/PSSwagger/PSSwagger.psm1 @@ -72,6 +72,9 @@ Microsoft.PowerShell.Utility\Import-LocalizedData LocalizedData -filename PSSwa .PARAMETER Version Version of the generated PowerShell module. +.PARAMETER NoVersionFolder + Switch to not create the version folder under the generated module folder. + .PARAMETER DefaultCommandPrefix Prefix value to be prepended to cmdlet noun or to cmdlet name without verb. @@ -163,6 +166,10 @@ function New-PSSwaggerModule [Version] $Version = '0.0.1', + [Parameter(Mandatory = $false)] + [switch] + $NoVersionFolder, + [Parameter(Mandatory = $false)] [string] $DefaultCommandPrefix, @@ -449,7 +456,7 @@ function New-PSSwaggerModule $nameSpace = $swaggerDict['info'].NameSpace $models = $swaggerDict['info'].Models - if($PSVersionTable.PSVersion -lt '5.0.0') { + if($NoVersionFolder -or $PSVersionTable.PSVersion -lt '5.0.0') { if (-not $outputDirectory.EndsWith($Name, [System.StringComparison]::OrdinalIgnoreCase)) { $outputDirectory = Join-Path -Path $outputDirectory -ChildPath $Name $SymbolPath = Join-Path -Path $SymbolPath -ChildPath $Name diff --git a/Tests/PSSwaggerScenario.Tests.ps1 b/Tests/PSSwaggerScenario.Tests.ps1 index 4884a56..068d68e 100644 --- a/Tests/PSSwaggerScenario.Tests.ps1 +++ b/Tests/PSSwaggerScenario.Tests.ps1 @@ -1141,4 +1141,32 @@ Describe "Output type scenario tests" -Tag @('OutputType','ScenarioTest') { $CommandInfo = Get-Command -Name Get-IotHubResourceEventHubConsumerGroup -Module $ModuleName $CommandInfo.OutputType.Type.ToString() | Should BeExactly 'System.String' } -} \ No newline at end of file +} + +Describe 'New-PSSwaggerModule cmdlet parameter tests' -Tag @('CmdletParameterTest','ScenarioTest') { + BeforeAll { + $ModuleName = 'Generated.Module.NoVersionFolder' + $SwaggerSpecPath = Join-Path -Path $PSScriptRoot -ChildPath 'Data' | Join-Path -ChildPath 'AzureExtensions' | Join-Path -ChildPath 'AzureExtensionsSpec.json' + $GeneratedPath = Join-Path -Path $PSScriptRoot -ChildPath 'Generated' + $GeneratedModuleBase = Join-Path -Path $GeneratedPath -ChildPath $ModuleName + if (Test-Path -Path $GeneratedModuleBase -PathType Container) { + Remove-Item -Path $GeneratedModuleBase -Recurse -Force + } + } + + It 'Test NoVersionFolder switch parameter' { + $params = @{ + SpecificationPath = $SwaggerSpecPath + Name = $ModuleName + UseAzureCsharpGenerator = $true + Path = $GeneratedPath + NoVersionFolder = $true + ConfirmBootstrap = $true + Verbose = $true + } + Invoke-NewPSSwaggerModuleCommand -NewPSSwaggerModuleParameters $params + + $ModuleInfo = Import-Module $GeneratedModuleBase -Force -PassThru + $ModuleInfo.ModuleBase | Should Be $GeneratedModuleBase + } +} diff --git a/Tests/TestUtilities.psm1 b/Tests/TestUtilities.psm1 index d9d2781..3fdb292 100644 --- a/Tests/TestUtilities.psm1 +++ b/Tests/TestUtilities.psm1 @@ -78,6 +78,9 @@ function Invoke-NewPSSwaggerModuleCommand { $NewPSSwaggerModuleParameters['NoAssembly'] = $false $NewPSSwaggerModuleParameters['ConfirmBootstrap'] = $true } + elseif (-not $NewPSSwaggerModuleParameters.ContainsKey('AssemblyFileName')) { + $NewPSSwaggerModuleParameters['NoAssembly'] = $true + } if ((Get-Variable -Name PSEdition -ErrorAction Ignore) -and ('Core' -eq $PSEdition)) { if ($IncludeAssembly) { diff --git a/docs/commands/New-PSSwaggerModule.md b/docs/commands/New-PSSwaggerModule.md index a1612f7..87db1f5 100644 --- a/docs/commands/New-PSSwaggerModule.md +++ b/docs/commands/New-PSSwaggerModule.md @@ -14,30 +14,30 @@ PowerShell command to generate the PowerShell commands for a given RESTful Web S ### SpecificationPath (Default) ``` New-PSSwaggerModule -SpecificationPath -Path -Name [-Version ] - [-DefaultCommandPrefix ] [-Header ] [-UseAzureCsharpGenerator] [-NoAssembly] - [-PowerShellCorePath ] [-IncludeCoreFxAssembly] [-InstallToolsForAllUsers] [-TestBuild] + [-NoVersionFolder] [-DefaultCommandPrefix ] [-Header ] [-UseAzureCsharpGenerator] + [-NoAssembly] [-PowerShellCorePath ] [-IncludeCoreFxAssembly] [-InstallToolsForAllUsers] [-TestBuild] [-SymbolPath ] [-ConfirmBootstrap] ``` ### SdkAssemblyWithSpecificationPath ``` New-PSSwaggerModule -SpecificationPath -Path -AssemblyFileName - [-ClientTypeName ] [-ModelsName ] -Name [-Version ] + [-ClientTypeName ] [-ModelsName ] -Name [-Version ] [-NoVersionFolder] [-DefaultCommandPrefix ] [-Header ] [-UseAzureCsharpGenerator] ``` ### SdkAssemblyWithSpecificationUri ``` New-PSSwaggerModule -SpecificationUri -Path -AssemblyFileName - [-ClientTypeName ] [-ModelsName ] -Name [-Version ] + [-ClientTypeName ] [-ModelsName ] -Name [-Version ] [-NoVersionFolder] [-DefaultCommandPrefix ] [-Header ] [-UseAzureCsharpGenerator] ``` ### SpecificationUri ``` New-PSSwaggerModule -SpecificationUri -Path -Name [-Version ] - [-DefaultCommandPrefix ] [-Header ] [-UseAzureCsharpGenerator] [-NoAssembly] - [-PowerShellCorePath ] [-IncludeCoreFxAssembly] [-InstallToolsForAllUsers] [-TestBuild] + [-NoVersionFolder] [-DefaultCommandPrefix ] [-Header ] [-UseAzureCsharpGenerator] + [-NoAssembly] [-PowerShellCorePath ] [-IncludeCoreFxAssembly] [-InstallToolsForAllUsers] [-TestBuild] [-SymbolPath ] [-ConfirmBootstrap] ``` @@ -191,6 +191,21 @@ Accept pipeline input: False Accept wildcard characters: False ``` +### -NoVersionFolder +Switch to not create the version folder under the generated module folder. + +```yaml +Type: SwitchParameter +Parameter Sets: (All) +Aliases: + +Required: False +Position: Named +Default value: False +Accept pipeline input: False +Accept wildcard characters: False +``` + ### -DefaultCommandPrefix Prefix value to be prepended to cmdlet noun or to cmdlet name without verb.