aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--activerecord/CHANGELOG.md9
-rw-r--r--activerecord/lib/active_record/inheritance.rb8
-rw-r--r--activerecord/lib/active_record/migration.rb13
-rw-r--r--activerecord/lib/active_record/tasks/database_tasks.rb2
-rw-r--r--activerecord/lib/active_record/tasks/sqlite_database_tasks.rb6
-rw-r--r--activerecord/test/cases/migration/pending_migrations_test.rb7
-rw-r--r--activerecord/test/cases/reflection_test.rb32
-rw-r--r--railties/test/application/test_test.rb91
8 files changed, 53 insertions, 115 deletions
diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md
index 7e40373163..462c7ae115 100644
--- a/activerecord/CHANGELOG.md
+++ b/activerecord/CHANGELOG.md
@@ -128,14 +128,7 @@
Serialized attributes on ActiveRecord models will no longer save when
unchanged. Fixes #8328.
- Sean Griffin
-
-* Fixed automatic maintaining test schema to properly handle sql structure
- schema format.
-
- Fixes #15394.
-
- *Wojciech Wnętrzak*
+ *Sean Griffin*
* Pluck now works when selecting columns from different tables with the same
name.
diff --git a/activerecord/lib/active_record/inheritance.rb b/activerecord/lib/active_record/inheritance.rb
index 5c2f1215d2..f6c265a6d6 100644
--- a/activerecord/lib/active_record/inheritance.rb
+++ b/activerecord/lib/active_record/inheritance.rb
@@ -16,14 +16,14 @@ module ActiveRecord
# the companies table with type = "Firm". You can then fetch this row again using
# <tt>Company.where(name: '37signals').first</tt> and it will return a Firm object.
#
- # Be aware that because the type column is an attribute on the record every new
+ # Be aware that because the type column is an attribute on the record every new
# subclass will instantly be marked as dirty and the type column will be included
- # in the list of changed attributes on the record. This is different from non
+ # in the list of changed attributes on the record. This is different from non
# STI classes:
#
# Company.new.changed? # => false
- # Firm.new.changed? # => true
- # Firm.new.changes # => {"type"=>["","Firm"]}
+ # Firm.new.changed? # => true
+ # Firm.new.changes # => {"type"=>["","Firm"]}
#
# If you don't have a type column defined in your table, single-table inheritance won't
# be triggered. In that case, it'll work just like normal subclasses with no special magic
diff --git a/activerecord/lib/active_record/migration.rb b/activerecord/lib/active_record/migration.rb
index 12eaf36156..e94b6ae9eb 100644
--- a/activerecord/lib/active_record/migration.rb
+++ b/activerecord/lib/active_record/migration.rb
@@ -366,22 +366,27 @@ module ActiveRecord
# This class is used to verify that all migrations have been run before
# loading a web page if config.active_record.migration_error is set to :page_load
class CheckPending
- def initialize(app, connection = Base.connection)
+ def initialize(app)
@app = app
- @connection = connection
@last_check = 0
end
def call(env)
- if @connection.supports_migrations?
+ if connection.supports_migrations?
mtime = ActiveRecord::Migrator.last_migration.mtime.to_i
if @last_check < mtime
- ActiveRecord::Migration.check_pending!(@connection)
+ ActiveRecord::Migration.check_pending!(connection)
@last_check = mtime
end
end
@app.call(env)
end
+
+ private
+
+ def connection
+ ActiveRecord::Base.connection
+ end
end
class << self
diff --git a/activerecord/lib/active_record/tasks/database_tasks.rb b/activerecord/lib/active_record/tasks/database_tasks.rb
index 4727469420..9bc23b5ec7 100644
--- a/activerecord/lib/active_record/tasks/database_tasks.rb
+++ b/activerecord/lib/active_record/tasks/database_tasks.rb
@@ -176,12 +176,10 @@ module ActiveRecord
when :ruby
file ||= File.join(db_dir, "schema.rb")
check_schema_file(file)
- purge(current_config)
load(file)
when :sql
file ||= File.join(db_dir, "structure.sql")
check_schema_file(file)
- purge(current_config)
structure_load(current_config, file)
else
raise ArgumentError, "unknown format #{format.inspect}"
diff --git a/activerecord/lib/active_record/tasks/sqlite_database_tasks.rb b/activerecord/lib/active_record/tasks/sqlite_database_tasks.rb
index 9ab64d0325..5688931db2 100644
--- a/activerecord/lib/active_record/tasks/sqlite_database_tasks.rb
+++ b/activerecord/lib/active_record/tasks/sqlite_database_tasks.rb
@@ -21,11 +21,7 @@ module ActiveRecord
FileUtils.rm(file) if File.exist?(file)
end
-
- def purge
- drop
- create
- end
+ alias :purge :drop
def charset
connection.encoding
diff --git a/activerecord/test/cases/migration/pending_migrations_test.rb b/activerecord/test/cases/migration/pending_migrations_test.rb
index eff000e1a4..517ee695ce 100644
--- a/activerecord/test/cases/migration/pending_migrations_test.rb
+++ b/activerecord/test/cases/migration/pending_migrations_test.rb
@@ -8,14 +8,17 @@ module ActiveRecord
super
@connection = MiniTest::Mock.new
@app = MiniTest::Mock.new
- @pending = CheckPending.new(@app, @connection)
+ conn = @connection
+ @pending = Class.new(CheckPending) {
+ define_method(:connection) { conn }
+ }.new(@app)
@pending.instance_variable_set :@last_check, -1 # Force checking
end
def teardown
- super
assert @connection.verify
assert @app.verify
+ super
end
def test_errors_if_pending
diff --git a/activerecord/test/cases/reflection_test.rb b/activerecord/test/cases/reflection_test.rb
index acbd065649..b41a7ee787 100644
--- a/activerecord/test/cases/reflection_test.rb
+++ b/activerecord/test/cases/reflection_test.rb
@@ -412,6 +412,38 @@ class ReflectionTest < ActiveRecord::TestCase
assert_equal 'product_categories', reflection.join_table
end
+ def test_includes_accepts_symbols
+ hotel = Hotel.create!
+ department = hotel.departments.create!
+ department.chefs.create!
+
+ assert_nothing_raised do
+ assert_equal department.chefs, Hotel.includes([departments: :chefs]).first.chefs
+ end
+ end
+
+ def test_includes_accepts_strings
+ hotel = Hotel.create!
+ department = hotel.departments.create!
+ department.chefs.create!
+
+ assert_nothing_raised do
+ assert_equal department.chefs, Hotel.includes(['departments' => 'chefs']).first.chefs
+ end
+ end
+
+ def test_reflect_on_association_accepts_symbols
+ assert_nothing_raised do
+ assert_equal Hotel.reflect_on_association(:departments).name, :departments
+ end
+ end
+
+ def test_reflect_on_association_accepts_strings
+ assert_nothing_raised do
+ assert_equal Hotel.reflect_on_association("departments").name, :departments
+ end
+ end
+
private
def assert_reflection(klass, association, options)
assert reflection = klass.reflect_on_association(association)
diff --git a/railties/test/application/test_test.rb b/railties/test/application/test_test.rb
index c724c867ec..a223180169 100644
--- a/railties/test/application/test_test.rb
+++ b/railties/test/application/test_test.rb
@@ -67,7 +67,7 @@ module ApplicationTests
assert_match %r{/app/test/unit/failing_test\.rb}, output
end
- test "ruby schema migrations" do
+ test "migrations" do
output = script('generate model user name:string')
version = output.match(/(\d+)_create_users\.rb/)[1]
@@ -104,95 +104,6 @@ module ApplicationTests
assert !result.include?("create_table(:users)")
end
- test "sql structure migrations" do
- output = script('generate model user name:string')
- version = output.match(/(\d+)_create_users\.rb/)[1]
-
- app_file 'test/models/user_test.rb', <<-RUBY
- require 'test_helper'
-
- class UserTest < ActiveSupport::TestCase
- test "user" do
- User.create! name: "Jon"
- end
- end
- RUBY
-
- app_file 'db/structure.sql', ''
- app_file 'config/initializers/enable_sql_schema_format.rb', <<-RUBY
- Rails.application.config.active_record.schema_format = :sql
- RUBY
-
- assert_unsuccessful_run "models/user_test.rb", "Migrations are pending"
-
- app_file 'db/structure.sql', <<-SQL
- CREATE TABLE "schema_migrations" ("version" varchar(255) NOT NULL);
- CREATE UNIQUE INDEX "unique_schema_migrations" ON "schema_migrations" ("version");
- CREATE TABLE "users" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255));
- INSERT INTO schema_migrations (version) VALUES ('#{version}');
- SQL
-
- app_file 'config/initializers/disable_maintain_test_schema.rb', <<-RUBY
- Rails.application.config.active_record.maintain_test_schema = false
- RUBY
-
- assert_unsuccessful_run "models/user_test.rb", "Could not find table 'users'"
-
- File.delete "#{app_path}/config/initializers/disable_maintain_test_schema.rb"
-
- assert_successful_test_run('models/user_test.rb')
- end
-
- test "sql structure migrations when adding column to existing table" do
- output_1 = script('generate model user name:string')
- version_1 = output_1.match(/(\d+)_create_users\.rb/)[1]
-
- app_file 'test/models/user_test.rb', <<-RUBY
- require 'test_helper'
- class UserTest < ActiveSupport::TestCase
- test "user" do
- User.create! name: "Jon"
- end
- end
- RUBY
-
- app_file 'config/initializers/enable_sql_schema_format.rb', <<-RUBY
- Rails.application.config.active_record.schema_format = :sql
- RUBY
-
- app_file 'db/structure.sql', <<-SQL
- CREATE TABLE "schema_migrations" ("version" varchar(255) NOT NULL);
- CREATE UNIQUE INDEX "unique_schema_migrations" ON "schema_migrations" ("version");
- CREATE TABLE "users" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255));
- INSERT INTO schema_migrations (version) VALUES ('#{version_1}');
- SQL
-
- assert_successful_test_run('models/user_test.rb')
-
- output_2 = script('generate migration add_email_to_users')
- version_2 = output_2.match(/(\d+)_add_email_to_users\.rb/)[1]
-
- app_file 'test/models/user_test.rb', <<-RUBY
- require 'test_helper'
-
- class UserTest < ActiveSupport::TestCase
- test "user" do
- User.create! name: "Jon", email: "jon@doe.com"
- end
- end
- RUBY
-
- app_file 'db/structure.sql', <<-SQL
- CREATE TABLE "schema_migrations" ("version" varchar(255) NOT NULL);
- CREATE UNIQUE INDEX "unique_schema_migrations" ON "schema_migrations" ("version");
- CREATE TABLE "users" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "email" varchar(255));
- INSERT INTO schema_migrations (version) VALUES ('#{version_1}');
- INSERT INTO schema_migrations (version) VALUES ('#{version_2}');
- SQL
-
- assert_successful_test_run('models/user_test.rb')
- end
-
private
def assert_unsuccessful_run(name, message)
result = run_test_file(name)