Module: Docscribe::Plugin::Registry
- Defined in:
- lib/docscribe/plugin/registry.rb
Overview
Global plugin registry.
Plugins are registered once at boot time (e.g. in a file loaded via ‘plugins.require:` in docscribe.yml) and called for every file Docscribe processes.
Thread safety: registration is expected to happen before any parallel rewriting begins.
Defined Under Namespace
Classes: Entry
Class Method Summary collapse
-
.clear! ⇒ void
Remove all registered plugins.
-
.collector_entries ⇒ Array<Docscribe::Plugin::Registry::Entry>
All registered collector plugin entries (plugin + priority metadata).
-
.collector_plugins ⇒ Array<Object>
All registered collector plugins in registration order.
-
.create_entry(plugin, priority) ⇒ Docscribe::Plugin::Registry::Entry
Create a new Entry with the next order number.
-
.parse_priority(priority) ⇒ Integer, Object
Parse and validate plugin priority.
-
.register(plugin, priority: 0) ⇒ void
Register a plugin.
-
.route_entry(entry, plugin) ⇒ void
Route entry to tag or collector list.
-
.tag_entries ⇒ Array<Docscribe::Plugin::Registry::Entry>
All registered tag plugin entries (plugin + priority metadata).
-
.tag_plugins ⇒ Array<Object>
All registered tag plugins in registration order.
Class Method Details
.clear! ⇒ void
module_function: defines #clear! (visibility: private)
This method returns an undefined value.
Remove all registered plugins.
Primarily used in tests to reset state between examples.
131 132 133 134 135 |
# File 'lib/docscribe/plugin/registry.rb', line 131 def clear! @tag_entries.clear @collector_entries.clear @order_seq = 0 end |
.collector_entries ⇒ Array<Docscribe::Plugin::Registry::Entry>
module_function: defines #collector_entries (visibility: private)
All registered collector plugin entries (plugin + priority metadata).
121 122 123 |
# File 'lib/docscribe/plugin/registry.rb', line 121 def collector_entries @collector_entries.dup end |
.collector_plugins ⇒ Array<Object>
module_function: defines #collector_plugins (visibility: private)
All registered collector plugins in registration order.
105 106 107 |
# File 'lib/docscribe/plugin/registry.rb', line 105 def collector_plugins @collector_entries.map(&:plugin) end |
.create_entry(plugin, priority) ⇒ Docscribe::Plugin::Registry::Entry
module_function: defines #create_entry (visibility: private)
Create a new Entry with the next order number.
71 72 73 74 |
# File 'lib/docscribe/plugin/registry.rb', line 71 def create_entry(plugin, priority) @order_seq += 1 Entry.new(plugin: plugin, priority: priority, order: @order_seq) end |
.parse_priority(priority) ⇒ Integer, Object
module_function: defines #parse_priority (visibility: private)
Parse and validate plugin priority.
59 60 61 62 63 |
# File 'lib/docscribe/plugin/registry.rb', line 59 def parse_priority(priority) Integer(priority) rescue StandardError raise ArgumentError, "priority must be an Integer-like value, got: #{priority.inspect}" end |
.register(plugin, priority: 0) ⇒ void
module_function: defines #register (visibility: private)
This method returns an undefined value.
Register a plugin.
Routes to the appropriate list based on plugin type:
-
subclass of Base::TagPlugin => tag plugin
-
subclass of Base::CollectorPlugin => collector plugin
-
responds to #call => tag plugin (duck typing)
-
responds to #collect => collector plugin (duck typing)
45 46 47 48 49 |
# File 'lib/docscribe/plugin/registry.rb', line 45 def register(plugin, priority: 0) prio = parse_priority(priority) entry = create_entry(plugin, prio) route_entry(entry, plugin) end |
.route_entry(entry, plugin) ⇒ void
module_function: defines #route_entry (visibility: private)
This method returns an undefined value.
Route entry to tag or collector list.
83 84 85 86 87 88 89 90 91 |
# File 'lib/docscribe/plugin/registry.rb', line 83 def route_entry(entry, plugin) if plugin.is_a?(Base::CollectorPlugin) || plugin.respond_to?(:collect) @collector_entries << entry elsif plugin.is_a?(Base::TagPlugin) || plugin.respond_to?(:call) @tag_entries << entry else raise ArgumentError, 'Plugin must respond to #call (TagPlugin) or #collect (CollectorPlugin)' end end |
.tag_entries ⇒ Array<Docscribe::Plugin::Registry::Entry>
module_function: defines #tag_entries (visibility: private)
All registered tag plugin entries (plugin + priority metadata).
113 114 115 |
# File 'lib/docscribe/plugin/registry.rb', line 113 def tag_entries @tag_entries.dup end |
.tag_plugins ⇒ Array<Object>
module_function: defines #tag_plugins (visibility: private)
All registered tag plugins in registration order.
97 98 99 |
# File 'lib/docscribe/plugin/registry.rb', line 97 def tag_plugins @tag_entries.map(&:plugin) end |