# File bundler/plugin/index.rb, line 25
def initialize
@plugin_paths = {}
@commands = {}
@sources = {}
@hooks = {}
@load_paths = {}
begin
load_index(global_index_file, true)
rescue GenericSystemCallError
# no need to fail when on a read-only FS, for example
nil
end
load_index(local_index_file) if SharedHelpers.in_bundle?
end
Fetch the name of plugin handling the command
# File bundler/plugin/index.rb, line 98
def command_plugin(command)
@commands[command]
end
Path where the global index file is stored
# File bundler/plugin/index.rb, line 80
def global_index_file
Plugin.global_root.join("index")
end
Returns the list of plugin names handling the passed event
# File bundler/plugin/index.rb, line 123
def hook_plugins(event)
@hooks[event] || []
end
Path of default index file
# File bundler/plugin/index.rb, line 75
def index_file
Plugin.root.join("index")
end
# File bundler/plugin/index.rb, line 102
def installed?(name)
@plugin_paths[name]
end
# File bundler/plugin/index.rb, line 106
def installed_plugins
@plugin_paths.keys
end
# File bundler/plugin/index.rb, line 93
def load_paths(name)
@load_paths[name]
end
Path where the local index file is stored
# File bundler/plugin/index.rb, line 85
def local_index_file
Plugin.local_root.join("index")
end
# File bundler/plugin/index.rb, line 110
def plugin_commands(plugin)
@commands.find_all {|_, n| n == plugin }.map(&:first)
end
# File bundler/plugin/index.rb, line 89
def plugin_path(name)
Pathname.new @plugin_paths[name]
end
This function is to be called when a new plugin is installed. This function shall add the functions of the plugin to existing maps and also the name to source location.
@param [String] name of the plugin to be registered @param [String] path where the plugin is installed @param [Array<String>] #load_paths for the plugin @param [Array<String>] commands that are handled by the plugin @param [Array<String>] sources that are handled by the plugin
# File bundler/plugin/index.rb, line 50
def register_plugin(name, path, load_paths, commands, sources, hooks)
old_commands = @commands.dup
common = commands & @commands.keys
raise CommandConflict.new(name, common) unless common.empty?
commands.each {|c| @commands[c] = name }
common = sources & @sources.keys
raise SourceConflict.new(name, common) unless common.empty?
sources.each {|k| @sources[k] = name }
hooks.each do |event|
event_hooks = (@hooks[event] ||= []) << name
event_hooks.uniq!
end
@plugin_paths[name] = path
@load_paths[name] = load_paths
save_index
rescue StandardError
@commands = old_commands
raise
end