Merge pull request #45627 from gmcgibbon/controller_generator_improvements

Controller generator improvements
This commit is contained in:
Gannon McGibbon 2022-07-22 14:23:00 -05:00 committed by GitHub
commit 97f13c2b82
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 47 additions and 5 deletions

@ -1,3 +1,17 @@
* Add `--parent` option to controller generator to specify parent class of job.
Example:
`bin/rails g controller admin/users --parent=admin_controller` generates:
```ruby
class Admin::UsersController < AdminController
# ...
end
```
*Gannon McGibbon*
* In-app custom credentials templates are now supported. When a credentials
file does not exist, `rails credentials:edit` will now try to use
`lib/templates/rails/credentials/credentials.yml.tt` to generate the

@ -1,6 +1,6 @@
Description:
Generates a new controller and its views. Pass the controller name, either
CamelCased or under_scored, and a list of views as arguments.
CamelCased or under_scored, and a list of actions as arguments.
To create a controller within a module, specify the controller name as a
path like 'parent_module/controller_name'.
@ -8,11 +8,19 @@ Description:
This generates a controller class in app/controllers and invokes helper,
template engine, assets, and test framework generators.
Example:
`bin/rails generate controller CreditCards open debit credit close`
Examples:
`bin/rails generate controller credit_cards open debit credit close`
CreditCards controller with URLs like /credit_cards/debit.
This generates a `CreditCardsController` with routes like /credit_cards/debit.
Controller: app/controllers/credit_cards_controller.rb
Test: test/controllers/credit_cards_controller_test.rb
Views: app/views/credit_cards/debit.html.erb [...]
Helper: app/helpers/credit_cards_helper.rb
`bin/rails generate controller users index --skip-routes`
This generates a `UsersController` with an index acion and no routes.
`bin/rails generate controller admin/dashboard --parent=admin_controller`
This generates a `Admin::DashboardController` with an `AdminController` parent class.

@ -6,6 +6,7 @@ class ControllerGenerator < NamedBase # :nodoc:
argument :actions, type: :array, default: [], banner: "action action"
class_option :skip_routes, type: :boolean, desc: "Don't add routes to config/routes.rb."
class_option :helper, type: :boolean
class_option :parent, type: :string, desc: "The parent class for the generated controller"
check_class_collision suffix: "Controller"
@ -25,6 +26,18 @@ def add_routes
end
private
def parent
options[:parent]
end
def parent_class_name
if parent
parent
else
"ApplicationController"
end
end
def file_name
@_file_name ||= remove_possible_suffix(super)
end

@ -1,5 +1,5 @@
<% module_namespacing do -%>
class <%= class_name %>Controller < ApplicationController
class <%= class_name %>Controller < <%= parent_class_name.classify %>
<% actions.each do |action| -%>
def <%= action %>
end

@ -112,6 +112,13 @@ def test_does_not_add_routes_when_action_is_not_specified
end
end
def test_controller_parent_param
run_generator ["admin/dashboard", "--parent", "admin_controller"]
assert_file "app/controllers/admin/dashboard_controller.rb" do |controller|
assert_match(/class Admin::DashboardController < AdminController/, controller)
end
end
def test_controller_suffix_is_not_duplicated
run_generator ["account_controller"]