require "isolate/sandbox" # Restricts +GEM_PATH+ and +GEM_HOME+ and provides a DSL for # expressing your code's runtime Gem dependencies. See README.rdoc for # rationale, limitations, and examples. module Isolate # Duh. VERSION = "3.1.0" # Disable Isolate. If a block is provided, isolation will be # disabled for the scope of the block. def self.disable &block sandbox.disable(&block) end # What environment should be isolated? Consults environment # variables ISOLATE_ENV, RAILS_ENV, and # RACK_ENV. Defaults to development"/tt> if none are # set. def self.env ENV["ISOLATE_ENV"] || ENV["RAILS_ENV"] || ENV["RACK_ENV"] || "development" end @@sandbox = nil # A singleton instance of Isolate::Sandbox. def self.sandbox @@sandbox end # Set the singleton. Intended for Hoe::Isolate and other tools that # make their own. def self.sandbox= o @@sandbox = o end # Declare an isolated RubyGems environment, installed in +path+. Any # block given will be instance_evaled, see # Isolate::Sandbox#gem and Isolate::Sandbox#environment for the sort # of stuff you can do. # # Valid options: # # :cleanup:: Should obsolete gems be removed? Default is +true+. # # :file:: Specify an Isolate file to +instance_eval+. Default is # Isolate or config/isolate.rb, whichever # is found first. Passing false disables file # loading. # # :install:: Should missing gems be installed? Default is +true+. # # :multiruby:: Should Isolate assume that multiple Ruby versions # will be used simultaneously? If so, gems will be # segregated by Ruby version. Default is +true+. # # :path:: Where should isolated gems be kept? Default is # tmp/isolate", and a Ruby version specifier suffix # will be added if :multiruby is +true+. # # :system:: Should system gems be allowed to satisfy dependencies? # Default is +true+. # # :verbose:: Should Isolate be chatty during installs and nukes? # Default is +true+. def self.now! options = {}, &block @@sandbox = Isolate::Sandbox.new options, &block @@sandbox.activate end # Poke RubyGems, since we've probably monkeyed with a bunch of paths # and suchlike. Clears paths, loaded specs, and source indexes. def self.refresh # :nodoc: Gem.loaded_specs.clear Gem.clear_paths Gem::Specification.reset end end