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



94
95
96
97
98
99
100
# File 'lib/fontist/indexes/base_font_collection_index.rb', line 94

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

#disable_read_only_modeself

Disable read-only mode, restoring normal index_changed? checks.

Returns:

  • (self)

    Returns self for chaining



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

def disable_read_only_mode
  collection.disable_read_only_mode
  self
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



82
83
84
85
86
# File 'lib/fontist/indexes/base_font_collection_index.rb', line 82

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:



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

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



121
122
123
# File 'lib/fontist/indexes/base_font_collection_index.rb', line 121

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



108
109
110
111
112
113
# File 'lib/fontist/indexes/base_font_collection_index.rb', line 108

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



131
132
133
# File 'lib/fontist/indexes/base_font_collection_index.rb', line 131

def reset_cache
  @collection = nil
end