class Bundler::Plugin::Index - bundler-1.15.4 Documentation

# class Bundler::Plugin::Index

### Attributes

commands[R]

### Public Class Methods

new() click to toggle source

    # File lib/bundler/plugin/index.rb, line 24
    def initialize
      @plugin_paths = {}
      @commands = {}
      @sources = {}
      @hooks = {}
      @load_paths = {}

      load_index(global_index_file, true)
      load_index(local_index_file) if SharedHelpers.in_bundle?
    end

### Public Instance Methods

command_plugin(command) click to toggle source

Fetch the name of plugin handling the command

    # File lib/bundler/plugin/index.rb, line 89
    def command_plugin(command)
      @commands[command]
    end

global_index_file() click to toggle source

Path where the global index file is stored

    # File lib/bundler/plugin/index.rb, line 71
    def global_index_file
      Plugin.global_root.join("index")
    end

hook_plugins(event) click to toggle source

Returns the list of plugin names handling the passed event

    # File lib/bundler/plugin/index.rb, line 106
    def hook_plugins(event)
      @hooks[event] || []
    end

index_file() click to toggle source

Path of default index file

    # File lib/bundler/plugin/index.rb, line 66
    def index_file
      Plugin.root.join("index")
    end

installed?(name) click to toggle source

    # File lib/bundler/plugin/index.rb, line 93
    def installed?(name)
      @plugin_paths[name]
    end

load_paths(name) click to toggle source

    # File lib/bundler/plugin/index.rb, line 84
    def load_paths(name)
      @load_paths[name]
    end

local_index_file() click to toggle source

Path where the local index file is stored

    # File lib/bundler/plugin/index.rb, line 76
    def local_index_file
      Plugin.local_root.join("index")
    end

plugin_path(name) click to toggle source

    # File lib/bundler/plugin/index.rb, line 80
    def plugin_path(name)
      Pathname.new @plugin_paths[name]
    end

register_plugin(name, path, load_paths, commands, sources, hooks) click to toggle source

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 44
    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
      @commands = old_commands
      raise
    end

source?(source) click to toggle source

    # File lib/bundler/plugin/index.rb, line 97
    def source?(source)
      @sources.key? source
    end

source_plugin(name) click to toggle source

    # File lib/bundler/plugin/index.rb, line 101
    def source_plugin(name)
      @sources[name]
    end

### Private Instance Methods

load_index(index_file, global = false) click to toggle source

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 118
    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

save_index() click to toggle source

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)

    # File lib/bundler/plugin/index.rb, line 139
    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