# encoding: utf-8
module Github
class Client::PullRequests::Reviews < API
PREVIEW_MEDIA = "application/vnd.github.black-cat-preview+json".freeze # :nodoc:
# List reviews on a pull request
#
# @example
# github = Github.new
# github.pull_requests.reviews.list 'user-name', 'repo-name', number: 'pull-request-number'
#
# List pull request reviews in a repository
#
# @example
# github = Github.new
# github.pull_requests.reviews.list 'user-name', 'repo-name', number: 'pull-request-number'
# github.pull_requests.reviews.list 'user-name', 'repo-name', number: 'pull-request-number' { |comm| ... }
#
# @api public
def list(*args)
arguments(args, required: [:user, :repo, :number])
params = arguments.params
params["accept"] ||= PREVIEW_MEDIA
response = get_request("/repos/#{arguments.user}/#{arguments.repo}/pulls/#{arguments.number}/reviews", params)
return response unless block_given?
response.each { |el| yield el }
end
alias_method :all, :list
# Get a single review for pull requests
#
# @example
# github = Github.new
# github.pull_requests.reviews.get 'user-name', 'repo-name', 'number', 'id'
#
# @example
# github.pull_requests.reviews.get
# user: 'user-name',
# repo: 'repo-name',
# number: 1,
# id: 80
#
# @api public
def get(*args)
arguments(args, required: [:user, :repo, :number, :id])
params = arguments.params
params["accept"] ||= PREVIEW_MEDIA
get_request("/repos/#{arguments.user}/#{arguments.repo}/pulls/#{arguments.number}/reviews/#{arguments.id}", params)
end
alias_method :find, :get
# Create a pull request review
#
# @param [Hash] params
# @option params [String] :event
# Required string - The review action (event) to perform; can be one of
# APPROVE, REQUEST_CHANGES, or COMMENT. If left blank, the API returns
# HTTP 422 (Unrecognizable entity) and the review is left PENDING
# @option params [String] :body
# Optional string. The text of the review.
# @option params [Array] :comments
# Optional array of draft review comment objects. An array of comments
# part of the review.
#
# @example
# github = Github.new
# github.pull_requests.reviews.create 'user-name', 'repo-name', 'number',
# body: "Nice change",
# event: "APPROVE",
# comments: [
# {
# path: 'path/to/file/commented/on',
# position: 10,
# body: 'This looks good.'
# }
# ]
#
# @api public
def create(*args)
arguments(args, required: [:user, :repo, :number])
params = arguments.params
params["accept"] ||= PREVIEW_MEDIA
post_request("/repos/#{arguments.user}/#{arguments.repo}/pulls/#{arguments.number}/reviews", params)
end
# Update a pull request review
#
# @param [Hash] params
# @option params [String] :state
# Required string - The review action (event) to perform; can be one of
# APPROVE, REQUEST_CHANGES, or COMMENT. If left blank, the API returns
# HTTP 422 (Unrecognizable entity) and the review is left PENDING
# @optoin params [String] :body
# Optional string
#
# @example
# github = Github.new oauth_token: '...'
# github.pull_requests.reviews.update 'user-name', 'repo-name', 'number', 'review-id'
# body: "Update body",
# event: "APPROVE"
#
# @api public
def update(*args)
arguments(args, required: [:user, :repo, :number, :id])
params = arguments.params
params["accept"] ||= PREVIEW_MEDIA
post_request("/repos/#{arguments.user}/#{arguments.repo}/pulls/#{arguments.number}/reviews/#{arguments.id}/events", params)
end
# @option params [String] :message
# Optional string - Reason for dismissal
#
# @example
# github = Github.new oauth_token: '...'
# github.pull_requests.reviews.dismiss 'user-name', 'repo-name', 'number', 'review-id'
# message: "I can't get to this right now."
#
# @api public
def dismiss(*args)
arguments(args, required: [:user, :repo, :number, :id])
params = arguments.params
params["accept"] ||= PREVIEW_MEDIA
put_request("/repos/#{arguments.user}/#{arguments.repo}/pulls/#{arguments.number}/reviews/#{arguments.id}/dismissals", params)
end
# List comments on a pull request review
#
# @example
# github = Github.new
# github.pull_requests.revieiws.comments 'user-name', 'repo-name', 'number', 'review-id'
#
# @api public
def comments(*args)
arguments(args, required: [:user, :repo, :number, :id])
params = arguments.params
params["accept"] ||= PREVIEW_MEDIA
response = get_request("/repos/#{arguments.user}/#{arguments.repo}/pulls/#{arguments.number}/reviews/#{arguments.id}/comments", params)
return response unless block_given?
response.each { |el| yield el }
end
end
end