]> git.wincent.com - wikitext.git/commitdiff
More attempts at getting Bundlerized test Rails app working
authorWincent Colaiuta <win@wincent.com>
Sun, 15 May 2011 19:53:02 +0000 (12:53 -0700)
committerWincent Colaiuta <win@wincent.com>
Sun, 15 May 2011 19:53:02 +0000 (12:53 -0700)
Trying with the latest Bundler (1.0.13) and RubyGems (1.8.2) I see the
test environment also winds up with GEM_PATH and GEM_HOME set, so be a
little more careful about how we clean the environment (note that before
we were going too far, cleaning the entire environment). We now clean
any environment variables starting with GEM_ or BUNDLE_.

Signed-off-by: Wincent Colaiuta <win@wincent.com>
spec/rails_spec.rb

index 3f7e9a531a42ec2dae505e6f11b6858d78e85913..5b86cf5ce0da60f1852135f8d9e47f37349a710e 100644 (file)
@@ -31,7 +31,6 @@ require 'ostruct'
 module RailsSpecs
   TRASH_PATH              = Pathname.new(__FILE__).dirname + 'trash'
   CLONE_PATH              = TRASH_PATH + 'rails.git'
-  RAILS_BIN_PATH          = CLONE_PATH + 'bin' + 'rails'
   WIKITEXT_GEM_PATH       = TRASH_PATH + '..' + '..'
   SUCCESSFUL_TEST_RESULT  = /1 tests, 3 assertions, 0 failures, 0 errors/
 
@@ -75,8 +74,16 @@ module RailsSpecs
         run 'git', 'reset', '--hard', 'origin/master'
       end
       run 'git', 'clean', '-f'
+
+      begin
+        clean_bundler_environment
+        run 'bundle', 'install', '--path', '../bundle', '--without', 'db'
+        run 'bundle', 'exec', 'bin/rails', 'new', app, '--skip-activerecord', '--dev'
+      ensure
+        restore_bundler_environment
+      end
     end
-    run 'ruby', RAILS_BIN_PATH, 'new', app, '--skip-activerecord', '--dev'
+
     create_gemfile app
     bundlerize app
   end
@@ -169,15 +176,12 @@ TEST
   end
 
   def clean_bundler_environment
-    @bundler_env = {}
-    ENV.each do |k, v|
-      @bundler_env[k] = v
-      ENV.delete(k)
-    end
+    @bundler_env = ENV.select { |key, value| key =~ /\A(BUNDLE|GEM)_/ }
+    @bundler_env.each { |pair| ENV.delete(pair.first) }
   end
 
   def restore_bundler_environment
-    @bundler_env.each { |k, v| ENV[k] = v }
+    @bundler_env.each { |pair| ENV[pair[0]] = pair[1] }
   end
 
   def run_integration_test app