Class: Omnizip::Models::FilterConfig

Inherits:
Object
  • Object
show all
Defined in:
lib/omnizip/models/filter_config.rb

Overview

Configuration model for a filter in a compression pipeline.

This class replaces hash-based filter configuration with a proper model class. It provides format-aware ID resolution and validation.

Examples:

Create a BCJ filter configuration

config = FilterConfig.new(name: :bcj_x86, architecture: :x86)
config.id_for_format(:xz)         # => 0x04
config.id_for_format(:seven_zip)  # => 0x03030103

Create a Delta filter configuration

config = FilterConfig.new(name: :delta)
config.delta?  # => true

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(attributes = {}) ⇒ FilterConfig

Initialize filter configuration.

Parameters:

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

    Initialization attributes

Options Hash (attributes):

  • :name (Symbol)

    Filter name

  • :name_sym (Symbol)

    Filter name (alternative key)

  • :properties (String)

    Binary properties data

  • :architecture (Symbol)

    Target architecture



51
52
53
54
55
# File 'lib/omnizip/models/filter_config.rb', line 51

def initialize(attributes = {})
  @name_sym = attributes[:name] || attributes[:name_sym]
  @properties = attributes[:properties] || "".b
  @architecture = attributes[:architecture]
end

Instance Attribute Details

#architectureSymbol

Returns Target architecture for BCJ filters.

Returns:

  • (Symbol)

    Target architecture for BCJ filters



42
43
44
# File 'lib/omnizip/models/filter_config.rb', line 42

def architecture
  @architecture
end

#name_symSymbol (readonly)

Get filter name as symbol.

Returns:

  • (Symbol)

    Filter name



36
37
38
# File 'lib/omnizip/models/filter_config.rb', line 36

def name_sym
  @name_sym
end

#propertiesString

Returns Binary properties data for filter configuration.

Returns:

  • (String)

    Binary properties data for filter configuration



39
40
41
# File 'lib/omnizip/models/filter_config.rb', line 39

def properties
  @properties
end

Instance Method Details

#bcj?Boolean

Check if this is a BCJ filter.

Returns:

  • (Boolean)

    True if BCJ filter variant



109
110
111
# File 'lib/omnizip/models/filter_config.rb', line 109

def bcj?
  @name_sym.to_s.start_with?("bcj_")
end

#delta?Boolean

Check if this is a Delta filter.

Returns:

  • (Boolean)

    True if Delta filter



116
117
118
# File 'lib/omnizip/models/filter_config.rb', line 116

def delta?
  @name_sym == :delta
end

#filter_instanceObject

Get filter instance from registry.

Returns:

  • (Object)

    Filter instance from FilterRegistry

Raises:

  • (KeyError)

    If filter not found in registry



76
77
78
79
80
81
82
83
84
85
# File 'lib/omnizip/models/filter_config.rb', line 76

def filter_instance
  filter = Omnizip::FilterRegistry.get(@name_sym)

  # Handle architecture parameter if needed
  if @architecture && requires_initialize_kwargs?(filter)
    filter.new(architecture: @architecture)
  else
    filter.new
  end
end

#id_for_format(format) ⇒ Integer

Get filter ID for specific format.

Delegates to filter instance's id_for_format method if available. For older filters without id_for_format, returns a default value.

Parameters:

  • format (Symbol)

    Format identifier (:seven_zip, :xz)

Returns:

  • (Integer)

    Format-specific filter ID

Raises:

  • (NotImplementedError)

    If filter doesn't support id_for_format



95
96
97
98
99
100
101
102
103
104
# File 'lib/omnizip/models/filter_config.rb', line 95

def id_for_format(format)
  filter = filter_instance
  if filter.respond_to?(:id_for_format)
    filter.id_for_format(format)
  else
    raise NotImplementedError,
          "Filter #{@name_sym} doesn't support format-aware IDs. " \
          "Use the newer BCJ filter instead."
  end
end

#name=(value) ⇒ void

This method returns an undefined value.

Set filter name.

Parameters:

  • value (Symbol)

    Filter name



61
62
63
# File 'lib/omnizip/models/filter_config.rb', line 61

def name=(value)
  @name_sym = value
end

#to_hHash

Convert to hash representation.

Returns:

  • (Hash)

    Hash representation with :name, :properties, :architecture



137
138
139
140
141
142
143
# File 'lib/omnizip/models/filter_config.rb', line 137

def to_h
  {
    name: @name_sym,
    properties: @properties,
    architecture: @architecture,
  }
end

#validate!Boolean

Validate configuration.

Returns:

  • (Boolean)

    True if valid

Raises:

  • (ArgumentError)

    If filter name is nil or not registered



124
125
126
127
128
129
130
131
132
# File 'lib/omnizip/models/filter_config.rb', line 124

def validate!
  raise ArgumentError, "Filter name is required" if @name_sym.nil?

  unless Omnizip::FilterRegistry.registered?(@name_sym)
    raise ArgumentError, "Filter not registered: #{@name_sym}"
  end

  true
end