Class: Ace::Retro::Molecules::RetroScanner

Inherits:
Object
  • Object
show all
Defined in:
lib/ace/retro/molecules/retro_scanner.rb

Overview

Wraps DirectoryScanner for .retro.md files. Returns scan results with raw b36ts IDs (no type markers).

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(root_dir) ⇒ RetroScanner

Returns a new instance of RetroScanner.

Parameters:

  • root_dir (String)

    Root directory containing retros (e.g., “.ace-retros”)



15
16
17
18
19
20
21
# File 'lib/ace/retro/molecules/retro_scanner.rb', line 15

def initialize(root_dir)
  @root_dir = root_dir
  @scanner = Ace::Support::Items::Molecules::DirectoryScanner.new(
    root_dir,
    file_pattern: Atoms::RetroFilePattern::FILE_GLOB
  )
end

Instance Attribute Details

#last_folder_countsObject (readonly)

Returns the value of attribute last_folder_counts.



12
13
14
# File 'lib/ace/retro/molecules/retro_scanner.rb', line 12

def last_folder_counts
  @last_folder_counts
end

#last_scan_totalObject (readonly)

Returns the value of attribute last_scan_total.



12
13
14
# File 'lib/ace/retro/molecules/retro_scanner.rb', line 12

def last_scan_total
  @last_scan_total
end

Instance Method Details

#root_exists?Boolean

Check if root directory exists

Returns:

  • (Boolean)


50
51
52
# File 'lib/ace/retro/molecules/retro_scanner.rb', line 50

def root_exists?
  Dir.exist?(@root_dir)
end

#scanArray<ScanResult>

Scan for all retros

Returns:

  • (Array<ScanResult>)

    Sorted scan results



25
26
27
# File 'lib/ace/retro/molecules/retro_scanner.rb', line 25

def scan
  @scanner.scan
end

#scan_in_folder(folder) ⇒ Array<ScanResult>

Scan and filter by special folder or virtual filter

Parameters:

  • folder (String, nil)

    Folder name, virtual filter (“next”, “all”), or nil for all

Returns:

  • (Array<ScanResult>)

    Filtered scan results



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/ace/retro/molecules/retro_scanner.rb', line 32

def scan_in_folder(folder)
  results = scan
  @last_scan_total = results.size
  @last_folder_counts = results.group_by(&:special_folder).transform_values(&:size)
  return results if folder.nil?

  virtual = Ace::Support::Items::Atoms::SpecialFolderDetector.virtual_filter?(folder)
  case virtual
  when :all then results
  when :next then results.select { |r| r.special_folder.nil? }
  else
    normalized = Ace::Support::Items::Atoms::SpecialFolderDetector.normalize(folder)
    results.select { |r| r.special_folder == normalized }
  end
end