Class: R2OAS::Plugin::Executor
- Extended by:
- Hookable
- Defined in:
- lib/r2-oas/plugin/executor.rb
Class Attribute Summary collapse
-
.plugin_map(plugins) ⇒ Object
e.g.) { transform: { setup: [ { plugin_name: ‘r2oas-transform-plugin-sample1’, plugin_klass: Sample1Plugin, hook_method: :setup }, { plugin_name: ‘r2oas-transform-plugin-sample2’, plugin_klass: Sample2Plugin, hook_method: :setup }, ], info: [ { plugin_name: ‘r2oas-transform-plugin-sample1’, plugin_klass: Sample1Plugin, hook_method: :info }, ] } }.
Class Method Summary collapse
- .create_use_plugins_info(plugins) ⇒ Object
- .execute_plugins(plugin_map, type, hook_method, *args) ⇒ Object
- .execute_transform_plugins(plugin_map, hook_method, *args) ⇒ Object
Instance Method Summary collapse
- #execute_transform_plugins(hook_method, *args) ⇒ Object
-
#initialize(plugins, opts) ⇒ Executor
constructor
A new instance of Executor.
Methods included from Hookable
execute_hook, has_hook?, hook_klass, hook_klass=, hooks, hooks_map, off, on
Constructor Details
#initialize(plugins, opts) ⇒ Executor
Returns a new instance of Executor.
11 12 13 14 |
# File 'lib/r2-oas/plugin/executor.rb', line 11 def initialize(plugins, opts) @plugins = plugins @use_plugin = !!opts[:use_plugin] end |
Class Attribute Details
.plugin_map(plugins) ⇒ Object
e.g.) {
transform: {
setup: [
{ plugin_name: 'r2oas-transform-plugin-sample1', plugin_klass: Sample1Plugin, hook_method: :setup },
{ plugin_name: 'r2oas-transform-plugin-sample2', plugin_klass: Sample2Plugin, hook_method: :setup },
],
info: [
{ plugin_name: 'r2oas-transform-plugin-sample1', plugin_klass: Sample1Plugin, hook_method: :info },
]
}
}
60 61 62 |
# File 'lib/r2-oas/plugin/executor.rb', line 60 def plugin_map @plugin_map end |
Class Method Details
.create_use_plugins_info(plugins) ⇒ Object
114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 |
# File 'lib/r2-oas/plugin/executor.rb', line 114 def create_use_plugins_info(plugins) will_use_plugins = [] result = {} plugins.each do |plugin_info| case plugin_info when Array plugin_name = plugin_info[0] plugin_opts = plugin_info[1] raise PluginNameError, 'Missing plugin name' if plugin_name.blank? result[plugin_name] = plugin_opts when String plugin_name = plugin_info plugin_opts = nil result[plugin_name] = plugin_opts else raise NoSupportError, "The plugin loading format '#{plugin_info.class}' is incorrect" end if will_use_plugins.include?(plugin_name) raise PluginDuplicationError, "Plugin: duplicate '#{plugin_name}'" else will_use_plugins.push(plugin_name) end end result end |
.execute_plugins(plugin_map, type, hook_method, *args) ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/r2-oas/plugin/executor.rb', line 32 def execute_plugins(plugin_map, type, hook_method, *args) return unless plugin_map.present? plugins_info = plugin_map[type.to_sym][hook_method.to_sym] return if plugins_info.nil? plugins_info.each do |info| opts = info[:plugin_opts] klass = info[:plugin_klass] klass.send(:opts=, opts) if opts.present? klass.send(info[:execute_hook_method], *args) end end |
.execute_transform_plugins(plugin_map, hook_method, *args) ⇒ Object
28 29 30 |
# File 'lib/r2-oas/plugin/executor.rb', line 28 def execute_transform_plugins(plugin_map, hook_method, *args) execute_plugins(plugin_map, :transform, hook_method, *args) end |
Instance Method Details
#execute_transform_plugins(hook_method, *args) ⇒ Object
16 17 18 19 20 21 22 23 |
# File 'lib/r2-oas/plugin/executor.rb', line 16 def execute_transform_plugins(hook_method, *args) return unless @use_plugin return unless @plugins.present? @plugin_map ||= self.class.plugin_map(@plugins) self.class.execute_transform_plugins(@plugin_map, hook_method, *args) end |