activerecord 4.2.6 → 5.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.

Files changed (246) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1307 -1105
  3. data/MIT-LICENSE +2 -2
  4. data/README.rdoc +7 -8
  5. data/examples/performance.rb +2 -3
  6. data/examples/simple.rb +0 -1
  7. data/lib/active_record/aggregations.rb +37 -23
  8. data/lib/active_record/association_relation.rb +3 -3
  9. data/lib/active_record/associations/alias_tracker.rb +19 -16
  10. data/lib/active_record/associations/association.rb +11 -9
  11. data/lib/active_record/associations/association_scope.rb +73 -102
  12. data/lib/active_record/associations/belongs_to_association.rb +21 -32
  13. data/lib/active_record/associations/builder/association.rb +28 -34
  14. data/lib/active_record/associations/builder/belongs_to.rb +43 -18
  15. data/lib/active_record/associations/builder/collection_association.rb +7 -19
  16. data/lib/active_record/associations/builder/has_and_belongs_to_many.rb +14 -11
  17. data/lib/active_record/associations/builder/has_many.rb +4 -4
  18. data/lib/active_record/associations/builder/has_one.rb +11 -6
  19. data/lib/active_record/associations/builder/singular_association.rb +3 -10
  20. data/lib/active_record/associations/collection_association.rb +50 -31
  21. data/lib/active_record/associations/collection_proxy.rb +69 -29
  22. data/lib/active_record/associations/foreign_association.rb +1 -1
  23. data/lib/active_record/associations/has_many_association.rb +20 -71
  24. data/lib/active_record/associations/has_many_through_association.rb +8 -47
  25. data/lib/active_record/associations/has_one_association.rb +12 -5
  26. data/lib/active_record/associations/join_dependency/join_association.rb +20 -8
  27. data/lib/active_record/associations/join_dependency.rb +29 -19
  28. data/lib/active_record/associations/preloader/association.rb +46 -52
  29. data/lib/active_record/associations/preloader/collection_association.rb +0 -6
  30. data/lib/active_record/associations/preloader/has_many_through.rb +1 -1
  31. data/lib/active_record/associations/preloader/has_one.rb +0 -8
  32. data/lib/active_record/associations/preloader/through_association.rb +27 -14
  33. data/lib/active_record/associations/preloader.rb +14 -4
  34. data/lib/active_record/associations/singular_association.rb +7 -1
  35. data/lib/active_record/associations/through_association.rb +11 -3
  36. data/lib/active_record/associations.rb +317 -209
  37. data/lib/active_record/attribute/user_provided_default.rb +28 -0
  38. data/lib/active_record/attribute.rb +68 -18
  39. data/lib/active_record/attribute_assignment.rb +20 -141
  40. data/lib/active_record/attribute_decorators.rb +6 -5
  41. data/lib/active_record/attribute_methods/before_type_cast.rb +1 -1
  42. data/lib/active_record/attribute_methods/dirty.rb +46 -86
  43. data/lib/active_record/attribute_methods/primary_key.rb +2 -2
  44. data/lib/active_record/attribute_methods/query.rb +2 -2
  45. data/lib/active_record/attribute_methods/read.rb +31 -59
  46. data/lib/active_record/attribute_methods/serialization.rb +13 -16
  47. data/lib/active_record/attribute_methods/time_zone_conversion.rb +61 -14
  48. data/lib/active_record/attribute_methods/write.rb +14 -38
  49. data/lib/active_record/attribute_methods.rb +70 -45
  50. data/lib/active_record/attribute_mutation_tracker.rb +70 -0
  51. data/lib/active_record/attribute_set/builder.rb +6 -4
  52. data/lib/active_record/attribute_set.rb +30 -3
  53. data/lib/active_record/attributes.rb +199 -80
  54. data/lib/active_record/autosave_association.rb +49 -16
  55. data/lib/active_record/base.rb +32 -23
  56. data/lib/active_record/callbacks.rb +39 -43
  57. data/lib/active_record/coders/json.rb +1 -1
  58. data/lib/active_record/coders/yaml_column.rb +20 -8
  59. data/lib/active_record/collection_cache_key.rb +40 -0
  60. data/lib/active_record/connection_adapters/abstract/connection_pool.rb +452 -182
  61. data/lib/active_record/connection_adapters/abstract/database_limits.rb +3 -3
  62. data/lib/active_record/connection_adapters/abstract/database_statements.rb +65 -61
  63. data/lib/active_record/connection_adapters/abstract/query_cache.rb +2 -2
  64. data/lib/active_record/connection_adapters/abstract/quoting.rb +74 -9
  65. data/lib/active_record/connection_adapters/abstract/savepoints.rb +3 -3
  66. data/lib/active_record/connection_adapters/abstract/schema_creation.rb +61 -39
  67. data/lib/active_record/connection_adapters/abstract/schema_definitions.rb +236 -185
  68. data/lib/active_record/connection_adapters/abstract/schema_dumper.rb +72 -17
  69. data/lib/active_record/connection_adapters/abstract/schema_statements.rb +378 -140
  70. data/lib/active_record/connection_adapters/abstract/transaction.rb +51 -34
  71. data/lib/active_record/connection_adapters/abstract_adapter.rb +153 -59
  72. data/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +405 -362
  73. data/lib/active_record/connection_adapters/column.rb +28 -43
  74. data/lib/active_record/connection_adapters/connection_specification.rb +15 -27
  75. data/lib/active_record/connection_adapters/determine_if_preparable_visitor.rb +22 -0
  76. data/lib/active_record/connection_adapters/mysql/column.rb +50 -0
  77. data/lib/active_record/connection_adapters/mysql/database_statements.rb +125 -0
  78. data/lib/active_record/connection_adapters/mysql/explain_pretty_printer.rb +70 -0
  79. data/lib/active_record/connection_adapters/mysql/quoting.rb +51 -0
  80. data/lib/active_record/connection_adapters/mysql/schema_creation.rb +67 -0
  81. data/lib/active_record/connection_adapters/mysql/schema_definitions.rb +93 -0
  82. data/lib/active_record/connection_adapters/mysql/schema_dumper.rb +54 -0
  83. data/lib/active_record/connection_adapters/mysql/type_metadata.rb +32 -0
  84. data/lib/active_record/connection_adapters/mysql2_adapter.rb +25 -176
  85. data/lib/active_record/connection_adapters/postgresql/column.rb +5 -10
  86. data/lib/active_record/connection_adapters/postgresql/database_statements.rb +10 -72
  87. data/lib/active_record/connection_adapters/postgresql/explain_pretty_printer.rb +42 -0
  88. data/lib/active_record/connection_adapters/postgresql/oid/array.rb +27 -56
  89. data/lib/active_record/connection_adapters/postgresql/oid/bit.rb +2 -2
  90. data/lib/active_record/connection_adapters/postgresql/oid/bytea.rb +1 -1
  91. data/lib/active_record/connection_adapters/postgresql/oid/cidr.rb +3 -1
  92. data/lib/active_record/connection_adapters/postgresql/oid/date_time.rb +7 -22
  93. data/lib/active_record/connection_adapters/postgresql/oid/hstore.rb +3 -3
  94. data/lib/active_record/connection_adapters/postgresql/oid/json.rb +1 -26
  95. data/lib/active_record/connection_adapters/postgresql/oid/jsonb.rb +2 -2
  96. data/lib/active_record/connection_adapters/postgresql/oid/money.rb +0 -4
  97. data/lib/active_record/connection_adapters/postgresql/oid/point.rb +4 -4
  98. data/lib/active_record/connection_adapters/postgresql/oid/rails_5_1_point.rb +50 -0
  99. data/lib/active_record/connection_adapters/postgresql/oid/range.rb +31 -17
  100. data/lib/active_record/connection_adapters/postgresql/oid/specialized_string.rb +0 -4
  101. data/lib/active_record/connection_adapters/postgresql/oid/uuid.rb +2 -2
  102. data/lib/active_record/connection_adapters/postgresql/oid/vector.rb +1 -1
  103. data/lib/active_record/connection_adapters/postgresql/oid/xml.rb +1 -1
  104. data/lib/active_record/connection_adapters/postgresql/oid.rb +1 -6
  105. data/lib/active_record/connection_adapters/postgresql/quoting.rb +26 -18
  106. data/lib/active_record/connection_adapters/postgresql/referential_integrity.rb +29 -10
  107. data/lib/active_record/connection_adapters/postgresql/schema_definitions.rb +107 -79
  108. data/lib/active_record/connection_adapters/postgresql/schema_dumper.rb +47 -0
  109. data/lib/active_record/connection_adapters/postgresql/schema_statements.rb +234 -148
  110. data/lib/active_record/connection_adapters/postgresql/type_metadata.rb +35 -0
  111. data/lib/active_record/connection_adapters/postgresql_adapter.rb +248 -160
  112. data/lib/active_record/connection_adapters/schema_cache.rb +36 -23
  113. data/lib/active_record/connection_adapters/sql_type_metadata.rb +32 -0
  114. data/lib/active_record/connection_adapters/sqlite3/explain_pretty_printer.rb +19 -0
  115. data/lib/active_record/connection_adapters/sqlite3/quoting.rb +48 -0
  116. data/lib/active_record/connection_adapters/sqlite3/schema_creation.rb +22 -0
  117. data/lib/active_record/connection_adapters/sqlite3_adapter.rb +148 -203
  118. data/lib/active_record/connection_adapters/statement_pool.rb +31 -12
  119. data/lib/active_record/connection_handling.rb +37 -14
  120. data/lib/active_record/core.rb +89 -107
  121. data/lib/active_record/counter_cache.rb +13 -24
  122. data/lib/active_record/dynamic_matchers.rb +1 -20
  123. data/lib/active_record/enum.rb +113 -76
  124. data/lib/active_record/errors.rb +87 -48
  125. data/lib/active_record/explain_registry.rb +1 -1
  126. data/lib/active_record/explain_subscriber.rb +1 -1
  127. data/lib/active_record/fixture_set/file.rb +26 -5
  128. data/lib/active_record/fixtures.rb +76 -40
  129. data/lib/active_record/gem_version.rb +3 -3
  130. data/lib/active_record/inheritance.rb +32 -40
  131. data/lib/active_record/integration.rb +4 -4
  132. data/lib/active_record/internal_metadata.rb +56 -0
  133. data/lib/active_record/legacy_yaml_adapter.rb +18 -2
  134. data/lib/active_record/locale/en.yml +3 -2
  135. data/lib/active_record/locking/optimistic.rb +15 -15
  136. data/lib/active_record/locking/pessimistic.rb +1 -1
  137. data/lib/active_record/log_subscriber.rb +43 -21
  138. data/lib/active_record/migration/command_recorder.rb +59 -18
  139. data/lib/active_record/migration/compatibility.rb +126 -0
  140. data/lib/active_record/migration.rb +364 -109
  141. data/lib/active_record/model_schema.rb +128 -38
  142. data/lib/active_record/nested_attributes.rb +58 -29
  143. data/lib/active_record/null_relation.rb +16 -8
  144. data/lib/active_record/persistence.rb +121 -80
  145. data/lib/active_record/query_cache.rb +15 -18
  146. data/lib/active_record/querying.rb +10 -9
  147. data/lib/active_record/railtie.rb +27 -18
  148. data/lib/active_record/railties/controller_runtime.rb +1 -1
  149. data/lib/active_record/railties/databases.rake +58 -45
  150. data/lib/active_record/readonly_attributes.rb +1 -1
  151. data/lib/active_record/reflection.rb +282 -115
  152. data/lib/active_record/relation/batches/batch_enumerator.rb +67 -0
  153. data/lib/active_record/relation/batches.rb +139 -34
  154. data/lib/active_record/relation/calculations.rb +80 -102
  155. data/lib/active_record/relation/delegation.rb +7 -20
  156. data/lib/active_record/relation/finder_methods.rb +163 -81
  157. data/lib/active_record/relation/from_clause.rb +32 -0
  158. data/lib/active_record/relation/merger.rb +16 -42
  159. data/lib/active_record/relation/predicate_builder/array_handler.rb +11 -15
  160. data/lib/active_record/relation/predicate_builder/association_query_handler.rb +88 -0
  161. data/lib/active_record/relation/predicate_builder/base_handler.rb +17 -0
  162. data/lib/active_record/relation/predicate_builder/basic_object_handler.rb +17 -0
  163. data/lib/active_record/relation/predicate_builder/class_handler.rb +27 -0
  164. data/lib/active_record/relation/predicate_builder/polymorphic_array_handler.rb +57 -0
  165. data/lib/active_record/relation/predicate_builder/range_handler.rb +33 -0
  166. data/lib/active_record/relation/predicate_builder/relation_handler.rb +1 -1
  167. data/lib/active_record/relation/predicate_builder.rb +120 -107
  168. data/lib/active_record/relation/query_attribute.rb +19 -0
  169. data/lib/active_record/relation/query_methods.rb +308 -244
  170. data/lib/active_record/relation/record_fetch_warning.rb +49 -0
  171. data/lib/active_record/relation/spawn_methods.rb +4 -7
  172. data/lib/active_record/relation/where_clause.rb +174 -0
  173. data/lib/active_record/relation/where_clause_factory.rb +38 -0
  174. data/lib/active_record/relation.rb +176 -116
  175. data/lib/active_record/result.rb +4 -3
  176. data/lib/active_record/runtime_registry.rb +1 -1
  177. data/lib/active_record/sanitization.rb +95 -66
  178. data/lib/active_record/schema.rb +26 -22
  179. data/lib/active_record/schema_dumper.rb +62 -38
  180. data/lib/active_record/schema_migration.rb +11 -17
  181. data/lib/active_record/scoping/default.rb +23 -9
  182. data/lib/active_record/scoping/named.rb +49 -28
  183. data/lib/active_record/scoping.rb +32 -15
  184. data/lib/active_record/secure_token.rb +38 -0
  185. data/lib/active_record/serialization.rb +2 -4
  186. data/lib/active_record/statement_cache.rb +16 -14
  187. data/lib/active_record/store.rb +8 -3
  188. data/lib/active_record/suppressor.rb +58 -0
  189. data/lib/active_record/table_metadata.rb +68 -0
  190. data/lib/active_record/tasks/database_tasks.rb +58 -41
  191. data/lib/active_record/tasks/mysql_database_tasks.rb +16 -20
  192. data/lib/active_record/tasks/postgresql_database_tasks.rb +11 -2
  193. data/lib/active_record/tasks/sqlite_database_tasks.rb +5 -1
  194. data/lib/active_record/timestamp.rb +20 -9
  195. data/lib/active_record/touch_later.rb +58 -0
  196. data/lib/active_record/transactions.rb +138 -56
  197. data/lib/active_record/type/adapter_specific_registry.rb +130 -0
  198. data/lib/active_record/type/date.rb +2 -41
  199. data/lib/active_record/type/date_time.rb +2 -49
  200. data/lib/active_record/type/internal/abstract_json.rb +29 -0
  201. data/lib/active_record/type/internal/timezone.rb +15 -0
  202. data/lib/active_record/type/serialized.rb +15 -14
  203. data/lib/active_record/type/time.rb +10 -16
  204. data/lib/active_record/type/type_map.rb +4 -4
  205. data/lib/active_record/type.rb +66 -17
  206. data/lib/active_record/type_caster/connection.rb +29 -0
  207. data/lib/active_record/type_caster/map.rb +19 -0
  208. data/lib/active_record/type_caster.rb +7 -0
  209. data/lib/active_record/validations/absence.rb +23 -0
  210. data/lib/active_record/validations/associated.rb +10 -3
  211. data/lib/active_record/validations/length.rb +24 -0
  212. data/lib/active_record/validations/presence.rb +11 -12
  213. data/lib/active_record/validations/uniqueness.rb +30 -29
  214. data/lib/active_record/validations.rb +33 -32
  215. data/lib/active_record.rb +7 -2
  216. data/lib/rails/generators/active_record/migration/migration_generator.rb +7 -4
  217. data/lib/rails/generators/active_record/migration/templates/create_table_migration.rb +8 -3
  218. data/lib/rails/generators/active_record/migration/templates/migration.rb +8 -1
  219. data/lib/rails/generators/active_record/migration.rb +7 -0
  220. data/lib/rails/generators/active_record/model/model_generator.rb +32 -15
  221. data/lib/rails/generators/active_record/model/templates/application_record.rb +5 -0
  222. data/lib/rails/generators/active_record/model/templates/model.rb +3 -0
  223. metadata +58 -34
  224. data/lib/active_record/connection_adapters/mysql_adapter.rb +0 -491
  225. data/lib/active_record/connection_adapters/postgresql/array_parser.rb +0 -93
  226. data/lib/active_record/connection_adapters/postgresql/oid/date.rb +0 -11
  227. data/lib/active_record/connection_adapters/postgresql/oid/float.rb +0 -21
  228. data/lib/active_record/connection_adapters/postgresql/oid/infinity.rb +0 -13
  229. data/lib/active_record/connection_adapters/postgresql/oid/integer.rb +0 -11
  230. data/lib/active_record/connection_adapters/postgresql/oid/time.rb +0 -11
  231. data/lib/active_record/serializers/xml_serializer.rb +0 -193
  232. data/lib/active_record/type/big_integer.rb +0 -13
  233. data/lib/active_record/type/binary.rb +0 -50
  234. data/lib/active_record/type/boolean.rb +0 -31
  235. data/lib/active_record/type/decimal.rb +0 -50
  236. data/lib/active_record/type/decimal_without_scale.rb +0 -11
  237. data/lib/active_record/type/decorator.rb +0 -14
  238. data/lib/active_record/type/float.rb +0 -19
  239. data/lib/active_record/type/integer.rb +0 -59
  240. data/lib/active_record/type/mutable.rb +0 -16
  241. data/lib/active_record/type/numeric.rb +0 -36
  242. data/lib/active_record/type/string.rb +0 -40
  243. data/lib/active_record/type/text.rb +0 -11
  244. data/lib/active_record/type/time_value.rb +0 -38
  245. data/lib/active_record/type/unsigned_integer.rb +0 -15
  246. data/lib/active_record/type/value.rb +0 -105
@@ -1,6 +1,16 @@
1
1
  require 'active_record'
2
2
 
3
3
  db_namespace = namespace :db do
4
+ desc "Set the environment value for the database"
5
+ task "environment:set" => [:environment, :load_config] do
6
+ ActiveRecord::InternalMetadata.create_table
7
+ ActiveRecord::InternalMetadata[:environment] = ActiveRecord::Migrator.current_environment
8
+ end
9
+
10
+ task :check_protected_environments => [:environment, :load_config] do
11
+ ActiveRecord::Tasks::DatabaseTasks.check_protected_environments!
12
+ end
13
+
4
14
  task :load_config do
5
15
  ActiveRecord::Base.configurations = ActiveRecord::Tasks::DatabaseTasks.database_configuration || {}
6
16
  ActiveRecord::Migrator.migrations_paths = ActiveRecord::Tasks::DatabaseTasks.migrations_paths
@@ -12,30 +22,34 @@ db_namespace = namespace :db do
12
22
  end
13
23
  end
14
24
 
15
- 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 it defaults to creating the development and test databases.'
25
+ 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.'
16
26
  task :create => [:load_config] do
17
27
  ActiveRecord::Tasks::DatabaseTasks.create_current
18
28
  end
19
29
 
20
30
  namespace :drop do
21
- task :all => :load_config do
31
+ task :all => [:load_config, :check_protected_environments] do
22
32
  ActiveRecord::Tasks::DatabaseTasks.drop_all
23
33
  end
24
34
  end
25
35
 
26
- 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 it defaults to dropping the development and test databases.'
27
- task :drop => [:load_config] do
36
+ 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.'
37
+ task :drop => [:load_config, :check_protected_environments] do
38
+ db_namespace["drop:_unsafe"].invoke
39
+ end
40
+
41
+ task "drop:_unsafe" => [:load_config] do
28
42
  ActiveRecord::Tasks::DatabaseTasks.drop_current
29
43
  end
30
44
 
31
45
  namespace :purge do
32
- task :all => :load_config do
46
+ task :all => [:load_config, :check_protected_environments] do
33
47
  ActiveRecord::Tasks::DatabaseTasks.purge_all
34
48
  end
35
49
  end
36
50
 
37
- # desc "Empty 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 it defaults to purging the development and test databases."
38
- task :purge => [:load_config] do
51
+ # 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."
52
+ task :purge => [:load_config, :check_protected_environments] do
39
53
  ActiveRecord::Tasks::DatabaseTasks.purge_current
40
54
  end
41
55
 
@@ -79,7 +93,7 @@ db_namespace = namespace :db do
79
93
  task :up => [:environment, :load_config] do
80
94
  version = ENV['VERSION'] ? ENV['VERSION'].to_i : nil
81
95
  raise 'VERSION is required' unless version
82
- ActiveRecord::Migrator.run(:up, ActiveRecord::Migrator.migrations_paths, version)
96
+ ActiveRecord::Migrator.run(:up, ActiveRecord::Tasks::DatabaseTasks.migrations_paths, version)
83
97
  db_namespace['_dump'].invoke
84
98
  end
85
99
 
@@ -87,7 +101,7 @@ db_namespace = namespace :db do
87
101
  task :down => [:environment, :load_config] do
88
102
  version = ENV['VERSION'] ? ENV['VERSION'].to_i : nil
89
103
  raise 'VERSION is required - To go down one migration, run db:rollback' unless version
90
- ActiveRecord::Migrator.run(:down, ActiveRecord::Migrator.migrations_paths, version)
104
+ ActiveRecord::Migrator.run(:down, ActiveRecord::Tasks::DatabaseTasks.migrations_paths, version)
91
105
  db_namespace['_dump'].invoke
92
106
  end
93
107
 
@@ -99,13 +113,15 @@ db_namespace = namespace :db do
99
113
  db_list = ActiveRecord::SchemaMigration.normalized_versions
100
114
 
101
115
  file_list =
102
- ActiveRecord::Migrator.migrations_paths.flat_map do |path|
103
- # match "20091231235959_some_name.rb" and "001_some_name.rb" pattern
104
- Dir.foreach(path).grep(/^(\d{3,})_(.+)\.rb$/) do
105
- version = ActiveRecord::SchemaMigration.normalize_migration_number($1)
116
+ ActiveRecord::Tasks::DatabaseTasks.migrations_paths.flat_map do |path|
117
+ Dir.foreach(path).map do |file|
118
+ next unless ActiveRecord::Migrator.match_to_migration_filename?(file)
119
+
120
+ version, name, scope = ActiveRecord::Migrator.parse_migration_filename(file)
121
+ version = ActiveRecord::SchemaMigration.normalize_migration_number(version)
106
122
  status = db_list.delete(version) ? 'up' : 'down'
107
- [status, version, $2.humanize]
108
- end
123
+ [status, version, (name + scope).humanize]
124
+ end.compact
109
125
  end
110
126
 
111
127
  db_list.map! do |version|
@@ -125,22 +141,19 @@ db_namespace = namespace :db do
125
141
  desc 'Rolls the schema back to the previous version (specify steps w/ STEP=n).'
126
142
  task :rollback => [:environment, :load_config] do
127
143
  step = ENV['STEP'] ? ENV['STEP'].to_i : 1
128
- ActiveRecord::Migrator.rollback(ActiveRecord::Migrator.migrations_paths, step)
144
+ ActiveRecord::Migrator.rollback(ActiveRecord::Tasks::DatabaseTasks.migrations_paths, step)
129
145
  db_namespace['_dump'].invoke
130
146
  end
131
147
 
132
148
  # desc 'Pushes the schema to the next version (specify steps w/ STEP=n).'
133
149
  task :forward => [:environment, :load_config] do
134
150
  step = ENV['STEP'] ? ENV['STEP'].to_i : 1
135
- ActiveRecord::Migrator.forward(ActiveRecord::Migrator.migrations_paths, step)
151
+ ActiveRecord::Migrator.forward(ActiveRecord::Tasks::DatabaseTasks.migrations_paths, step)
136
152
  db_namespace['_dump'].invoke
137
153
  end
138
154
 
139
155
  # desc 'Drops and recreates the database from db/schema.rb for the current environment and loads the seeds.'
140
- task :reset => [:environment, :load_config] do
141
- db_namespace["drop"].invoke
142
- db_namespace["setup"].invoke
143
- end
156
+ task :reset => [ 'db:drop', 'db:setup' ]
144
157
 
145
158
  # desc "Retrieves the charset for the current environment's database"
146
159
  task :charset => [:environment, :load_config] do
@@ -162,29 +175,29 @@ db_namespace = namespace :db do
162
175
  end
163
176
 
164
177
  # desc "Raises an error if there are pending migrations"
165
- task :abort_if_pending_migrations => :environment do
166
- pending_migrations = ActiveRecord::Migrator.open(ActiveRecord::Migrator.migrations_paths).pending_migrations
178
+ task :abort_if_pending_migrations => [:environment, :load_config] do
179
+ pending_migrations = ActiveRecord::Migrator.open(ActiveRecord::Tasks::DatabaseTasks.migrations_paths).pending_migrations
167
180
 
168
181
  if pending_migrations.any?
169
182
  puts "You have #{pending_migrations.size} pending #{pending_migrations.size > 1 ? 'migrations:' : 'migration:'}"
170
183
  pending_migrations.each do |pending_migration|
171
184
  puts ' %4d %s' % [pending_migration.version, pending_migration.name]
172
185
  end
173
- abort %{Run `rake db:migrate` to update your database then try again.}
186
+ abort %{Run `rails db:migrate` to update your database then try again.}
174
187
  end
175
188
  end
176
189
 
177
- desc 'Create the database, load the schema, and initialize with the seed data (use db:reset to also drop the database first)'
190
+ desc 'Creates the database, loads the schema, and initializes with the seed data (use db:reset to also drop the database first)'
178
191
  task :setup => ['db:schema:load_if_ruby', 'db:structure:load_if_sql', :seed]
179
192
 
180
- desc 'Load the seed data from db/seeds.rb'
193
+ desc 'Loads the seed data from db/seeds.rb'
181
194
  task :seed do
182
195
  db_namespace['abort_if_pending_migrations'].invoke
183
196
  ActiveRecord::Tasks::DatabaseTasks.load_seed
184
197
  end
185
198
 
186
199
  namespace :fixtures do
187
- desc "Load 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."
200
+ 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."
188
201
  task :load => [:environment, :load_config] do
189
202
  require 'active_record/fixtures'
190
203
 
@@ -232,7 +245,7 @@ db_namespace = namespace :db do
232
245
  end
233
246
 
234
247
  namespace :schema do
235
- desc 'Create a db/schema.rb file that is portable against any DB supported by AR'
248
+ desc 'Creates a db/schema.rb file that is portable against any DB supported by Active Record'
236
249
  task :dump => [:environment, :load_config] do
237
250
  require 'active_record/schema_dumper'
238
251
  filename = ENV['SCHEMA'] || File.join(ActiveRecord::Tasks::DatabaseTasks.db_dir, 'schema.rb')
@@ -242,8 +255,8 @@ db_namespace = namespace :db do
242
255
  db_namespace['schema:dump'].reenable
243
256
  end
244
257
 
245
- desc 'Load a schema.rb file into the database'
246
- task :load => [:environment, :load_config] do
258
+ desc 'Loads a schema.rb file into the database'
259
+ task :load => [:environment, :load_config, :check_protected_environments] do
247
260
  ActiveRecord::Tasks::DatabaseTasks.load_schema_current(:ruby, ENV['SCHEMA'])
248
261
  end
249
262
 
@@ -252,29 +265,29 @@ db_namespace = namespace :db do
252
265
  end
253
266
 
254
267
  namespace :cache do
255
- desc 'Create a db/schema_cache.dump file.'
268
+ desc 'Creates a db/schema_cache.dump file.'
256
269
  task :dump => [:environment, :load_config] do
257
270
  con = ActiveRecord::Base.connection
258
271
  filename = File.join(ActiveRecord::Tasks::DatabaseTasks.db_dir, "schema_cache.dump")
259
272
 
260
273
  con.schema_cache.clear!
261
- con.tables.each { |table| con.schema_cache.add(table) }
274
+ con.data_sources.each { |table| con.schema_cache.add(table) }
262
275
  open(filename, 'wb') { |f| f.write(Marshal.dump(con.schema_cache)) }
263
276
  end
264
277
 
265
- desc 'Clear a db/schema_cache.dump file.'
278
+ desc 'Clears a db/schema_cache.dump file.'
266
279
  task :clear => [:environment, :load_config] do
267
280
  filename = File.join(ActiveRecord::Tasks::DatabaseTasks.db_dir, "schema_cache.dump")
268
- FileUtils.rm(filename) if File.exist?(filename)
281
+ rm_f filename, verbose: false
269
282
  end
270
283
  end
271
284
 
272
285
  end
273
286
 
274
287
  namespace :structure do
275
- desc 'Dump the database structure to db/structure.sql. Specify another file with DB_STRUCTURE=db/my_structure.sql'
288
+ desc 'Dumps the database structure to db/structure.sql. Specify another file with SCHEMA=db/my_structure.sql'
276
289
  task :dump => [:environment, :load_config] do
277
- filename = ENV['DB_STRUCTURE'] || File.join(ActiveRecord::Tasks::DatabaseTasks.db_dir, "structure.sql")
290
+ filename = ENV['SCHEMA'] || File.join(ActiveRecord::Tasks::DatabaseTasks.db_dir, "structure.sql")
278
291
  current_config = ActiveRecord::Tasks::DatabaseTasks.current_config
279
292
  ActiveRecord::Tasks::DatabaseTasks.structure_dump(current_config, filename)
280
293
 
@@ -288,9 +301,9 @@ db_namespace = namespace :db do
288
301
  db_namespace['structure:dump'].reenable
289
302
  end
290
303
 
291
- desc "Recreate the databases from the structure.sql file"
292
- task :load => [:load_config] do
293
- ActiveRecord::Tasks::DatabaseTasks.load_schema_current(:sql, ENV['DB_STRUCTURE'])
304
+ desc "Recreates the databases from the structure.sql file"
305
+ task :load => [:environment, :load_config, :check_protected_environments] do
306
+ ActiveRecord::Tasks::DatabaseTasks.load_schema_current(:sql, ENV['SCHEMA'])
294
307
  end
295
308
 
296
309
  task :load_if_sql => ['db:create', :environment] do
@@ -322,7 +335,7 @@ db_namespace = namespace :db do
322
335
  begin
323
336
  should_reconnect = ActiveRecord::Base.connection_pool.active_connection?
324
337
  ActiveRecord::Schema.verbose = false
325
- ActiveRecord::Tasks::DatabaseTasks.load_schema_for ActiveRecord::Base.configurations['test'], :ruby, ENV['SCHEMA']
338
+ ActiveRecord::Tasks::DatabaseTasks.load_schema ActiveRecord::Base.configurations['test'], :ruby, ENV['SCHEMA']
326
339
  ensure
327
340
  if should_reconnect
328
341
  ActiveRecord::Base.establish_connection(ActiveRecord::Base.configurations[ActiveRecord::Tasks::DatabaseTasks.env])
@@ -332,7 +345,7 @@ db_namespace = namespace :db do
332
345
 
333
346
  # desc "Recreate the test database from an existent structure.sql file"
334
347
  task :load_structure => %w(db:test:purge) do
335
- ActiveRecord::Tasks::DatabaseTasks.load_schema_for ActiveRecord::Base.configurations['test'], :sql, ENV['SCHEMA']
348
+ ActiveRecord::Tasks::DatabaseTasks.load_schema ActiveRecord::Base.configurations['test'], :sql, ENV['SCHEMA']
336
349
  end
337
350
 
338
351
  # desc "Recreate the test database from a fresh schema"
@@ -352,11 +365,11 @@ db_namespace = namespace :db do
352
365
  task :clone_structure => %w(db:test:deprecated db:structure:dump db:test:load_structure)
353
366
 
354
367
  # desc "Empty the test database"
355
- task :purge => %w(environment load_config) do
368
+ task :purge => %w(environment load_config check_protected_environments) do
356
369
  ActiveRecord::Tasks::DatabaseTasks.purge ActiveRecord::Base.configurations['test']
357
370
  end
358
371
 
359
- # desc 'Check for pending migrations and load the test schema'
372
+ # desc 'Load the test schema'
360
373
  task :prepare => %w(environment load_config) do
361
374
  unless ActiveRecord::Base.configurations.blank?
362
375
  db_namespace['test:load'].invoke
@@ -369,7 +382,7 @@ namespace :railties do
369
382
  namespace :install do
370
383
  # desc "Copies missing migrations from Railties (e.g. engines). You can specify Railties to use with FROM=railtie1,railtie2"
371
384
  task :migrations => :'db:load_config' do
372
- to_load = ENV['FROM'].blank? ? :all : ENV['FROM'].split(",").map {|n| n.strip }
385
+ to_load = ENV['FROM'].blank? ? :all : ENV['FROM'].split(",").map(&:strip)
373
386
  railties = {}
374
387
  Rails.application.migration_railties.each do |railtie|
375
388
  next unless to_load == :all || to_load.include?(railtie.railtie_name)
@@ -387,7 +400,7 @@ namespace :railties do
387
400
  puts "Copied migration #{migration.basename} from #{name}"
388
401
  end
389
402
 
390
- ActiveRecord::Migration.copy(ActiveRecord::Migrator.migrations_paths.first, railties,
403
+ ActiveRecord::Migration.copy(ActiveRecord::Tasks::DatabaseTasks.migrations_paths.first, railties,
391
404
  :on_skip => on_skip, :on_copy => on_copy)
392
405
  end
393
406
  end
@@ -11,7 +11,7 @@ module ActiveRecord
11
11
  # Attributes listed as readonly will be used to create a new record but update operations will
12
12
  # ignore these fields.
13
13
  def attr_readonly(*attributes)
14
- self._attr_readonly = Set.new(attributes.map { |a| a.to_s }) + (self._attr_readonly || [])
14
+ self._attr_readonly = Set.new(attributes.map(&:to_s)) + (self._attr_readonly || [])
15
15
  end
16
16
 
17
17
  # Returns an array of all the attributes that have been specified as readonly.