Module: Kettle::Jem::PluginLoader
- Defined in:
- lib/kettle/jem.rb
Constant Summary collapse
- REGISTRATION_METHOD =
:register_kettle_jem_plugin
Class Method Summary collapse
- .camelize(value) ⇒ Object
- .load!(plugin_names:) ⇒ Object
- .load_plugin!(plugin_name, registry:) ⇒ Object
- .normalize_plugin_names(plugin_names) ⇒ Object
- .plugin_handle(plugin_name) ⇒ Object
- .plugin_require_path(plugin_name) ⇒ Object
Class Method Details
.camelize(value) ⇒ Object
1641 1642 1643 |
# File 'lib/kettle/jem.rb', line 1641 def camelize(value) value.to_s.split("_").map(&:capitalize).join end |
.load!(plugin_names:) ⇒ Object
1603 1604 1605 1606 1607 1608 |
# File 'lib/kettle/jem.rb', line 1603 def load!(plugin_names:) names = normalize_plugin_names(plugin_names) registry = PluginRegistry.new(configured_plugins: names, loaded_plugins: names) names.each { |plugin_name| load_plugin!(plugin_name, registry: registry) } registry end |
.load_plugin!(plugin_name, registry:) ⇒ Object
1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 |
# File 'lib/kettle/jem.rb', line 1610 def load_plugin!(plugin_name, registry:) # Plugins are apply-time main-Ractor extensions; workers receive reports, not plugin callbacks. require(plugin_require_path(plugin_name)) handle = plugin_handle(plugin_name) unless handle.respond_to?(REGISTRATION_METHOD) raise Error, "Plugin #{plugin_name.inspect} does not implement #{REGISTRATION_METHOD}." end handle.public_send( REGISTRATION_METHOD, PluginRegistrar.new(plugin_name: plugin_name, registry: registry) ) rescue LoadError => e raise Error, "Could not load plugin #{plugin_name.inspect}: #{e.}" end |
.normalize_plugin_names(plugin_names) ⇒ Object
1626 1627 1628 |
# File 'lib/kettle/jem.rb', line 1626 def normalize_plugin_names(plugin_names) Array(plugin_names).flatten.map { |name| name.to_s.strip }.reject(&:empty?).uniq end |
.plugin_handle(plugin_name) ⇒ Object
1634 1635 1636 1637 1638 1639 |
# File 'lib/kettle/jem.rb', line 1634 def plugin_handle(plugin_name) constant_name = plugin_name.to_s.split("-").map { |part| camelize(part) }.join("::") constant_name.split("::").inject(Object) { |scope, name| scope.const_get(name) } rescue NameError => e raise Error, "Could not resolve plugin handle for #{plugin_name.inspect}: #{e.}" end |
.plugin_require_path(plugin_name) ⇒ Object
1630 1631 1632 |
# File 'lib/kettle/jem.rb', line 1630 def plugin_require_path(plugin_name) plugin_name.to_s.tr("-", "/") end |