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