Class: Coradoc::Reference::Materializer::Registry
- Inherits:
-
Object
- Object
- Coradoc::Reference::Materializer::Registry
- Defined in:
- lib/coradoc/reference/materializer/registry.rb
Overview
Registry of materializers keyed by [kind, presentation, format].
Lookup falls back on :any — so a materializer registered for
[:link, :any, :html] handles every presentation in HTML.
Most specific key wins (concrete > :any).
Format gems register their materializers process-wide via
.register_global (OCP): every registry instance picks them up
on first use, and dispatch code never changes.
Constant Summary collapse
- BUILTINS =
Core ships only the node-preserving fallback. Format-specific materializers live in the format gems (coradoc-html, coradoc-adoc, ...) and register globally at load time.
[Materializer::Passthrough].freeze
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize ⇒ Registry
constructor
A new instance of Registry.
- #lookup(kind:, presentation:, format:) ⇒ Object
- #register(klass) ⇒ Object
- #registered ⇒ Object
- #reset! ⇒ Object
Constructor Details
#initialize ⇒ Registry
Returns a new instance of Registry.
41 42 43 44 |
# File 'lib/coradoc/reference/materializer/registry.rb', line 41 def initialize @by_key = {} @builtins_registered = false end |
Class Method Details
.global_registrations ⇒ Object
32 33 34 |
# File 'lib/coradoc/reference/materializer/registry.rb', line 32 def global_registrations GLOBAL_MUTEX.synchronize { @global_registrations.dup } end |
.register_global(klass) ⇒ Object
26 27 28 29 30 |
# File 'lib/coradoc/reference/materializer/registry.rb', line 26 def register_global(klass) GLOBAL_MUTEX.synchronize do @global_registrations << klass unless @global_registrations.include?(klass) end end |
.reset_globals! ⇒ Object
36 37 38 |
# File 'lib/coradoc/reference/materializer/registry.rb', line 36 def reset_globals! GLOBAL_MUTEX.synchronize { @global_registrations.clear } end |
Instance Method Details
#lookup(kind:, presentation:, format:) ⇒ Object
51 52 53 54 55 56 57 58 |
# File 'lib/coradoc/reference/materializer/registry.rb', line 51 def lookup(kind:, presentation:, format:) ensure_builtins_registered! find_most_specific(kind, presentation, format) || find_most_specific(kind, presentation, :any) || find_most_specific(kind, :any, format) || find_most_specific(kind, :any, :any) || find_most_specific(:any, :any, :any) end |
#register(klass) ⇒ Object
46 47 48 49 |
# File 'lib/coradoc/reference/materializer/registry.rb', line 46 def register(klass) ensure_builtins_registered! @by_key[EntryKey.new(klass.kind, klass.presentation, klass.format)] = klass end |
#registered ⇒ Object
60 61 62 63 |
# File 'lib/coradoc/reference/materializer/registry.rb', line 60 def registered ensure_builtins_registered! @by_key.dup end |
#reset! ⇒ Object
65 66 67 68 |
# File 'lib/coradoc/reference/materializer/registry.rb', line 65 def reset! @by_key.clear @builtins_registered = false end |