Class: Ace::Support::Items::Molecules::DirectoryScanner
- Inherits:
-
Object
- Object
- Ace::Support::Items::Molecules::DirectoryScanner
- Defined in:
- lib/ace/support/items/molecules/directory_scanner.rb
Overview
Recursively scans an item root directory for item spec files. Returns ScanResult objects with folder and ID metadata.
Item directories follow the convention: id-slug/ Item spec files match a configurable glob pattern within those directories.
The id_extractor proc allows customizing how IDs are extracted from folder names. Default: matches 6-char b36ts IDs (e.g., “8ppq7w-dark-mode”) Custom: can match type-marked IDs (e.g., “8pp.t.q7w-fix-login”)
Constant Summary collapse
- DEFAULT_ID_EXTRACTOR =
Default extractor for 6-char raw b36ts IDs
->(folder_name) { match = folder_name.match(/^([0-9a-z]{6})-?(.*)$/) return nil unless match id = match[1] slug = match[2].empty? ? folder_name : match[2] [id, slug] }
Instance Method Summary collapse
-
#initialize(root_dir, file_pattern:, id_extractor: nil) ⇒ DirectoryScanner
constructor
A new instance of DirectoryScanner.
-
#scan ⇒ Array<ScanResult>
Scan root directory recursively for items.
Constructor Details
#initialize(root_dir, file_pattern:, id_extractor: nil) ⇒ DirectoryScanner
Returns a new instance of DirectoryScanner.
35 36 37 38 39 |
# File 'lib/ace/support/items/molecules/directory_scanner.rb', line 35 def initialize(root_dir, file_pattern:, id_extractor: nil) @root_dir = root_dir @file_pattern = file_pattern @id_extractor = id_extractor || DEFAULT_ID_EXTRACTOR end |
Instance Method Details
#scan ⇒ Array<ScanResult>
Scan root directory recursively for items
43 44 45 46 47 48 49 |
# File 'lib/ace/support/items/molecules/directory_scanner.rb', line 43 def scan return [] unless Dir.exist?(@root_dir) results = [] scan_directory(@root_dir, results) results.sort_by(&:id) end |