Class: Ace::Task::Molecules::GithubIssueSyncAdapter

Inherits:
Object
  • Object
show all
Defined in:
lib/ace/task/molecules/github_issue_sync_adapter.rb

Overview

Bridges ace-task lifecycle events to reusable ace-git issue sync primitives.

Constant Summary collapse

UNAVAILABLE_MESSAGE =
"GitHub issue sync primitives are unavailable. " \
"Complete dependency task 8r4.t.ilo.2 or update ace-git."
CANDIDATE_INTEGRATIONS =
[
  ["Ace::Git::Molecules::GithubIssueSync", :validate_link!],
  ["Ace::Git::Molecules::IssueSync", :validate_link!],
  ["Ace::Git::Molecules::GithubIssueSync", :sync_task],
  ["Ace::Git::Molecules::IssueSync", :sync_task]
].freeze

Instance Method Summary collapse

Instance Method Details

#sync_task(task:, reason:, previous_task: nil) ⇒ Object



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/ace/task/molecules/github_issue_sync_adapter.rb', line 32

def sync_task(task:, reason:, previous_task: nil)
  current_issue_ids = [task.["github_issue"]].compact.map(&:to_i).uniq
  previous_issue_ids = [previous_task&.&.[]("github_issue")].compact.map(&:to_i).uniq
  issue_ids = (current_issue_ids + previous_issue_ids).uniq
  return {synced: 0, issues: []} if issue_ids.empty?

  receiver, method_name = resolve_integration(:sync_task)
  raise UNAVAILABLE_MESSAGE unless receiver && method_name

  payload = {
    task_id: task.id,
    task_title: task.title,
    task_status: task.status,
    task_path: task.file_path || task.path,
    issue_ids: issue_ids,
    current_issue_ids: current_issue_ids,
    reason: reason,
    previous: previous_task ? {
      id: previous_task.id,
      title: previous_task.title,
      status: previous_task.status,
      path: previous_task.file_path || previous_task.path
    } : nil
  }
  receiver.public_send(method_name, **payload)
  {synced: issue_ids.length, issues: issue_ids}
end

#validate_link!(issue_id:, previous_task: nil) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/ace/task/molecules/github_issue_sync_adapter.rb', line 18

def validate_link!(issue_id:, previous_task: nil)
  return unless issue_id.to_i.positive?

  receiver, method_name = resolve_integration(:validate_link!)
  raise UNAVAILABLE_MESSAGE unless receiver && method_name

  receiver.public_send(
    method_name,
    issue_id: issue_id.to_i,
    task_id: previous_task&.id,
    previous_task_id: previous_task&.id
  )
end