Class: Fontisan::Pipeline::Strategies::BaseStrategy

Inherits:
Object
  • Object
show all
Defined in:
lib/fontisan/pipeline/strategies/base_strategy.rb

Overview

Base class for variation resolution strategies

This abstract class defines the interface that all variation resolution strategies must implement. It follows the Strategy pattern to allow different approaches to handling variable font data during conversion.

Subclasses must implement:

  • resolve(font): Process the font and return tables

  • preserves_variation?: Indicate if variation data is preserved

  • strategy_name: Return the strategy identifier

Examples:

Implementing a strategy

class MyStrategy < BaseStrategy
  def resolve(font)
    # Implementation
  end

  def preserves_variation?
    false
  end

  def strategy_name
    :my_strategy
  end
end

Direct Known Subclasses

InstanceStrategy, NamedStrategy, PreserveStrategy

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ BaseStrategy

Initialize strategy with options

Parameters:

  • options (Hash) (defaults to: {})

    Strategy-specific options



38
39
40
# File 'lib/fontisan/pipeline/strategies/base_strategy.rb', line 38

def initialize(options = {})
  @options = options
end

Instance Attribute Details

#optionsHash (readonly)

Returns Strategy options.

Returns:

  • (Hash)

    Strategy options



33
34
35
# File 'lib/fontisan/pipeline/strategies/base_strategy.rb', line 33

def options
  @options
end

Instance Method Details

#preserves_variation?Boolean

Check if strategy preserves variation data

Returns:

  • (Boolean)

    True if variation data is preserved

Raises:

  • (NotImplementedError)

    If not implemented by subclass



59
60
61
62
# File 'lib/fontisan/pipeline/strategies/base_strategy.rb', line 59

def preserves_variation?
  raise NotImplementedError,
        "#{self.class.name} must implement #preserves_variation?"
end

#resolve(font) ⇒ Hash<String, String>

Resolve variation data

This method must be implemented by subclasses to process the font and return the appropriate tables based on the strategy.

Parameters:

Returns:

  • (Hash<String, String>)

    Map of table tags to binary data

Raises:

  • (NotImplementedError)

    If not implemented by subclass



50
51
52
53
# File 'lib/fontisan/pipeline/strategies/base_strategy.rb', line 50

def resolve(font)
  raise NotImplementedError,
        "#{self.class.name} must implement #resolve"
end

#strategy_nameSymbol

Get strategy name

Returns:

  • (Symbol)

    Strategy identifier

Raises:

  • (NotImplementedError)

    If not implemented by subclass



68
69
70
71
# File 'lib/fontisan/pipeline/strategies/base_strategy.rb', line 68

def strategy_name
  raise NotImplementedError,
        "#{self.class.name} must implement #strategy_name"
end