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<Entry>
All registered collector plugin entries (plugin + priority metadata).
-
.collector_plugins ⇒ Array<#collect>
All registered collector plugins in registration order.
-
.register(plugin, priority: 0) ⇒ void
Register a plugin.
-
.tag_entries ⇒ Array<Entry>
All registered tag plugin entries (plugin + priority metadata).
-
.tag_plugins ⇒ Array<#call>
All registered tag plugins in registration order.
Class Method Details
.clear! ⇒ void
module_function: when included, also defines #clear! (instance visibility: private)
This method returns an undefined value.
Remove all registered plugins.
Primarily used in tests to reset state between examples.
105 106 107 108 109 |
# File 'lib/docscribe/plugin/registry.rb', line 105 def clear! @tag_entries.clear @collector_entries.clear @order_seq = 0 end |
.collector_entries ⇒ Array<Entry>
module_function: when included, also defines #collector_entries (instance visibility: private)
All registered collector plugin entries (plugin + priority metadata).
95 96 97 |
# File 'lib/docscribe/plugin/registry.rb', line 95 def collector_entries @collector_entries.dup end |
.collector_plugins ⇒ Array<#collect>
module_function: when included, also defines #collector_plugins (instance visibility: private)
All registered collector plugins in registration order.
79 80 81 |
# File 'lib/docscribe/plugin/registry.rb', line 79 def collector_plugins @collector_entries.map(&:plugin) end |
.register(plugin, priority: 0) ⇒ void
module_function: when included, also defines #register (instance 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)
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/docscribe/plugin/registry.rb', line 47 def register(plugin, priority: 0) prio = begin Integer(priority) rescue StandardError raise ArgumentError, "priority must be an Integer-like value, got: #{priority.inspect}" end @order_seq += 1 entry = Entry.new(plugin: plugin, priority: prio, order: @order_seq) 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<Entry>
module_function: when included, also defines #tag_entries (instance visibility: private)
All registered tag plugin entries (plugin + priority metadata).
87 88 89 |
# File 'lib/docscribe/plugin/registry.rb', line 87 def tag_entries @tag_entries.dup end |
.tag_plugins ⇒ Array<#call>
module_function: when included, also defines #tag_plugins (instance visibility: private)
All registered tag plugins in registration order.
71 72 73 |
# File 'lib/docscribe/plugin/registry.rb', line 71 def tag_plugins @tag_entries.map(&:plugin) end |