Class: Ace::Assign::Molecules::AssignmentDiscoverer

Inherits:
Object
  • Object
show all
Defined in:
lib/ace/assign/molecules/assignment_discoverer.rb

Overview

Discovers and enriches assignments with computed state.

Combines AssignmentManager (file operations) with QueueScanner (step scanning) to produce AssignmentInfo objects with full state, progress, and current step information.

Instance Method Summary collapse

Constructor Details

#initialize(cache_base: nil) ⇒ AssignmentDiscoverer

Returns a new instance of AssignmentDiscoverer.

Parameters:

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

    Base cache directory



13
14
15
16
17
# File 'lib/ace/assign/molecules/assignment_discoverer.rb', line 13

def initialize(cache_base: nil)
  @cache_base = cache_base || Ace::Assign.cache_dir
  @assignment_manager = AssignmentManager.new(cache_base: @cache_base)
  @queue_scanner = QueueScanner.new
end

Instance Method Details

#find_all(include_completed: false) ⇒ Array<Models::AssignmentInfo>

Find all assignments with computed state

NOTE: Performance — This loads and enriches every assignment before filtering. Acceptable for typical usage (< 50 assignments). If assignment counts grow large, consider filtering by state at the manager level before enrichment to avoid unnecessary QueueScanner.scan calls on completed assignments.

Parameters:

  • include_completed (Boolean) (defaults to: false)

    Include completed assignments (default: false)

Returns:



28
29
30
31
32
# File 'lib/ace/assign/molecules/assignment_discoverer.rb', line 28

def find_all(include_completed: false)
  @assignment_manager.list
    .map { |a| enrich_assignment(a) }
    .select { |ai| include_completed || !ai.completed? }
end

#find_by_task(task_ref:, active_only: true) ⇒ Array<Models::AssignmentInfo>

Find assignments by task reference (assignment name)

Parameters:

  • task_ref (String)

    Task reference to filter by

  • active_only (Boolean) (defaults to: true)

    Only return active assignments (default: true)

Returns:



39
40
41
42
# File 'lib/ace/assign/molecules/assignment_discoverer.rb', line 39

def find_by_task(task_ref:, active_only: true)
  find_all(include_completed: !active_only)
    .select { |ai| ai.assignment.name == task_ref }
end