From b6f50b3fa86c272016d828d173ca57cfd41ec2c8 Mon Sep 17 00:00:00 2001
From: claudiob <claudiob@gmail.com>
Date: Wed, 31 Dec 2014 14:10:26 +0100
Subject: Add --skip-action-mailer (or -M) to rails generate

---
 railties/CHANGELOG.md                              |  4 ++++
 railties/lib/rails/generators/app_base.rb          |  6 ++++-
 .../rails/app/templates/config/application.rb      |  2 +-
 .../config/environments/development.rb.tt          |  2 ++
 .../templates/config/environments/production.rb.tt |  2 ++
 .../app/templates/config/environments/test.rb.tt   |  2 ++
 .../generators/rails/plugin/plugin_generator.rb    |  3 ++-
 .../rails/plugin/templates/rails/application.rb    |  2 +-
 railties/test/generators/app_generator_test.rb     | 28 ++++++++++++++++++++++
 railties/test/generators/plugin_generator_test.rb  | 28 ++++++++++++++++++++++
 10 files changed, 75 insertions(+), 4 deletions(-)

diff --git a/railties/CHANGELOG.md b/railties/CHANGELOG.md
index b32e9437a3..d583be5e73 100644
--- a/railties/CHANGELOG.md
+++ b/railties/CHANGELOG.md
@@ -1,3 +1,7 @@
+*   Add `--skip-action-mailer` option to the app generator.
+
+    *claudiob*
+
 *   Autoload any second level directories called `app/*/concerns`.
 
     *Alex Robbin*
diff --git a/railties/lib/rails/generators/app_base.rb b/railties/lib/rails/generators/app_base.rb
index 3db5b50ad6..71186891a3 100644
--- a/railties/lib/rails/generators/app_base.rb
+++ b/railties/lib/rails/generators/app_base.rb
@@ -38,6 +38,10 @@ module Rails
         class_option :skip_keeps,         type: :boolean, default: false,
                                           desc: 'Skip source control .keep files'
 
+        class_option :skip_action_mailer, type: :boolean, aliases: "-M",
+                                          default: false,
+                                          desc: "Skip Action Mailer files"
+
         class_option :skip_active_record, type: :boolean, aliases: '-O', default: false,
                                           desc: 'Skip Active Record files'
 
@@ -164,7 +168,7 @@ module Rails
       end
 
       def include_all_railties?
-        !options[:skip_active_record] && !options[:skip_test_unit] && !options[:skip_sprockets]
+        options.values_at(:skip_active_record, :skip_action_mailer, :skip_test_unit, :skip_sprockets).none?
       end
 
       def comment_if(value)
diff --git a/railties/lib/rails/generators/rails/app/templates/config/application.rb b/railties/lib/rails/generators/rails/app/templates/config/application.rb
index 111b680e4b..dc0cc07888 100644
--- a/railties/lib/rails/generators/rails/app/templates/config/application.rb
+++ b/railties/lib/rails/generators/rails/app/templates/config/application.rb
@@ -8,7 +8,7 @@ require "active_model/railtie"
 require "active_job/railtie"
 <%= comment_if :skip_active_record %>require "active_record/railtie"
 require "action_controller/railtie"
-require "action_mailer/railtie"
+<%= comment_if :skip_action_mailer %>require "action_mailer/railtie"
 require "action_view/railtie"
 <%= comment_if :skip_sprockets %>require "sprockets/railtie"
 <%= comment_if :skip_test_unit %>require "rails/test_unit/railtie"
diff --git a/railties/lib/rails/generators/rails/app/templates/config/environments/development.rb.tt b/railties/lib/rails/generators/rails/app/templates/config/environments/development.rb.tt
index d8326d1728..ecb5d4170f 100644
--- a/railties/lib/rails/generators/rails/app/templates/config/environments/development.rb.tt
+++ b/railties/lib/rails/generators/rails/app/templates/config/environments/development.rb.tt
@@ -12,9 +12,11 @@ Rails.application.configure do
   # Show full error reports and disable caching.
   config.consider_all_requests_local       = true
   config.action_controller.perform_caching = false
+  <%- unless options.skip_action_mailer? -%>
 
   # Don't care if the mailer can't send.
   config.action_mailer.raise_delivery_errors = false
+  <%- end -%>
 
   # Print deprecation notices to the Rails logger.
   config.active_support.deprecation = :log
diff --git a/railties/lib/rails/generators/rails/app/templates/config/environments/production.rb.tt b/railties/lib/rails/generators/rails/app/templates/config/environments/production.rb.tt
index 677bb3b338..99d7bfb3c9 100644
--- a/railties/lib/rails/generators/rails/app/templates/config/environments/production.rb.tt
+++ b/railties/lib/rails/generators/rails/app/templates/config/environments/production.rb.tt
@@ -61,10 +61,12 @@ Rails.application.configure do
 
   # Enable serving of images, stylesheets, and JavaScripts from an asset server.
   # config.action_controller.asset_host = 'http://assets.example.com'
+  <%- unless options.skip_action_mailer? -%>
 
   # Ignore bad email addresses and do not raise email delivery errors.
   # Set this to true and configure the email server for immediate delivery to raise delivery errors.
   # config.action_mailer.raise_delivery_errors = false
+  <%- end -%>
 
   # Enable locale fallbacks for I18n (makes lookups for any locale fall back to
   # the I18n.default_locale when a translation cannot be found).
diff --git a/railties/lib/rails/generators/rails/app/templates/config/environments/test.rb.tt b/railties/lib/rails/generators/rails/app/templates/config/environments/test.rb.tt
index 1c19f08b28..0306deb18c 100644
--- a/railties/lib/rails/generators/rails/app/templates/config/environments/test.rb.tt
+++ b/railties/lib/rails/generators/rails/app/templates/config/environments/test.rb.tt
@@ -25,11 +25,13 @@ Rails.application.configure do
 
   # Disable request forgery protection in test environment.
   config.action_controller.allow_forgery_protection = false
+  <%- unless options.skip_action_mailer? -%>
 
   # Tell Action Mailer not to deliver emails to the real world.
   # The :test delivery method accumulates sent emails in the
   # ActionMailer::Base.deliveries array.
   config.action_mailer.delivery_method = :test
+  <%- end -%>
 
   # Randomize the order test cases are executed.
   config.active_support.test_order = :random
diff --git a/railties/lib/rails/generators/rails/plugin/plugin_generator.rb b/railties/lib/rails/generators/rails/plugin/plugin_generator.rb
index 584f776c01..1c270dd7d4 100644
--- a/railties/lib/rails/generators/rails/plugin/plugin_generator.rb
+++ b/railties/lib/rails/generators/rails/plugin/plugin_generator.rb
@@ -74,7 +74,8 @@ task default: :test
     end
 
     PASSTHROUGH_OPTIONS = [
-      :skip_active_record, :skip_javascript, :database, :javascript, :quiet, :pretend, :force, :skip
+      :skip_active_record, :skip_action_mailer, :skip_javascript, :database,
+      :javascript, :quiet, :pretend, :force, :skip
     ]
 
     def generate_test_dummy(force = false)
diff --git a/railties/lib/rails/generators/rails/plugin/templates/rails/application.rb b/railties/lib/rails/generators/rails/plugin/templates/rails/application.rb
index b2aa82344a..3a9a7e5437 100644
--- a/railties/lib/rails/generators/rails/plugin/templates/rails/application.rb
+++ b/railties/lib/rails/generators/rails/plugin/templates/rails/application.rb
@@ -6,7 +6,7 @@ require 'rails/all'
 # Pick the frameworks you want:
 <%= comment_if :skip_active_record %>require "active_record/railtie"
 require "action_controller/railtie"
-require "action_mailer/railtie"
+<%= comment_if :skip_action_mailer %>require "action_mailer/railtie"
 require "action_view/railtie"
 <%= comment_if :skip_sprockets %>require "sprockets/railtie"
 <%= comment_if :skip_test_unit %>require "rails/test_unit/railtie"
diff --git a/railties/test/generators/app_generator_test.rb b/railties/test/generators/app_generator_test.rb
index 3bda924570..ac8f735cec 100644
--- a/railties/test/generators/app_generator_test.rb
+++ b/railties/test/generators/app_generator_test.rb
@@ -259,6 +259,20 @@ class AppGeneratorTest < Rails::Generators::TestCase
     end
   end
 
+  def test_generator_without_skips
+    run_generator
+    assert_file "config/application.rb", /\s+require\s+["']rails\/all["']/
+    assert_file "config/environments/development.rb" do |content|
+      assert_match(/config\.action_mailer\.raise_delivery_errors = false/, content)
+    end
+    assert_file "config/environments/test.rb" do |content|
+      assert_match(/config\.action_mailer\.delivery_method = :test/, content)
+    end
+    assert_file "config/environments/production.rb" do |content|
+      assert_match(/# config\.action_mailer\.raise_delivery_errors = false/, content)
+    end
+  end
+
   def test_generator_if_skip_active_record_is_given
     run_generator [destination_root, "--skip-active-record"]
     assert_no_file "config/database.yml"
@@ -268,6 +282,20 @@ class AppGeneratorTest < Rails::Generators::TestCase
     end
   end
 
+  def test_generator_if_skip_action_mailer_is_given
+    run_generator [destination_root, "--skip-action-mailer"]
+    assert_file "config/application.rb", /#\s+require\s+["']action_mailer\/railtie["']/
+    assert_file "config/environments/development.rb" do |content|
+      assert_no_match(/config\.action_mailer/, content)
+    end
+    assert_file "config/environments/test.rb" do |content|
+      assert_no_match(/config\.action_mailer/, content)
+    end
+    assert_file "config/environments/production.rb" do |content|
+      assert_no_match(/config\.action_mailer/, content)
+    end
+  end
+
   def test_generator_if_skip_sprockets_is_given
     run_generator [destination_root, "--skip-sprockets"]
     assert_no_file "config/initializers/assets.rb"
diff --git a/railties/test/generators/plugin_generator_test.rb b/railties/test/generators/plugin_generator_test.rb
index 95a554adef..e9f06a1fd7 100644
--- a/railties/test/generators/plugin_generator_test.rb
+++ b/railties/test/generators/plugin_generator_test.rb
@@ -140,6 +140,20 @@ class PluginGeneratorTest < Rails::Generators::TestCase
     end
   end
 
+  def test_app_generator_without_skips
+    run_generator
+    assert_file "test/dummy/config/application.rb", /\s+require\s+["']rails\/all["']/
+    assert_file "test/dummy/config/environments/development.rb" do |content|
+      assert_match(/config\.action_mailer\.raise_delivery_errors = false/, content)
+    end
+    assert_file "test/dummy/config/environments/test.rb" do |content|
+      assert_match(/config\.action_mailer\.delivery_method = :test/, content)
+    end
+    assert_file "test/dummy/config/environments/production.rb" do |content|
+      assert_match(/# config\.action_mailer\.raise_delivery_errors = false/, content)
+    end
+  end
+
   def test_active_record_is_removed_from_frameworks_if_skip_active_record_is_given
     run_generator [destination_root, "--skip-active-record"]
     assert_file "test/dummy/config/application.rb", /#\s+require\s+["']active_record\/railtie["']/
@@ -153,6 +167,20 @@ class PluginGeneratorTest < Rails::Generators::TestCase
     end
   end
 
+  def test_action_mailer_is_removed_from_frameworks_if_skip_action_mailer_is_given
+    run_generator [destination_root, "--skip-action-mailer"]
+    assert_file "test/dummy/config/application.rb", /#\s+require\s+["']action_mailer\/railtie["']/
+    assert_file "test/dummy/config/environments/development.rb" do |content|
+      assert_no_match(/config\.action_mailer/, content)
+    end
+    assert_file "test/dummy/config/environments/test.rb" do |content|
+      assert_no_match(/config\.action_mailer/, content)
+    end
+    assert_file "test/dummy/config/environments/production.rb" do |content|
+      assert_no_match(/config\.action_mailer/, content)
+    end
+  end
+
   def test_ensure_that_database_option_is_passed_to_app_generator
     run_generator [destination_root, "--database", "postgresql"]
     assert_file "test/dummy/config/database.yml", /postgres/
-- 
cgit v1.2.3