Class: Metanorma::Mirror::HandlerRegistry

Inherits:
Object
  • Object
show all
Defined in:
lib/metanorma/mirror/handler_registry.rb

Defined Under Namespace

Classes: Entry

Instance Method Summary collapse

Constructor Details

#initializeHandlerRegistry

Returns a new instance of HandlerRegistry.



8
9
10
# File 'lib/metanorma/mirror/handler_registry.rb', line 8

def initialize
  @handlers = {}
end

Instance Method Details

#entry_for(model_element) ⇒ Object



26
27
28
# File 'lib/metanorma/mirror/handler_registry.rb', line 26

def entry_for(model_element)
  @handlers[model_element.class] || ancestor_entry(model_element)
end

#handle(model_element, context:) ⇒ Object



30
31
32
33
34
35
36
37
# File 'lib/metanorma/mirror/handler_registry.rb', line 30

def handle(model_element, context:)
  entry = entry_for(model_element)
  return HandlerResult.none unless entry

  kwargs = { context: context }.merge(entry.extra_kwargs || {})
  result = entry.callable.call(model_element, **kwargs)
  HandlerResult.new(result, concat: entry.concat)
end

#register(model_class, handler, method_name: :call, concat: false, extra_kwargs: {}) ⇒ Object



12
13
14
15
16
17
18
19
20
# File 'lib/metanorma/mirror/handler_registry.rb', line 12

def register(model_class, handler, method_name: :call, concat: false,
             extra_kwargs: {})
  callable = resolve_callable(handler, method_name)
  @handlers[model_class] = Entry.new(
    callable: callable,
    concat: concat,
    extra_kwargs: extra_kwargs,
  )
end

#registered?(model_class) ⇒ Boolean

Returns:

  • (Boolean)


22
23
24
# File 'lib/metanorma/mirror/handler_registry.rb', line 22

def registered?(model_class)
  @handlers.key?(model_class)
end