Get-GitLabProjectMergeRequest.ps1

function Get-GitLabProjectMergeRequest
{
  <#
      .SYNOPSIS
      Gets Merge Request for project.
      .DESCRIPTION
      Get Merge Request for Project. Gets all Merge Requests for Project by default.
      can be filtered by state using -State.

      Returns single Merge Request when -MergeRequestID is specified.

      Retrieves changes associated with merge request when -IncludeChanges is specified.
      .EXAMPLE
      Get-GitLabProjectMergeRequest -ProjectID 20
      ---------------------------------------------------------------
      gets all merge request created under project 20
      .EXAMPLE
      Get-GitLabProjectMergeRequest -ProjectID 20 -MergeRequestID 8
      ---------------------------------------------------------------
      gets merge request 8 project 20
      .EXAMPLE
      Get-GitLabProjectMergeRequest -ProjectID 20 -MergeRequestID 8 -IncludeChanges
      ---------------------------------------------------------------
      gets merge request 8 project 20 and includes all changes.
  #>

  [CmdletBinding(defaultParameterSetName = 'AllMergeRequests')]
  [Alias()]
  [OutputType()]
  Param
  (
    #The ID of a project
    [Parameter(HelpMessage = 'ProjectID',
        Mandatory = $true)]
    [Alias('ID')]
    [int]$ProjectID,

    # When specified returns only Merge Request that are merged, opened or closed
    [Parameter(ParameterSetName = 'AllMergeRequests',
        HelpMessage = 'State (merged|opened|closed)')]
    [ValidateSet('merged','opened','closed')]
    [string]$State,

    # Only return the Merge Rquest with specified ID.
    [Parameter(ParameterSetName = 'SingleMergeRequest',
        HelpMessage = 'The ID of MR',
        Mandatory = $true)]
    [Alias('merge_request_id')]
    [string]$MergeRequestID,

    # Adds Changes merged with Merge Request to returned object.
    [Parameter(ParameterSetName = 'SingleMergeRequest',
        HelpMessage = 'Include changes')]
    [switch]$IncludeChanges,

    # Existing GitlabConnector Object, can be retrieved with Get-GitlabConnect
    [Parameter(HelpMessage = 'Specify Existing GitlabConnector',
        Mandatory = $false,
        DontShow = $true)]
    [psobject]$GitlabConnect = (Get-GitlabConnect)
  )

  $httpmethod = 'get'
  $apiurl = "projects/$ProjectID/merge_requests"
  $parameters = @{
    id = $ProjectID
  }

  if($PSCmdlet.ParameterSetName -like 'AllMergeRequests')
  {
    if($state)
    {
      $parameters.state = $state
    }
  }

  if($PSCmdlet.ParameterSetName -like 'SingleMergeRequest')
  {
    $apiurl += "/$MergeRequestID"

    if($IncludeChanges)
    {
      $apiurl += '/changes'
    }
  }

  $GitlabConnect.callapi($apiurl,$httpmethod,$parameters)
}