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
1698 1699 1700 |
# File 'lib/kettle/jem.rb', line 1698 def camelize(value) value.to_s.split("_").map(&:capitalize).join end |
.load!(plugin_names:) ⇒ Object
1660 1661 1662 1663 1664 1665 |
# File 'lib/kettle/jem.rb', line 1660 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
1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 |
# File 'lib/kettle/jem.rb', line 1667 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
1683 1684 1685 |
# File 'lib/kettle/jem.rb', line 1683 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
1691 1692 1693 1694 1695 1696 |
# File 'lib/kettle/jem.rb', line 1691 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
1687 1688 1689 |
# File 'lib/kettle/jem.rb', line 1687 def plugin_require_path(plugin_name) plugin_name.to_s.tr("-", "/") end |