1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Do not run bundle install when generating a new plugin.

Since bundler 1.12.0, the gemspec is validated so the `bundle install`
command will fail just after the gem is created causing confusion to the
users. This change was a bug fix to correctly validate gemspecs.
This commit is contained in:
Rafael Mendonça França 2016-07-01 17:34:31 -03:00
parent 14996a1490
commit fbd1e98cf9
No known key found for this signature in database
GPG key ID: FC23B6D0F1EEE948
6 changed files with 120 additions and 111 deletions

View file

@ -1,3 +1,11 @@
* Do not run `bundle install` when generating a new plugin.
Since bundler 1.12.0, the gemspec is validated so the `bundle install`
command will fail just after the gem is created causing confusion to the
users. This change was a bug fix to correctly validate gemspecs.
*Rafael Mendonça França*
* Default `config.assets.quiet = true` in the development environment. Suppress
logging of `sprockets-rails` requests by default.

View file

@ -242,7 +242,7 @@ module Rails
] + dev_edge_common
elsif options.edge?
[
GemfileEntry.github('rails', 'rails/rails')
GemfileEntry.github('rails', 'rails/rails', '5-0-stable')
] + dev_edge_common
else
[GemfileEntry.version('rails',

View file

@ -258,7 +258,7 @@ task default: :test
build(:leftovers)
end
public_task :apply_rails_template, :run_bundle
public_task :apply_rails_template
def run_after_bundle_callbacks
@after_bundle_callbacks.each do |callback|

View file

@ -597,6 +597,21 @@ class AppGeneratorTest < Rails::Generators::TestCase
end
end
def test_generation_runs_bundle_install
assert_generates_with_bundler
end
def test_dev_option
assert_generates_with_bundler dev: true
rails_path = File.expand_path('../../..', Rails.root)
assert_file 'Gemfile', /^gem\s+["']rails["'],\s+path:\s+["']#{Regexp.escape(rails_path)}["']$/
end
def test_edge_option
assert_generates_with_bundler edge: true
assert_file 'Gemfile', %r{^gem\s+["']rails["'],\s+github:\s+["']#{Regexp.escape("rails/rails")}["'],\s+branch:\s+["']#{Regexp.escape("5-0-stable")}["']$}
end
def test_spring
run_generator
assert_gem 'spring'
@ -754,41 +769,61 @@ class AppGeneratorTest < Rails::Generators::TestCase
protected
def stub_rails_application(root)
Rails.application.config.root = root
Rails.application.class.stub(:name, "Myapp") do
yield
end
end
def action(*args, &block)
capture(:stdout) { generator.send(*args, &block) }
end
def assert_gem(gem, constraint = nil)
if constraint
assert_file "Gemfile", /^\s*gem\s+["']#{gem}["'], #{constraint}$*/
else
assert_file "Gemfile", /^\s*gem\s+["']#{gem}["']$*/
end
end
def assert_listen_related_configuration
assert_gem 'listen'
assert_gem 'spring-watcher-listen'
assert_file 'config/environments/development.rb' do |content|
assert_match(/^\s*config.file_watcher = ActiveSupport::EventedFileUpdateChecker/, content)
end
end
def assert_no_listen_related_configuration
assert_file 'Gemfile' do |content|
assert_no_match(/listen/, content)
def stub_rails_application(root)
Rails.application.config.root = root
Rails.application.class.stub(:name, "Myapp") do
yield
end
end
assert_file 'config/environments/development.rb' do |content|
assert_match(/^\s*# config.file_watcher = ActiveSupport::EventedFileUpdateChecker/, content)
def action(*args, &block)
capture(:stdout) { generator.send(*args, &block) }
end
def assert_gem(gem, constraint = nil)
if constraint
assert_file "Gemfile", /^\s*gem\s+["']#{gem}["'], #{constraint}$*/
else
assert_file "Gemfile", /^\s*gem\s+["']#{gem}["']$*/
end
end
def assert_listen_related_configuration
assert_gem 'listen'
assert_gem 'spring-watcher-listen'
assert_file 'config/environments/development.rb' do |content|
assert_match(/^\s*config.file_watcher = ActiveSupport::EventedFileUpdateChecker/, content)
end
end
def assert_no_listen_related_configuration
assert_file 'Gemfile' do |content|
assert_no_match(/listen/, content)
end
assert_file 'config/environments/development.rb' do |content|
assert_match(/^\s*# config.file_watcher = ActiveSupport::EventedFileUpdateChecker/, content)
end
end
def assert_generates_with_bundler(options = {})
generator([destination_root], options)
command_check = -> command do
@install_called ||= 0
case command
when 'install'
@install_called += 1
assert_equal 1, @install_called, "install expected to be called once, but was called #{@install_called} times"
when 'exec spring binstub --all'
# Called when running tests with spring, let through unscathed.
end
end
generator.stub :bundle_command, command_check do
quietly { generator.invoke_all }
end
end
end
end

View file

@ -193,13 +193,24 @@ class PluginGeneratorTest < Rails::Generators::TestCase
assert_file "test/dummy/config/database.yml", /postgres/
end
def test_generation_runs_bundle_install_with_full_and_mountable
result = run_generator [destination_root, "--mountable", "--full", "--dev"]
assert_match(/run bundle install/, result)
assert $?.success?, "Command failed: #{result}"
assert_file "#{destination_root}/Gemfile.lock" do |contents|
assert_match(/bukkits/, contents)
end
def test_generation_runs_bundle_install
assert_generates_without_bundler
end
def test_dev_option
assert_generates_without_bundler(dev: true)
rails_path = File.expand_path('../../..', Rails.root)
assert_file 'Gemfile', /^gem\s+["']rails["'],\s+path:\s+["']#{Regexp.escape(rails_path)}["']$/
end
def test_edge_option
assert_generates_without_bundler(edge: true)
assert_file 'Gemfile', %r{^gem\s+["']rails["'],\s+github:\s+["']#{Regexp.escape("rails/rails")}["'],\s+branch:\s+["']#{Regexp.escape("5-0-stable")}["']$}
end
def test_generation_does_not_run_bundle_install_with_full_and_mountable
assert_generates_without_bundler(mountable: true, full: true, dev: true)
assert_no_file "#{destination_root}/Gemfile.lock"
end
def test_skipping_javascripts_without_mountable_option
@ -697,48 +708,38 @@ class PluginGeneratorTest < Rails::Generators::TestCase
end
end
def test_after_bundle_callback
path = 'http://example.org/rails_template'
template = %{ after_bundle { run 'echo ran after_bundle' } }
template.instance_eval "def read; self; end" # Make the string respond to read
protected
check_open = -> *args do
assert_equal [ path, 'Accept' => 'application/x-thor-template' ], args
template
def action(*args, &block)
silence(:stdout){ generator.send(*args, &block) }
end
sequence = ['install', 'echo ran after_bundle']
@sequence_step ||= 0
ensure_bundler_first = -> command do
assert_equal sequence[@sequence_step], command, "commands should be called in sequence #{sequence}"
@sequence_step += 1
def default_files
::DEFAULT_PLUGIN_FILES
end
generator([destination_root], template: path).stub(:open, check_open, template) do
generator.stub(:bundle_command, ensure_bundler_first) do
generator.stub(:run, ensure_bundler_first) do
quietly { generator.invoke_all }
end
def assert_match_sqlite3(contents)
if defined?(JRUBY_VERSION)
assert_match(/group :development do\n gem 'activerecord-jdbcsqlite3-adapter'\nend/, contents)
else
assert_match(/group :development do\n gem 'sqlite3'\nend/, contents)
end
end
assert_equal 2, @sequence_step
end
def assert_generates_without_bundler(options = {})
generator([destination_root], options)
protected
def action(*args, &block)
silence(:stdout){ generator.send(*args, &block) }
end
command_check = -> command do
case command
when 'install'
flunk "install expected to not be called"
when 'exec spring binstub --all'
# Called when running tests with spring, let through unscathed.
end
end
def default_files
::DEFAULT_PLUGIN_FILES
end
def assert_match_sqlite3(contents)
if defined?(JRUBY_VERSION)
assert_match(/group :development do\n gem 'activerecord-jdbcsqlite3-adapter'\nend/, contents)
else
assert_match(/group :development do\n gem 'sqlite3'\nend/, contents)
generator.stub :bundle_command, command_check do
quietly { generator.invoke_all }
end
end
end
end

View file

@ -26,30 +26,6 @@ module SharedGeneratorTests
default_files.each { |path| assert_file path }
end
def assert_generates_with_bundler(options = {})
generator([destination_root], options)
command_check = -> command do
@install_called ||= 0
case command
when 'install'
@install_called += 1
assert_equal 1, @install_called, "install expected to be called once, but was called #{@install_called} times"
when 'exec spring binstub --all'
# Called when running tests with spring, let through unscathed.
end
end
generator.stub :bundle_command, command_check do
quietly { generator.invoke_all }
end
end
def test_generation_runs_bundle_install
assert_generates_with_bundler
end
def test_plugin_new_generate_pretend
run_generator ["testapp", "--pretend"]
default_files.each{ |path| assert_no_file File.join("testapp",path) }
@ -114,17 +90,6 @@ module SharedGeneratorTests
end
end
def test_dev_option
assert_generates_with_bundler dev: true
rails_path = File.expand_path('../../..', Rails.root)
assert_file 'Gemfile', /^gem\s+["']rails["'],\s+path:\s+["']#{Regexp.escape(rails_path)}["']$/
end
def test_edge_option
assert_generates_with_bundler edge: true
assert_file 'Gemfile', %r{^gem\s+["']rails["'],\s+github:\s+["']#{Regexp.escape("rails/rails")}["']$}
end
def test_skip_gemfile
assert_not_called(generator([destination_root], skip_gemfile: true), :bundle_command) do
quietly { generator.invoke_all }