mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Merge branch 'scaffold_fixes'
This commit is contained in:
commit
9e42cd8686
10 changed files with 84 additions and 22 deletions
|
@ -99,13 +99,17 @@ module Rails
|
||||||
end
|
end
|
||||||
|
|
||||||
def index_name
|
def index_name
|
||||||
@index_name ||= if reference?
|
@index_name ||= if polymorphic?
|
||||||
polymorphic? ? %w(id type).map { |t| "#{name}_#{t}" } : "#{name}_id"
|
%w(id type).map { |t| "#{name}_#{t}" }
|
||||||
else
|
else
|
||||||
name
|
column_name
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def column_name
|
||||||
|
@column_name ||= reference? ? "#{name}_id" : name
|
||||||
|
end
|
||||||
|
|
||||||
def foreign_key?
|
def foreign_key?
|
||||||
!!(name =~ /_id$/)
|
!!(name =~ /_id$/)
|
||||||
end
|
end
|
||||||
|
|
|
@ -160,6 +160,13 @@ module Rails
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def attributes_names
|
||||||
|
@attributes_names ||= attributes.each_with_object([]) do |a, names|
|
||||||
|
names << a.column_name
|
||||||
|
names << "#{a.name}_type" if a.polymorphic?
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def pluralize_table_names?
|
def pluralize_table_names?
|
||||||
!defined?(ActiveRecord::Base) || ActiveRecord::Base.pluralize_table_names
|
!defined?(ActiveRecord::Base) || ActiveRecord::Base.pluralize_table_names
|
||||||
end
|
end
|
||||||
|
|
|
@ -91,10 +91,10 @@ class <%= controller_class_name %>Controller < ApplicationController
|
||||||
# Use this method to whitelist the permissible parameters. Example: params.require(:person).permit(:name, :age)
|
# Use this method to whitelist the permissible parameters. Example: params.require(:person).permit(:name, :age)
|
||||||
# Also, you can specialize this method with per-user checking of permissible attributes.
|
# Also, you can specialize this method with per-user checking of permissible attributes.
|
||||||
def <%= "#{singular_table_name}_params" %>
|
def <%= "#{singular_table_name}_params" %>
|
||||||
<%- if attributes.empty? -%>
|
<%- if attributes_names.empty? -%>
|
||||||
params[<%= ":#{singular_table_name}" %>]
|
params[<%= ":#{singular_table_name}" %>]
|
||||||
<%- else -%>
|
<%- else -%>
|
||||||
params.require(<%= ":#{singular_table_name}" %>).permit(<%= attributes.map {|a| ":#{a.name}" }.join(', ') %>)
|
params.require(<%= ":#{singular_table_name}" %>).permit(<%= attributes_names.map { |name| ":#{name}" }.join(', ') %>)
|
||||||
<%- end -%>
|
<%- end -%>
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -3,12 +3,14 @@
|
||||||
<% unless attributes.empty? -%>
|
<% unless attributes.empty? -%>
|
||||||
one:
|
one:
|
||||||
<% attributes.each do |attribute| -%>
|
<% attributes.each do |attribute| -%>
|
||||||
<%= attribute.name %>: <%= attribute.default %>
|
<%= attribute.column_name %>: <%= attribute.default %>
|
||||||
|
<%= "#{attribute.name}_type: #{attribute.human_name}" if attribute.polymorphic? %>
|
||||||
<% end -%>
|
<% end -%>
|
||||||
|
|
||||||
two:
|
two:
|
||||||
<% attributes.each do |attribute| -%>
|
<% attributes.each do |attribute| -%>
|
||||||
<%= attribute.name %>: <%= attribute.default %>
|
<%= attribute.column_name %>: <%= attribute.default %>
|
||||||
|
<%= "#{attribute.name}_type: #{attribute.human_name}" if attribute.polymorphic? %>
|
||||||
<% end -%>
|
<% end -%>
|
||||||
<% else -%>
|
<% else -%>
|
||||||
# This model initially had no columns defined. If you add columns to the
|
# This model initially had no columns defined. If you add columns to the
|
||||||
|
|
|
@ -18,17 +18,12 @@ module TestUnit # :nodoc:
|
||||||
private
|
private
|
||||||
|
|
||||||
def attributes_hash
|
def attributes_hash
|
||||||
return if accessible_attributes.empty?
|
return if attributes_names.empty?
|
||||||
|
|
||||||
accessible_attributes.map do |a|
|
attributes_names.map do |name|
|
||||||
name = a.name
|
|
||||||
"#{name}: @#{singular_table_name}.#{name}"
|
"#{name}: @#{singular_table_name}.#{name}"
|
||||||
end.sort.join(', ')
|
end.sort.join(', ')
|
||||||
end
|
end
|
||||||
|
|
||||||
def accessible_attributes
|
|
||||||
attributes.reject(&:reference?)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -195,6 +195,16 @@ module ApplicationTests
|
||||||
assert_no_match(/Errors running/, output)
|
assert_no_match(/Errors running/, output)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_scaffold_with_references_columns_tests_pass_by_default
|
||||||
|
output = Dir.chdir(app_path) do
|
||||||
|
`rails generate scaffold LineItems product:references cart:belongs_to;
|
||||||
|
bundle exec rake db:migrate db:test:clone test`
|
||||||
|
end
|
||||||
|
|
||||||
|
assert_match(/7 tests, 13 assertions, 0 failures, 0 errors/, output)
|
||||||
|
assert_no_match(/Errors running/, output)
|
||||||
|
end
|
||||||
|
|
||||||
def test_db_test_clone_when_using_sql_format
|
def test_db_test_clone_when_using_sql_format
|
||||||
add_to_config "config.active_record.schema_format = :sql"
|
add_to_config "config.active_record.schema_format = :sql"
|
||||||
output = Dir.chdir(app_path) do
|
output = Dir.chdir(app_path) do
|
||||||
|
|
|
@ -117,13 +117,13 @@ class GeneratedAttributeTest < Rails::Generators::TestCase
|
||||||
assert create_generated_attribute("#{attribute_type}{polymorphic}").polymorphic?
|
assert create_generated_attribute("#{attribute_type}{polymorphic}").polymorphic?
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_polymorphic_reference_is_false
|
def test_polymorphic_reference_is_false
|
||||||
%w(foo bar baz).each do |attribute_type|
|
%w(foo bar baz).each do |attribute_type|
|
||||||
assert !create_generated_attribute("#{attribute_type}{polymorphic}").polymorphic?
|
assert !create_generated_attribute("#{attribute_type}{polymorphic}").polymorphic?
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_blank_type_defaults_to_string_raises_exception
|
def test_blank_type_defaults_to_string_raises_exception
|
||||||
assert_equal :string, create_generated_attribute(nil, 'title').type
|
assert_equal :string, create_generated_attribute(nil, 'title').type
|
||||||
assert_equal :string, create_generated_attribute("", 'title').type
|
assert_equal :string, create_generated_attribute("", 'title').type
|
||||||
|
@ -132,6 +132,13 @@ class GeneratedAttributeTest < Rails::Generators::TestCase
|
||||||
def test_handles_index_names_for_references
|
def test_handles_index_names_for_references
|
||||||
assert_equal "post", create_generated_attribute('string', 'post').index_name
|
assert_equal "post", create_generated_attribute('string', 'post').index_name
|
||||||
assert_equal "post_id", create_generated_attribute('references', 'post').index_name
|
assert_equal "post_id", create_generated_attribute('references', 'post').index_name
|
||||||
|
assert_equal "post_id", create_generated_attribute('belongs_to', 'post').index_name
|
||||||
assert_equal ["post_id", "post_type"], create_generated_attribute('references{polymorphic}', 'post').index_name
|
assert_equal ["post_id", "post_type"], create_generated_attribute('references{polymorphic}', 'post').index_name
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_handles_index_names_for_references
|
||||||
|
assert_equal "post", create_generated_attribute('string', 'post').column_name
|
||||||
|
assert_equal "post_id", create_generated_attribute('references', 'post').column_name
|
||||||
|
assert_equal "post_id", create_generated_attribute('belongs_to', 'post').column_name
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -273,6 +273,16 @@ class ModelGeneratorTest < Rails::Generators::TestCase
|
||||||
assert_file "test/fixtures/accounts.yml", /name: MyString/, /age: 1/
|
assert_file "test/fixtures/accounts.yml", /name: MyString/, /age: 1/
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_fixtures_use_the_references_ids
|
||||||
|
run_generator ["LineItem", "product:references", "cart:belongs_to"]
|
||||||
|
assert_file "test/fixtures/line_items.yml", /product_id: /, /cart_id: /
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_fixtures_use_the_references_ids_and_type
|
||||||
|
run_generator ["LineItem", "product:references{polymorphic}", "cart:belongs_to"]
|
||||||
|
assert_file "test/fixtures/line_items.yml", /product_id: /, /product_type: Product/, /cart_id: /
|
||||||
|
end
|
||||||
|
|
||||||
def test_fixture_is_skipped
|
def test_fixture_is_skipped
|
||||||
run_generator ["account", "--skip-fixture"]
|
run_generator ["account", "--skip-fixture"]
|
||||||
assert_no_file "test/fixtures/accounts.yml"
|
assert_no_file "test/fixtures/accounts.yml"
|
||||||
|
|
|
@ -52,6 +52,33 @@ class ScaffoldControllerGeneratorTest < Rails::Generators::TestCase
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_dont_use_require_or_permit_if_there_are_no_attributes
|
||||||
|
run_generator ["User"]
|
||||||
|
|
||||||
|
assert_file "app/controllers/users_controller.rb" do |content|
|
||||||
|
assert_match(/def user_params/, content)
|
||||||
|
assert_match(/params\[:user\]/, content)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_controller_permit_references_attributes
|
||||||
|
run_generator ["LineItem", "product:references", "cart:belongs_to"]
|
||||||
|
|
||||||
|
assert_file "app/controllers/line_items_controller.rb" do |content|
|
||||||
|
assert_match(/def line_item_params/, content)
|
||||||
|
assert_match(/params\.require\(:line_item\)\.permit\(:product_id, :cart_id\)/, content)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_controller_permit_polymorphic_references_attributes
|
||||||
|
run_generator ["LineItem", "product:references{polymorphic}"]
|
||||||
|
|
||||||
|
assert_file "app/controllers/line_items_controller.rb" do |content|
|
||||||
|
assert_match(/def line_item_params/, content)
|
||||||
|
assert_match(/params\.require\(:line_item\)\.permit\(:product_id, :product_type\)/, content)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def test_helper_are_invoked_with_a_pluralized_name
|
def test_helper_are_invoked_with_a_pluralized_name
|
||||||
run_generator
|
run_generator
|
||||||
assert_file "app/helpers/users_helper.rb", /module UsersHelper/
|
assert_file "app/helpers/users_helper.rb", /module UsersHelper/
|
||||||
|
@ -68,13 +95,13 @@ class ScaffoldControllerGeneratorTest < Rails::Generators::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_functional_tests
|
def test_functional_tests
|
||||||
run_generator
|
run_generator ["User", "name:string", "age:integer", "organization:references{polymorphic}"]
|
||||||
|
|
||||||
assert_file "test/controllers/users_controller_test.rb" do |content|
|
assert_file "test/controllers/users_controller_test.rb" do |content|
|
||||||
assert_match(/class UsersControllerTest < ActionController::TestCase/, content)
|
assert_match(/class UsersControllerTest < ActionController::TestCase/, content)
|
||||||
assert_match(/test "should get index"/, content)
|
assert_match(/test "should get index"/, content)
|
||||||
assert_match(/post :create, user: \{ age: @user.age, name: @user.name \}/, content)
|
assert_match(/post :create, user: \{ age: @user\.age, name: @user\.name, organization_id: @user\.organization_id, organization_type: @user\.organization_type \}/, content)
|
||||||
assert_match(/put :update, id: @user, user: \{ age: @user.age, name: @user.name \}/, content)
|
assert_match(/put :update, id: @user, user: \{ age: @user\.age, name: @user\.name, organization_id: @user\.organization_id, organization_type: @user\.organization_type \}/, content)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -60,8 +60,8 @@ class ScaffoldGeneratorTest < Rails::Generators::TestCase
|
||||||
|
|
||||||
assert_file "test/controllers/product_lines_controller_test.rb" do |test|
|
assert_file "test/controllers/product_lines_controller_test.rb" do |test|
|
||||||
assert_match(/class ProductLinesControllerTest < ActionController::TestCase/, test)
|
assert_match(/class ProductLinesControllerTest < ActionController::TestCase/, test)
|
||||||
assert_match(/post :create, product_line: \{ title: @product_line.title \}/, test)
|
assert_match(/post :create, product_line: \{ product_id: @product_line\.product_id, title: @product_line\.title, user_id: @product_line\.user_id \}/, test)
|
||||||
assert_match(/put :update, id: @product_line, product_line: \{ title: @product_line.title \}/, test)
|
assert_match(/put :update, id: @product_line, product_line: \{ product_id: @product_line\.product_id, title: @product_line\.title, user_id: @product_line\.user_id \}/, test)
|
||||||
end
|
end
|
||||||
|
|
||||||
# Views
|
# Views
|
||||||
|
@ -199,7 +199,7 @@ class ScaffoldGeneratorTest < Rails::Generators::TestCase
|
||||||
run_generator [ "admin/role" ], :behavior => :revoke
|
run_generator [ "admin/role" ], :behavior => :revoke
|
||||||
|
|
||||||
# Model
|
# Model
|
||||||
assert_file "app/models/admin.rb" # ( should not be remove )
|
assert_file "app/models/admin.rb" # ( should not be remove )
|
||||||
assert_no_file "app/models/admin/role.rb"
|
assert_no_file "app/models/admin/role.rb"
|
||||||
assert_no_file "test/models/admin/role_test.rb"
|
assert_no_file "test/models/admin/role_test.rb"
|
||||||
assert_no_file "test/fixtures/admin/roles.yml"
|
assert_no_file "test/fixtures/admin/roles.yml"
|
||||||
|
|
Loading…
Reference in a new issue