Module: Archsight::Import::Registry
- Defined in:
- lib/archsight/import/registry.rb
Overview
Registry of import handlers
Handlers register themselves with a name that matches the import/handler annotation. The executor looks up handlers by name to instantiate and execute them.
Class Method Summary collapse
-
.[](name) ⇒ Class?
Look up a handler class by name.
-
.clear! ⇒ Object
Clear all registered handlers (for testing).
-
.handler_for(import_resource) ⇒ Class
Get handler class for an import resource.
-
.handler_for_language(lang) ⇒ Object
Look up a grapher handler by its declared language name.
-
.handlers ⇒ Array<String>
List all registered handler names.
-
.handlers_for(path) ⇒ Object
Return all grapher handler classes that can handle the given path.
-
.name_for(klass) ⇒ Object
Reverse lookup: return the registered name for a handler class, or nil.
-
.register(name, handler_class) ⇒ Object
Register a handler class with a name.
Class Method Details
.[](name) ⇒ Class?
Look up a handler class by name
23 24 25 |
# File 'lib/archsight/import/registry.rb', line 23 def [](name) @handlers[name.to_s] end |
.clear! ⇒ Object
Clear all registered handlers (for testing)
70 71 72 |
# File 'lib/archsight/import/registry.rb', line 70 def clear! @handlers = {} end |
.handler_for(import_resource) ⇒ Class
Get handler class for an import resource
31 32 33 34 35 36 37 38 |
# File 'lib/archsight/import/registry.rb', line 31 def handler_for(import_resource) handler_name = import_resource.annotations["import/handler"] handler_class = self[handler_name] raise Archsight::Import::UnknownHandlerError, "Unknown import handler: #{handler_name}" unless handler_class handler_class end |
.handler_for_language(lang) ⇒ Object
Look up a grapher handler by its declared language name.
Handler classes opt in by implementing self.language_name.
54 55 56 |
# File 'lib/archsight/import/registry.rb', line 54 def handler_for_language(lang) @handlers.values.find { |h| h.respond_to?(:language_name) && h.language_name == lang } end |
.handlers ⇒ Array<String>
List all registered handler names
65 66 67 |
# File 'lib/archsight/import/registry.rb', line 65 def handlers @handlers.keys end |
.handlers_for(path) ⇒ Object
Return all grapher handler classes that can handle the given path.
Each class opts in by implementing self.applicable?(path) returning true/false.
42 43 44 45 46 47 48 49 50 |
# File 'lib/archsight/import/registry.rb', line 42 def handlers_for(path) @handlers.values.select do |h| h.respond_to?(:applicable?) && begin h.applicable?(path) rescue Errno::ELOOP, Errno::ENOTDIR false end end end |
.name_for(klass) ⇒ Object
Reverse lookup: return the registered name for a handler class, or nil.
59 60 61 |
# File 'lib/archsight/import/registry.rb', line 59 def name_for(klass) @handlers.key(klass) end |
.register(name, handler_class) ⇒ Object
Register a handler class with a name
16 17 18 |
# File 'lib/archsight/import/registry.rb', line 16 def register(name, handler_class) @handlers[name.to_s] = handler_class end |