class Fusuma::Plugin::Base

Create a Plugin Class with extending this class

Public Class Methods

inherited(subclass) click to toggle source

when inherited from subclass

Calls superclass method
# File lib/fusuma/plugin/base.rb, line 13
def self.inherited(subclass)
  super
  subclass_path = caller_locations(1..1).first.path
  Manager.add(plugin_class: subclass, plugin_path: subclass_path)
end
plugins() click to toggle source

get subclasses @return [Array<Class>]

# File lib/fusuma/plugin/base.rb, line 21
def self.plugins
  Manager.plugins[name]
end

Public Instance Methods

config_index() click to toggle source
# File lib/fusuma/plugin/base.rb, line 54
def config_index
  Config::Index.new(self.class.name.gsub('Fusuma::', '').underscore.split('/'))
end
config_param_types() click to toggle source

config parameter name and Type of the value of parameter @return [Hash]

# File lib/fusuma/plugin/base.rb, line 27
def config_param_types
  raise NotImplementedError, "override #{self.class.name}##{__method__}"
end
config_params(key = nil, base: config_index) click to toggle source

@return [Object]

# File lib/fusuma/plugin/base.rb, line 32
def config_params(key = nil, base: config_index)
  params = Config.search(base) || {}

  return params unless key

  @config_params ||= {}
  @config_params["#{base.cache_key},#{key}"] ||=
    params.fetch(key, nil).tap do |val|
      next if val.nil?

      # NOTE: Type checking for config.yml
      param_types = Array(config_param_types.fetch(key))

      next if param_types.any? { |klass| val.is_a?(klass) }

      MultiLogger.error('Please fix config.yml.')
      MultiLogger.error(":#{base.keys.map(&:symbol)
      .join(' => :')} => :#{key} should be #{param_types.join(' OR ')}.")
      exit 1
    end
end