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.



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

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



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

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



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

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:



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

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:



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

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



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

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:



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

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



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

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



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

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



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

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



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

def reset_cache
  @collection = nil
end