Class: Ace::Overseer::Organisms::StatusCollector
- Inherits:
-
Object
- Object
- Ace::Overseer::Organisms::StatusCollector
- Defined in:
- lib/ace/overseer/organisms/status_collector.rb
Instance Method Summary collapse
- #collect ⇒ Object
- #collect_quick(previous_snapshot) ⇒ Object
-
#initialize(worktree_manager: nil, context_collector: nil, project_root: nil) ⇒ StatusCollector
constructor
A new instance of StatusCollector.
- #to_h(snapshot) ⇒ Object
- #to_table(snapshot) ⇒ Object
Constructor Details
#initialize(worktree_manager: nil, context_collector: nil, project_root: nil) ⇒ StatusCollector
Returns a new instance of StatusCollector.
10 11 12 13 14 |
# File 'lib/ace/overseer/organisms/status_collector.rb', line 10 def initialize(worktree_manager: nil, context_collector: nil, project_root: nil) @worktree_manager = worktree_manager || Ace::Git::Worktree::Organisms::WorktreeManager.new @context_collector = context_collector || Molecules::WorktreeContextCollector.new @project_root = project_root end |
Instance Method Details
#collect ⇒ Object
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/ace/overseer/organisms/status_collector.rb', line 16 def collect result = @worktree_manager.list_all(show_tasks: true) raise Error, result[:error] || "Failed to list worktrees" unless result[:success] all_worktrees = Array(result[:worktrees]).reject(&:bare) # Exclude main worktree (handled separately via collect_main_context) main_root = @project_root || resolve_project_root non_main = all_worktrees.reject { |wt| main_root && wt.path == main_root } contexts = collect_contexts_parallel(non_main) # Keep task worktrees always; non-task worktrees only if they have assignments contexts.select! { |ctx| ctx.task_id != "unknown" || ctx.assignments.any? } main_context = collect_main_context contexts.unshift(main_context) if main_context && main_context.assignments.any? { contexts: contexts } end |
#collect_quick(previous_snapshot) ⇒ Object
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/ace/overseer/organisms/status_collector.rb', line 38 def collect_quick(previous_snapshot) previous_contexts = previous_snapshot[:contexts] return collect if previous_contexts.nil? || previous_contexts.empty? contexts = previous_contexts.map do |prev_ctx| @context_collector.collect_assignments_only( prev_ctx.worktree_path, cached_branch: prev_ctx.branch, cached_git_status: prev_ctx.git_status, location_type: prev_ctx.location_type ) rescue nil end.compact {contexts: contexts} end |
#to_h(snapshot) ⇒ Object
60 61 62 63 64 |
# File 'lib/ace/overseer/organisms/status_collector.rb', line 60 def to_h(snapshot) { worktrees: snapshot[:contexts].map { |context| context_to_h(context) } } end |
#to_table(snapshot) ⇒ Object
56 57 58 |
# File 'lib/ace/overseer/organisms/status_collector.rb', line 56 def to_table(snapshot) Atoms::StatusFormatter.format_dashboard(snapshot[:contexts]) end |