class Slugforge::SluginManager::Slugin

Attributes

active[RW]
active?[RW]
enabled[RW]
enabled?[RW]
gem_name[RW]
name[RW]
spec[RW]

Public Class Methods

new(name, gem_name, spec, enabled) click to toggle source
# File lib/slugforge/slugins.rb, line 22
def initialize(name, gem_name, spec, enabled)
  @name, @gem_name, @enabled, @spec = name, gem_name, enabled, spec
end

Public Instance Methods

activate!(config) click to toggle source

Activate the slugin (run its defined activation method) Does not reactivate if already active.

# File lib/slugforge/slugins.rb, line 57
def activate!(config)
  return if active?

  if klass = slugin_class
    klass.activate(config) if klass.respond_to?(:activate)
  end

  self.active = true
end
disable!() click to toggle source

Disable a slugin. (prevents slugin from being loaded, cannot disable an already activated slugin)

# File lib/slugforge/slugins.rb, line 28
def disable!
  self.enabled = false
end
enable!() click to toggle source

Enable a slugin. (does not load it immediately but puts on 'white list' to be loaded)

# File lib/slugforge/slugins.rb, line 34
def enable!
  self.enabled = true
end
load!() click to toggle source

Load the slugin (require the gem - enables/loads the slugin immediately at point of call, even if slugin is disabled) Does not reload slugin if it's already loaded.

# File lib/slugforge/slugins.rb, line 42
def load!
  begin
    require gem_name
  rescue LoadError => e
    warn "Found slugin #{gem_name}, but could not require '#{gem_name}.rb'"
    warn e
  rescue => e
    warn "require '#{gem_name}' failed, saying: #{e}"
  end

  self.enabled = true
end

Private Instance Methods

slugin_class() click to toggle source
# File lib/slugforge/slugins.rb, line 72
def slugin_class
  name = spec.name.gsub(/^slugforge-/, '').camelize
  name = "Slugforge#{name}"
  begin
    name.constantize
  rescue NameError
    warn "Slugin #{gem_name} cannot be activated. Expected module named #{name}."
  end
end