Class: Ace::Assign::Molecules::QueueScanner
- Inherits:
-
Object
- Object
- Ace::Assign::Molecules::QueueScanner
- 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
-
#current(steps_dir, assignment:) ⇒ Models::Step?
Get current step from queue.
-
#scan(steps_dir, assignment:) ⇒ Models::QueueState
Scan a steps directory and build queue state.
-
#step_numbers(steps_dir) ⇒ Array<String>
Get all step numbers in the queue.
Instance Method Details
#current(steps_dir, assignment:) ⇒ Models::Step?
Get current step from queue
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
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
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 |