Class: CleoQualityReview::GitHubReviewBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/cleo_quality_review/github_review_builder.rb

Overview

Builds a GitHub pull request review payload from rendered pr_review JSON

Defined Under Namespace

Classes: InlineComment

Constant Summary collapse

MAX_INLINE_COMMENTS =
20
MAX_BODY_LENGTH =
3_500

Instance Method Summary collapse

Constructor Details

#initialize(run:, rendered_review:) ⇒ GitHubReviewBuilder

Returns a new instance of GitHubReviewBuilder.

Parameters:

  • run (Run)

    completed quality review run

  • rendered_review (String)

    JSON produced by the pr_review formatter



36
37
38
39
40
# File 'lib/cleo_quality_review/github_review_builder.rb', line 36

def initialize(run:, rendered_review:)
  @run = run
  @rendered_review = rendered_review
  @diff_map = DiffMap.new(run.artifacts.changes_diff)
end

Instance Method Details

#empty?Boolean

Returns whether the rendered review contains anything useful to publish.

Returns:

  • (Boolean)

    whether the rendered review contains anything useful to publish



64
65
66
# File 'lib/cleo_quality_review/github_review_builder.rb', line 64

def empty?
  rendered_comments.empty?
end

#markerString

Returns hidden marker used to avoid duplicate reviews.

Returns:

  • (String)

    hidden marker used to avoid duplicate reviews



58
59
60
# File 'lib/cleo_quality_review/github_review_builder.rb', line 58

def marker
  "<!-- cleo-quality-review:#{run.review_id} -->"
end

#payload(commit_id: nil) ⇒ Hash

Returns GitHub pull request review payload.

Parameters:

  • commit_id (String, nil) (defaults to: nil)

    pull request head SHA

Returns:

  • (Hash)

    GitHub pull request review payload



45
46
47
48
49
50
51
52
53
54
# File 'lib/cleo_quality_review/github_review_builder.rb', line 45

def payload(commit_id: nil)
  comments = inline_comments
  payload = {
    event: "COMMENT",
    body: review_body(comments),
  }
  payload[:commit_id] = commit_id if commit_id.to_s.strip != ""
  payload[:comments] = comments unless comments.empty?
  payload
end