adds --skip-listen to the application generator [closes #23590]

This commit is contained in:
Xavier Noria 2016-02-17 00:58:43 +01:00
parent 5971fddb79
commit 94dbc48887
6 changed files with 42 additions and 13 deletions

View File

@ -1,3 +1,7 @@
* The application generator supports `--skip-listen` to opt-out of features
that depend on the listen gem. As of this writing they are the evented file
system monitor and the async plugin for spring.
* The Gemfiles of new applications include spring-watcher-listen on Linux and * The Gemfiles of new applications include spring-watcher-listen on Linux and
Mac OS X (unless --skip-spring). Mac OS X (unless --skip-spring).

View File

@ -63,6 +63,9 @@ module Rails
class_option :skip_spring, type: :boolean, default: false, class_option :skip_spring, type: :boolean, default: false,
desc: "Don't install Spring application preloader" desc: "Don't install Spring application preloader"
class_option :skip_listen, type: :boolean, default: false,
desc: "Don't generate configuration that depends on the listen gem"
class_option :skip_javascript, type: :boolean, aliases: '-J', default: false, class_option :skip_javascript, type: :boolean, aliases: '-J', default: false,
desc: 'Skip JavaScript files' desc: 'Skip JavaScript files'
@ -390,6 +393,10 @@ module Rails
!options[:skip_spring] && !options.dev? && Process.respond_to?(:fork) && !RUBY_PLATFORM.include?("cygwin") !options[:skip_spring] && !options.dev? && Process.respond_to?(:fork) && !RUBY_PLATFORM.include?("cygwin")
end end
def depend_on_listen?
!options[:skip_listen] && os_supports_listen_out_of_the_box?
end
def os_supports_listen_out_of_the_box? def os_supports_listen_out_of_the_box?
RbConfig::CONFIG['host_os'] =~ /darwin|linux/ RbConfig::CONFIG['host_os'] =~ /darwin|linux/
end end

View File

@ -38,13 +38,13 @@ group :development do
gem 'web-console', '~> 3.0' gem 'web-console', '~> 3.0'
<%- end -%> <%- end -%>
<%- end -%> <%- end -%>
<% if os_supports_listen_out_of_the_box? -%> <% if depend_on_listen? -%>
gem 'listen', '~> 3.0.5' gem 'listen', '~> 3.0.5'
<% end -%> <% end -%>
<% if spring_install? -%> <% if spring_install? -%>
# Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
gem 'spring' gem 'spring'
<% if os_supports_listen_out_of_the_box? -%> <% if depend_on_listen? -%>
gem 'spring-watcher-listen', '~> 2.0.0' gem 'spring-watcher-listen', '~> 2.0.0'
<% end -%> <% end -%>
<% end -%> <% end -%>

View File

@ -58,5 +58,5 @@ Rails.application.configure do
# Use an evented file watcher to asynchronously detect changes in source code, # Use an evented file watcher to asynchronously detect changes in source code,
# routes, locales, etc. This feature depends on the listen gem. # routes, locales, etc. This feature depends on the listen gem.
<%= '# ' unless os_supports_listen_out_of_the_box? %>config.file_watcher = ActiveSupport::EventedFileUpdateChecker <%= '# ' unless depend_on_listen? %>config.file_watcher = ActiveSupport::EventedFileUpdateChecker
end end

View File

@ -479,18 +479,20 @@ class AppGeneratorTest < Rails::Generators::TestCase
end end
end end
def test_inclusion_of_listen_related_gems def test_inclusion_of_listen_related_configuration_by_default
run_generator run_generator
if RbConfig::CONFIG['host_os'] =~ /darwin|linux/ if RbConfig::CONFIG['host_os'] =~ /darwin|linux/
assert_gem 'listen' assert_listen_related_configuration
assert_gem 'spring-watcher-listen'
else else
assert_file 'Gemfile' do |content| assert_no_listen_related_configuration
assert_no_match(/listen/, content)
end
end end
end end
def test_non_inclusion_of_listen_related_configuration_if_skip_listen
run_generator [destination_root, '--skip-listen']
assert_no_listen_related_configuration
end
def test_evented_file_update_checker_config def test_evented_file_update_checker_config
run_generator run_generator
assert_file 'config/environments/development.rb' do |content| assert_file 'config/environments/development.rb' do |content|
@ -759,4 +761,23 @@ class AppGeneratorTest < Rails::Generators::TestCase
assert_file "Gemfile", /^\s*gem\s+["']#{gem}["']$*/ assert_file "Gemfile", /^\s*gem\s+["']#{gem}["']$*/
end end
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
end end

View File

@ -154,8 +154,6 @@ module TestHelpers
config.action_controller.allow_forgery_protection = false config.action_controller.allow_forgery_protection = false
config.log_level = :info config.log_level = :info
RUBY RUBY
remove_from_env_config('development', 'config.file_watcher.*')
end end
def teardown_app def teardown_app
@ -328,7 +326,6 @@ class ActiveSupport::TestCase
include ActiveSupport::Testing::Stream include ActiveSupport::Testing::Stream
self.test_order = :sorted self.test_order = :sorted
end end
# Create a scope and build a fixture rails app # Create a scope and build a fixture rails app
@ -342,7 +339,7 @@ Module.new do
environment = File.expand_path('../../../../load_paths', __FILE__) environment = File.expand_path('../../../../load_paths', __FILE__)
require_environment = "-r #{environment}" require_environment = "-r #{environment}"
`#{Gem.ruby} #{require_environment} #{RAILS_FRAMEWORK_ROOT}/railties/exe/rails new #{app_template_path} --skip-gemfile --no-rc` `#{Gem.ruby} #{require_environment} #{RAILS_FRAMEWORK_ROOT}/railties/exe/rails new #{app_template_path} --skip-gemfile --skip-listen --no-rc`
File.open("#{app_template_path}/config/boot.rb", 'w') do |f| File.open("#{app_template_path}/config/boot.rb", 'w') do |f|
f.puts "require '#{environment}'" f.puts "require '#{environment}'"
f.puts "require 'rails/all'" f.puts "require 'rails/all'"