From eb75f15a1aaa570fc0eedd1cb5ad0486e0e48450 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jos=C3=A9=20Valim?= <jose.valim@gmail.com>
Date: Sun, 17 Apr 2011 10:23:07 +0200
Subject: Generate app/* stubs directories for full plugins to show ththat it
 is possible to extend them.

---
 .../rails/plugin_new/plugin_new_generator.rb       | 43 ++++++++++++++--------
 .../templates/app/models/.empty_directory          |  0
 .../test/generators/plugin_new_generator_test.rb   |  6 +++
 3 files changed, 33 insertions(+), 16 deletions(-)
 create mode 100644 railties/lib/rails/generators/rails/plugin_new/templates/app/models/.empty_directory

diff --git a/railties/lib/rails/generators/rails/plugin_new/plugin_new_generator.rb b/railties/lib/rails/generators/rails/plugin_new/plugin_new_generator.rb
index e7f4bab9de..81563f81d3 100644
--- a/railties/lib/rails/generators/rails/plugin_new/plugin_new_generator.rb
+++ b/railties/lib/rails/generators/rails/plugin_new/plugin_new_generator.rb
@@ -9,10 +9,15 @@ module Rails
     end
 
     def app
-      if options[:mountable]
+      if mountable?
         directory "app"
         template "#{app_templates_dir}/app/views/layouts/application.html.erb.tt",
                  "app/views/layouts/#{name}/application.html.erb"
+      elsif full?
+        empty_directory_with_gitkeep "app/models"
+        empty_directory_with_gitkeep "app/controllers"
+        empty_directory_with_gitkeep "app/views"
+        empty_directory_with_gitkeep "app/helpers"
       end
     end
 
@@ -61,8 +66,12 @@ task :default => :test
       end
     end
 
+    PASSTHROUGH_OPTIONS = [
+      :skip_active_record, :skip_javascript, :database, :javascript, :quiet, :pretend, :force, :skip
+    ]
+
     def generate_test_dummy(force = false)
-      opts = (options || {}).slice(:skip_active_record, :skip_javascript, :database, :javascript, :quiet, :pretend, :force, :skip)
+      opts = (options || {}).slice(*PASSTHROUGH_OPTIONS)
       opts[:force] = force
 
       invoke Rails::Generators::AppGenerator,
@@ -94,19 +103,18 @@ task :default => :test
     end
 
     def stylesheets
-      if options[:mountable]
-        empty_directory_with_gitkeep "app/stylesheets"
+      if mountable?
         copy_file "#{app_templates_dir}/app/assets/stylesheets/application.css",
                   "app/assets/stylesheets/application.css"
+      elsif full?
+        empty_directory_with_gitkeep "app/assets/stylesheets"
       end
     end
 
     def javascripts
-      return unless options[:mountable]
+      return if options.skip_javascript?
 
-      if options[:skip_javascript]
-        empty_directory_with_gitkeep "vendor/assets/javascripts"
-      else
+      if mountable?
         copy_file "#{app_templates_dir}/app/assets/javascripts/application.js.tt",
                   "app/assets/javascripts/application.js"
         copy_file "#{app_templates_dir}/vendor/assets/javascripts/#{options[:javascript]}.js",
@@ -122,6 +130,8 @@ task :default => :test
           copy_file "#{app_templates_dir}/vendor/assets/javascripts/effects.js",
                     "vendor/assets/javascripts/effects.js"
         end
+      elsif full?
+        empty_directory_with_gitkeep "app/assets/javascripts"
       end
     end
 
@@ -139,17 +149,17 @@ task :default => :test
 
       alias_method :plugin_path, :app_path
 
-      class_option :dummy_path,     :type => :string, :default => "test/dummy",
-                                    :desc => "Create dummy application at given path"
+      class_option :dummy_path,   :type => :string, :default => "test/dummy",
+                                  :desc => "Create dummy application at given path"
 
-      class_option :full,           :type => :boolean, :default => false,
-                                    :desc => "Generate rails engine with integration tests"
+      class_option :full,         :type => :boolean, :default => false,
+                                  :desc => "Generate rails engine with integration tests"
 
-      class_option :mountable,      :type => :boolean, :default => false,
-                                    :desc => "Generate mountable isolated application"
+      class_option :mountable,    :type => :boolean, :default => false,
+                                  :desc => "Generate mountable isolated application"
 
-      class_option :skip_gemspec,   :type => :boolean, :default => false,
-                                    :desc => "Skip gemspec file"
+      class_option :skip_gemspec, :type => :boolean, :default => false,
+                                  :desc => "Skip gemspec file"
 
       def initialize(*args)
         raise Error, "Options should be given after the plugin name. For details run: rails plugin --help" if args[0].blank?
@@ -209,6 +219,7 @@ task :default => :test
       public_task :apply_rails_template, :bundle_if_dev_or_edge
 
     protected
+
       def app_templates_dir
         "../../app/templates"
       end
diff --git a/railties/lib/rails/generators/rails/plugin_new/templates/app/models/.empty_directory b/railties/lib/rails/generators/rails/plugin_new/templates/app/models/.empty_directory
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/railties/test/generators/plugin_new_generator_test.rb b/railties/test/generators/plugin_new_generator_test.rb
index fd8c30efaf..d20335ad95 100644
--- a/railties/test/generators/plugin_new_generator_test.rb
+++ b/railties/test/generators/plugin_new_generator_test.rb
@@ -145,6 +145,12 @@ class PluginNewGeneratorTest < Rails::Generators::TestCase
 
   def test_creating_engine_in_full_mode
     run_generator [destination_root, "--full"]
+    assert_file "app/assets/javascripts"
+    assert_file "app/assets/stylesheets"
+    assert_file "app/models"
+    assert_file "app/controllers"
+    assert_file "app/views"
+    assert_file "app/helpers"
     assert_file "config/routes.rb", /Rails.application.routes.draw do/
     assert_file "lib/bukkits/engine.rb", /module Bukkits\n  class Engine < Rails::Engine\n  end\nend/
     assert_file "lib/bukkits.rb", /require "bukkits\/engine"/
-- 
cgit v1.2.3