Skip to content

Commit 6f5bbac

Browse files
Merge pull request #133 from StartAutomating/MorePipeScript
More pipe script
2 parents 142329e + 63b9b1c commit 6f5bbac

19 files changed

+619
-168
lines changed

Assets/PipeScript.png

9.47 KB
Loading

Assets/PipeScript.svg

Lines changed: 20 additions & 0 deletions
Loading

CHANGELOG.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,17 @@
1+
## 0.0.10:
2+
* Improvements:
3+
* REST transpiler
4+
* Supports Query/BodyParameter with AmbientValue and DefaultBindingProperty (#119)
5+
* Improved Documentation
6+
* Logo (#132)
7+
* Bugfixes:
8+
* New-PipeScript (#122)
9+
* Improving Improving inline documentation and [ScriptBlock] handling
10+
* Join-PipeScript (#124)
11+
* Adding .Examples
12+
* Fixing parameter joining issues
13+
---
14+
115
## 0.0.9:
216
* New Features:
317
* new keyword (#128)

Join-PipeScript.ps1

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,33 @@ function Join-PipeScript
77
Joins ScriptBlocks written in PowerShell or PipeScript.
88
.EXAMPLE
99
Get-Command Join-PipeScript | Join-PipeScript
10+
.EXAMPLE
11+
{
12+
param(
13+
[string]
14+
$x
15+
)
16+
},
17+
{
18+
param(
19+
[string]
20+
$y
21+
)
22+
} |
23+
Join-PipeScript
24+
.EXAMPLE
25+
{
26+
begin {
27+
$factor = 2
28+
}
29+
}, {
30+
process {
31+
$_ * $factor
32+
}
33+
} | Join-PipeScript
1034
.LINK
1135
Update-PipeScript
36+
1237
#>
1338
[Alias('Join-ScriptBlock', 'jps')]
1439
param(
@@ -121,7 +146,7 @@ function Join-PipeScript
121146
foreach ($combined in $AllScriptBlocks.Ast.ParamBlock) {
122147
if (-not $combined.Parent.Extent) { continue }
123148
$offsetDifference = $combined.Extent.StartOffset - $combined.Parent.Extent.StartOffset
124-
$combined.Parent.Extent.ToString().Substring(0, $offsetDifference) -replace '^[\r\n]+\{'
149+
$combined.Parent.Extent.ToString().Substring(0, $offsetDifference) -replace '^[\r\n\s]{0,}\{'
125150
}
126151
}
127152
# Start the param block

New-PipeScript.ps1

Lines changed: 39 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,8 @@ function New-PipeScript {
1212
# Defines one or more parameters for a ScriptBlock.
1313
# Parameters can be defined in a few ways:
1414
# * As a ```[Collections.Dictionary]``` of Parameters
15-
# * As the ```[string]``` name of an untyped parameter.
16-
# * As an ```[Object[]]```.
17-
# * As a ```[ScriptBlock]```
15+
# * As the ```[string]``` name of an untyped parameter.
16+
# * As a ```[ScriptBlock]``` containing only parameters.
1817
[Parameter(ValueFromPipelineByPropertyName)]
1918
[ValidateScript({
2019
if ($_ -isnot [ScriptBlock]) { return $true }
@@ -179,80 +178,73 @@ function New-PipeScript {
179178
)
180179
}
181180
}
181+
# If the value was an array
182182
elseif ($EachParameter.Value -is [Object[]]) {
183-
$ParametersToCreate[$EachParameter.Key] =
183+
$ParametersToCreate[$EachParameter.Key] = # join it's elements by newlines
184184
$EachParameter.Value -join [Environment]::Newline
185185
}
186186
}
187-
} elseif ($Parameter -is [string]) {
188-
$ParametersToCreate[$Parameter] = @(
187+
188+
}
189+
# If the parameter was a string
190+
elseif ($Parameter -is [string])
191+
{
192+
# treat it as parameter name
193+
$ParametersToCreate[$Parameter] =
194+
@(
189195
"[Parameter(ValueFromPipelineByPropertyName)]"
190196
"`$$Parameter"
191-
)
192-
} elseif ($parameter -is [scriptblock]) {
197+
) -join [Environment]::NewLine
198+
}
199+
# If the parameter is a [ScriptBlock]
200+
elseif ($parameter -is [scriptblock])
201+
{
202+
203+
# add it to a list of parameter script blocks.
193204
$parameterScriptBlocks +=
194-
if ($parameter.Ast.ParamBlock) {
195-
# embed the parameter block (except for the param keyword)
205+
if ($parameter.Ast.ParamBlock) {
196206
$parameter
197-
} else {
198-
}
199-
} elseif ($Parameter -is [Object[]]) {
200-
$currentParam = @()
201-
$currentParamName = ''
202-
foreach ($EachParameter in $Parameter) {
203-
if ($EachParameter -is [string] -and -not $EachParameter.Contains(' ')) {
204-
if ($currentParam) {
205-
$ParametersToCreate[$currentParamName] = $currentParam
206-
$currentParam = @()
207-
$currentParamName = ''
208-
}
209-
$currentParam += "`$$EachParameter"
210-
$currentParamName = $EachParameter
211-
} elseif ($EachParameter -is [string] -and $EachParameter.Contains(' ')) {
212-
$currentParam = @(
213-
if ($EachParameter.Contains("`n")) {
214-
"<#" + [Environment]::newLine + $EachParameter + [Environment]::newLine + '#>'
215-
} else {
216-
"# $EachParameter"
217-
}
218-
) + $currentParam
219-
} elseif ($EachParameter -is [type]) {
220-
$currentParam += "[$($EachParameter.Fullname)]"
221-
}
222-
}
223-
if ($currentParamName) {
224-
$ParametersToCreate[$currentParamName] = $currentParam
225-
}
207+
}
226208
}
227209
}
228-
if ($header) {
210+
# If there is header content,
211+
if ($header) {
229212
$allHeaders += $Header
230213
}
231-
if ($DynamicParameter) {
214+
# dynamic parameters,
215+
if ($DynamicParameter) {
232216
$allDynamicParameters += $DynamicParameter
233217
}
234-
if ($Begin) {
218+
# begin,
219+
if ($Begin) {
235220
$allBeginBlocks += $begin
236221
}
237-
if ($process) {
222+
# process,
223+
if ($process) {
238224
$allProcessBlocks += $process
239225
}
226+
# or end blocks.
240227
if ($end) {
228+
# accumulate them.
241229
$allEndBlocks += $end
242230
}
243231
}
244232
end {
233+
# Take all of the accumulated parameters and create a parameter block
245234
$newParamBlock =
246235
"param(" + [Environment]::newLine +
247236
$(@(foreach ($toCreate in $ParametersToCreate.GetEnumerator()) {
248237
$toCreate.Value -join [Environment]::NewLine
249238
}) -join (',' + [Environment]::NewLine)) +
250239
[Environment]::NewLine +
251240
')'
252-
if ($parameterScriptBlocks) {
253-
$parameterScriptBlocks += [ScriptBlock]::new($newParamBlock)
241+
# If any parameters were passed in as ```[ScriptBlock]```s,
242+
if ($parameterScriptBlocks) {
243+
$parameterScriptBlocks += [ScriptBlock]::Create($newParamBlock)
244+
# join them with the new parameter block.
254245
$newParamBlock = $parameterScriptBlocks | Join-PipeScript
255246
}
247+
# Create the script block by combining together the provided parts.
256248
$createdScriptBlock = [scriptblock]::Create("
257249
$($allHeaders -join [Environment]::Newline)
258250
$newParamBlock
@@ -271,7 +263,8 @@ $(if ($allEndBlocks -and -not $allBeginBlocks -and -not $allProcessBlocks) {
271263
@(@("end {") + $allEndBlocks + '}') -join [Environment]::Newline
272264
})
273265
")
274-
$createdScriptBlock
266+
# return the created script block.
267+
return $createdScriptBlock
275268
}
276269
}
277270

New-PipeScript.ps1.ps1

Lines changed: 40 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,8 @@
1313
# Defines one or more parameters for a ScriptBlock.
1414
# Parameters can be defined in a few ways:
1515
# * As a ```[Collections.Dictionary]``` of Parameters
16-
# * As the ```[string]``` name of an untyped parameter.
17-
# * As an ```[Object[]]```.
18-
# * As a ```[ScriptBlock]```
16+
# * As the ```[string]``` name of an untyped parameter.
17+
# * As a ```[ScriptBlock]``` containing only parameters.
1918
[Parameter(ValueFromPipelineByPropertyName)]
2019
[ValidateScriptBlock(ParameterOnly)]
2120
[ValidateTypes(TypeName={[Collections.IDictionary], [string],[Object[]], [Scriptblock]})]
@@ -109,77 +108,66 @@
109108
)
110109
}
111110
}
111+
# If the value was an array
112112
elseif ($EachParameter.Value -is [Object[]]) {
113-
$ParametersToCreate[$EachParameter.Key] =
113+
$ParametersToCreate[$EachParameter.Key] = # join it's elements by newlines
114114
$EachParameter.Value -join [Environment]::Newline
115115
}
116116
}
117-
} elseif ($Parameter -is [string]) {
118-
$ParametersToCreate[$Parameter] = @(
117+
118+
}
119+
# If the parameter was a string
120+
elseif ($Parameter -is [string])
121+
{
122+
# treat it as parameter name
123+
$ParametersToCreate[$Parameter] =
124+
@(
119125
"[Parameter(ValueFromPipelineByPropertyName)]"
120126
"`$$Parameter"
121-
)
122-
} elseif ($parameter -is [scriptblock]) {
127+
) -join [Environment]::NewLine
128+
}
129+
# If the parameter is a [ScriptBlock]
130+
elseif ($parameter -is [scriptblock])
131+
{
132+
133+
# add it to a list of parameter script blocks.
123134
$parameterScriptBlocks +=
124-
if ($parameter.Ast.ParamBlock) {
125-
# embed the parameter block (except for the param keyword)
135+
if ($parameter.Ast.ParamBlock) {
126136
$parameter
127-
} else {
128-
129-
}
130-
} elseif ($Parameter -is [Object[]]) {
131-
$currentParam = @()
132-
$currentParamName = ''
133-
foreach ($EachParameter in $Parameter) {
134-
if ($EachParameter -is [string] -and -not $EachParameter.Contains(' ')) {
135-
if ($currentParam) {
136-
$ParametersToCreate[$currentParamName] = $currentParam
137-
$currentParam = @()
138-
$currentParamName = ''
139-
}
140-
$currentParam += "`$$EachParameter"
141-
$currentParamName = $EachParameter
142-
} elseif ($EachParameter -is [string] -and $EachParameter.Contains(' ')) {
143-
$currentParam = @(
144-
if ($EachParameter.Contains("`n")) {
145-
"<#" + [Environment]::newLine + $EachParameter + [Environment]::newLine + '#>'
146-
} else {
147-
"# $EachParameter"
148-
}
149-
) + $currentParam
150-
} elseif ($EachParameter -is [type]) {
151-
$currentParam += "[$($EachParameter.Fullname)]"
152-
}
153-
}
154-
if ($currentParamName) {
155-
$ParametersToCreate[$currentParamName] = $currentParam
156-
}
137+
}
157138
}
158139
}
159140

160-
if ($header) {
141+
# If there is header content,
142+
if ($header) {
161143
$allHeaders += $Header
162144
}
163145

164-
if ($DynamicParameter) {
146+
# dynamic parameters,
147+
if ($DynamicParameter) {
165148
$allDynamicParameters += $DynamicParameter
166149
}
167150

168-
if ($Begin) {
151+
# begin,
152+
if ($Begin) {
169153
$allBeginBlocks += $begin
170154
}
171155

172-
if ($process) {
156+
# process,
157+
if ($process) {
173158
$allProcessBlocks += $process
174159
}
175160

161+
# or end blocks.
176162
if ($end) {
163+
# accumulate them.
177164
$allEndBlocks += $end
178165
}
179166

180167
}
181168

182169
end {
170+
# Take all of the accumulated parameters and create a parameter block
183171
$newParamBlock =
184172
"param(" + [Environment]::newLine +
185173
$(@(foreach ($toCreate in $ParametersToCreate.GetEnumerator()) {
@@ -188,12 +176,14 @@
188176
[Environment]::NewLine +
189177
')'
190178

191-
if ($parameterScriptBlocks) {
192-
$parameterScriptBlocks += [ScriptBlock]::new($newParamBlock)
179+
# If any parameters were passed in as ```[ScriptBlock]```s,
180+
if ($parameterScriptBlocks) {
181+
$parameterScriptBlocks += [ScriptBlock]::Create($newParamBlock)
182+
# join them with the new parameter block.
193183
$newParamBlock = $parameterScriptBlocks | Join-PipeScript
194184
}
195185

196-
186+
# Create the script block by combining together the provided parts.
197187
$createdScriptBlock = [scriptblock]::Create("
198188
$($allHeaders -join [Environment]::Newline)
199189
$newParamBlock
@@ -212,6 +202,8 @@ $(if ($allEndBlocks -and -not $allBeginBlocks -and -not $allProcessBlocks) {
212202
@(@("end {") + $allEndBlocks + '}') -join [Environment]::Newline
213203
})
214204
")
215-
$createdScriptBlock
205+
206+
# return the created script block.
207+
return $createdScriptBlock
216208
}
217209
}

PipeScript.HelpOut.ps1

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@ if ($PipeScriptLoaded) {
1111
"::error:: PipeScript not loaded" |Out-Host
1212
}
1313

14-
Save-MarkdownHelp -Module PipeScript <#-ReplaceScriptName '\.psx\.ps1$' -ReplaceScriptNameWith '-Transpiler'#> -SkipCommandType Alias -PassThru -IncludeTopic *.help.txt -IncludeExtension @(
15-
16-
) -Command (Get-Transpiler) -ReplaceCommandName '\.psx\.ps1$'
14+
Save-MarkdownHelp -Module PipeScript -SkipCommandType Alias -PassThru -Command (Get-Transpiler) -ReplaceCommandName '\.psx\.ps1$'
1715

1816
Pop-Location

0 commit comments

Comments
 (0)