Module: Woods::FilenameUtils

Included in:
Extractor, Resilience::IndexValidator
Defined in:
lib/woods/filename_utils.rb

Overview

Shared filename helpers for converting unit identifiers to safe filenames.

Used by Extractor (writing) and IndexValidator (reading) to ensure filename generation is consistent across both sides.

Instance Method Summary collapse

Instance Method Details

#collision_safe_filename(identifier) ⇒ String

Convert an identifier to a collision-safe filename (current format).

Appends a short SHA256 digest to disambiguate identifiers that normalize to the same safe_filename.

Parameters:

  • identifier (String)

    The unit identifier

Returns:

  • (String)

    Collision-safe filename (e.g., “Admin__UsersController_a1b2c3d4.json”)



26
27
28
29
30
# File 'lib/woods/filename_utils.rb', line 26

def collision_safe_filename(identifier)
  base = identifier.gsub('::', '__').gsub(/[^a-zA-Z0-9_-]/, '_')
  digest = Digest::SHA256.hexdigest(identifier)[0, 8]
  "#{base}_#{digest}.json"
end

#safe_filename(identifier) ⇒ String

Convert an identifier to a safe filename (legacy format).

Parameters:

  • identifier (String)

    The unit identifier (e.g., “Admin::UsersController”)

Returns:

  • (String)

    A filesystem-safe filename (e.g., “Admin__UsersController.json”)



15
16
17
# File 'lib/woods/filename_utils.rb', line 15

def safe_filename(identifier)
  "#{identifier.gsub('::', '__').gsub(/[^a-zA-Z0-9_-]/, '_')}.json"
end