class GitCommander::Plugin::Loader

@abstract Handles loading native plugins by name.

Constants

NATIVE_PLUGIN_DIR

Attributes

commands[R]
content[R]
name[R]

Public Class Methods

new(registry) click to toggle source
Calls superclass method GitCommander::Loader::new
# File lib/git_commander/plugin/loader.rb, line 17
def initialize(registry)
  @commands = []
  super
end

Public Instance Methods

command(name, &block) click to toggle source
# File lib/git_commander/plugin/loader.rb, line 51
def command(name, &block)
  GitCommander.logger.debug("Loading command :#{name} from plugin #{@name}")
  @commands << Command::Configurator.new(registry).configure("#{plugin_name_formatted_for_cli}:#{name}".to_sym, &block)
rescue Command::Configurator::ConfigurationError => e
  result.errors << e
end
load(name) click to toggle source
# File lib/git_commander/plugin/loader.rb, line 22
def load(name)
  @plugin = GitCommander::Plugin.new(
    resolve_plugin_name(name),
    source_instance: instance_eval(resolve_content(name))
  )
  @plugin.commands = @commands
  result.plugins << @plugin
  result.commands |= @commands
  result
rescue Errno::ENOENT, Errno::EACCES => e
  handle_error LoadError, e
rescue StandardError => e
  handle_error NotFoundError, e
end
plugin(name, **options) click to toggle source
# File lib/git_commander/plugin/loader.rb, line 58
def plugin(name, **options)
  plugin_result = GitCommander::Plugin::Loader.new(registry).load(name, **options)
  result.plugins |= plugin_result.plugins
end
resolve_content(native_name_or_filename) click to toggle source
# File lib/git_commander/plugin/loader.rb, line 43
def resolve_content(native_name_or_filename)
  if native_name_or_filename.is_a? Symbol
    return @content = File.read("#{NATIVE_PLUGIN_DIR}/#{native_name_or_filename}.rb")
  end

  @content = File.read(native_name_or_filename)
end
resolve_plugin_name(native_name_or_filename) click to toggle source
# File lib/git_commander/plugin/loader.rb, line 37
def resolve_plugin_name(native_name_or_filename)
  return @name = native_name_or_filename if native_name_or_filename.is_a? Symbol

  @name = File.basename(native_name_or_filename).split(".").first.to_sym
end

Private Instance Methods

handle_error(error_klass, original_error) click to toggle source
# File lib/git_commander/plugin/loader.rb, line 69
def handle_error(error_klass, original_error)
  error = error_klass.new(original_error.message)
  error.set_backtrace original_error.backtrace
  @result.errors << error
  @result
end
plugin_name_formatted_for_cli() click to toggle source
# File lib/git_commander/plugin/loader.rb, line 65
def plugin_name_formatted_for_cli
  @name.to_s.gsub("_", "-").to_sym
end