[rubygems/rubygems] Add Bundler::Plugin.loaded? helper

Useful if your plugin introduces new methods to the DSL, so that
Gemfiles can easily abort if the plugin hasn't loaded yet

https://github.com/rubygems/rubygems/commit/b733055c6e
This commit is contained in:
Cody Cutrer 2023-09-15 09:32:30 -06:00 committed by git
parent c3b7f27561
commit 836d9fe46b

View File

@ -1,5 +1,7 @@
# frozen_string_literal: true
require "set"
require_relative "plugin/api"
module Bundler
@ -25,7 +27,7 @@ module Bundler
@sources = {}
@commands = {}
@hooks_by_event = Hash.new {|h, k| h[k] = [] }
@loaded_plugin_names = []
@loaded_plugin_names = Set.new
end
reset!
@ -228,7 +230,7 @@ module Bundler
plugins = index.hook_plugins(event)
return unless plugins.any?
(plugins - @loaded_plugin_names).each {|name| load_plugin(name) }
plugins.each {|name| load_plugin(name) }
@hooks_by_event[event].each {|blk| blk.call(*args, &arg_blk) }
end
@ -240,6 +242,11 @@ module Bundler
Index.new.installed?(plugin)
end
# @return [true, false] whether the plugin is loaded
def loaded?(plugin)
@loaded_plugin_names.include?(plugin)
end
# Post installation processing and registering with index
#
# @param [Array<String>] plugins list to be installed
@ -330,6 +337,7 @@ module Bundler
# @param [String] name of the plugin
def load_plugin(name)
return unless name && !name.empty?
return if loaded?(name)
# Need to ensure before this that plugin root where the rest of gems
# are installed to be on load path to support plugin deps. Currently not