class Bundler::Plugin::Index
Attributes
Public Class Methods
# File lib/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 Public Instance Methods
# File lib/bundler/plugin/index.rb, line 95 def command_plugin(command) @commands[command] end
Fetch the name of plugin handling the command
# File lib/bundler/plugin/index.rb, line 77
def global_index_file
Plugin.global_root.join("index")
end Path where the global index file is stored
# File lib/bundler/plugin/index.rb, line 112 def hook_plugins(event) @hooks[event] || [] end
Returns the list of plugin names handling the passed event
# File lib/bundler/plugin/index.rb, line 72
def index_file
Plugin.root.join("index")
end Path of default index file
# File lib/bundler/plugin/index.rb, line 99 def installed?(name) @plugin_paths[name] end
# File lib/bundler/plugin/index.rb, line 90 def load_paths(name) @load_paths[name] end
# File lib/bundler/plugin/index.rb, line 82
def local_index_file
Plugin.local_root.join("index")
end Path where the local index file is stored
# File lib/bundler/plugin/index.rb, line 86 def plugin_path(name) Pathname.new @plugin_paths[name] end
# File lib/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 {|e| (@hooks[e] ||= []) << name }
@plugin_paths[name] = path
@load_paths[name] = load_paths
save_index
rescue StandardError
@commands = old_commands
raise
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 lib/bundler/plugin/index.rb, line 103 def source?(source) @sources.key? source end
# File lib/bundler/plugin/index.rb, line 107 def source_plugin(name) @sources[name] end
Private Instance Methods
# File lib/bundler/plugin/index.rb, line 124
def load_index(index_file, global = false)
SharedHelpers.filesystem_access(index_file, :read) do |index_f|
valid_file = index_f && index_f.exist? && !index_f.size.zero?
break unless valid_file
data = index_f.read
require "bundler/yaml_serializer"
index = YAMLSerializer.load(data)
@commands.merge!(index["commands"])
@hooks.merge!(index["hooks"])
@load_paths.merge!(index["load_paths"])
@plugin_paths.merge!(index["plugin_paths"])
@sources.merge!(index["sources"]) unless global
end
end Reads the index file from the directory and initializes the instance variables.
It skips the sources if the second param is true @param [Pathname] index file path @param [Boolean] is the index file global index
# File lib/bundler/plugin/index.rb, line 145
def save_index
index = {
"commands" => @commands,
"hooks" => @hooks,
"load_paths" => @load_paths,
"plugin_paths" => @plugin_paths,
"sources" => @sources,
}
require "bundler/yaml_serializer"
SharedHelpers.filesystem_access(index_file) do |index_f|
FileUtils.mkdir_p(index_f.dirname)
File.open(index_f, "w") {|f| f.puts YAMLSerializer.dump(index) }
end
end Should be called when any of the instance variables change. Stores the instance variables in YAML format. (The instance variables are supposed to be only String key value pairs)
Ruby Core © 1993–2017 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.