From 940da7d9cbb39bc9589031df62e26edfc0c1f8bc Mon Sep 17 00:00:00 2001 From: Gabe Kopley Date: Sun, 24 Mar 2013 22:31:48 -0700 Subject: [PATCH] Put coffee-rails in top-level of generated Gemfile v3 of pull request based on additional feedback from @jeremy --- railties/CHANGELOG.md | 12 ++++++ railties/lib/rails/generators/app_base.rb | 42 ++++++++++++------- .../test/generators/app_generator_test.rb | 5 ++- 3 files changed, 43 insertions(+), 16 deletions(-) diff --git a/railties/CHANGELOG.md b/railties/CHANGELOG.md index fb030dab4a..2727f1a85d 100644 --- a/railties/CHANGELOG.md +++ b/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* diff --git a/railties/lib/rails/generators/app_base.rb b/railties/lib/rails/generators/app_base.rb index ef39a4b6a8..4e05c32f74 100644 --- a/railties/lib/rails/generators/app_base.rb +++ b/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) diff --git a/railties/test/generators/app_generator_test.rb b/railties/test/generators/app_generator_test.rb index 0697035871..0daea2fd0a 100644 --- a/railties/test/generators/app_generator_test.rb +++ b/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 -- GitLab