Class: Coradoc::AsciiDoc::Transform::TransformerRegistry

Inherits:
Object
  • Object
show all
Defined in:
lib/coradoc/asciidoc/transform/transformer_registry.rb

Class Method Summary collapse

Class Method Details

.clearObject



60
61
62
63
# File 'lib/coradoc/asciidoc/transform/transformer_registry.rb', line 60

def clear
  registry.clear
  @prioritized_registry = nil
end

.lookup(model_class) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/coradoc/asciidoc/transform/transformer_registry.rb', line 30

def lookup(model_class)
  return registry[model_class] if registry.key?(model_class)

  if @prioritized_registry
    entry = @prioritized_registry.find { |e| model_class <= e[:class] }
    return entry[:transformer] if entry
  end

  model_class.ancestors.each do |ancestor|
    next if ancestor == model_class
    next if [Object, BasicObject].include?(ancestor)

    return registry[ancestor] if registry.key?(ancestor)
  end

  nil
end

.register(source_class, transformer, target_class: nil) ⇒ Object



12
13
14
15
16
17
18
# File 'lib/coradoc/asciidoc/transform/transformer_registry.rb', line 12

def register(source_class, transformer, target_class: nil)
  registry[source_class] = transformer

  return unless target_class

  reverse_registry[target_class] = transformer
end

.register_with_priority(source_class, transformer, priority: 0) ⇒ Object



20
21
22
23
24
25
26
27
28
# File 'lib/coradoc/asciidoc/transform/transformer_registry.rb', line 20

def register_with_priority(source_class, transformer, priority: 0)
  @prioritized_registry ||= []
  @prioritized_registry << {
    class: source_class,
    transformer: transformer,
    priority: priority
  }
  @prioritized_registry.sort_by! { |e| -e[:priority] }
end

.registered?(model_class) ⇒ Boolean

Returns:

  • (Boolean)


56
57
58
# File 'lib/coradoc/asciidoc/transform/transformer_registry.rb', line 56

def registered?(model_class)
  !lookup(model_class).nil?
end

.registered_classesObject



65
66
67
# File 'lib/coradoc/asciidoc/transform/transformer_registry.rb', line 65

def registered_classes
  registry.keys
end

.registryObject



8
9
10
# File 'lib/coradoc/asciidoc/transform/transformer_registry.rb', line 8

def registry
  @registry ||= {}
end

.transform(model) ⇒ Object



48
49
50
51
52
53
54
# File 'lib/coradoc/asciidoc/transform/transformer_registry.rb', line 48

def transform(model)
  return model if model.nil?
  return model.map { |item| transform(item) } if model.is_a?(Array)

  transformer = lookup(model.class)
  transformer ? transformer.call(model) : model
end