class Fusuma::Plugin::Base

Create a Plugin Class with extending this class

def self.inherited(subclass)

when inherited from subclass
def self.inherited(subclass)
  super
  subclass_path = caller_locations(1..1).first.path
  Manager.add(plugin_class: subclass, plugin_path: subclass_path)
end

def self.plugins

Returns:
  • (Array) -
def self.plugins
  Manager.plugins[name]
end

def config_index

def config_index
  Config::Index.new(self.class.name.gsub('Fusuma::', '').underscore.split('/'))
end

def config_param_types

Returns:
  • (Hash) -
def config_param_types
  raise NotImplementedError, "override #{self.class.name}##{__method__}"
end

def config_params(key = nil, base: config_index)

Returns:
  • (Object) -
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