class Lolcommits::GemPlugin

Attributes

gem_spec[RW]
required[RW]
required?[RW]

Public Class Methods

new(gem_spec) click to toggle source
# File lib/lolcommits/gem_plugin.rb, line 7
def initialize(gem_spec)
  @gem_spec = gem_spec
end

Public Instance Methods

activate!() click to toggle source

activate the plugin (require the gem - enables/loads the plugin immediately at point of call if not already required)

# File lib/lolcommits/gem_plugin.rb, line 13
def activate!
  begin
    require gem_path unless required?
  rescue LoadError => e
    warn "Found plugin #{name}, but could not require gem '#{gem_name}'"
    warn e.to_s
  rescue StandardError => e
    warn "require gem '#{gem_name}' failed with: #{e}"
  end

  @required = true
end
gem_name() click to toggle source
# File lib/lolcommits/gem_plugin.rb, line 49
def gem_name
  gem_spec.name
end
name() click to toggle source
# File lib/lolcommits/gem_plugin.rb, line 53
def name
  gem_name.split('-', 2).last
end
plugin_instance(runner) click to toggle source
# File lib/lolcommits/gem_plugin.rb, line 45
def plugin_instance(runner)
  plugin_klass.new(runner: runner, config: runner.config.yaml[name], name: name)
end
plugin_klass() click to toggle source
# File lib/lolcommits/gem_plugin.rb, line 39
def plugin_klass
  self.class.const_get(plugin_klass_name)
rescue StandardError => e
  warn "failed to load constant from plugin gem '#{plugin_klass_name}: #{e}'"
end
supported?() click to toggle source
# File lib/lolcommits/gem_plugin.rb, line 28
def supported?
  # false if the plugin gem does not support this version of Lolcommits
  lolcommits_version = Gem::Version.new(::Lolcommits::VERSION)
  gem_spec.dependencies.each do |dependency|
    if dependency.name == Lolcommits::GEM_NAME
      return dependency.requirement.satisfied_by?(lolcommits_version)
    end
  end
  true
end

Private Instance Methods

gem_path() click to toggle source
# File lib/lolcommits/gem_plugin.rb, line 59
def gem_path
  gem_name.tr('-', '/')
end
plugin_klass_name() click to toggle source
# File lib/lolcommits/gem_plugin.rb, line 63
def plugin_klass_name
  # convert gem paths to plugin classes e.g.
  # lolcommits/loltext --> Lolcommits::Plugin::Loltext
  # lolcommits/term_output --> Lolcommits::Plugin::TermOutput
  gem_path.split('/').insert(1, 'plugin').collect do |c|
    c.split('_').collect(&:capitalize).join
  end.join('::')
end