Use better resolution by Bundler at force_activate

This commit is contained in:
Hiroshi SHIBATA 2024-09-12 12:47:06 +09:00
Родитель 5d358b660d
Коммит 70c6613781
1 изменённых файлов: 17 добавлений и 15 удалений

Просмотреть файл

@ -1,11 +1,7 @@
class Binding
# :nodoc:
def irb
if defined?(Bundler) && !Gem.loaded_specs["irb"]
unless force_activate "irb"
warn "irb is not found. Install irb from RubyGems or add irb to Gemfile."
end
end
force_activate 'irb'
require 'irb'
irb
end
@ -14,16 +10,22 @@ class Binding
alias irb irb # :nodoc:
private def force_activate(gem)
gemspecs = (Gem::Specification.dirs + [Gem.default_specifications_dir]).map{|d|
Dir.glob("#{d}/#{gem}*.gemspec").reverse
}.flatten
if gemspecs.empty?
false
else
gemspec = Gem::Specification.load(gemspecs[0])
gemspec.dependencies.each{|dep| force_activate dep.name }
gemspec.activate
end
return if !defined?(Bundler) || Gem.loaded_specs.key?(gem)
Bundler.reset!
ui = Bundler::UI::Shell.new
ui.level = "silent"
Bundler.ui = ui
@builder = Bundler::Dsl.new
Bundler.definition.gemfiles.each{|gemfile| @builder.eval_gemfile(gemfile) }
@builder.gem gem
definition = @builder.to_definition(nil, true)
definition.validate_runtime!
Bundler::Definition.no_lock = true
Bundler::Runtime.new(nil, definition).setup
end
end