Module: Coradoc::Reference::Edge::Kind

Defined in:
lib/coradoc/reference/edge/kind.rb

Overview

Registry mapping kind symbol → Entry(name, options_class). Built-in kinds are registered lazily on first access. External gems add kinds via Edge.register_kind (OCP).

register always forces builtin registration first, so an external registration made before first use is never clobbered by the lazy builtin pass.

Class Method Summary collapse

Class Method Details

.ensure_builtins_registered!Object



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/coradoc/reference/edge/kind.rb', line 50

def ensure_builtins_registered!
  MUTEX.synchronize do
    return if @builtins_registered

    @registering_builtins = true
    begin
      register(:navigation, options_class: Edge::NavigationOptions)
      register(:citation, options_class: Edge::CitationOptions)
      register(:link, options_class: Edge::LinkOptions)
      register(:include, options_class: Edge::IncludeOptions)
      register(:image_ref, options_class: Edge::ImageRefOptions)
      register(:footnote_ref, options_class: Edge::FootnoteRefOptions)
      @builtins_registered = true
    ensure
      @registering_builtins = false
    end
  end
end

.entry_for(name) ⇒ Object



40
41
42
43
# File 'lib/coradoc/reference/edge/kind.rb', line 40

def entry_for(name)
  ensure_builtins_registered!
  @entries[name.to_sym]
end

.namesObject



30
31
32
33
# File 'lib/coradoc/reference/edge/kind.rb', line 30

def names
  ensure_builtins_registered!
  @entries.keys
end

.options_class_for(name) ⇒ Object



35
36
37
38
# File 'lib/coradoc/reference/edge/kind.rb', line 35

def options_class_for(name)
  ensure_builtins_registered!
  @entries[name.to_sym]&.options_class
end

.register(name, options_class: nil) ⇒ Object



25
26
27
28
# File 'lib/coradoc/reference/edge/kind.rb', line 25

def register(name, options_class: nil)
  ensure_builtins_registered! unless @registering_builtins
  @entries[name.to_sym] = Entry.new(name.to_sym, options_class)
end

.reset!Object



45
46
47
48
# File 'lib/coradoc/reference/edge/kind.rb', line 45

def reset!
  @entries.clear
  @builtins_registered = false
end