From 1a1f319cd498ee926aa7b0e3481b213de59be041 Mon Sep 17 00:00:00 2001
From: bogdanvlviv <bogdanvlviv@gmail.com>
Date: Sun, 13 Aug 2017 23:12:07 +0300
Subject: Add --skip-yarn option to the plugin generator

Add SharedGeneratorTests#application_path
This method will help to DRY in files app_generator_test.rb, plugin_generator_test.rb
---
 railties/CHANGELOG.md                              |  4 +++
 .../rails/generators/rails/app/templates/gitignore |  1 -
 .../generators/rails/plugin/plugin_generator.rb    |  2 +-
 .../generators/rails/plugin/templates/gitignore    |  4 +++
 railties/test/generators/app_generator_test.rb     | 26 -------------------
 railties/test/generators/plugin_generator_test.rb  |  4 +++
 railties/test/generators/shared_generator_tests.rb | 30 ++++++++++++++++++++++
 7 files changed, 43 insertions(+), 28 deletions(-)

diff --git a/railties/CHANGELOG.md b/railties/CHANGELOG.md
index 901d24c1ae..7b720d6e18 100644
--- a/railties/CHANGELOG.md
+++ b/railties/CHANGELOG.md
@@ -1,3 +1,7 @@
+*   Add `--skip-yarn` option to the plugin generator.
+
+    *bogdanvlviv*
+
 *   Optimize routes indentation.
 
     *Yoshiyuki Hirano*
diff --git a/railties/lib/rails/generators/rails/app/templates/gitignore b/railties/lib/rails/generators/rails/app/templates/gitignore
index d8eeb1772d..83a7b211aa 100644
--- a/railties/lib/rails/generators/rails/app/templates/gitignore
+++ b/railties/lib/rails/generators/rails/app/templates/gitignore
@@ -27,7 +27,6 @@
 <% unless options.skip_yarn? -%>
 /node_modules
 /yarn-error.log
-
 <% end -%>
 
 <% unless options.api? -%>
diff --git a/railties/lib/rails/generators/rails/plugin/plugin_generator.rb b/railties/lib/rails/generators/rails/plugin/plugin_generator.rb
index a0de708913..eb941adf95 100644
--- a/railties/lib/rails/generators/rails/plugin/plugin_generator.rb
+++ b/railties/lib/rails/generators/rails/plugin/plugin_generator.rb
@@ -89,7 +89,7 @@ task default: :test
 
     PASSTHROUGH_OPTIONS = [
       :skip_active_record, :skip_action_mailer, :skip_javascript, :skip_action_cable, :skip_sprockets, :database,
-      :javascript, :api, :quiet, :pretend, :skip
+      :javascript, :skip_yarn, :api, :quiet, :pretend, :skip
     ]
 
     def generate_test_dummy(force = false)
diff --git a/railties/lib/rails/generators/rails/plugin/templates/gitignore b/railties/lib/rails/generators/rails/plugin/templates/gitignore
index 757172e6a6..8c7cad74ed 100644
--- a/railties/lib/rails/generators/rails/plugin/templates/gitignore
+++ b/railties/lib/rails/generators/rails/plugin/templates/gitignore
@@ -5,5 +5,9 @@ pkg/
 <%= dummy_path %>/db/*.sqlite3
 <%= dummy_path %>/db/*.sqlite3-journal
 <%= dummy_path %>/log/*.log
+<% unless options[:skip_yarn] -%>
+<%= dummy_path %>/node_modules/
+<%= dummy_path %>/yarn-error.log
+<% end -%>
 <%= dummy_path %>/tmp/
 <% end -%>
diff --git a/railties/test/generators/app_generator_test.rb b/railties/test/generators/app_generator_test.rb
index 1183dcd34d..94a685393b 100644
--- a/railties/test/generators/app_generator_test.rb
+++ b/railties/test/generators/app_generator_test.rb
@@ -584,32 +584,6 @@ class AppGeneratorTest < Rails::Generators::TestCase
     end
   end
 
-  def test_generator_for_yarn
-    run_generator([destination_root])
-    assert_file "package.json", /dependencies/
-    assert_file "config/initializers/assets.rb", /node_modules/
-
-    assert_file ".gitignore" do |content|
-      assert_match(/node_modules/, content)
-      assert_match(/yarn-error\.log/, content)
-    end
-  end
-
-  def test_generator_for_yarn_skipped
-    run_generator([destination_root, "--skip-yarn"])
-    assert_no_file "package.json"
-    assert_no_file "bin/yarn"
-
-    assert_file "config/initializers/assets.rb" do |content|
-      assert_no_match(/node_modules/, content)
-    end
-
-    assert_file ".gitignore" do |content|
-      assert_no_match(/node_modules/, content)
-      assert_no_match(/yarn-error\.log/, content)
-    end
-  end
-
   def test_inclusion_of_jbuilder
     run_generator
     assert_gem "jbuilder"
diff --git a/railties/test/generators/plugin_generator_test.rb b/railties/test/generators/plugin_generator_test.rb
index bd76af86e1..e94b1ac8fe 100644
--- a/railties/test/generators/plugin_generator_test.rb
+++ b/railties/test/generators/plugin_generator_test.rb
@@ -26,6 +26,10 @@ class PluginGeneratorTest < Rails::Generators::TestCase
   destination File.join(Rails.root, "tmp/bukkits")
   arguments [destination_root]
 
+  def application_path
+    "#{destination_root}/test/dummy"
+  end
+
   # brings setup, teardown, and some tests
   include SharedGeneratorTests
 
diff --git a/railties/test/generators/shared_generator_tests.rb b/railties/test/generators/shared_generator_tests.rb
index c73b91e3f8..6c0775b50e 100644
--- a/railties/test/generators/shared_generator_tests.rb
+++ b/railties/test/generators/shared_generator_tests.rb
@@ -22,6 +22,10 @@ module SharedGeneratorTests
     Rails.application = TestApp::Application.instance
   end
 
+  def application_path
+    destination_root
+  end
+
   def test_skeleton_is_created
     run_generator
 
@@ -123,4 +127,30 @@ module SharedGeneratorTests
 
     assert_no_file("app/models/concerns/.keep")
   end
+
+  def test_generator_for_yarn
+    run_generator
+    assert_file "#{application_path}/package.json", /dependencies/
+    assert_file "#{application_path}/config/initializers/assets.rb", /node_modules/
+
+    assert_file ".gitignore" do |content|
+      assert_match(/node_modules/, content)
+      assert_match(/yarn-error\.log/, content)
+    end
+  end
+
+  def test_generator_for_yarn_skipped
+    run_generator([destination_root, "--skip-yarn"])
+    assert_no_file "#{application_path}/package.json"
+    assert_no_file "#{application_path}/bin/yarn"
+
+    assert_file "#{application_path}/config/initializers/assets.rb" do |content|
+      assert_no_match(/node_modules/, content)
+    end
+
+    assert_file ".gitignore" do |content|
+      assert_no_match(/node_modules/, content)
+      assert_no_match(/yarn-error\.log/, content)
+    end
+  end
 end
-- 
cgit v1.2.3