Module: Fontist::Utils
- Defined in:
- lib/fontist/utils.rb,
lib/fontist/utils/ui.rb,
lib/fontist/utils/cache.rb,
lib/fontist/utils/system.rb,
lib/fontist/utils/locking.rb,
lib/fontist/utils/file_ops.rb,
lib/fontist/utils/downloader.rb,
lib/fontist/utils/file_magic.rb,
lib/fontist/utils/github_url.rb,
lib/fontist/utils/github_client.rb
Defined Under Namespace
Modules: FileOps, Locking, System Classes: Cache, CacheIndex, CacheIndexItem, Downloader, FileMagic, GitHubClient, GitHubUrl, NullProgressBar, ProgressBar, UI
Class Method Summary collapse
-
.case_insensitive_glob(pattern) ⇒ String
Converts a glob pattern to case-insensitive by replacing each alphabetic character with a character class [aA].
-
.font_file_patterns(prefix) ⇒ Array<String>
Returns array of case-insensitive glob patterns for font file extensions.
Class Method Details
.case_insensitive_glob(pattern) ⇒ String
Converts a glob pattern to case-insensitive by replacing each alphabetic character with a character class [aA]
This is needed because File::FNM_CASEFOLD is ignored on case-sensitive filesystems (Linux) as of Ruby 3.1+
28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/fontist/utils.rb', line 28 def self.case_insensitive_glob(pattern) result = +"" pattern.each_char do |char| result << if char.downcase == char.upcase # Non-alphabetic (numbers, punctuation) - keep as-is char else # Alphabetic character - create character class "[#{char.downcase}#{char.upcase}]" end end result end |
.font_file_patterns(prefix) ⇒ Array<String>
Returns array of case-insensitive glob patterns for font file extensions
Generates patterns that match font files regardless of extension case. On case-insensitive filesystems (Windows, macOS), uses simple lowercase patterns. On case-sensitive filesystems (Linux), uses character class patterns like [tT][fF].
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/fontist/utils.rb', line 68 def self.font_file_patterns(prefix) extensions = %w[ttf otf ttc otc woff woff2] # On case-insensitive filesystems (Windows, macOS), use simple patterns # On case-sensitive filesystems (Linux), use character class patterns if %i[windows macosx].include?(Fontist::Utils::System.user_os) # Case-insensitive filesystem - simple patterns work fine extensions.map { |ext| File.join(prefix, "*.#{ext}") } else # Case-sensitive filesystem (Linux) - use character classes extensions.map do |ext| File.join(prefix, "*#{case_insensitive_glob(".#{ext}")}") end end end |