module Setsuzoku::Plugin::ClassMethods

Public Instance Methods

config_context() click to toggle source
# File lib/setsuzoku/plugin.rb, line 35
def config_context
  @config_context
end
config_context=(val) click to toggle source
# File lib/setsuzoku/plugin.rb, line 39
def config_context=(val)
  @config_context = val
end
register(name:, service:, **options) click to toggle source

Register the service for a plugin. This will collect configuration level data to use when a plugin is registered. It will also impose interface requirements on the registering class.

@param name [String] the name of the plugin. @param options [Any] list of keyword options to customize service registration.

@return [void]

# File lib/setsuzoku/plugin.rb, line 50
def register(name:, service:, **options)
  context = {
      name: name,
      service: service
  }

  # @options are any additional options you want available inside the plugin

  options.each do |key, val|
    context[key] = val || self.with_options[key]
  end

  required_instance_methods = options[:required_instance_methods] || []
  service[:strategies].each do |type, strategy|
    type = type.to_s.split('_strategy').first.to_sym
    strategy = strategy[:strategy]
    strategy_klass = AVAILABLE_SERVICES[service[:type]].available_strategies[type][strategy]
    required_instance_methods += strategy_klass.required_instance_methods
    include strategy_klass.superclass::InterfaceMethods
  end

  context[:required_instance_methods] = required_instance_methods

  self.config_context = context
end