Module: Ace::Git::Atoms::StatusFormatter
- Defined in:
- lib/ace/git/atoms/status_formatter.rb
Overview
Pure functions for formatting repository status as various output formats Extracted from Models::RepoStatus.to_markdown for ATOM purity
Class Method Summary collapse
-
.format_current_pr_section(pr_metadata) ⇒ Array<String>
Format current PR section (highlighted for current branch).
-
.format_position_section(status) ⇒ Array<String>
Format position section with raw git status -sb output.
-
.format_pr_activity_section(pr_activity) ⇒ Array<String>
Format PR activity section.
-
.format_recent_commits_section(commits) ⇒ Array<String>
Format recent commits section.
-
.to_markdown(status) ⇒ String
Format repository status as markdown.
Class Method Details
.format_current_pr_section(pr_metadata) ⇒ Array<String>
Format current PR section (highlighted for current branch)
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/ace/git/atoms/status_formatter.rb', line 81 def format_current_pr_section() lines = [] lines << "" lines << "## Current PR" lines << "" # Main line: #85 [OPEN] Title main_line = "##{["number"]}" main_line += " [#{["state"]}]" if ["state"] main_line += " #{["title"]}" if ["title"] lines << main_line # Details line: Target: main | Author: @username | Draft/Not draft details = [] details << "Target: #{["baseRefName"]}" if ["baseRefName"] if ["author"] = .dig("author", "login") || ["author"] details << "Author: @#{}" end details << (["isDraft"] ? "Draft" : "Not draft") if .key?("isDraft") lines << " #{details.join(" | ")}" unless details.empty? # URL line lines << " #{["url"]}" if ["url"] lines end |
.format_position_section(status) ⇒ Array<String>
Format position section with raw git status -sb output
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/ace/git/atoms/status_formatter.rb', line 41 def format_position_section(status) lines = [] lines << "" # Header with optional task pattern header = "## Position" header += " (task: #{status.task_pattern})" if status.has_task_pattern? lines << header lines << "" # Raw git status -sb output if status.has_git_status? lines << status.git_status_sb elsif status.branch # Fallback if no git status available lines << "Branch: #{status.branch}#{" (detached HEAD)" if status.detached?}" end lines end |
.format_pr_activity_section(pr_activity) ⇒ Array<String>
Format PR activity section
113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
# File 'lib/ace/git/atoms/status_formatter.rb', line 113 def format_pr_activity_section(pr_activity) lines = [] lines << "" lines << "## PR Activity" lines << "" # Handle nil pr_activity for defensive programming return lines << "No recent PR activity" if pr_activity.nil? # pr_activity uses symbol keys (from RepoStatusLoader) # PR data within uses string keys (from JSON parsing) merged = pr_activity[:merged] || [] open_prs = pr_activity[:open] || [] unless merged.empty? lines << "Merged:" merged.each do |pr| title = pr["title"] || "(no title)" merged_ago = format_merged_time_compact(pr["mergedAt"]) lines << " ##{pr["number"]} #{title}#{merged_ago}" end end unless open_prs.empty? lines << "" unless merged.empty? # Add spacing between Merged and Open lines << "Open:" open_prs.each do |pr| title = pr["title"] || "(no title)" = (pr["author"]) lines << " ##{pr["number"]} #{title}#{}" end end if merged.empty? && open_prs.empty? lines << "No recent PR activity" end lines end |
.format_recent_commits_section(commits) ⇒ Array<String>
Format recent commits section
65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/ace/git/atoms/status_formatter.rb', line 65 def format_recent_commits_section(commits) lines = [] lines << "" lines << "## Recent Commits" lines << "" commits.each do |commit| hash = commit[:hash] || commit["hash"] subject = commit[:subject] || commit["subject"] lines << "#{hash} #{subject}" end lines end |
.to_markdown(status) ⇒ String
Format repository status as markdown
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/ace/git/atoms/status_formatter.rb', line 13 def to_markdown(status) lines = [] lines << "# Repository Status" # 1. Position section (includes git status -sb) lines.concat(format_position_section(status)) # 2. Recent commits section if status.has_recent_commits? lines.concat(format_recent_commits_section(status.recent_commits)) end # 3. Current PR section (for current branch) if status.has_pr? lines.concat(format_current_pr_section(status.)) end # 4. PR Activity section (other PRs) if status.has_pr_activity? lines.concat(format_pr_activity_section(status.pr_activity)) end lines.join("\n") end |