Skip to content
Browse files

Put coffee-rails in top-level of generated Gemfile

v3 of pull request based on additional feedback from @jeremy
  • Loading branch information...
1 parent 592b4b4 commit 940da7d9cbb39bc9589031df62e26edfc0c1f8bc @gkop gkop committed Mar 24, 2013
Showing with 43 additions and 16 deletions.
  1. +12 −0 railties/CHANGELOG.md
  2. +27 −15 railties/lib/rails/generators/app_base.rb
  3. +4 −1 railties/test/generators/app_generator_test.rb
View
12 railties/CHANGELOG.md
@@ -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
42 railties/lib/rails/generators/app_base.rb
@@ -178,29 +178,25 @@ def assets_gemfile_entry
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 @@ def assets_gemfile_entry
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 @@ def javascript_gemfile_entry
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
5 railties/test/generators/app_generator_test.rb
@@ -232,8 +232,8 @@ def test_generator_if_skip_sprockets_is_given
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 @@ def test_javascript_is_skipped_if_required
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

0 comments on commit 940da7d

Please sign in to comment.
Something went wrong with that request. Please try again.