Class: R2OAS::Plugin::Executor

Inherits:
Object
  • Object
show all
Extended by:
Hookable
Defined in:
lib/r2-oas/plugin/executor.rb

Class Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

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