mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
application and plugin generation run bundle check unless --skip-gemfile
The purpose of this feature is that the user knows whether dependencies are satisfied. In particular, if they are not he will be warned upfront, rather than finding out himself in an abrupt way by trying to run something.
This commit is contained in:
parent
55d87d2b5c
commit
c88dddbe4d
6 changed files with 37 additions and 15 deletions
|
@ -1,5 +1,7 @@
|
|||
*Rails 3.1.0 (unreleased)*
|
||||
|
||||
* Application and plugin generation run bundle check unless --skip-gemfile. [fxn]
|
||||
|
||||
* Fixed database tasks for jdbc* adapters #jruby
|
||||
|
||||
[Rashmi Yadav]
|
||||
|
|
|
@ -184,9 +184,20 @@ module Rails
|
|||
"gem '#{options[:javascript]}-rails'" unless options[:skip_javascript]
|
||||
end
|
||||
|
||||
def bundle_if_dev_or_edge
|
||||
bundle_command = File.basename(Thor::Util.ruby_command).sub(/ruby/, 'bundle')
|
||||
run "#{bundle_command} install" if dev_or_edge?
|
||||
def bundle_command(command)
|
||||
# We use backticks and #print here instead of vanilla #system because it
|
||||
# is easier to silence stdout in the existing test suite this way. The
|
||||
# end-user gets the bundler commands called anyway.
|
||||
#
|
||||
# Thanks to James Tucker for the Gem tricks involved in this call.
|
||||
print `"#{Gem.ruby}" -rubygems "#{Gem.bin_path('bundler', 'bundle')}" #{command}`
|
||||
end
|
||||
|
||||
def run_bundle
|
||||
unless options[:skip_gemfile]
|
||||
command = dev_or_edge? ? 'install' : 'check'
|
||||
bundle_command(command)
|
||||
end
|
||||
end
|
||||
|
||||
def dev_or_edge?
|
||||
|
|
|
@ -225,7 +225,7 @@ module Rails
|
|||
build(:leftovers)
|
||||
end
|
||||
|
||||
public_task :apply_rails_template, :bundle_if_dev_or_edge
|
||||
public_task :apply_rails_template, :run_bundle
|
||||
|
||||
protected
|
||||
|
||||
|
|
|
@ -209,7 +209,7 @@ task :default => :test
|
|||
build(:leftovers)
|
||||
end
|
||||
|
||||
public_task :apply_rails_template, :bundle_if_dev_or_edge
|
||||
public_task :apply_rails_template, :run_bundle
|
||||
|
||||
protected
|
||||
|
||||
|
|
|
@ -119,17 +119,17 @@ class PluginNewGeneratorTest < Rails::Generators::TestCase
|
|||
assert_match(/It works from file!/, run_generator([destination_root, "-m", "lib/template.rb"]))
|
||||
end
|
||||
|
||||
def test_ensure_that_tests_works
|
||||
def test_ensure_that_tests_work
|
||||
run_generator
|
||||
FileUtils.cd destination_root
|
||||
`bundle install`
|
||||
`bundle install` # use backticks to silence stdout
|
||||
assert_match(/1 tests, 1 assertions, 0 failures, 0 errors/, `bundle exec rake test`)
|
||||
end
|
||||
|
||||
def test_ensure_that_tests_works_in_full_mode
|
||||
run_generator [destination_root, "--full", "--skip_active_record"]
|
||||
FileUtils.cd destination_root
|
||||
`bundle install`
|
||||
`bundle install` # use backticks to silence stdout
|
||||
assert_match(/1 tests, 1 assertions, 0 failures, 0 errors/, `bundle exec rake test`)
|
||||
end
|
||||
|
||||
|
|
|
@ -6,7 +6,6 @@ module SharedGeneratorTests
|
|||
Rails.application = TestApp::Application
|
||||
super
|
||||
Rails::Generators::AppGenerator.instance_variable_set('@desc', nil)
|
||||
@bundle_command = File.basename(Thor::Util.ruby_command).sub(/ruby/, 'bundle')
|
||||
|
||||
Kernel::silence_warnings do
|
||||
Thor::Base.shell.send(:attr_accessor, :always_force)
|
||||
|
@ -27,6 +26,11 @@ module SharedGeneratorTests
|
|||
default_files.each { |path| assert_file path }
|
||||
end
|
||||
|
||||
def test_generation_runs_bundle_check
|
||||
generator([destination_root]).expects(:bundle_command).with('check').once
|
||||
silence(:stdout) { generator.invoke_all }
|
||||
end
|
||||
|
||||
def test_plugin_new_generate_pretend
|
||||
run_generator ["testapp", "--pretend"]
|
||||
default_files.each{ |path| assert_no_file File.join("testapp",path) }
|
||||
|
@ -112,17 +116,23 @@ module SharedGeneratorTests
|
|||
end
|
||||
|
||||
def test_dev_option
|
||||
generator([destination_root], :dev => true).expects(:run).with("#{@bundle_command} install")
|
||||
generator([destination_root], :dev => true).expects(:bundle_command).with('install').once
|
||||
silence(:stdout) { generator.invoke_all }
|
||||
rails_path = File.expand_path('../../..', Rails.root)
|
||||
assert_file 'Gemfile', /^gem\s+["']rails["'],\s+:path\s+=>\s+["']#{Regexp.escape(rails_path)}["']$/
|
||||
end
|
||||
|
||||
def test_edge_option
|
||||
generator([destination_root], :edge => true).expects(:run).with("#{@bundle_command} install")
|
||||
generator([destination_root], :edge => true).expects(:bundle_command).with('install').once
|
||||
silence(:stdout) { generator.invoke_all }
|
||||
assert_file 'Gemfile', %r{^gem\s+["']rails["'],\s+:git\s+=>\s+["']#{Regexp.escape("git://github.com/rails/rails.git")}["']$}
|
||||
end
|
||||
|
||||
def test_skip_gemfile
|
||||
generator([destination_root], :skip_gemfile => true).expects(:bundle_command).never
|
||||
silence(:stdout) { generator.invoke_all }
|
||||
assert_no_file 'Gemfile'
|
||||
end
|
||||
end
|
||||
|
||||
module SharedCustomGeneratorTests
|
||||
|
@ -130,7 +140,6 @@ module SharedCustomGeneratorTests
|
|||
Rails.application = TestApp::Application
|
||||
super
|
||||
Rails::Generators::AppGenerator.instance_variable_set('@desc', nil)
|
||||
@bundle_command = File.basename(Thor::Util.ruby_command).sub(/ruby/, 'bundle')
|
||||
end
|
||||
|
||||
def teardown
|
||||
|
|
Loading…
Reference in a new issue