activerecord 6.0.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of activerecord might be problematic. Click here for more details.
- checksums.yaml +7 -0
- data/CHANGELOG.md +1013 -0
- data/MIT-LICENSE +22 -0
- data/README.rdoc +219 -0
- data/examples/performance.rb +185 -0
- data/examples/simple.rb +15 -0
- data/lib/active_record.rb +195 -0
- data/lib/active_record/aggregations.rb +285 -0
- data/lib/active_record/association_relation.rb +40 -0
- data/lib/active_record/associations.rb +1865 -0
- data/lib/active_record/associations/alias_tracker.rb +81 -0
- data/lib/active_record/associations/association.rb +332 -0
- data/lib/active_record/associations/association_scope.rb +166 -0
- data/lib/active_record/associations/belongs_to_association.rb +124 -0
- data/lib/active_record/associations/belongs_to_polymorphic_association.rb +36 -0
- data/lib/active_record/associations/builder/association.rb +136 -0
- data/lib/active_record/associations/builder/belongs_to.rb +130 -0
- data/lib/active_record/associations/builder/collection_association.rb +72 -0
- data/lib/active_record/associations/builder/has_and_belongs_to_many.rb +114 -0
- data/lib/active_record/associations/builder/has_many.rb +19 -0
- data/lib/active_record/associations/builder/has_one.rb +64 -0
- data/lib/active_record/associations/builder/singular_association.rb +44 -0
- data/lib/active_record/associations/collection_association.rb +498 -0
- data/lib/active_record/associations/collection_proxy.rb +1128 -0
- data/lib/active_record/associations/foreign_association.rb +20 -0
- data/lib/active_record/associations/has_many_association.rb +136 -0
- data/lib/active_record/associations/has_many_through_association.rb +220 -0
- data/lib/active_record/associations/has_one_association.rb +118 -0
- data/lib/active_record/associations/has_one_through_association.rb +45 -0
- data/lib/active_record/associations/join_dependency.rb +258 -0
- data/lib/active_record/associations/join_dependency/join_association.rb +80 -0
- data/lib/active_record/associations/join_dependency/join_base.rb +23 -0
- data/lib/active_record/associations/join_dependency/join_part.rb +71 -0
- data/lib/active_record/associations/preloader.rb +201 -0
- data/lib/active_record/associations/preloader/association.rb +133 -0
- data/lib/active_record/associations/preloader/through_association.rb +116 -0
- data/lib/active_record/associations/singular_association.rb +59 -0
- data/lib/active_record/associations/through_association.rb +121 -0
- data/lib/active_record/attribute_assignment.rb +85 -0
- data/lib/active_record/attribute_decorators.rb +90 -0
- data/lib/active_record/attribute_methods.rb +420 -0
- data/lib/active_record/attribute_methods/before_type_cast.rb +81 -0
- data/lib/active_record/attribute_methods/dirty.rb +221 -0
- data/lib/active_record/attribute_methods/primary_key.rb +136 -0
- data/lib/active_record/attribute_methods/query.rb +41 -0
- data/lib/active_record/attribute_methods/read.rb +47 -0
- data/lib/active_record/attribute_methods/serialization.rb +90 -0
- data/lib/active_record/attribute_methods/time_zone_conversion.rb +91 -0
- data/lib/active_record/attribute_methods/write.rb +61 -0
- data/lib/active_record/attributes.rb +279 -0
- data/lib/active_record/autosave_association.rb +508 -0
- data/lib/active_record/base.rb +328 -0
- data/lib/active_record/callbacks.rb +339 -0
- data/lib/active_record/coders/json.rb +15 -0
- data/lib/active_record/coders/yaml_column.rb +50 -0
- data/lib/active_record/connection_adapters/abstract/connection_pool.rb +1165 -0
- data/lib/active_record/connection_adapters/abstract/database_limits.rb +85 -0
- data/lib/active_record/connection_adapters/abstract/database_statements.rb +512 -0
- data/lib/active_record/connection_adapters/abstract/query_cache.rb +154 -0
- data/lib/active_record/connection_adapters/abstract/quoting.rb +251 -0
- data/lib/active_record/connection_adapters/abstract/savepoints.rb +23 -0
- data/lib/active_record/connection_adapters/abstract/schema_creation.rb +153 -0
- data/lib/active_record/connection_adapters/abstract/schema_definitions.rb +713 -0
- data/lib/active_record/connection_adapters/abstract/schema_dumper.rb +93 -0
- data/lib/active_record/connection_adapters/abstract/schema_statements.rb +1475 -0
- data/lib/active_record/connection_adapters/abstract/transaction.rb +323 -0
- data/lib/active_record/connection_adapters/abstract_adapter.rb +761 -0
- data/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +821 -0
- data/lib/active_record/connection_adapters/column.rb +95 -0
- data/lib/active_record/connection_adapters/connection_specification.rb +297 -0
- data/lib/active_record/connection_adapters/determine_if_preparable_visitor.rb +29 -0
- data/lib/active_record/connection_adapters/mysql/column.rb +27 -0
- data/lib/active_record/connection_adapters/mysql/database_statements.rb +200 -0
- data/lib/active_record/connection_adapters/mysql/explain_pretty_printer.rb +72 -0
- data/lib/active_record/connection_adapters/mysql/quoting.rb +81 -0
- data/lib/active_record/connection_adapters/mysql/schema_creation.rb +72 -0
- data/lib/active_record/connection_adapters/mysql/schema_definitions.rb +95 -0
- data/lib/active_record/connection_adapters/mysql/schema_dumper.rb +88 -0
- data/lib/active_record/connection_adapters/mysql/schema_statements.rb +264 -0
- data/lib/active_record/connection_adapters/mysql/type_metadata.rb +31 -0
- data/lib/active_record/connection_adapters/mysql2_adapter.rb +146 -0
- data/lib/active_record/connection_adapters/postgresql/column.rb +30 -0
- data/lib/active_record/connection_adapters/postgresql/database_statements.rb +182 -0
- data/lib/active_record/connection_adapters/postgresql/explain_pretty_printer.rb +44 -0
- data/lib/active_record/connection_adapters/postgresql/oid.rb +34 -0
- data/lib/active_record/connection_adapters/postgresql/oid/array.rb +92 -0
- data/lib/active_record/connection_adapters/postgresql/oid/bit.rb +53 -0
- data/lib/active_record/connection_adapters/postgresql/oid/bit_varying.rb +15 -0
- data/lib/active_record/connection_adapters/postgresql/oid/bytea.rb +17 -0
- data/lib/active_record/connection_adapters/postgresql/oid/cidr.rb +50 -0
- data/lib/active_record/connection_adapters/postgresql/oid/date.rb +23 -0
- data/lib/active_record/connection_adapters/postgresql/oid/date_time.rb +23 -0
- data/lib/active_record/connection_adapters/postgresql/oid/decimal.rb +15 -0
- data/lib/active_record/connection_adapters/postgresql/oid/enum.rb +21 -0
- data/lib/active_record/connection_adapters/postgresql/oid/hstore.rb +71 -0
- data/lib/active_record/connection_adapters/postgresql/oid/inet.rb +15 -0
- data/lib/active_record/connection_adapters/postgresql/oid/jsonb.rb +15 -0
- data/lib/active_record/connection_adapters/postgresql/oid/legacy_point.rb +45 -0
- data/lib/active_record/connection_adapters/postgresql/oid/money.rb +41 -0
- data/lib/active_record/connection_adapters/postgresql/oid/oid.rb +15 -0
- data/lib/active_record/connection_adapters/postgresql/oid/point.rb +65 -0
- data/lib/active_record/connection_adapters/postgresql/oid/range.rb +97 -0
- data/lib/active_record/connection_adapters/postgresql/oid/specialized_string.rb +18 -0
- data/lib/active_record/connection_adapters/postgresql/oid/type_map_initializer.rb +113 -0
- data/lib/active_record/connection_adapters/postgresql/oid/uuid.rb +26 -0
- data/lib/active_record/connection_adapters/postgresql/oid/vector.rb +28 -0
- data/lib/active_record/connection_adapters/postgresql/oid/xml.rb +30 -0
- data/lib/active_record/connection_adapters/postgresql/quoting.rb +205 -0
- data/lib/active_record/connection_adapters/postgresql/referential_integrity.rb +43 -0
- data/lib/active_record/connection_adapters/postgresql/schema_creation.rb +76 -0
- data/lib/active_record/connection_adapters/postgresql/schema_definitions.rb +222 -0
- data/lib/active_record/connection_adapters/postgresql/schema_dumper.rb +50 -0
- data/lib/active_record/connection_adapters/postgresql/schema_statements.rb +776 -0
- data/lib/active_record/connection_adapters/postgresql/type_metadata.rb +36 -0
- data/lib/active_record/connection_adapters/postgresql/utils.rb +81 -0
- data/lib/active_record/connection_adapters/postgresql_adapter.rb +949 -0
- data/lib/active_record/connection_adapters/schema_cache.rb +141 -0
- data/lib/active_record/connection_adapters/sql_type_metadata.rb +37 -0
- data/lib/active_record/connection_adapters/sqlite3/database_statements.rb +118 -0
- data/lib/active_record/connection_adapters/sqlite3/explain_pretty_printer.rb +21 -0
- data/lib/active_record/connection_adapters/sqlite3/quoting.rb +103 -0
- data/lib/active_record/connection_adapters/sqlite3/schema_creation.rb +17 -0
- data/lib/active_record/connection_adapters/sqlite3/schema_definitions.rb +19 -0
- data/lib/active_record/connection_adapters/sqlite3/schema_dumper.rb +18 -0
- data/lib/active_record/connection_adapters/sqlite3/schema_statements.rb +137 -0
- data/lib/active_record/connection_adapters/sqlite3_adapter.rb +557 -0
- data/lib/active_record/connection_adapters/statement_pool.rb +61 -0
- data/lib/active_record/connection_handling.rb +267 -0
- data/lib/active_record/core.rb +599 -0
- data/lib/active_record/counter_cache.rb +193 -0
- data/lib/active_record/database_configurations.rb +233 -0
- data/lib/active_record/database_configurations/database_config.rb +37 -0
- data/lib/active_record/database_configurations/hash_config.rb +50 -0
- data/lib/active_record/database_configurations/url_config.rb +79 -0
- data/lib/active_record/define_callbacks.rb +22 -0
- data/lib/active_record/dynamic_matchers.rb +122 -0
- data/lib/active_record/enum.rb +274 -0
- data/lib/active_record/errors.rb +388 -0
- data/lib/active_record/explain.rb +50 -0
- data/lib/active_record/explain_registry.rb +32 -0
- data/lib/active_record/explain_subscriber.rb +34 -0
- data/lib/active_record/fixture_set/file.rb +82 -0
- data/lib/active_record/fixture_set/model_metadata.rb +33 -0
- data/lib/active_record/fixture_set/render_context.rb +17 -0
- data/lib/active_record/fixture_set/table_row.rb +153 -0
- data/lib/active_record/fixture_set/table_rows.rb +47 -0
- data/lib/active_record/fixtures.rb +738 -0
- data/lib/active_record/gem_version.rb +17 -0
- data/lib/active_record/inheritance.rb +293 -0
- data/lib/active_record/insert_all.rb +179 -0
- data/lib/active_record/integration.rb +207 -0
- data/lib/active_record/internal_metadata.rb +53 -0
- data/lib/active_record/legacy_yaml_adapter.rb +48 -0
- data/lib/active_record/locale/en.yml +48 -0
- data/lib/active_record/locking/optimistic.rb +197 -0
- data/lib/active_record/locking/pessimistic.rb +89 -0
- data/lib/active_record/log_subscriber.rb +118 -0
- data/lib/active_record/middleware/database_selector.rb +75 -0
- data/lib/active_record/middleware/database_selector/resolver.rb +92 -0
- data/lib/active_record/middleware/database_selector/resolver/session.rb +45 -0
- data/lib/active_record/migration.rb +1397 -0
- data/lib/active_record/migration/command_recorder.rb +284 -0
- data/lib/active_record/migration/compatibility.rb +244 -0
- data/lib/active_record/migration/join_table.rb +17 -0
- data/lib/active_record/model_schema.rb +542 -0
- data/lib/active_record/nested_attributes.rb +600 -0
- data/lib/active_record/no_touching.rb +65 -0
- data/lib/active_record/null_relation.rb +68 -0
- data/lib/active_record/persistence.rb +967 -0
- data/lib/active_record/query_cache.rb +52 -0
- data/lib/active_record/querying.rb +82 -0
- data/lib/active_record/railtie.rb +263 -0
- data/lib/active_record/railties/collection_cache_association_loading.rb +34 -0
- data/lib/active_record/railties/console_sandbox.rb +7 -0
- data/lib/active_record/railties/controller_runtime.rb +51 -0
- data/lib/active_record/railties/databases.rake +527 -0
- data/lib/active_record/readonly_attributes.rb +24 -0
- data/lib/active_record/reflection.rb +1042 -0
- data/lib/active_record/relation.rb +859 -0
- data/lib/active_record/relation/batches.rb +290 -0
- data/lib/active_record/relation/batches/batch_enumerator.rb +69 -0
- data/lib/active_record/relation/calculations.rb +424 -0
- data/lib/active_record/relation/delegation.rb +130 -0
- data/lib/active_record/relation/finder_methods.rb +552 -0
- data/lib/active_record/relation/from_clause.rb +26 -0
- data/lib/active_record/relation/merger.rb +184 -0
- data/lib/active_record/relation/predicate_builder.rb +150 -0
- data/lib/active_record/relation/predicate_builder/array_handler.rb +49 -0
- data/lib/active_record/relation/predicate_builder/association_query_value.rb +43 -0
- data/lib/active_record/relation/predicate_builder/base_handler.rb +18 -0
- data/lib/active_record/relation/predicate_builder/basic_object_handler.rb +19 -0
- data/lib/active_record/relation/predicate_builder/polymorphic_array_value.rb +53 -0
- data/lib/active_record/relation/predicate_builder/range_handler.rb +22 -0
- data/lib/active_record/relation/predicate_builder/relation_handler.rb +19 -0
- data/lib/active_record/relation/query_attribute.rb +50 -0
- data/lib/active_record/relation/query_methods.rb +1359 -0
- data/lib/active_record/relation/record_fetch_warning.rb +51 -0
- data/lib/active_record/relation/spawn_methods.rb +77 -0
- data/lib/active_record/relation/where_clause.rb +190 -0
- data/lib/active_record/relation/where_clause_factory.rb +33 -0
- data/lib/active_record/result.rb +168 -0
- data/lib/active_record/runtime_registry.rb +24 -0
- data/lib/active_record/sanitization.rb +214 -0
- data/lib/active_record/schema.rb +61 -0
- data/lib/active_record/schema_dumper.rb +270 -0
- data/lib/active_record/schema_migration.rb +60 -0
- data/lib/active_record/scoping.rb +106 -0
- data/lib/active_record/scoping/default.rb +151 -0
- data/lib/active_record/scoping/named.rb +217 -0
- data/lib/active_record/secure_token.rb +40 -0
- data/lib/active_record/serialization.rb +22 -0
- data/lib/active_record/statement_cache.rb +148 -0
- data/lib/active_record/store.rb +290 -0
- data/lib/active_record/suppressor.rb +61 -0
- data/lib/active_record/table_metadata.rb +75 -0
- data/lib/active_record/tasks/database_tasks.rb +506 -0
- data/lib/active_record/tasks/mysql_database_tasks.rb +115 -0
- data/lib/active_record/tasks/postgresql_database_tasks.rb +141 -0
- data/lib/active_record/tasks/sqlite_database_tasks.rb +77 -0
- data/lib/active_record/test_databases.rb +23 -0
- data/lib/active_record/test_fixtures.rb +224 -0
- data/lib/active_record/timestamp.rb +167 -0
- data/lib/active_record/touch_later.rb +66 -0
- data/lib/active_record/transactions.rb +493 -0
- data/lib/active_record/translation.rb +24 -0
- data/lib/active_record/type.rb +78 -0
- data/lib/active_record/type/adapter_specific_registry.rb +129 -0
- data/lib/active_record/type/date.rb +9 -0
- data/lib/active_record/type/date_time.rb +9 -0
- data/lib/active_record/type/decimal_without_scale.rb +15 -0
- data/lib/active_record/type/hash_lookup_type_map.rb +25 -0
- data/lib/active_record/type/internal/timezone.rb +17 -0
- data/lib/active_record/type/json.rb +30 -0
- data/lib/active_record/type/serialized.rb +71 -0
- data/lib/active_record/type/text.rb +11 -0
- data/lib/active_record/type/time.rb +21 -0
- data/lib/active_record/type/type_map.rb +62 -0
- data/lib/active_record/type/unsigned_integer.rb +17 -0
- data/lib/active_record/type_caster.rb +9 -0
- data/lib/active_record/type_caster/connection.rb +34 -0
- data/lib/active_record/type_caster/map.rb +20 -0
- data/lib/active_record/validations.rb +94 -0
- data/lib/active_record/validations/absence.rb +25 -0
- data/lib/active_record/validations/associated.rb +60 -0
- data/lib/active_record/validations/length.rb +26 -0
- data/lib/active_record/validations/presence.rb +68 -0
- data/lib/active_record/validations/uniqueness.rb +226 -0
- data/lib/active_record/version.rb +10 -0
- data/lib/arel.rb +51 -0
- data/lib/arel/alias_predication.rb +9 -0
- data/lib/arel/attributes.rb +22 -0
- data/lib/arel/attributes/attribute.rb +37 -0
- data/lib/arel/collectors/bind.rb +24 -0
- data/lib/arel/collectors/composite.rb +31 -0
- data/lib/arel/collectors/plain_string.rb +20 -0
- data/lib/arel/collectors/sql_string.rb +20 -0
- data/lib/arel/collectors/substitute_binds.rb +28 -0
- data/lib/arel/crud.rb +42 -0
- data/lib/arel/delete_manager.rb +18 -0
- data/lib/arel/errors.rb +9 -0
- data/lib/arel/expressions.rb +29 -0
- data/lib/arel/factory_methods.rb +49 -0
- data/lib/arel/insert_manager.rb +49 -0
- data/lib/arel/math.rb +45 -0
- data/lib/arel/nodes.rb +68 -0
- data/lib/arel/nodes/and.rb +32 -0
- data/lib/arel/nodes/ascending.rb +23 -0
- data/lib/arel/nodes/binary.rb +52 -0
- data/lib/arel/nodes/bind_param.rb +36 -0
- data/lib/arel/nodes/case.rb +55 -0
- data/lib/arel/nodes/casted.rb +50 -0
- data/lib/arel/nodes/comment.rb +29 -0
- data/lib/arel/nodes/count.rb +12 -0
- data/lib/arel/nodes/delete_statement.rb +45 -0
- data/lib/arel/nodes/descending.rb +23 -0
- data/lib/arel/nodes/equality.rb +18 -0
- data/lib/arel/nodes/extract.rb +24 -0
- data/lib/arel/nodes/false.rb +16 -0
- data/lib/arel/nodes/full_outer_join.rb +8 -0
- data/lib/arel/nodes/function.rb +44 -0
- data/lib/arel/nodes/grouping.rb +8 -0
- data/lib/arel/nodes/in.rb +8 -0
- data/lib/arel/nodes/infix_operation.rb +80 -0
- data/lib/arel/nodes/inner_join.rb +8 -0
- data/lib/arel/nodes/insert_statement.rb +37 -0
- data/lib/arel/nodes/join_source.rb +20 -0
- data/lib/arel/nodes/matches.rb +18 -0
- data/lib/arel/nodes/named_function.rb +23 -0
- data/lib/arel/nodes/node.rb +50 -0
- data/lib/arel/nodes/node_expression.rb +13 -0
- data/lib/arel/nodes/outer_join.rb +8 -0
- data/lib/arel/nodes/over.rb +15 -0
- data/lib/arel/nodes/regexp.rb +16 -0
- data/lib/arel/nodes/right_outer_join.rb +8 -0
- data/lib/arel/nodes/select_core.rb +67 -0
- data/lib/arel/nodes/select_statement.rb +41 -0
- data/lib/arel/nodes/sql_literal.rb +16 -0
- data/lib/arel/nodes/string_join.rb +11 -0
- data/lib/arel/nodes/table_alias.rb +27 -0
- data/lib/arel/nodes/terminal.rb +16 -0
- data/lib/arel/nodes/true.rb +16 -0
- data/lib/arel/nodes/unary.rb +45 -0
- data/lib/arel/nodes/unary_operation.rb +20 -0
- data/lib/arel/nodes/unqualified_column.rb +22 -0
- data/lib/arel/nodes/update_statement.rb +41 -0
- data/lib/arel/nodes/values_list.rb +9 -0
- data/lib/arel/nodes/window.rb +126 -0
- data/lib/arel/nodes/with.rb +11 -0
- data/lib/arel/order_predications.rb +13 -0
- data/lib/arel/predications.rb +257 -0
- data/lib/arel/select_manager.rb +271 -0
- data/lib/arel/table.rb +110 -0
- data/lib/arel/tree_manager.rb +72 -0
- data/lib/arel/update_manager.rb +34 -0
- data/lib/arel/visitors.rb +20 -0
- data/lib/arel/visitors/depth_first.rb +204 -0
- data/lib/arel/visitors/dot.rb +297 -0
- data/lib/arel/visitors/ibm_db.rb +34 -0
- data/lib/arel/visitors/informix.rb +62 -0
- data/lib/arel/visitors/mssql.rb +157 -0
- data/lib/arel/visitors/mysql.rb +83 -0
- data/lib/arel/visitors/oracle.rb +159 -0
- data/lib/arel/visitors/oracle12.rb +66 -0
- data/lib/arel/visitors/postgresql.rb +110 -0
- data/lib/arel/visitors/sqlite.rb +39 -0
- data/lib/arel/visitors/to_sql.rb +889 -0
- data/lib/arel/visitors/visitor.rb +46 -0
- data/lib/arel/visitors/where_sql.rb +23 -0
- data/lib/arel/window_predications.rb +9 -0
- data/lib/rails/generators/active_record.rb +19 -0
- data/lib/rails/generators/active_record/application_record/application_record_generator.rb +27 -0
- data/lib/rails/generators/active_record/application_record/templates/application_record.rb.tt +5 -0
- data/lib/rails/generators/active_record/migration.rb +48 -0
- data/lib/rails/generators/active_record/migration/migration_generator.rb +75 -0
- data/lib/rails/generators/active_record/migration/templates/create_table_migration.rb.tt +24 -0
- data/lib/rails/generators/active_record/migration/templates/migration.rb.tt +48 -0
- data/lib/rails/generators/active_record/model/model_generator.rb +49 -0
- data/lib/rails/generators/active_record/model/templates/model.rb.tt +22 -0
- data/lib/rails/generators/active_record/model/templates/module.rb.tt +7 -0
- metadata +415 -0
@@ -0,0 +1,527 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "active_record"
|
4
|
+
|
5
|
+
databases = ActiveRecord::Tasks::DatabaseTasks.setup_initial_database_yaml
|
6
|
+
|
7
|
+
db_namespace = namespace :db do
|
8
|
+
desc "Set the environment value for the database"
|
9
|
+
task "environment:set" => :load_config do
|
10
|
+
ActiveRecord::InternalMetadata.create_table
|
11
|
+
ActiveRecord::InternalMetadata[:environment] = ActiveRecord::Base.connection.migration_context.current_environment
|
12
|
+
end
|
13
|
+
|
14
|
+
task check_protected_environments: :load_config do
|
15
|
+
ActiveRecord::Tasks::DatabaseTasks.check_protected_environments!
|
16
|
+
end
|
17
|
+
|
18
|
+
task load_config: :environment do
|
19
|
+
ActiveRecord::Base.configurations = ActiveRecord::Tasks::DatabaseTasks.database_configuration || {}
|
20
|
+
ActiveRecord::Migrator.migrations_paths = ActiveRecord::Tasks::DatabaseTasks.migrations_paths
|
21
|
+
end
|
22
|
+
|
23
|
+
namespace :create do
|
24
|
+
task all: :load_config do
|
25
|
+
ActiveRecord::Tasks::DatabaseTasks.create_all
|
26
|
+
end
|
27
|
+
|
28
|
+
ActiveRecord::Tasks::DatabaseTasks.for_each(databases) do |spec_name|
|
29
|
+
desc "Create #{spec_name} database for current environment"
|
30
|
+
task spec_name => :load_config do
|
31
|
+
db_config = ActiveRecord::Base.configurations.configs_for(env_name: Rails.env, spec_name: spec_name)
|
32
|
+
ActiveRecord::Tasks::DatabaseTasks.create(db_config.config)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
desc "Creates the database from DATABASE_URL or config/database.yml for the current RAILS_ENV (use db:create:all to create all databases in the config). Without RAILS_ENV or when RAILS_ENV is development, it defaults to creating the development and test databases."
|
38
|
+
task create: [:load_config] do
|
39
|
+
ActiveRecord::Tasks::DatabaseTasks.create_current
|
40
|
+
end
|
41
|
+
|
42
|
+
namespace :drop do
|
43
|
+
task all: [:load_config, :check_protected_environments] do
|
44
|
+
ActiveRecord::Tasks::DatabaseTasks.drop_all
|
45
|
+
end
|
46
|
+
|
47
|
+
ActiveRecord::Tasks::DatabaseTasks.for_each(databases) do |spec_name|
|
48
|
+
desc "Drop #{spec_name} database for current environment"
|
49
|
+
task spec_name => [:load_config, :check_protected_environments] do
|
50
|
+
db_config = ActiveRecord::Base.configurations.configs_for(env_name: Rails.env, spec_name: spec_name)
|
51
|
+
ActiveRecord::Tasks::DatabaseTasks.drop(db_config.config)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
desc "Drops the database from DATABASE_URL or config/database.yml for the current RAILS_ENV (use db:drop:all to drop all databases in the config). Without RAILS_ENV or when RAILS_ENV is development, it defaults to dropping the development and test databases."
|
57
|
+
task drop: [:load_config, :check_protected_environments] do
|
58
|
+
db_namespace["drop:_unsafe"].invoke
|
59
|
+
end
|
60
|
+
|
61
|
+
task "drop:_unsafe" => [:load_config] do
|
62
|
+
ActiveRecord::Tasks::DatabaseTasks.drop_current
|
63
|
+
end
|
64
|
+
|
65
|
+
namespace :purge do
|
66
|
+
task all: [:load_config, :check_protected_environments] do
|
67
|
+
ActiveRecord::Tasks::DatabaseTasks.purge_all
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
# desc "Truncates tables of each database for current environment"
|
72
|
+
task truncate_all: [:load_config, :check_protected_environments] do
|
73
|
+
ActiveRecord::Tasks::DatabaseTasks.truncate_all
|
74
|
+
end
|
75
|
+
|
76
|
+
# desc "Empty the database from DATABASE_URL or config/database.yml for the current RAILS_ENV (use db:purge:all to purge all databases in the config). Without RAILS_ENV it defaults to purging the development and test databases."
|
77
|
+
task purge: [:load_config, :check_protected_environments] do
|
78
|
+
ActiveRecord::Tasks::DatabaseTasks.purge_current
|
79
|
+
end
|
80
|
+
|
81
|
+
desc "Migrate the database (options: VERSION=x, VERBOSE=false, SCOPE=blog)."
|
82
|
+
task migrate: :load_config do
|
83
|
+
ActiveRecord::Base.configurations.configs_for(env_name: ActiveRecord::Tasks::DatabaseTasks.env).each do |db_config|
|
84
|
+
ActiveRecord::Base.establish_connection(db_config.config)
|
85
|
+
ActiveRecord::Tasks::DatabaseTasks.migrate
|
86
|
+
end
|
87
|
+
db_namespace["_dump"].invoke
|
88
|
+
end
|
89
|
+
|
90
|
+
# IMPORTANT: This task won't dump the schema if ActiveRecord::Base.dump_schema_after_migration is set to false
|
91
|
+
task :_dump do
|
92
|
+
if ActiveRecord::Base.dump_schema_after_migration
|
93
|
+
case ActiveRecord::Base.schema_format
|
94
|
+
when :ruby then db_namespace["schema:dump"].invoke
|
95
|
+
when :sql then db_namespace["structure:dump"].invoke
|
96
|
+
else
|
97
|
+
raise "unknown schema format #{ActiveRecord::Base.schema_format}"
|
98
|
+
end
|
99
|
+
end
|
100
|
+
# Allow this task to be called as many times as required. An example is the
|
101
|
+
# migrate:redo task, which calls other two internally that depend on this one.
|
102
|
+
db_namespace["_dump"].reenable
|
103
|
+
end
|
104
|
+
|
105
|
+
namespace :migrate do
|
106
|
+
ActiveRecord::Tasks::DatabaseTasks.for_each(databases) do |spec_name|
|
107
|
+
desc "Migrate #{spec_name} database for current environment"
|
108
|
+
task spec_name => :load_config do
|
109
|
+
db_config = ActiveRecord::Base.configurations.configs_for(env_name: Rails.env, spec_name: spec_name)
|
110
|
+
ActiveRecord::Base.establish_connection(db_config.config)
|
111
|
+
ActiveRecord::Tasks::DatabaseTasks.migrate
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
# desc 'Rollbacks the database one migration and re migrate up (options: STEP=x, VERSION=x).'
|
116
|
+
task redo: :load_config do
|
117
|
+
raise "Empty VERSION provided" if ENV["VERSION"] && ENV["VERSION"].empty?
|
118
|
+
|
119
|
+
if ENV["VERSION"]
|
120
|
+
db_namespace["migrate:down"].invoke
|
121
|
+
db_namespace["migrate:up"].invoke
|
122
|
+
else
|
123
|
+
db_namespace["rollback"].invoke
|
124
|
+
db_namespace["migrate"].invoke
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
# desc 'Resets your database using your migrations for the current environment'
|
129
|
+
task reset: ["db:drop", "db:create", "db:migrate"]
|
130
|
+
|
131
|
+
# desc 'Runs the "up" for a given migration VERSION.'
|
132
|
+
task up: :load_config do
|
133
|
+
ActiveRecord::Tasks::DatabaseTasks.raise_for_multi_db(command: "db:migrate:up")
|
134
|
+
|
135
|
+
raise "VERSION is required" if !ENV["VERSION"] || ENV["VERSION"].empty?
|
136
|
+
|
137
|
+
ActiveRecord::Tasks::DatabaseTasks.check_target_version
|
138
|
+
|
139
|
+
ActiveRecord::Base.connection.migration_context.run(
|
140
|
+
:up,
|
141
|
+
ActiveRecord::Tasks::DatabaseTasks.target_version
|
142
|
+
)
|
143
|
+
db_namespace["_dump"].invoke
|
144
|
+
end
|
145
|
+
|
146
|
+
namespace :up do
|
147
|
+
ActiveRecord::Tasks::DatabaseTasks.for_each(databases) do |spec_name|
|
148
|
+
task spec_name => :load_config do
|
149
|
+
raise "VERSION is required" if !ENV["VERSION"] || ENV["VERSION"].empty?
|
150
|
+
|
151
|
+
db_config = ActiveRecord::Base.configurations.configs_for(env_name: Rails.env, spec_name: spec_name)
|
152
|
+
|
153
|
+
ActiveRecord::Base.establish_connection(db_config.config)
|
154
|
+
ActiveRecord::Tasks::DatabaseTasks.check_target_version
|
155
|
+
ActiveRecord::Base.connection.migration_context.run(
|
156
|
+
:up,
|
157
|
+
ActiveRecord::Tasks::DatabaseTasks.target_version
|
158
|
+
)
|
159
|
+
|
160
|
+
db_namespace["_dump"].invoke
|
161
|
+
end
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
# desc 'Runs the "down" for a given migration VERSION.'
|
166
|
+
task down: :load_config do
|
167
|
+
ActiveRecord::Tasks::DatabaseTasks.raise_for_multi_db(command: "db:migrate:down")
|
168
|
+
|
169
|
+
raise "VERSION is required - To go down one migration, use db:rollback" if !ENV["VERSION"] || ENV["VERSION"].empty?
|
170
|
+
|
171
|
+
ActiveRecord::Tasks::DatabaseTasks.check_target_version
|
172
|
+
|
173
|
+
ActiveRecord::Base.connection.migration_context.run(
|
174
|
+
:down,
|
175
|
+
ActiveRecord::Tasks::DatabaseTasks.target_version
|
176
|
+
)
|
177
|
+
db_namespace["_dump"].invoke
|
178
|
+
end
|
179
|
+
|
180
|
+
namespace :down do
|
181
|
+
ActiveRecord::Tasks::DatabaseTasks.for_each(databases) do |spec_name|
|
182
|
+
task spec_name => :load_config do
|
183
|
+
raise "VERSION is required" if !ENV["VERSION"] || ENV["VERSION"].empty?
|
184
|
+
|
185
|
+
db_config = ActiveRecord::Base.configurations.configs_for(env_name: Rails.env, spec_name: spec_name)
|
186
|
+
|
187
|
+
ActiveRecord::Base.establish_connection(db_config.config)
|
188
|
+
ActiveRecord::Tasks::DatabaseTasks.check_target_version
|
189
|
+
ActiveRecord::Base.connection.migration_context.run(
|
190
|
+
:down,
|
191
|
+
ActiveRecord::Tasks::DatabaseTasks.target_version
|
192
|
+
)
|
193
|
+
|
194
|
+
db_namespace["_dump"].invoke
|
195
|
+
end
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|
199
|
+
desc "Display status of migrations"
|
200
|
+
task status: :load_config do
|
201
|
+
ActiveRecord::Base.configurations.configs_for(env_name: ActiveRecord::Tasks::DatabaseTasks.env).each do |db_config|
|
202
|
+
ActiveRecord::Base.establish_connection(db_config.config)
|
203
|
+
ActiveRecord::Tasks::DatabaseTasks.migrate_status
|
204
|
+
end
|
205
|
+
end
|
206
|
+
|
207
|
+
namespace :status do
|
208
|
+
ActiveRecord::Tasks::DatabaseTasks.for_each(databases) do |spec_name|
|
209
|
+
desc "Display status of migrations for #{spec_name} database"
|
210
|
+
task spec_name => :load_config do
|
211
|
+
db_config = ActiveRecord::Base.configurations.configs_for(env_name: Rails.env, spec_name: spec_name)
|
212
|
+
ActiveRecord::Base.establish_connection(db_config.config)
|
213
|
+
ActiveRecord::Tasks::DatabaseTasks.migrate_status
|
214
|
+
end
|
215
|
+
end
|
216
|
+
end
|
217
|
+
end
|
218
|
+
|
219
|
+
desc "Rolls the schema back to the previous version (specify steps w/ STEP=n)."
|
220
|
+
task rollback: :load_config do
|
221
|
+
step = ENV["STEP"] ? ENV["STEP"].to_i : 1
|
222
|
+
ActiveRecord::Base.connection.migration_context.rollback(step)
|
223
|
+
db_namespace["_dump"].invoke
|
224
|
+
end
|
225
|
+
|
226
|
+
# desc 'Pushes the schema to the next version (specify steps w/ STEP=n).'
|
227
|
+
task forward: :load_config do
|
228
|
+
step = ENV["STEP"] ? ENV["STEP"].to_i : 1
|
229
|
+
ActiveRecord::Base.connection.migration_context.forward(step)
|
230
|
+
db_namespace["_dump"].invoke
|
231
|
+
end
|
232
|
+
|
233
|
+
# desc 'Drops and recreates the database from db/schema.rb for the current environment and loads the seeds.'
|
234
|
+
task reset: [ "db:drop", "db:setup" ]
|
235
|
+
|
236
|
+
# desc "Retrieves the charset for the current environment's database"
|
237
|
+
task charset: :load_config do
|
238
|
+
puts ActiveRecord::Tasks::DatabaseTasks.charset_current
|
239
|
+
end
|
240
|
+
|
241
|
+
# desc "Retrieves the collation for the current environment's database"
|
242
|
+
task collation: :load_config do
|
243
|
+
puts ActiveRecord::Tasks::DatabaseTasks.collation_current
|
244
|
+
rescue NoMethodError
|
245
|
+
$stderr.puts "Sorry, your database adapter is not supported yet. Feel free to submit a patch."
|
246
|
+
end
|
247
|
+
|
248
|
+
desc "Retrieves the current schema version number"
|
249
|
+
task version: :load_config do
|
250
|
+
puts "Current version: #{ActiveRecord::Base.connection.migration_context.current_version}"
|
251
|
+
end
|
252
|
+
|
253
|
+
# desc "Raises an error if there are pending migrations"
|
254
|
+
task abort_if_pending_migrations: :load_config do
|
255
|
+
pending_migrations = ActiveRecord::Base.configurations.configs_for(env_name: ActiveRecord::Tasks::DatabaseTasks.env).flat_map do |db_config|
|
256
|
+
ActiveRecord::Base.establish_connection(db_config.config)
|
257
|
+
|
258
|
+
ActiveRecord::Base.connection.migration_context.open.pending_migrations
|
259
|
+
end
|
260
|
+
|
261
|
+
if pending_migrations.any?
|
262
|
+
puts "You have #{pending_migrations.size} pending #{pending_migrations.size > 1 ? 'migrations:' : 'migration:'}"
|
263
|
+
pending_migrations.each do |pending_migration|
|
264
|
+
puts " %4d %s" % [pending_migration.version, pending_migration.name]
|
265
|
+
end
|
266
|
+
abort %{Run `rails db:migrate` to update your database then try again.}
|
267
|
+
end
|
268
|
+
ensure
|
269
|
+
ActiveRecord::Base.establish_connection(ActiveRecord::Tasks::DatabaseTasks.env.to_sym)
|
270
|
+
end
|
271
|
+
|
272
|
+
namespace :abort_if_pending_migrations do
|
273
|
+
ActiveRecord::Tasks::DatabaseTasks.for_each(databases) do |spec_name|
|
274
|
+
# desc "Raises an error if there are pending migrations for #{spec_name} database"
|
275
|
+
task spec_name => :load_config do
|
276
|
+
db_config = ActiveRecord::Base.configurations.configs_for(env_name: Rails.env, spec_name: spec_name)
|
277
|
+
ActiveRecord::Base.establish_connection(db_config.config)
|
278
|
+
|
279
|
+
pending_migrations = ActiveRecord::Base.connection.migration_context.open.pending_migrations
|
280
|
+
|
281
|
+
if pending_migrations.any?
|
282
|
+
puts "You have #{pending_migrations.size} pending #{pending_migrations.size > 1 ? 'migrations:' : 'migration:'}"
|
283
|
+
pending_migrations.each do |pending_migration|
|
284
|
+
puts " %4d %s" % [pending_migration.version, pending_migration.name]
|
285
|
+
end
|
286
|
+
abort %{Run `rails db:migrate:#{spec_name}` to update your database then try again.}
|
287
|
+
end
|
288
|
+
end
|
289
|
+
end
|
290
|
+
end
|
291
|
+
|
292
|
+
desc "Creates the database, loads the schema, and initializes with the seed data (use db:reset to also drop the database first)"
|
293
|
+
task setup: ["db:schema:load_if_ruby", "db:structure:load_if_sql", :seed]
|
294
|
+
|
295
|
+
desc "Runs setup if database does not exist, or runs migrations if it does"
|
296
|
+
task prepare: :load_config do
|
297
|
+
seed = false
|
298
|
+
|
299
|
+
ActiveRecord::Base.configurations.configs_for(env_name: ActiveRecord::Tasks::DatabaseTasks.env).each do |db_config|
|
300
|
+
ActiveRecord::Base.establish_connection(db_config.config)
|
301
|
+
|
302
|
+
# Skipped when no database
|
303
|
+
ActiveRecord::Tasks::DatabaseTasks.migrate
|
304
|
+
if ActiveRecord::Base.dump_schema_after_migration
|
305
|
+
ActiveRecord::Tasks::DatabaseTasks.dump_schema(db_config.config, ActiveRecord::Base.schema_format, db_config.spec_name)
|
306
|
+
end
|
307
|
+
|
308
|
+
rescue ActiveRecord::NoDatabaseError
|
309
|
+
ActiveRecord::Tasks::DatabaseTasks.create_current(db_config.env_name, db_config.spec_name)
|
310
|
+
ActiveRecord::Tasks::DatabaseTasks.load_schema(
|
311
|
+
db_config.config,
|
312
|
+
ActiveRecord::Base.schema_format,
|
313
|
+
nil,
|
314
|
+
db_config.env_name,
|
315
|
+
db_config.spec_name
|
316
|
+
)
|
317
|
+
|
318
|
+
seed = true
|
319
|
+
end
|
320
|
+
|
321
|
+
ActiveRecord::Base.establish_connection
|
322
|
+
ActiveRecord::Tasks::DatabaseTasks.load_seed if seed
|
323
|
+
end
|
324
|
+
|
325
|
+
desc "Loads the seed data from db/seeds.rb"
|
326
|
+
task seed: :load_config do
|
327
|
+
db_namespace["abort_if_pending_migrations"].invoke
|
328
|
+
ActiveRecord::Tasks::DatabaseTasks.load_seed
|
329
|
+
end
|
330
|
+
|
331
|
+
namespace :seed do
|
332
|
+
desc "Truncates tables of each database for current environment and loads the seeds"
|
333
|
+
task replant: [:load_config, :truncate_all, :seed]
|
334
|
+
end
|
335
|
+
|
336
|
+
namespace :fixtures do
|
337
|
+
desc "Loads fixtures into the current environment's database. Load specific fixtures using FIXTURES=x,y. Load from subdirectory in test/fixtures using FIXTURES_DIR=z. Specify an alternative path (eg. spec/fixtures) using FIXTURES_PATH=spec/fixtures."
|
338
|
+
task load: :load_config do
|
339
|
+
require "active_record/fixtures"
|
340
|
+
|
341
|
+
base_dir = ActiveRecord::Tasks::DatabaseTasks.fixtures_path
|
342
|
+
|
343
|
+
fixtures_dir = if ENV["FIXTURES_DIR"]
|
344
|
+
File.join base_dir, ENV["FIXTURES_DIR"]
|
345
|
+
else
|
346
|
+
base_dir
|
347
|
+
end
|
348
|
+
|
349
|
+
fixture_files = if ENV["FIXTURES"]
|
350
|
+
ENV["FIXTURES"].split(",")
|
351
|
+
else
|
352
|
+
# The use of String#[] here is to support namespaced fixtures.
|
353
|
+
Dir["#{fixtures_dir}/**/*.yml"].map { |f| f[(fixtures_dir.size + 1)..-5] }
|
354
|
+
end
|
355
|
+
|
356
|
+
ActiveRecord::FixtureSet.create_fixtures(fixtures_dir, fixture_files)
|
357
|
+
end
|
358
|
+
|
359
|
+
# desc "Search for a fixture given a LABEL or ID. Specify an alternative path (eg. spec/fixtures) using FIXTURES_PATH=spec/fixtures."
|
360
|
+
task identify: :load_config do
|
361
|
+
require "active_record/fixtures"
|
362
|
+
|
363
|
+
label, id = ENV["LABEL"], ENV["ID"]
|
364
|
+
raise "LABEL or ID required" if label.blank? && id.blank?
|
365
|
+
|
366
|
+
puts %Q(The fixture ID for "#{label}" is #{ActiveRecord::FixtureSet.identify(label)}.) if label
|
367
|
+
|
368
|
+
base_dir = ActiveRecord::Tasks::DatabaseTasks.fixtures_path
|
369
|
+
|
370
|
+
Dir["#{base_dir}/**/*.yml"].each do |file|
|
371
|
+
if data = YAML.load(ERB.new(IO.read(file)).result)
|
372
|
+
data.each_key do |key|
|
373
|
+
key_id = ActiveRecord::FixtureSet.identify(key)
|
374
|
+
|
375
|
+
if key == label || key_id == id.to_i
|
376
|
+
puts "#{file}: #{key} (#{key_id})"
|
377
|
+
end
|
378
|
+
end
|
379
|
+
end
|
380
|
+
end
|
381
|
+
end
|
382
|
+
end
|
383
|
+
|
384
|
+
namespace :schema do
|
385
|
+
desc "Creates a db/schema.rb file that is portable against any DB supported by Active Record"
|
386
|
+
task dump: :load_config do
|
387
|
+
ActiveRecord::Base.configurations.configs_for(env_name: ActiveRecord::Tasks::DatabaseTasks.env).each do |db_config|
|
388
|
+
ActiveRecord::Base.establish_connection(db_config.config)
|
389
|
+
ActiveRecord::Tasks::DatabaseTasks.dump_schema(db_config.config, :ruby, db_config.spec_name)
|
390
|
+
end
|
391
|
+
|
392
|
+
db_namespace["schema:dump"].reenable
|
393
|
+
end
|
394
|
+
|
395
|
+
desc "Loads a schema.rb file into the database"
|
396
|
+
task load: [:load_config, :check_protected_environments] do
|
397
|
+
ActiveRecord::Tasks::DatabaseTasks.load_schema_current(:ruby, ENV["SCHEMA"])
|
398
|
+
end
|
399
|
+
|
400
|
+
task load_if_ruby: ["db:create", :environment] do
|
401
|
+
db_namespace["schema:load"].invoke if ActiveRecord::Base.schema_format == :ruby
|
402
|
+
end
|
403
|
+
|
404
|
+
namespace :cache do
|
405
|
+
desc "Creates a db/schema_cache.yml file."
|
406
|
+
task dump: :load_config do
|
407
|
+
ActiveRecord::Base.configurations.configs_for(env_name: ActiveRecord::Tasks::DatabaseTasks.env).each do |db_config|
|
408
|
+
ActiveRecord::Base.establish_connection(db_config.config)
|
409
|
+
filename = ActiveRecord::Tasks::DatabaseTasks.cache_dump_filename(db_config.spec_name)
|
410
|
+
ActiveRecord::Tasks::DatabaseTasks.dump_schema_cache(
|
411
|
+
ActiveRecord::Base.connection,
|
412
|
+
filename,
|
413
|
+
)
|
414
|
+
end
|
415
|
+
end
|
416
|
+
|
417
|
+
desc "Clears a db/schema_cache.yml file."
|
418
|
+
task clear: :load_config do
|
419
|
+
ActiveRecord::Base.configurations.configs_for(env_name: ActiveRecord::Tasks::DatabaseTasks.env).each do |db_config|
|
420
|
+
filename = ActiveRecord::Tasks::DatabaseTasks.cache_dump_filename(db_config.spec_name)
|
421
|
+
rm_f filename, verbose: false
|
422
|
+
end
|
423
|
+
end
|
424
|
+
end
|
425
|
+
end
|
426
|
+
|
427
|
+
namespace :structure do
|
428
|
+
desc "Dumps the database structure to db/structure.sql. Specify another file with SCHEMA=db/my_structure.sql"
|
429
|
+
task dump: :load_config do
|
430
|
+
ActiveRecord::Base.configurations.configs_for(env_name: ActiveRecord::Tasks::DatabaseTasks.env).each do |db_config|
|
431
|
+
ActiveRecord::Base.establish_connection(db_config.config)
|
432
|
+
ActiveRecord::Tasks::DatabaseTasks.dump_schema(db_config.config, :sql, db_config.spec_name)
|
433
|
+
end
|
434
|
+
|
435
|
+
db_namespace["structure:dump"].reenable
|
436
|
+
end
|
437
|
+
|
438
|
+
desc "Recreates the databases from the structure.sql file"
|
439
|
+
task load: [:load_config, :check_protected_environments] do
|
440
|
+
ActiveRecord::Tasks::DatabaseTasks.load_schema_current(:sql, ENV["SCHEMA"])
|
441
|
+
end
|
442
|
+
|
443
|
+
task load_if_sql: ["db:create", :environment] do
|
444
|
+
db_namespace["structure:load"].invoke if ActiveRecord::Base.schema_format == :sql
|
445
|
+
end
|
446
|
+
end
|
447
|
+
|
448
|
+
namespace :test do
|
449
|
+
# desc "Recreate the test database from the current schema"
|
450
|
+
task load: %w(db:test:purge) do
|
451
|
+
case ActiveRecord::Base.schema_format
|
452
|
+
when :ruby
|
453
|
+
db_namespace["test:load_schema"].invoke
|
454
|
+
when :sql
|
455
|
+
db_namespace["test:load_structure"].invoke
|
456
|
+
end
|
457
|
+
end
|
458
|
+
|
459
|
+
# desc "Recreate the test database from an existent schema.rb file"
|
460
|
+
task load_schema: %w(db:test:purge) do
|
461
|
+
should_reconnect = ActiveRecord::Base.connection_pool.active_connection?
|
462
|
+
ActiveRecord::Schema.verbose = false
|
463
|
+
ActiveRecord::Base.configurations.configs_for(env_name: "test").each do |db_config|
|
464
|
+
filename = ActiveRecord::Tasks::DatabaseTasks.dump_filename(db_config.spec_name, :ruby)
|
465
|
+
ActiveRecord::Tasks::DatabaseTasks.load_schema(db_config.config, :ruby, filename, "test")
|
466
|
+
end
|
467
|
+
ensure
|
468
|
+
if should_reconnect
|
469
|
+
ActiveRecord::Base.establish_connection(ActiveRecord::Base.configurations.default_hash(ActiveRecord::Tasks::DatabaseTasks.env))
|
470
|
+
end
|
471
|
+
end
|
472
|
+
|
473
|
+
# desc "Recreate the test database from an existent structure.sql file"
|
474
|
+
task load_structure: %w(db:test:purge) do
|
475
|
+
ActiveRecord::Base.configurations.configs_for(env_name: "test").each do |db_config|
|
476
|
+
filename = ActiveRecord::Tasks::DatabaseTasks.dump_filename(db_config.spec_name, :sql)
|
477
|
+
ActiveRecord::Tasks::DatabaseTasks.load_schema(db_config.config, :sql, filename, "test")
|
478
|
+
end
|
479
|
+
end
|
480
|
+
|
481
|
+
# desc "Empty the test database"
|
482
|
+
task purge: %w(load_config check_protected_environments) do
|
483
|
+
ActiveRecord::Base.configurations.configs_for(env_name: "test").each do |db_config|
|
484
|
+
ActiveRecord::Tasks::DatabaseTasks.purge(db_config.config)
|
485
|
+
end
|
486
|
+
end
|
487
|
+
|
488
|
+
# desc 'Load the test schema'
|
489
|
+
task prepare: :load_config do
|
490
|
+
unless ActiveRecord::Base.configurations.blank?
|
491
|
+
db_namespace["test:load"].invoke
|
492
|
+
end
|
493
|
+
end
|
494
|
+
end
|
495
|
+
end
|
496
|
+
|
497
|
+
namespace :railties do
|
498
|
+
namespace :install do
|
499
|
+
# desc "Copies missing migrations from Railties (e.g. engines). You can specify Railties to use with FROM=railtie1,railtie2"
|
500
|
+
task migrations: :'db:load_config' do
|
501
|
+
to_load = ENV["FROM"].blank? ? :all : ENV["FROM"].split(",").map(&:strip)
|
502
|
+
railties = {}
|
503
|
+
Rails.application.migration_railties.each do |railtie|
|
504
|
+
next unless to_load == :all || to_load.include?(railtie.railtie_name)
|
505
|
+
|
506
|
+
if railtie.respond_to?(:paths) && (path = railtie.paths["db/migrate"].first)
|
507
|
+
railties[railtie.railtie_name] = path
|
508
|
+
end
|
509
|
+
|
510
|
+
unless ENV["MIGRATIONS_PATH"].blank?
|
511
|
+
railties[railtie.railtie_name] = railtie.root + ENV["MIGRATIONS_PATH"]
|
512
|
+
end
|
513
|
+
end
|
514
|
+
|
515
|
+
on_skip = Proc.new do |name, migration|
|
516
|
+
puts "NOTE: Migration #{migration.basename} from #{name} has been skipped. Migration with the same name already exists."
|
517
|
+
end
|
518
|
+
|
519
|
+
on_copy = Proc.new do |name, migration|
|
520
|
+
puts "Copied migration #{migration.basename} from #{name}"
|
521
|
+
end
|
522
|
+
|
523
|
+
ActiveRecord::Migration.copy(ActiveRecord::Tasks::DatabaseTasks.migrations_paths.first, railties,
|
524
|
+
on_skip: on_skip, on_copy: on_copy)
|
525
|
+
end
|
526
|
+
end
|
527
|
+
end
|