vagrant/plugins/commands/plugin/gem_helper.rb

50 lines
1.4 KiB
Ruby
Raw Normal View History

2013-02-03 07:31:53 +00:00
require "rubygems"
require "rubygems/gem_runner"
require "log4r"
module VagrantPlugins
module CommandPlugin
# This class provides methods to help with calling out to the
# `gem` command but using the RubyGems API.
class GemHelper
def initialize(gem_home)
@gem_home = gem_home.to_s
@logger = Log4r::Logger.new("vagrant::plugins::plugincommand::gemhelper")
end
2013-02-03 07:52:34 +00:00
# This will yield the given block with the proper ENV setup so
# that RubyGems only sees the gems in the Vagrant-managed gem
# path.
def with_environment
old_gem_home = ENV["GEM_HOME"]
old_gem_path = ENV["GEM_PATH"]
2013-02-03 07:52:34 +00:00
ENV["GEM_HOME"] = @gem_home
ENV["GEM_PATH"] = @gem_home
@logger.debug("Set GEM_* to: #{ENV["GEM_HOME"]}")
2013-02-03 07:52:34 +00:00
# Clear paths so that it reads the new GEM_HOME setting
Gem.paths = ENV
2013-02-03 07:52:34 +00:00
# Clear the sources so that installation uses custom sources
old_sources = Gem.sources
Gem.sources = Gem.default_sources
Gem.sources << "http://gems.hashicorp.com"
2013-02-03 18:32:31 +00:00
# Use a silent UI so that we have no output
Gem::DefaultUserInteraction.use_ui(Gem::SilentUI.new) do
return yield
end
2013-02-03 07:52:34 +00:00
ensure
# Restore the old GEM_* settings
2013-02-03 07:52:34 +00:00
ENV["GEM_HOME"] = old_gem_home
ENV["GEM_PATH"] = old_gem_path
# Reset everything
Gem.paths = ENV
Gem.sources = old_sources.to_a
2013-02-03 07:52:34 +00:00
end
2013-02-03 07:31:53 +00:00
end
end
end