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
-
.register(format_name, adapter) ⇒ Object
Register an adapter for a format name.
-
.registered_formats ⇒ Object
Returns all registered format names.
-
.resolve(format_name) ⇒ Object
Look up the adapter for a format name.
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_formats ⇒ Object
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 |