Class: CollavreGithub::Tools::GithubPrDiffService

Inherits:
Object
  • Object
show all
Extended by:
T::Sig, ToolMeta
Includes:
Concerns::GithubClientFinder
Defined in:
app/services/collavre_github/tools/github_pr_diff_service.rb

Constant Summary collapse

DIFF_MAX_LENGTH =
10_000

Instance Method Summary collapse

Instance Method Details

#call(creative_id:, repo:, pr_number:, max_length: nil) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'app/services/collavre_github/tools/github_pr_diff_service.rb', line 35

def call(creative_id:, repo:, pr_number:, max_length: nil)
  max_length ||= DIFF_MAX_LENGTH

  with_github_client(creative_id: creative_id, repo: repo, error_context: "fetch PR diff") do |client|
    diff = client.pull_request_diff(repo, pr_number)
    return { error: "Could not fetch diff", diff: nil } unless diff

    truncated = diff.length > max_length
    diff_text = truncated ? "#{diff[0, max_length]}\n...\n[Diff truncated to #{max_length} characters]" : diff

    {
      diff: diff_text,
      truncated: truncated,
      original_length: diff.length
    }
  end
end