PowerShellForGitHub/GitHubGistComments.ps1

472 строки
14 KiB
PowerShell

# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License.
@{
GitHubGistCommentTypeName = 'GitHub.GistComment'
}.GetEnumerator() | ForEach-Object {
Set-Variable -Scope Script -Option ReadOnly -Name $_.Key -Value $_.Value
}
filter Get-GitHubGistComment
{
<#
.SYNOPSIS
Retrieves comments for a specific gist from GitHub.
.DESCRIPTION
Retrieves comments for a specific gist from GitHub.
The Git repo for this module can be found here: http://aka.ms/PowerShellForGitHub
.PARAMETER Gist
The ID of the specific gist that you wish to retrieve the comments for.
.PARAMETER Comment
The ID of the specific comment on the gist that you wish to retrieve.
.PARAMETER MediaType
The format in which the API will return the body of the comment.
Raw - Return the raw markdown body. Response will include body. This is the default if you do not pass any specific media type.
Text - Return a text only representation of the markdown body. Response will include body_text.
Html - Return HTML rendered from the body's markdown. Response will include body_html.
Full - Return raw, text and HTML representations. Response will include body, body_text, and body_html.
.PARAMETER AccessToken
If provided, this will be used as the AccessToken for authentication with the
REST Api. Otherwise, will attempt to use the configured value or will run unauthenticated.
.INPUTS
GitHub.Gist
GitHub.GistComment
GitHub.GistCommit
GitHub.GistFork
GitHub.GistSummary
.OUTPUTS
GitHub.GistComment
.EXAMPLE
Get-GitHubGistComment -Gist 6cad326836d38bd3a7ae
Gets all comments on octocat's "hello_world.rb" gist.
.EXAMPLE
Get-GitHubGistComment -Gist 6cad326836d38bd3a7ae -Comment 1507813
Gets comment 1507813 from octocat's "hello_world.rb" gist.
#>
[CmdletBinding(PositionalBinding = $false)]
[OutputType({$script:GitHubGistCommentTypeName})]
param(
[Parameter(
Mandatory,
ValueFromPipelineByPropertyName,
Position = 1)]
[Alias('GistId')]
[string] $Gist,
[Parameter(ValueFromPipelineByPropertyName)]
[Alias('GistCommentId')]
[ValidateNotNullOrEmpty()]
[int64] $Comment,
[ValidateSet('Raw', 'Text', 'Html', 'Full')]
[string] $MediaType = 'Full',
[string] $AccessToken
)
Write-InvocationLog
$telemetryProperties = @{}
$uriFragment = [String]::Empty
$description = [String]::Empty
if ($PSBoundParameters.ContainsKey('Comment'))
{
$telemetryProperties['SpecifiedComment'] = $true
$uriFragment = "gists/$Gist/comments/$Comment"
$description = "Getting comment $Comment for gist $Gist"
}
else
{
$uriFragment = "gists/$Gist/comments"
$description = "Getting comments for gist $Gist"
}
$params = @{
'UriFragment' = $uriFragment
'Description' = $description
'AccessToken' = $AccessToken
'AcceptHeader' = (Get-MediaAcceptHeader -MediaType $MediaType -AsJson)
'TelemetryEventName' = $MyInvocation.MyCommand.Name
'TelemetryProperties' = $telemetryProperties
}
return (Invoke-GHRestMethodMultipleResult @params | Add-GitHubGistCommentAdditionalProperties)
}
filter Remove-GitHubGistComment
{
<#
.SYNOPSIS
Removes/deletes a comment from a gist on GitHub.
.DESCRIPTION
Removes/deletes a comment from a gist on GitHub.
The Git repo for this module can be found here: http://aka.ms/PowerShellForGitHub
.PARAMETER Gist
The ID of the specific gist that you wish to remove the comment from.
.PARAMETER Comment
The ID of the comment to remove from the gist.
.PARAMETER Force
If this switch is specified, you will not be prompted for confirmation of command execution.
.PARAMETER AccessToken
If provided, this will be used as the AccessToken for authentication with the
REST Api. Otherwise, will attempt to use the configured value or will run unauthenticated.
.INPUTS
GitHub.Gist
GitHub.GistComment
GitHub.GistCommit
GitHub.GistFork
GitHub.GistSummary
.EXAMPLE
Remove-GitHubGist -Gist 6cad326836d38bd3a7ae -Comment 12324567
Removes the specified comment from octocat's "hello_world.rb" gist
(assuming you have permission).
.EXAMPLE
Remove-GitHubGist -Gist 6cad326836d38bd3a7ae -Comment 12324567 -Confirm:$false
Removes the specified comment from octocat's "hello_world.rb" gist
(assuming you have permission).
Will not prompt for confirmation, as -Confirm:$false was specified.
.EXAMPLE
Remove-GitHubGist -Gist 6cad326836d38bd3a7ae -Comment 12324567 -Force
Removes the specified comment from octocat's "hello_world.rb" gist
(assuming you have permission).
Will not prompt for confirmation, as -Force was specified.
#>
[CmdletBinding(
SupportsShouldProcess,
PositionalBinding = $false,
ConfirmImpact="High")]
[Alias('Delete-GitHubGist')]
param(
[Parameter(
Mandatory,
ValueFromPipelineByPropertyName,
Position = 1)]
[Alias('GistId')]
[ValidateNotNullOrEmpty()]
[string] $Gist,
[Parameter(
Mandatory,
ValueFromPipelineByPropertyName,
Position = 2)]
[Alias('GistCommentId')]
[ValidateNotNullOrEmpty()]
[int64] $Comment,
[switch] $Force,
[string] $AccessToken
)
Write-InvocationLog
if ($Force -and (-not $Confirm))
{
$ConfirmPreference = 'None'
}
if (-not $PSCmdlet.ShouldProcess($Comment, "Delete comment from gist $Gist"))
{
return
}
$telemetryProperties = @{}
$params = @{
'UriFragment' = "gists/$Gist/comments/$Comment"
'Method' = 'Delete'
'Description' = "Removing comment $Comment from gist $Gist"
'AccessToken' = $AccessToken
'TelemetryEventName' = $MyInvocation.MyCommand.Name
'TelemetryProperties' = $telemetryProperties
}
return Invoke-GHRestMethod @params
}
filter New-GitHubGistComment
{
<#
.SYNOPSIS
Creates a new comment on the specified gist from GitHub.
.DESCRIPTION
Creates a new comment on the specified gist from GitHub.
The Git repo for this module can be found here: http://aka.ms/PowerShellForGitHub
.PARAMETER Gist
The ID of the specific gist that you wish to add the comment to.
.PARAMETER Body
The body of the comment that you wish to leave on the gist.
.PARAMETER AccessToken
If provided, this will be used as the AccessToken for authentication with the
REST Api. Otherwise, will attempt to use the configured value or will run unauthenticated.
.INPUTS
GitHub.Gist
GitHub.GistComment
GitHub.GistCommit
GitHub.GistFork
GitHub.GistSummary
.OUTPUTS
GitHub.GistComment
.EXAMPLE
New-GitHubGistComment -Gist 6cad326836d38bd3a7ae -Body 'Hello World'
Adds a new comment of "Hello World" to octocat's "hello_world.rb" gist.
#>
[CmdletBinding(
SupportsShouldProcess,
PositionalBinding = $false)]
[OutputType({$script:GitHubGistCommentTypeName})]
param(
[Parameter(
Mandatory,
ValueFromPipelineByPropertyName,
Position = 1)]
[Alias('GistId')]
[ValidateNotNullOrEmpty()]
[string] $Gist,
[Parameter(
Mandatory,
Position = 2)]
[ValidateNotNullOrEmpty()]
[string] $Body,
[string] $AccessToken
)
Write-InvocationLog
$hashBody = @{
'body' = $Body
}
if (-not $PSCmdlet.ShouldProcess($Gist, "Create new comment for gist"))
{
return
}
$telemetryProperties = @{}
$params = @{
'UriFragment' = "gists/$Gist/comments"
'Body' = (ConvertTo-Json -InputObject $hashBody)
'Method' = 'Post'
'Description' = "Creating new comment on gist $Gist"
'AccessToken' = $AccessToken
'TelemetryEventName' = $MyInvocation.MyCommand.Name
'TelemetryProperties' = $telemetryProperties
}
return (Invoke-GHRestMethod @params | Add-GitHubGistCommentAdditionalProperties)
}
filter Set-GitHubGistComment
{
<#
.SYNOPSIS
Edits a comment on the specified gist from GitHub.
.DESCRIPTION
Edits a comment on the specified gist from GitHub.
The Git repo for this module can be found here: http://aka.ms/PowerShellForGitHub
.PARAMETER Gist
The ID of the gist that the comment is on.
.PARAMETER Comment
The ID of the comment that you wish to edit.
.PARAMETER Body
The new text of the comment that you wish to leave on the gist.
.PARAMETER PassThru
Returns the updated Comment. By default, this cmdlet does not generate any output.
You can use "Set-GitHubConfiguration -DefaultPassThru" to control the default behavior
of this switch.
.PARAMETER AccessToken
If provided, this will be used as the AccessToken for authentication with the
REST Api. Otherwise, will attempt to use the configured value or will run unauthenticated.
.INPUTS
GitHub.Gist
GitHub.GistComment
GitHub.GistCommit
GitHub.GistFork
GitHub.GistSummary
.OUTPUTS
GitHub.GistComment
.EXAMPLE
Set-GitHubGistComment -Gist 6cad326836d38bd3a7ae -Comment 1232456 -Body 'Hello World'
Updates the body of the comment with ID 1232456 octocat's "hello_world.rb" gist to be
"Hello World".
#>
[CmdletBinding(
SupportsShouldProcess,
PositionalBinding = $false)]
[OutputType({$script:GitHubGistCommentTypeName})]
[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSReviewUnusedParameter", "", Justification="PassThru is accessed indirectly via Resolve-ParameterWithDefaultConfigurationValue")]
param(
[Parameter(
Mandatory,
ValueFromPipelineByPropertyName,
Position = 1)]
[Alias('GistId')]
[ValidateNotNullOrEmpty()]
[string] $Gist,
[Parameter(
Mandatory,
ValueFromPipelineByPropertyName,
Position = 2)]
[Alias('GistCommentId')]
[ValidateNotNullOrEmpty()]
[int64] $Comment,
[Parameter(
Mandatory,
Position = 3)]
[ValidateNotNullOrEmpty()]
[string] $Body,
[switch] $PassThru,
[string] $AccessToken
)
Write-InvocationLog
$hashBody = @{
'body' = $Body
}
if (-not $PSCmdlet.ShouldProcess($Comment, "Update gist comment on gist $Gist"))
{
return
}
$telemetryProperties = @{}
$params = @{
'UriFragment' = "gists/$Gist/comments/$Comment"
'Body' = (ConvertTo-Json -InputObject $hashBody)
'Method' = 'Patch'
'Description' = "Creating new comment on gist $Gist"
'AccessToken' = $AccessToken
'TelemetryEventName' = $MyInvocation.MyCommand.Name
'TelemetryProperties' = $telemetryProperties
}
$result = (Invoke-GHRestMethod @params | Add-GitHubGistCommentAdditionalProperties)
if (Resolve-ParameterWithDefaultConfigurationValue -Name PassThru -ConfigValueName DefaultPassThru)
{
return $result
}
}
filter Add-GitHubGistCommentAdditionalProperties
{
<#
.SYNOPSIS
Adds type name and additional properties to ease pipelining to GitHub Gist Comment objects.
.PARAMETER InputObject
The GitHub object to add additional properties to.
.PARAMETER TypeName
The type that should be assigned to the object.
.PARAMETER GistId
The ID of the gist that the comment is for.
.INPUTS
[PSCustomObject]
.OUTPUTS
GitHub.GistComment
#>
[CmdletBinding()]
[OutputType({$script:GitHubGisCommentTypeName})]
[Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseSingularNouns", "", Justification="Internal helper that is definitely adding more than one property.")]
param(
[Parameter(
Mandatory,
ValueFromPipeline)]
[AllowNull()]
[AllowEmptyCollection()]
[PSCustomObject[]] $InputObject,
[ValidateNotNullOrEmpty()]
[string] $TypeName = $script:GitHubGistCommentTypeName
)
foreach ($item in $InputObject)
{
$item.PSObject.TypeNames.Insert(0, $TypeName)
if (-not (Get-GitHubConfiguration -Name DisablePipelineSupport))
{
$hostName = $(Get-GitHubConfiguration -Name 'ApiHostName')
if ($item.url -match "^https?://(?:www\.|api\.|)$hostName/gists/([^/]+)/comments/(.+)$")
{
$gistId = $Matches[1]
$commentId = $Matches[2]
if ($commentId -ne $item.id)
{
$message = "The gist comment url no longer follows the expected pattern. Please contact the PowerShellForGitHubTeam: $item.url"
Write-Log -Message $message -Level Warning
}
}
Add-Member -InputObject $item -Name 'GistCommentId' -Value $item.id -MemberType NoteProperty -Force
Add-Member -InputObject $item -Name 'GistId' -Value $gistId -MemberType NoteProperty -Force
if ($null -ne $item.user)
{
$null = Add-GitHubUserAdditionalProperties -InputObject $item.user
}
}
Write-Output $item
}
}