Put coffee-rails in top-level of generated Gemfile

v3 of pull request based on additional feedback from @jeremy
This commit is contained in:
Gabe Kopley 2013-03-24 22:31:48 -07:00
parent 592b4b40c2
commit 940da7d9cb
3 changed files with 43 additions and 16 deletions

View File

@ -1,5 +1,17 @@
## Rails 4.0.0 (unreleased) ##
* Allow vanilla apps to render CoffeeScript templates in production
Vanilla apps already render CoffeeScript templates in development and test
environments. With this change, the production behavior matches that of
the other environments.
Effectively, this meant moving coffee-rails (and the JavaScript runtime on
which it is dependent) from the :assets group to the top-level of the
generated Gemfile.
*Gabe Kopley*
* `Rails.version` now returns an instance of `Gem::Version`
*Charlie Somerville*

View File

@ -178,29 +178,25 @@ module Rails
return if options[:skip_sprockets]
gemfile = if options.dev? || options.edge?
<<-GEMFILE
<<-GEMFILE.gsub(/^ {12}/, '')
# Gems used only for assets and not required
# in production environments by default.
group :assets do
gem 'sprockets-rails', github: 'rails/sprockets-rails'
gem 'sass-rails', github: 'rails/sass-rails'
gem 'coffee-rails', github: 'rails/coffee-rails'
# See https://github.com/sstephenson/execjs#readme for more supported runtimes
#{javascript_runtime_gemfile_entry}
#{coffee_gemfile_entry if options[:skip_javascript]}
#{javascript_runtime_gemfile_entry(2) if options[:skip_javascript]}
gem 'uglifier', '>= 1.0.3'
end
GEMFILE
else
<<-GEMFILE
<<-GEMFILE.gsub(/^ {12}/, '')
# Gems used only for assets and not required
# in production environments by default.
group :assets do
gem 'sass-rails', '~> 4.0.0.beta1'
gem 'coffee-rails', '~> 4.0.0.beta1'
# See https://github.com/sstephenson/execjs#readme for more supported runtimes
#{javascript_runtime_gemfile_entry}
#{coffee_gemfile_entry if options[:skip_javascript]}
#{javascript_runtime_gemfile_entry(2) if options[:skip_javascript]}
gem 'uglifier', '>= 1.0.3'
end
GEMFILE
@ -209,11 +205,23 @@ module Rails
gemfile.strip_heredoc.gsub(/^[ \t]*$/, '')
end
def coffee_gemfile_entry
if options.dev? || options.edge?
"gem 'coffee-rails', github: 'rails/coffee-rails'"
else
"gem 'coffee-rails', '~> 4.0.0.beta1'"
end
end
def javascript_gemfile_entry
args = {'jquery' => ", github: 'rails/jquery-rails'"}
unless options[:skip_javascript]
<<-GEMFILE.strip_heredoc
<<-GEMFILE.gsub(/^ {12}/, '').strip_heredoc
#{javascript_runtime_gemfile_entry}
# Use CoffeeScript for .js.coffee assets and views
#{coffee_gemfile_entry}
gem '#{options[:javascript]}-rails'#{args[options[:javascript]]}
# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks
@ -222,12 +230,16 @@ module Rails
end
end
def javascript_runtime_gemfile_entry
if defined?(JRUBY_VERSION)
"gem 'therubyrhino'\n"
def javascript_runtime_gemfile_entry(n_spaces=0)
runtime = if defined?(JRUBY_VERSION)
"gem 'therubyrhino'"
else
"# gem 'therubyracer', platforms: :ruby\n"
"# gem 'therubyracer', platforms: :ruby"
end
<<-GEMFILE.gsub(/^ {10}/, '')
# See https://github.com/sstephenson/execjs#readme for more supported runtimes
#{" "*n_spaces}#{runtime}
GEMFILE
end
def bundle_command(command)

View File

@ -232,8 +232,8 @@ class AppGeneratorTest < Rails::Generators::TestCase
end
assert_file "Gemfile" do |content|
assert_no_match(/sass-rails/, content)
assert_no_match(/coffee-rails/, content)
assert_no_match(/uglifier/, content)
assert_match(/coffee-rails/, content)
end
assert_file "config/environments/development.rb" do |content|
assert_no_match(/config\.assets\.debug = true/, content)
@ -293,6 +293,9 @@ class AppGeneratorTest < Rails::Generators::TestCase
assert_file "app/assets/javascripts/application.js" do |contents|
assert_no_match %r{^//=\s+require\s}, contents
end
assert_file "Gemfile" do |content|
assert_match(/coffee-rails/, content)
end
end
def test_inclusion_of_debugger