Module: Lutaml::Lml::Executor::FormatAdapter

Defined in:
lib/lutaml/lml/executor/format_adapter.rb

Overview

Pluggable format adapter registry. Adapters handle the actual I/O for a given format (CSV, XML, etc.).

Each adapter must implement:

.import(imp, compiled:) — read external data, return array of instances
.export(exp, instances, compiled:) — write instances to external format

Defined Under Namespace

Classes: AdapterNotFoundError

Constant Summary collapse

BUILTIN_ADAPTERS =

Built-in adapters resolved by referencing the constant under Executor, which triggers autoload on first access. External adapters can still register via ‘register`.

{
  "csv" => :CsvAdapter,
  "xml" => :XmlAdapter
}.freeze

Class Method Summary collapse

Class Method Details

.register(format_name, adapter) ⇒ Object

Register an adapter for a format name.



27
28
29
# File 'lib/lutaml/lml/executor/format_adapter.rb', line 27

def self.register(format_name, adapter)
  @adapters[format_name.to_s] = adapter
end

.registered_formatsObject

Returns all registered format names.



48
49
50
# File 'lib/lutaml/lml/executor/format_adapter.rb', line 48

def self.registered_formats
  @adapters.keys
end

.resolve(format_name) ⇒ Object

Look up the adapter for a format name.



32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/lutaml/lml/executor/format_adapter.rb', line 32

def self.resolve(format_name)
  key = format_name.to_s
  return @adapters[key] if @adapters.key?(key)

  builtin = BUILTIN_ADAPTERS[key]
  if builtin
    adapter = Executor.const_get(builtin)
    register(key, adapter)
    return adapter
  end

  raise(AdapterNotFoundError,
    "No adapter registered for format '#{format_name}'")
end