diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/bundled_gems.rb | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/lib/bundled_gems.rb b/lib/bundled_gems.rb index e27d7866a7..17fd4b85f6 100644 --- a/lib/bundled_gems.rb +++ b/lib/bundled_gems.rb @@ -218,6 +218,38 @@ module Gem::BUNDLED_GEMS # :nodoc: msg end + + def self.force_activate(gem) + Bundler.reset! + + builder = Bundler::Dsl.new + if Bundler.definition.gemfiles.empty? # bundler/inline + Bundler.definition.locked_gems.specs.each{|spec| builder.gem spec.name, spec.version.to_s } + else + Bundler.definition.gemfiles.each{|gemfile| builder.eval_gemfile(gemfile) } + end + builder.gem gem + + definition = builder.to_definition(nil, true) + definition.validate_runtime! + + begin + orig_ui = Bundler.ui + orig_no_lock = Bundler::Definition.no_lock + + ui = Bundler::UI::Shell.new + ui.level = "silent" + Bundler.ui = ui + Bundler::Definition.no_lock = true + + Bundler::Runtime.new(nil, definition).setup + rescue Bundler::GemNotFound + warn "Failed to activate #{gem}, please install it with 'gem install #{gem}'" + ensure + Bundler.ui = orig_ui + Bundler::Definition.no_lock = orig_no_lock + end + end end # for RubyGems without Bundler environment. |