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
1639 1640 1641 |
# File 'lib/kettle/jem.rb', line 1639 def camelize(value) value.to_s.split("_").map(&:capitalize).join end |
.load!(plugin_names:) ⇒ Object
1601 1602 1603 1604 1605 1606 |
# File 'lib/kettle/jem.rb', line 1601 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
1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 |
# File 'lib/kettle/jem.rb', line 1608 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.message}" end |
.normalize_plugin_names(plugin_names) ⇒ Object
1624 1625 1626 |
# File 'lib/kettle/jem.rb', line 1624 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
1632 1633 1634 1635 1636 1637 |
# File 'lib/kettle/jem.rb', line 1632 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.message}" end |
.plugin_require_path(plugin_name) ⇒ Object
1628 1629 1630 |
# File 'lib/kettle/jem.rb', line 1628 def plugin_require_path(plugin_name) plugin_name.to_s.tr("-", "/") end |