Merge pull request #45627 from gmcgibbon/controller_generator_improvements
Controller generator improvements
This commit is contained in:
commit
97f13c2b82
@ -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"]
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user