lib/lolcommits/gem_plugin.rb in lolcommits-0.9.3.pre1 vs lib/lolcommits/gem_plugin.rb in lolcommits-0.9.3.pre2
- old
+ new
@@ -1,46 +1,61 @@
module Lolcommits
class GemPlugin
- attr_accessor :name, :gem_name, :spec, :required
+ attr_accessor :gem_spec, :required
- def initialize(name, gem_name, spec)
- @name = name
- @gem_name = gem_name
- @spec = spec
- @required = false
+ def initialize(gem_spec)
+ @gem_spec = gem_spec
end
# activate the plugin (require the gem - enables/loads the plugin
# immediately at point of call if not already required)
def activate!
begin
require gem_path unless required?
rescue LoadError => e
- warn "Found plugin #{gem_name}, but could not require '#{gem_name}'"
+ warn "Found plugin #{name}, but could not require gem '#{gem_name}'"
warn e
rescue => e
- warn "require '#{gem_name}' # Failed, saying: #{e}"
+ warn "require gem '#{gem_name}' failed with: #{e}"
end
- self.required = true
+ @required = true
end
alias required? required
def supported?
# false if the plugin gem does not support this version of Lolcommits
lolcommits_version = Gem::Version.new(::Lolcommits::VERSION)
- spec.dependencies.each do |dependency|
+ gem_spec.dependencies.each do |dependency|
if dependency.name == Lolcommits::GEM_NAME
return dependency.requirement.satisfied_by?(lolcommits_version)
end
end
true
end
+ def name
+ gem_name.split('-', 2).last
+ end
+
+ def plugin_klass
+ self.class.const_get(plugin_klass_name)
+ rescue => e
+ warn "failed to load constant from plugin gem '#{plugin_klass_name}: #{e}'"
+ end
+
private
+ def gem_name
+ gem_spec.name
+ end
+
def gem_path
gem_name.gsub(/-|_/, '/')
+ end
+
+ def plugin_klass_name
+ gem_path.split('/').map(&:capitalize).join('::')
end
end
end