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


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

def command_plugin(command)
  @commands[command]
end

#global_index_fileObject

Path where the global index file is stored


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

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

#hook_plugins(event) ⇒ Object

Returns the list of plugin names handling the passed event


132
133
134
# File 'lib/bundler/plugin/index.rb', line 132

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

#index_fileObject

Path of default index file


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

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

#installed?(name) ⇒ Boolean

Returns:

  • (Boolean)

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

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

#installed_pluginsObject


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

def installed_plugins
  @plugin_paths.keys
end

#load_paths(name) ⇒ Object


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

def load_paths(name)
  @load_paths[name]
end

#local_index_fileObject

Path where the local index file is stored


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

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

#plugin_commands(plugin) ⇒ Object


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

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

#plugin_path(name) ⇒ Object


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

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)

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

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

#source_plugin(name) ⇒ Object


127
128
129
# File 'lib/bundler/plugin/index.rb', line 127

def source_plugin(name)
  @sources[name]
end

#unregister_plugin(name) ⇒ Object


74
75
76
77
78
79
80
81
# File 'lib/bundler/plugin/index.rb', line 74

def unregister_plugin(name)
  @commands.delete_if {|_, v| v == name }
  @sources.delete_if {|_, v| v == name }
  @hooks.each {|_, plugin_names| plugin_names.delete(name) }
  @plugin_paths.delete(name)
  @load_paths.delete(name)
  save_index
end