Class: Fontist::Indexes::BaseFontCollectionIndex

Inherits:
Object
  • Object
show all
Includes:
Singleton
Defined in:
lib/fontist/indexes/base_font_collection_index.rb

Overview

Base class for font collection indexes

Provides common functionality for managing font indexes using SystemIndexFontCollection with different path loaders.

Subclasses must implement:

  • index_path: Returns the path where the index file should be stored

  • font_paths: Returns an array of font file paths to index

## Singleton Pattern

All index classes use Singleton to ensure consistent state across the application and enable caching.

Direct Known Subclasses

FontistIndex, SystemIndex, UserIndex

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeBaseFontCollectionIndex

Returns a new instance of BaseFontCollectionIndex.



29
30
31
# File 'lib/fontist/indexes/base_font_collection_index.rb', line 29

def initialize
  # Don't initialize collection here - use lazy initialization via collection method
end

Class Method Details

.reset_cachevoid

This method returns an undefined value.

Class method to reset the singleton instance cache



25
26
27
# File 'lib/fontist/indexes/base_font_collection_index.rb', line 25

def self.reset_cache
  instance.reset_cache
end

Instance Method Details

#add_font(_path) ⇒ void

This method returns an undefined value.

Adds a font to the index

Triggers index rebuild to ensure font is included

Parameters:

  • path (String)

    Full path to installed font file



87
88
89
90
91
92
93
# File 'lib/fontist/indexes/base_font_collection_index.rb', line 87

def add_font(_path)
  # Reset verification flag to force re-check
  collection.reset_verification!

  # Force rebuild to include new font
  collection.build(forced: true, verbose: false)
end

#collectionSystemIndexFontCollection

Get the collection, initializing it lazily if nil

Uses lazy initialization so that the collection is created with fresh font_paths each time it’s accessed after reset_cache

Returns:



48
49
50
51
52
53
# File 'lib/fontist/indexes/base_font_collection_index.rb', line 48

def collection
  @collection ||= SystemIndexFontCollection.from_file(
    path: index_path,
    paths_loader: -> { font_paths },
  )
end

#find(font_name, style = nil) ⇒ Array<SystemIndexFont>?

Finds fonts by name and optional style

Parameters:

  • font_name (String)

    Font family name

  • style (String, nil) (defaults to: nil)

    Optional style (e.g., “Regular”, “Bold”)

Returns:



38
39
40
# File 'lib/fontist/indexes/base_font_collection_index.rb', line 38

def find(font_name, style = nil)
  collection.find(font_name, style)
end

#font_exists?(path) ⇒ Boolean

Checks if a font exists at the given path

Parameters:

  • path (String)

    Full path to font file

Returns:

  • (Boolean)

    true if font exists in index



75
76
77
78
79
# File 'lib/fontist/indexes/base_font_collection_index.rb', line 75

def font_exists?(path)
  return false if collection.fonts.nil?

  collection.fonts.any? { |f| f.path == path }
end

#fontsArray<SystemIndexFont>

Returns all fonts in the index

Returns:



67
68
69
# File 'lib/fontist/indexes/base_font_collection_index.rb', line 67

def fonts
  collection.fonts || []
end

#read_only_modeself

Enable read-only mode for operations that don’t need index rebuilding This is used during manifest compilation to avoid expensive index checks

Returns:

  • (self)

    Returns self for chaining



59
60
61
62
# File 'lib/fontist/indexes/base_font_collection_index.rb', line 59

def read_only_mode
  collection.read_only_mode
  self
end

#rebuild(verbose: false) ⇒ void

This method returns an undefined value.

Rebuilds the entire index

Scans all font directories and updates the index file

Parameters:

  • verbose (Boolean) (defaults to: false)

    Show detailed progress information



114
115
116
# File 'lib/fontist/indexes/base_font_collection_index.rb', line 114

def rebuild(verbose: false)
  collection.rebuild(verbose: verbose)
end

#remove_font(path) ⇒ void

This method returns an undefined value.

Removes a font from the index

Updates index file immediately

Parameters:

  • path (String)

    Full path to font file to remove



101
102
103
104
105
106
# File 'lib/fontist/indexes/base_font_collection_index.rb', line 101

def remove_font(path)
  return if collection.fonts.nil?

  collection.fonts.delete_if { |f| f.path == path }
  collection.to_file(index_path)
end

#reset_cachevoid

This method returns an undefined value.

Resets the singleton instance cache

Sets @collection to nil so that it will be re-initialized with fresh font_paths on next access via the collection method



124
125
126
# File 'lib/fontist/indexes/base_font_collection_index.rb', line 124

def reset_cache
  @collection = nil
end