Class: Graphomaton::ExporterRegistry
- Inherits:
-
Object
- Object
- Graphomaton::ExporterRegistry
- Defined in:
- lib/graphomaton/exporter_registry.rb
Defined Under Namespace
Classes: Entry
Instance Method Summary collapse
- #aliases ⇒ Object
- #fetch(format) ⇒ Object
- #formats ⇒ Object
-
#initialize ⇒ ExporterRegistry
constructor
A new instance of ExporterRegistry.
- #register(name, aliases: [], extensions: [], binary: false, capabilities: [], exporter: nil, &loader) ⇒ Object
- #resolve(format) ⇒ Object
- #unregister(format) ⇒ Object
Constructor Details
#initialize ⇒ ExporterRegistry
Returns a new instance of ExporterRegistry.
14 15 16 17 |
# File 'lib/graphomaton/exporter_registry.rb', line 14 def initialize @entries = {} @aliases = {} end |
Instance Method Details
#aliases ⇒ Object
66 67 68 |
# File 'lib/graphomaton/exporter_registry.rb', line 66 def aliases @aliases.dup.freeze end |
#fetch(format) ⇒ Object
58 59 60 |
# File 'lib/graphomaton/exporter_registry.rb', line 58 def fetch(format) @entries.fetch(resolve(format)) end |
#formats ⇒ Object
62 63 64 |
# File 'lib/graphomaton/exporter_registry.rb', line 62 def formats @entries.keys.freeze end |
#register(name, aliases: [], extensions: [], binary: false, capabilities: [], exporter: nil, &loader) ⇒ Object
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/graphomaton/exporter_registry.rb', line 19 def register(name, aliases: [], extensions: [], binary: false, capabilities: [], exporter: nil, &loader) canonical = name.to_sym resolved_loader = loader || (-> { exporter }) raise ArgumentError, "Exporter #{canonical.inspect} requires an exporter class or loader block" unless exporter || loader keys = [canonical] + aliases.map(&:to_sym) + extensions.map { |extension| extension.to_s.delete_prefix('.').downcase.to_sym } collisions = keys.select { |key| @aliases.key?(key) }.uniq unless collisions.empty? raise ArgumentError, "Exporter identifiers are already registered: #{collisions.join(', ')}" end entry = Entry.new( name: canonical, aliases: aliases.map(&:to_sym).freeze, extensions: extensions.map { |extension| extension.to_s.delete_prefix('.').downcase }.freeze, binary: binary, capabilities: capabilities.map(&:to_sym).freeze, loader: resolved_loader ) @entries[canonical] = entry ([canonical] + entry.aliases + entry.extensions.map(&:to_sym)).each { |key| @aliases[key] = canonical } entry end |
#resolve(format) ⇒ Object
50 51 52 53 54 55 56 |
# File 'lib/graphomaton/exporter_registry.rb', line 50 def resolve(format) key = format.to_s.delete_prefix('.').downcase.to_sym canonical = @aliases[key] return canonical if canonical raise ArgumentError, "Unknown format: #{format.inspect}. Available formats: #{formats.join(', ')}" end |
#unregister(format) ⇒ Object
43 44 45 46 47 48 |
# File 'lib/graphomaton/exporter_registry.rb', line 43 def unregister(format) canonical = resolve(format) entry = @entries.delete(canonical) @aliases.delete_if { |_key, value| value == canonical } entry end |