Class: Coradoc::AsciiDoc::Transform::TransformerRegistry
- Inherits:
-
Object
- Object
- Coradoc::AsciiDoc::Transform::TransformerRegistry
- Defined in:
- lib/coradoc/asciidoc/transform/transformer_registry.rb
Class Method Summary collapse
- .clear ⇒ Object
- .lookup(model_class) ⇒ Object
- .register(source_class, transformer, target_class: nil) ⇒ Object
- .register_with_priority(source_class, transformer, priority: 0) ⇒ Object
- .registered?(model_class) ⇒ Boolean
- .registered_classes ⇒ Object
- .registry ⇒ Object
- .transform(model) ⇒ Object
Class Method Details
.clear ⇒ Object
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
56 57 58 |
# File 'lib/coradoc/asciidoc/transform/transformer_registry.rb', line 56 def registered?(model_class) !lookup(model_class).nil? end |
.registered_classes ⇒ Object
65 66 67 |
# File 'lib/coradoc/asciidoc/transform/transformer_registry.rb', line 65 def registered_classes registry.keys end |
.registry ⇒ Object
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 |