diff options
author | Marco Costa <mmarcottulio@gmail.com> | 2019-01-08 17:52:06 -0500 |
---|---|---|
committer | Yuji Yaginuma <yuuji.yaginuma@gmail.com> | 2019-01-09 07:52:06 +0900 |
commit | d79366b4c9619e70a2c292b3a7c0311618eba9be (patch) | |
tree | 5c1c65acc7930c9432d819a87b6e47c6de3a75b9 /railties/test | |
parent | 80c7038bbc8e83762f4396b18260f470d8621995 (diff) | |
download | rails-d79366b4c9619e70a2c292b3a7c0311618eba9be.tar.gz rails-d79366b4c9619e70a2c292b3a7c0311618eba9be.tar.bz2 rails-d79366b4c9619e70a2c292b3a7c0311618eba9be.zip |
Preserve Bundle configuration during app generation (#34755)
When generating a new rails application (rails new) using a custom template that
includes gems from an authenticated source, the user has to provide credentials to
bundler.
One way to do this is by exporting environment variables, for example:
export BUNDLE_GITHUB__COM=user:pass: provides credentials for bundler to fetch
gems from github.com.
The problem this PR addresses is that we are currently scrubs all /BUNDLE_.*/
environment variables by wrapping our system calls in Bundler.with_clean_env.
We do this because we don't want our commands executed against the generated project
to use the generator's bundler environment (e.g. our gems): the generated project should
use it's own configuration.
The problem with Bundler.with_clean_env is that, on top of restoring environment
variables to their original state, it also scrubs any /BUNDLE_.*/ variables, which is harmful for authenticated gem sources.
This PR replaces Bundler.with_clean_env with Bundler.with_original_env, which only
restores environment variables to their initial state, without additional scrubbing.
Diffstat (limited to 'railties/test')
-rw-r--r-- | railties/test/generators/app_generator_test.rb | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/railties/test/generators/app_generator_test.rb b/railties/test/generators/app_generator_test.rb index 47e401c34f..839e6feb39 100644 --- a/railties/test/generators/app_generator_test.rb +++ b/railties/test/generators/app_generator_test.rb @@ -773,6 +773,24 @@ class AppGeneratorTest < Rails::Generators::TestCase assert_bundler_command_called("install") end + def test_generation_use_original_bundle_environment + generator([destination_root], skip_webpack_install: true) + + mock_original_env = -> do + { "BUNDLE_RUBYONRAILS__ORG" => "user:pass" } + end + + ensure_environment_is_set = -> *_args do + assert_equal "user:pass", ENV["BUNDLE_RUBYONRAILS__ORG"] + end + + Bundler.stub :original_env, mock_original_env do + generator.stub :exec_bundle_command, ensure_environment_is_set do + quietly { generator.invoke_all } + end + end + end + def test_dev_option generator([destination_root], dev: true, skip_webpack_install: true) |