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

Class Method Details

.[](name) ⇒ Class?

Look up a handler class by name

Parameters:

  • name (String)

    Handler name

Returns:

  • (Class, nil)

    Handler class or nil if not found



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

Parameters:

Returns:

  • (Class)

    Handler class

Raises:



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

.handlersArray<String>

List all registered handler names

Returns:

  • (Array<String>)

    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

Parameters:

  • name (String, Symbol)

    Handler name (matches import/handler annotation)

  • handler_class (Class)

    Handler class that extends Handler



16
17
18
# File 'lib/archsight/import/registry.rb', line 16

def register(name, handler_class)
  @handlers[name.to_s] = handler_class
end