Class: Omnizip::Formats::FormatSpecLoader
- Inherits:
-
Object
- Object
- Omnizip::Formats::FormatSpecLoader
- Defined in:
- lib/omnizip/formats/format_spec_loader.rb
Overview
Loads and manages format specifications from YAML configuration files
This class provides a configuration-driven architecture for archive formats, allowing format specifications to be externalized in YAML files rather than hardcoded in the application.
Class Method Summary collapse
-
.all_specs ⇒ Hash<String, FormatSpecification>
Get all loaded format specifications.
-
.clear_specs ⇒ void
Clear all loaded specifications (primarily for testing).
-
.get(format_name) ⇒ FormatSpecification?
Get a loaded specification.
-
.load(format_name, config_dir: default_config_dir) ⇒ FormatSpecification
Load a format specification from a YAML file.
-
.load_all(config_dir: default_config_dir) ⇒ Hash<String, FormatSpecification>
Load all format specifications from a directory.
-
.loaded?(format_name) ⇒ Boolean
Check if a format specification is loaded.
Class Method Details
.all_specs ⇒ Hash<String, FormatSpecification>
Get all loaded format specifications
63 64 65 |
# File 'lib/omnizip/formats/format_spec_loader.rb', line 63 def all_specs @all_specs ||= {} end |
.clear_specs ⇒ void
This method returns an undefined value.
Clear all loaded specifications (primarily for testing)
70 71 72 |
# File 'lib/omnizip/formats/format_spec_loader.rb', line 70 def clear_specs @all_specs = {} end |
.get(format_name) ⇒ FormatSpecification?
Get a loaded specification
86 87 88 |
# File 'lib/omnizip/formats/format_spec_loader.rb', line 86 def get(format_name) all_specs[format_name] end |
.load(format_name, config_dir: default_config_dir) ⇒ FormatSpecification
Load a format specification from a YAML file
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/omnizip/formats/format_spec_loader.rb', line 35 def load(format_name, config_dir: default_config_dir) spec_file = File.join(config_dir, "#{format_name}_spec.yml") unless File.exist?(spec_file) raise FormatError, "Format specification not found: #{spec_file}" end yaml_content = File.read(spec_file) parsed_yaml = YAML.safe_load( yaml_content, permitted_classes: [Symbol], symbolize_names: true, ) validate_spec(parsed_yaml, format_name) spec = FormatSpecification.new(parsed_yaml) register_spec(format_name, spec) spec rescue Psych::SyntaxError => e raise FormatError, "Invalid YAML in #{spec_file}: #{e.}" end |
.load_all(config_dir: default_config_dir) ⇒ Hash<String, FormatSpecification>
Load all format specifications from a directory
94 95 96 97 98 99 100 101 102 103 104 105 106 |
# File 'lib/omnizip/formats/format_spec_loader.rb', line 94 def load_all(config_dir: default_config_dir) return all_specs unless Dir.exist?(config_dir) Dir.glob(File.join(config_dir, "*_spec.yml")).each do |spec_file| format_name = File.basename(spec_file, "_spec.yml") unless loaded?(format_name) load(format_name, config_dir: config_dir) end end all_specs end |
.loaded?(format_name) ⇒ Boolean
Check if a format specification is loaded
78 79 80 |
# File 'lib/omnizip/formats/format_spec_loader.rb', line 78 def loaded?(format_name) all_specs.key?(format_name) end |