Class: Ace::Assign::Molecules::QueueScanner

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

Overview

Scans and builds queue state from step files.

Reconstructs queue by scanning steps/*.md files, sorting them, and parsing each file to build the complete queue state.

Instance Method Summary collapse

Instance Method Details

#current(steps_dir, assignment:) ⇒ Models::Step?

Get current step from queue

Parameters:

  • steps_dir (String)

    Path to steps directory

  • assignment (Models::Assignment)

    Assignment metadata

Returns:



37
38
39
40
# File 'lib/ace/assign/molecules/queue_scanner.rb', line 37

def current(steps_dir, assignment:)
  state = scan(steps_dir, assignment: assignment)
  state.current
end

#scan(steps_dir, assignment:) ⇒ Models::QueueState

Scan a steps directory and build queue state

Parameters:

  • steps_dir (String)

    Path to steps directory

  • assignment (Models::Assignment)

    Assignment metadata

Returns:



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

def scan(steps_dir, assignment:)
  return Models::QueueState.new(steps: [], assignment: assignment) unless File.directory?(steps_dir)

  # Get all step files
  files = Dir.glob(File.join(steps_dir, "*.st.md"))

  # Sort files
  sorted_files = Atoms::StepSorter.sort(files.map { |f| File.basename(f) })
    .map { |f| File.join(steps_dir, f) }

  # Parse each file into a Step
  steps = sorted_files.map { |file| parse_step_file(file) }.compact

  Models::QueueState.new(steps: steps, assignment: assignment)
end

#step_numbers(steps_dir) ⇒ Array<String>

Get all step numbers in the queue

Parameters:

  • steps_dir (String)

    Path to steps directory

Returns:

  • (Array<String>)

    Step numbers



46
47
48
49
50
51
52
53
54
# File 'lib/ace/assign/molecules/queue_scanner.rb', line 46

def step_numbers(steps_dir)
  return [] unless File.directory?(steps_dir)

  files = Dir.glob(File.join(steps_dir, "*.st.md"))
  files.map do |file|
    parsed = Atoms::StepFileParser.parse_filename(File.basename(file))
    parsed[:number]
  end.compact
end