module Zen::Service::Plugins::Pluggable

Constants

Reflection

Public Instance Methods

extensions()
Alias for: plugins
plugins() click to toggle source
# File lib/zen/service/plugins/pluggable.rb, line 36
def plugins
  @plugins ||= {}
end
Also aliased as: extensions
use(name, **opts) click to toggle source
# File lib/zen/service/plugins/pluggable.rb, line 6
def use(name, **opts)
  extension = Service::Plugins.fetch(name)

  defaults = extension.config[:default_options]
  opts = defaults.merge(opts) unless defaults.nil?

  if using?(name)
    extension.configure(self, **opts) if extension.respond_to?(:configure)
    return extension
  end

  use_extension(extension, name, **opts)
end
using?(name) click to toggle source
# File lib/zen/service/plugins/pluggable.rb, line 32
def using?(name)
  plugins.key?(name)
end

Private Instance Methods

use_extension(extension, name, **opts) click to toggle source
# File lib/zen/service/plugins/pluggable.rb, line 20
        def use_extension(extension, name, **opts)
  include extension
  extend extension::ClassMethods if extension.const_defined?(:ClassMethods)

  extension.used(self, **opts) if extension.respond_to?(:used)
  extension.configure(self, **opts) if extension.respond_to?(:configure)

  plugins[name] = Reflection.new(extension, opts)

  extension
end