Class: Bundler::Plugin::Index

Inherits:
Object
  • Object
show all
Defined in:
lib/bundler/plugin/index.rb

Defined Under Namespace

Classes: CommandConflict, SourceConflict

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeIndex

Returns a new instance of Index.


25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# 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

Instance Attribute Details

#commandsObject (readonly)

Returns the value of attribute commands


23
24
25
# File 'lib/bundler/plugin/index.rb', line 23

def commands
  @commands
end

Instance Method Details

#command_plugin(command) ⇒ Object

Fetch the name of plugin handling the command


98
99
100
# File 'lib/bundler/plugin/index.rb', line 98

def command_plugin(command)
  @commands[command]
end

#global_index_fileObject

Path where the global index file is stored


80
81
82
# File 'lib/bundler/plugin/index.rb', line 80

def global_index_file
  Plugin.global_root.join("index")
end

#hook_plugins(event) ⇒ Object

Returns the list of plugin names handling the passed event


123
124
125
# File 'lib/bundler/plugin/index.rb', line 123

def hook_plugins(event)
  @hooks[event] || []
end

#index_fileObject

Path of default index file


75
76
77
# File 'lib/bundler/plugin/index.rb', line 75

def index_file
  Plugin.root.join("index")
end

#installed?(name) ⇒ Boolean

Returns:

  • (Boolean)

102
103
104
# File 'lib/bundler/plugin/index.rb', line 102

def installed?(name)
  @plugin_paths[name]
end

#installed_pluginsObject


106
107
108
# File 'lib/bundler/plugin/index.rb', line 106

def installed_plugins
  @plugin_paths.keys
end

#load_paths(name) ⇒ Object


93
94
95
# File 'lib/bundler/plugin/index.rb', line 93

def load_paths(name)
  @load_paths[name]
end

#local_index_fileObject

Path where the local index file is stored


85
86
87
# File 'lib/bundler/plugin/index.rb', line 85

def local_index_file
  Plugin.local_root.join("index")
end

#plugin_commands(plugin) ⇒ Object


110
111
112
# File 'lib/bundler/plugin/index.rb', line 110

def plugin_commands(plugin)
  @commands.find_all {|_, n| n == plugin }.map(&:first)
end

#plugin_path(name) ⇒ Object


89
90
91
# File 'lib/bundler/plugin/index.rb', line 89

def plugin_path(name)
  Pathname.new @plugin_paths[name]
end

#register_plugin(name, path, load_paths, commands, sources, hooks) ⇒ Object

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.

Parameters:

  • name (String)

    of the plugin to be registered

  • path (String)

    where the plugin is installed

  • load_paths (Array<String>)

    for the plugin

  • commands (Array<String>)

    that are handled by the plugin

  • sources (Array<String>)

    that are handled by the plugin


50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# 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 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

#source?(source) ⇒ Boolean

Returns:

  • (Boolean)

114
115
116
# File 'lib/bundler/plugin/index.rb', line 114

def source?(source)
  @sources.key? source
end

#source_plugin(name) ⇒ Object


118
119
120
# File 'lib/bundler/plugin/index.rb', line 118

def source_plugin(name)
  @sources[name]
end