activerecord 4.2.11.1 → 6.0.3.5

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 (373) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +721 -1522
  3. data/MIT-LICENSE +4 -2
  4. data/README.rdoc +14 -13
  5. data/examples/performance.rb +33 -32
  6. data/examples/simple.rb +5 -4
  7. data/lib/active_record/advisory_lock_base.rb +18 -0
  8. data/lib/active_record/aggregations.rb +266 -251
  9. data/lib/active_record/association_relation.rb +20 -13
  10. data/lib/active_record/associations/alias_tracker.rb +29 -36
  11. data/lib/active_record/associations/association.rb +128 -57
  12. data/lib/active_record/associations/association_scope.rb +103 -132
  13. data/lib/active_record/associations/belongs_to_association.rb +65 -60
  14. data/lib/active_record/associations/belongs_to_polymorphic_association.rb +8 -12
  15. data/lib/active_record/associations/builder/association.rb +27 -40
  16. data/lib/active_record/associations/builder/belongs_to.rb +69 -55
  17. data/lib/active_record/associations/builder/collection_association.rb +10 -33
  18. data/lib/active_record/associations/builder/has_and_belongs_to_many.rb +50 -66
  19. data/lib/active_record/associations/builder/has_many.rb +8 -4
  20. data/lib/active_record/associations/builder/has_one.rb +46 -5
  21. data/lib/active_record/associations/builder/singular_association.rb +16 -10
  22. data/lib/active_record/associations/collection_association.rb +136 -288
  23. data/lib/active_record/associations/collection_proxy.rb +241 -147
  24. data/lib/active_record/associations/foreign_association.rb +10 -1
  25. data/lib/active_record/associations/has_many_association.rb +34 -98
  26. data/lib/active_record/associations/has_many_through_association.rb +60 -87
  27. data/lib/active_record/associations/has_one_association.rb +61 -49
  28. data/lib/active_record/associations/has_one_through_association.rb +20 -11
  29. data/lib/active_record/associations/join_dependency/join_association.rb +38 -86
  30. data/lib/active_record/associations/join_dependency/join_base.rb +10 -9
  31. data/lib/active_record/associations/join_dependency/join_part.rb +14 -14
  32. data/lib/active_record/associations/join_dependency.rb +149 -166
  33. data/lib/active_record/associations/preloader/association.rb +90 -123
  34. data/lib/active_record/associations/preloader/through_association.rb +85 -65
  35. data/lib/active_record/associations/preloader.rb +90 -93
  36. data/lib/active_record/associations/singular_association.rb +18 -39
  37. data/lib/active_record/associations/through_association.rb +38 -18
  38. data/lib/active_record/associations.rb +1737 -1597
  39. data/lib/active_record/attribute_assignment.rb +57 -185
  40. data/lib/active_record/attribute_decorators.rb +39 -17
  41. data/lib/active_record/attribute_methods/before_type_cast.rb +13 -9
  42. data/lib/active_record/attribute_methods/dirty.rb +174 -144
  43. data/lib/active_record/attribute_methods/primary_key.rb +90 -84
  44. data/lib/active_record/attribute_methods/query.rb +6 -5
  45. data/lib/active_record/attribute_methods/read.rb +20 -77
  46. data/lib/active_record/attribute_methods/serialization.rb +40 -21
  47. data/lib/active_record/attribute_methods/time_zone_conversion.rb +57 -37
  48. data/lib/active_record/attribute_methods/write.rb +32 -55
  49. data/lib/active_record/attribute_methods.rb +120 -135
  50. data/lib/active_record/attributes.rb +213 -82
  51. data/lib/active_record/autosave_association.rb +97 -41
  52. data/lib/active_record/base.rb +57 -45
  53. data/lib/active_record/callbacks.rb +101 -76
  54. data/lib/active_record/coders/json.rb +3 -1
  55. data/lib/active_record/coders/yaml_column.rb +23 -12
  56. data/lib/active_record/connection_adapters/abstract/connection_pool.rb +804 -297
  57. data/lib/active_record/connection_adapters/abstract/database_limits.rb +26 -8
  58. data/lib/active_record/connection_adapters/abstract/database_statements.rb +240 -115
  59. data/lib/active_record/connection_adapters/abstract/query_cache.rb +83 -24
  60. data/lib/active_record/connection_adapters/abstract/quoting.rb +170 -53
  61. data/lib/active_record/connection_adapters/abstract/savepoints.rb +5 -3
  62. data/lib/active_record/connection_adapters/abstract/schema_creation.rb +74 -47
  63. data/lib/active_record/connection_adapters/abstract/schema_definitions.rb +371 -242
  64. data/lib/active_record/connection_adapters/abstract/schema_dumper.rb +79 -36
  65. data/lib/active_record/connection_adapters/abstract/schema_statements.rb +694 -256
  66. data/lib/active_record/connection_adapters/abstract/transaction.rb +190 -83
  67. data/lib/active_record/connection_adapters/abstract_adapter.rb +473 -202
  68. data/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +507 -639
  69. data/lib/active_record/connection_adapters/column.rb +56 -43
  70. data/lib/active_record/connection_adapters/connection_specification.rb +174 -153
  71. data/lib/active_record/connection_adapters/determine_if_preparable_visitor.rb +29 -0
  72. data/lib/active_record/connection_adapters/mysql/column.rb +27 -0
  73. data/lib/active_record/connection_adapters/mysql/database_statements.rb +196 -0
  74. data/lib/active_record/connection_adapters/mysql/explain_pretty_printer.rb +71 -0
  75. data/lib/active_record/connection_adapters/mysql/quoting.rb +81 -0
  76. data/lib/active_record/connection_adapters/mysql/schema_creation.rb +71 -0
  77. data/lib/active_record/connection_adapters/mysql/schema_definitions.rb +95 -0
  78. data/lib/active_record/connection_adapters/mysql/schema_dumper.rb +88 -0
  79. data/lib/active_record/connection_adapters/mysql/schema_statements.rb +264 -0
  80. data/lib/active_record/connection_adapters/mysql/type_metadata.rb +31 -0
  81. data/lib/active_record/connection_adapters/mysql2_adapter.rb +58 -181
  82. data/lib/active_record/connection_adapters/postgresql/column.rb +21 -11
  83. data/lib/active_record/connection_adapters/postgresql/database_statements.rb +70 -114
  84. data/lib/active_record/connection_adapters/postgresql/explain_pretty_printer.rb +44 -0
  85. data/lib/active_record/connection_adapters/postgresql/oid/array.rb +49 -58
  86. data/lib/active_record/connection_adapters/postgresql/oid/bit.rb +9 -8
  87. data/lib/active_record/connection_adapters/postgresql/oid/bit_varying.rb +2 -0
  88. data/lib/active_record/connection_adapters/postgresql/oid/bytea.rb +4 -2
  89. data/lib/active_record/connection_adapters/postgresql/oid/cidr.rb +5 -1
  90. data/lib/active_record/connection_adapters/postgresql/oid/date.rb +13 -1
  91. data/lib/active_record/connection_adapters/postgresql/oid/date_time.rb +9 -22
  92. data/lib/active_record/connection_adapters/postgresql/oid/decimal.rb +3 -1
  93. data/lib/active_record/connection_adapters/postgresql/oid/enum.rb +5 -4
  94. data/lib/active_record/connection_adapters/postgresql/oid/hstore.rb +31 -20
  95. data/lib/active_record/connection_adapters/postgresql/oid/inet.rb +2 -0
  96. data/lib/active_record/connection_adapters/postgresql/oid/jsonb.rb +3 -11
  97. data/lib/active_record/connection_adapters/postgresql/oid/legacy_point.rb +44 -0
  98. data/lib/active_record/connection_adapters/postgresql/oid/money.rb +7 -9
  99. data/lib/active_record/connection_adapters/postgresql/oid/{infinity.rb → oid.rb} +5 -3
  100. data/lib/active_record/connection_adapters/postgresql/oid/point.rb +32 -11
  101. data/lib/active_record/connection_adapters/postgresql/oid/range.rb +51 -34
  102. data/lib/active_record/connection_adapters/postgresql/oid/specialized_string.rb +4 -5
  103. data/lib/active_record/connection_adapters/postgresql/oid/type_map_initializer.rb +58 -54
  104. data/lib/active_record/connection_adapters/postgresql/oid/uuid.rb +9 -5
  105. data/lib/active_record/connection_adapters/postgresql/oid/vector.rb +3 -1
  106. data/lib/active_record/connection_adapters/postgresql/oid/xml.rb +3 -1
  107. data/lib/active_record/connection_adapters/postgresql/oid.rb +23 -25
  108. data/lib/active_record/connection_adapters/postgresql/quoting.rb +144 -47
  109. data/lib/active_record/connection_adapters/postgresql/referential_integrity.rb +27 -14
  110. data/lib/active_record/connection_adapters/postgresql/schema_creation.rb +76 -0
  111. data/lib/active_record/connection_adapters/postgresql/schema_definitions.rb +178 -108
  112. data/lib/active_record/connection_adapters/postgresql/schema_dumper.rb +49 -0
  113. data/lib/active_record/connection_adapters/postgresql/schema_statements.rb +462 -296
  114. data/lib/active_record/connection_adapters/postgresql/type_metadata.rb +36 -0
  115. data/lib/active_record/connection_adapters/postgresql/utils.rb +11 -8
  116. data/lib/active_record/connection_adapters/postgresql_adapter.rb +558 -356
  117. data/lib/active_record/connection_adapters/schema_cache.rb +72 -25
  118. data/lib/active_record/connection_adapters/sql_type_metadata.rb +37 -0
  119. data/lib/active_record/connection_adapters/sqlite3/database_statements.rb +119 -0
  120. data/lib/active_record/connection_adapters/sqlite3/explain_pretty_printer.rb +21 -0
  121. data/lib/active_record/connection_adapters/sqlite3/quoting.rb +102 -0
  122. data/lib/active_record/connection_adapters/sqlite3/schema_creation.rb +17 -0
  123. data/lib/active_record/connection_adapters/sqlite3/schema_definitions.rb +19 -0
  124. data/lib/active_record/connection_adapters/sqlite3/schema_dumper.rb +18 -0
  125. data/lib/active_record/connection_adapters/sqlite3/schema_statements.rb +137 -0
  126. data/lib/active_record/connection_adapters/sqlite3_adapter.rb +299 -349
  127. data/lib/active_record/connection_adapters/statement_pool.rb +33 -13
  128. data/lib/active_record/connection_handling.rb +167 -41
  129. data/lib/active_record/core.rb +252 -230
  130. data/lib/active_record/counter_cache.rb +70 -49
  131. data/lib/active_record/database_configurations/database_config.rb +37 -0
  132. data/lib/active_record/database_configurations/hash_config.rb +50 -0
  133. data/lib/active_record/database_configurations/url_config.rb +78 -0
  134. data/lib/active_record/database_configurations.rb +233 -0
  135. data/lib/active_record/define_callbacks.rb +22 -0
  136. data/lib/active_record/dynamic_matchers.rb +87 -106
  137. data/lib/active_record/enum.rb +163 -86
  138. data/lib/active_record/errors.rb +188 -53
  139. data/lib/active_record/explain.rb +22 -11
  140. data/lib/active_record/explain_registry.rb +4 -2
  141. data/lib/active_record/explain_subscriber.rb +10 -5
  142. data/lib/active_record/fixture_set/file.rb +35 -9
  143. data/lib/active_record/fixture_set/model_metadata.rb +33 -0
  144. data/lib/active_record/fixture_set/render_context.rb +17 -0
  145. data/lib/active_record/fixture_set/table_row.rb +152 -0
  146. data/lib/active_record/fixture_set/table_rows.rb +46 -0
  147. data/lib/active_record/fixtures.rb +227 -501
  148. data/lib/active_record/gem_version.rb +6 -4
  149. data/lib/active_record/inheritance.rb +158 -115
  150. data/lib/active_record/insert_all.rb +179 -0
  151. data/lib/active_record/integration.rb +123 -29
  152. data/lib/active_record/internal_metadata.rb +53 -0
  153. data/lib/active_record/legacy_yaml_adapter.rb +21 -3
  154. data/lib/active_record/locale/en.yml +3 -2
  155. data/lib/active_record/locking/optimistic.rb +86 -96
  156. data/lib/active_record/locking/pessimistic.rb +18 -6
  157. data/lib/active_record/log_subscriber.rb +76 -33
  158. data/lib/active_record/middleware/database_selector/resolver/session.rb +45 -0
  159. data/lib/active_record/middleware/database_selector/resolver.rb +87 -0
  160. data/lib/active_record/middleware/database_selector.rb +74 -0
  161. data/lib/active_record/migration/command_recorder.rb +166 -91
  162. data/lib/active_record/migration/compatibility.rb +244 -0
  163. data/lib/active_record/migration/join_table.rb +8 -7
  164. data/lib/active_record/migration.rb +623 -305
  165. data/lib/active_record/model_schema.rb +313 -112
  166. data/lib/active_record/nested_attributes.rb +263 -223
  167. data/lib/active_record/no_touching.rb +15 -2
  168. data/lib/active_record/null_relation.rb +24 -38
  169. data/lib/active_record/persistence.rb +557 -126
  170. data/lib/active_record/query_cache.rb +19 -23
  171. data/lib/active_record/querying.rb +44 -30
  172. data/lib/active_record/railtie.rb +143 -44
  173. data/lib/active_record/railties/collection_cache_association_loading.rb +34 -0
  174. data/lib/active_record/railties/console_sandbox.rb +2 -0
  175. data/lib/active_record/railties/controller_runtime.rb +34 -33
  176. data/lib/active_record/railties/databases.rake +331 -185
  177. data/lib/active_record/readonly_attributes.rb +5 -4
  178. data/lib/active_record/reflection.rb +430 -281
  179. data/lib/active_record/relation/batches/batch_enumerator.rb +69 -0
  180. data/lib/active_record/relation/batches.rb +206 -55
  181. data/lib/active_record/relation/calculations.rb +268 -254
  182. data/lib/active_record/relation/delegation.rb +75 -84
  183. data/lib/active_record/relation/finder_methods.rb +285 -241
  184. data/lib/active_record/relation/from_clause.rb +30 -0
  185. data/lib/active_record/relation/merger.rb +78 -88
  186. data/lib/active_record/relation/predicate_builder/array_handler.rb +27 -26
  187. data/lib/active_record/relation/predicate_builder/association_query_value.rb +43 -0
  188. data/lib/active_record/relation/predicate_builder/base_handler.rb +18 -0
  189. data/lib/active_record/relation/predicate_builder/basic_object_handler.rb +19 -0
  190. data/lib/active_record/relation/predicate_builder/polymorphic_array_value.rb +53 -0
  191. data/lib/active_record/relation/predicate_builder/range_handler.rb +22 -0
  192. data/lib/active_record/relation/predicate_builder/relation_handler.rb +7 -1
  193. data/lib/active_record/relation/predicate_builder.rb +110 -119
  194. data/lib/active_record/relation/query_attribute.rb +50 -0
  195. data/lib/active_record/relation/query_methods.rb +603 -397
  196. data/lib/active_record/relation/record_fetch_warning.rb +51 -0
  197. data/lib/active_record/relation/spawn_methods.rb +11 -14
  198. data/lib/active_record/relation/where_clause.rb +189 -0
  199. data/lib/active_record/relation/where_clause_factory.rb +33 -0
  200. data/lib/active_record/relation.rb +530 -341
  201. data/lib/active_record/result.rb +79 -43
  202. data/lib/active_record/runtime_registry.rb +6 -4
  203. data/lib/active_record/sanitization.rb +144 -121
  204. data/lib/active_record/schema.rb +21 -24
  205. data/lib/active_record/schema_dumper.rb +112 -93
  206. data/lib/active_record/schema_migration.rb +24 -17
  207. data/lib/active_record/scoping/default.rb +98 -83
  208. data/lib/active_record/scoping/named.rb +86 -33
  209. data/lib/active_record/scoping.rb +45 -27
  210. data/lib/active_record/secure_token.rb +40 -0
  211. data/lib/active_record/serialization.rb +5 -5
  212. data/lib/active_record/statement_cache.rb +73 -36
  213. data/lib/active_record/store.rb +127 -42
  214. data/lib/active_record/suppressor.rb +61 -0
  215. data/lib/active_record/table_metadata.rb +90 -0
  216. data/lib/active_record/tasks/database_tasks.rb +307 -100
  217. data/lib/active_record/tasks/mysql_database_tasks.rb +55 -100
  218. data/lib/active_record/tasks/postgresql_database_tasks.rb +80 -41
  219. data/lib/active_record/tasks/sqlite_database_tasks.rb +37 -16
  220. data/lib/active_record/test_databases.rb +23 -0
  221. data/lib/active_record/test_fixtures.rb +225 -0
  222. data/lib/active_record/timestamp.rb +86 -41
  223. data/lib/active_record/touch_later.rb +65 -0
  224. data/lib/active_record/transactions.rb +223 -157
  225. data/lib/active_record/translation.rb +3 -1
  226. data/lib/active_record/type/adapter_specific_registry.rb +126 -0
  227. data/lib/active_record/type/date.rb +4 -45
  228. data/lib/active_record/type/date_time.rb +4 -49
  229. data/lib/active_record/type/decimal_without_scale.rb +6 -2
  230. data/lib/active_record/type/hash_lookup_type_map.rb +5 -4
  231. data/lib/active_record/type/internal/timezone.rb +17 -0
  232. data/lib/active_record/type/json.rb +30 -0
  233. data/lib/active_record/type/serialized.rb +23 -15
  234. data/lib/active_record/type/text.rb +2 -2
  235. data/lib/active_record/type/time.rb +11 -16
  236. data/lib/active_record/type/type_map.rb +16 -19
  237. data/lib/active_record/type/unsigned_integer.rb +9 -8
  238. data/lib/active_record/type.rb +77 -23
  239. data/lib/active_record/type_caster/connection.rb +34 -0
  240. data/lib/active_record/type_caster/map.rb +20 -0
  241. data/lib/active_record/type_caster.rb +9 -0
  242. data/lib/active_record/validations/absence.rb +25 -0
  243. data/lib/active_record/validations/associated.rb +12 -4
  244. data/lib/active_record/validations/length.rb +26 -0
  245. data/lib/active_record/validations/presence.rb +14 -13
  246. data/lib/active_record/validations/uniqueness.rb +42 -55
  247. data/lib/active_record/validations.rb +38 -35
  248. data/lib/active_record/version.rb +3 -1
  249. data/lib/active_record.rb +42 -22
  250. data/lib/arel/alias_predication.rb +9 -0
  251. data/lib/arel/attributes/attribute.rb +37 -0
  252. data/lib/arel/attributes.rb +22 -0
  253. data/lib/arel/collectors/bind.rb +24 -0
  254. data/lib/arel/collectors/composite.rb +31 -0
  255. data/lib/arel/collectors/plain_string.rb +20 -0
  256. data/lib/arel/collectors/sql_string.rb +20 -0
  257. data/lib/arel/collectors/substitute_binds.rb +28 -0
  258. data/lib/arel/crud.rb +42 -0
  259. data/lib/arel/delete_manager.rb +18 -0
  260. data/lib/arel/errors.rb +9 -0
  261. data/lib/arel/expressions.rb +29 -0
  262. data/lib/arel/factory_methods.rb +49 -0
  263. data/lib/arel/insert_manager.rb +49 -0
  264. data/lib/arel/math.rb +45 -0
  265. data/lib/arel/nodes/and.rb +32 -0
  266. data/lib/arel/nodes/ascending.rb +23 -0
  267. data/lib/arel/nodes/binary.rb +52 -0
  268. data/lib/arel/nodes/bind_param.rb +36 -0
  269. data/lib/arel/nodes/case.rb +55 -0
  270. data/lib/arel/nodes/casted.rb +50 -0
  271. data/lib/arel/nodes/comment.rb +29 -0
  272. data/lib/arel/nodes/count.rb +12 -0
  273. data/lib/arel/nodes/delete_statement.rb +45 -0
  274. data/lib/arel/nodes/descending.rb +23 -0
  275. data/lib/arel/nodes/equality.rb +18 -0
  276. data/lib/arel/nodes/extract.rb +24 -0
  277. data/lib/arel/nodes/false.rb +16 -0
  278. data/lib/arel/nodes/full_outer_join.rb +8 -0
  279. data/lib/arel/nodes/function.rb +44 -0
  280. data/lib/arel/nodes/grouping.rb +8 -0
  281. data/lib/arel/nodes/in.rb +8 -0
  282. data/lib/arel/nodes/infix_operation.rb +80 -0
  283. data/lib/arel/nodes/inner_join.rb +8 -0
  284. data/lib/arel/nodes/insert_statement.rb +37 -0
  285. data/lib/arel/nodes/join_source.rb +20 -0
  286. data/lib/arel/nodes/matches.rb +18 -0
  287. data/lib/arel/nodes/named_function.rb +23 -0
  288. data/lib/arel/nodes/node.rb +50 -0
  289. data/lib/arel/nodes/node_expression.rb +13 -0
  290. data/lib/arel/nodes/outer_join.rb +8 -0
  291. data/lib/arel/nodes/over.rb +15 -0
  292. data/lib/arel/nodes/regexp.rb +16 -0
  293. data/lib/arel/nodes/right_outer_join.rb +8 -0
  294. data/lib/arel/nodes/select_core.rb +67 -0
  295. data/lib/arel/nodes/select_statement.rb +41 -0
  296. data/lib/arel/nodes/sql_literal.rb +16 -0
  297. data/lib/arel/nodes/string_join.rb +11 -0
  298. data/lib/arel/nodes/table_alias.rb +27 -0
  299. data/lib/arel/nodes/terminal.rb +16 -0
  300. data/lib/arel/nodes/true.rb +16 -0
  301. data/lib/arel/nodes/unary.rb +45 -0
  302. data/lib/arel/nodes/unary_operation.rb +20 -0
  303. data/lib/arel/nodes/unqualified_column.rb +22 -0
  304. data/lib/arel/nodes/update_statement.rb +41 -0
  305. data/lib/arel/nodes/values_list.rb +9 -0
  306. data/lib/arel/nodes/window.rb +126 -0
  307. data/lib/arel/nodes/with.rb +11 -0
  308. data/lib/arel/nodes.rb +68 -0
  309. data/lib/arel/order_predications.rb +13 -0
  310. data/lib/arel/predications.rb +256 -0
  311. data/lib/arel/select_manager.rb +271 -0
  312. data/lib/arel/table.rb +110 -0
  313. data/lib/arel/tree_manager.rb +72 -0
  314. data/lib/arel/update_manager.rb +34 -0
  315. data/lib/arel/visitors/depth_first.rb +203 -0
  316. data/lib/arel/visitors/dot.rb +296 -0
  317. data/lib/arel/visitors/ibm_db.rb +34 -0
  318. data/lib/arel/visitors/informix.rb +62 -0
  319. data/lib/arel/visitors/mssql.rb +156 -0
  320. data/lib/arel/visitors/mysql.rb +83 -0
  321. data/lib/arel/visitors/oracle.rb +158 -0
  322. data/lib/arel/visitors/oracle12.rb +65 -0
  323. data/lib/arel/visitors/postgresql.rb +109 -0
  324. data/lib/arel/visitors/sqlite.rb +38 -0
  325. data/lib/arel/visitors/to_sql.rb +888 -0
  326. data/lib/arel/visitors/visitor.rb +45 -0
  327. data/lib/arel/visitors/where_sql.rb +22 -0
  328. data/lib/arel/visitors.rb +20 -0
  329. data/lib/arel/window_predications.rb +9 -0
  330. data/lib/arel.rb +62 -0
  331. data/lib/rails/generators/active_record/application_record/application_record_generator.rb +26 -0
  332. data/lib/rails/generators/active_record/application_record/templates/application_record.rb.tt +5 -0
  333. data/lib/rails/generators/active_record/migration/migration_generator.rb +42 -37
  334. data/lib/rails/generators/active_record/migration/templates/create_table_migration.rb.tt +24 -0
  335. data/lib/rails/generators/active_record/migration/templates/{migration.rb → migration.rb.tt} +11 -2
  336. data/lib/rails/generators/active_record/migration.rb +30 -1
  337. data/lib/rails/generators/active_record/model/model_generator.rb +18 -22
  338. data/lib/rails/generators/active_record/model/templates/model.rb.tt +22 -0
  339. data/lib/rails/generators/active_record/model/templates/{module.rb → module.rb.tt} +0 -0
  340. data/lib/rails/generators/active_record.rb +7 -5
  341. metadata +168 -59
  342. data/lib/active_record/associations/preloader/belongs_to.rb +0 -17
  343. data/lib/active_record/associations/preloader/collection_association.rb +0 -24
  344. data/lib/active_record/associations/preloader/has_many.rb +0 -17
  345. data/lib/active_record/associations/preloader/has_many_through.rb +0 -19
  346. data/lib/active_record/associations/preloader/has_one.rb +0 -23
  347. data/lib/active_record/associations/preloader/has_one_through.rb +0 -9
  348. data/lib/active_record/associations/preloader/singular_association.rb +0 -21
  349. data/lib/active_record/attribute.rb +0 -163
  350. data/lib/active_record/attribute_set/builder.rb +0 -106
  351. data/lib/active_record/attribute_set.rb +0 -81
  352. data/lib/active_record/connection_adapters/mysql_adapter.rb +0 -498
  353. data/lib/active_record/connection_adapters/postgresql/array_parser.rb +0 -93
  354. data/lib/active_record/connection_adapters/postgresql/oid/float.rb +0 -21
  355. data/lib/active_record/connection_adapters/postgresql/oid/integer.rb +0 -11
  356. data/lib/active_record/connection_adapters/postgresql/oid/json.rb +0 -35
  357. data/lib/active_record/connection_adapters/postgresql/oid/time.rb +0 -11
  358. data/lib/active_record/railties/jdbcmysql_error.rb +0 -16
  359. data/lib/active_record/serializers/xml_serializer.rb +0 -193
  360. data/lib/active_record/type/big_integer.rb +0 -13
  361. data/lib/active_record/type/binary.rb +0 -50
  362. data/lib/active_record/type/boolean.rb +0 -31
  363. data/lib/active_record/type/decimal.rb +0 -64
  364. data/lib/active_record/type/decorator.rb +0 -14
  365. data/lib/active_record/type/float.rb +0 -19
  366. data/lib/active_record/type/integer.rb +0 -59
  367. data/lib/active_record/type/mutable.rb +0 -16
  368. data/lib/active_record/type/numeric.rb +0 -36
  369. data/lib/active_record/type/string.rb +0 -40
  370. data/lib/active_record/type/time_value.rb +0 -38
  371. data/lib/active_record/type/value.rb +0 -110
  372. data/lib/rails/generators/active_record/migration/templates/create_table_migration.rb +0 -19
  373. data/lib/rails/generators/active_record/model/templates/model.rb +0 -10
@@ -1,5 +1,6 @@
1
- require 'stringio'
2
- require 'active_support/core_ext/big_decimal'
1
+ # frozen_string_literal: true
2
+
3
+ require "stringio"
3
4
 
4
5
  module ActiveRecord
5
6
  # = Active Record Schema Dumper
@@ -12,14 +13,19 @@ module ActiveRecord
12
13
  ##
13
14
  # :singleton-method:
14
15
  # A list of tables which should not be dumped to the schema.
15
- # Acceptable values are strings as well as regexp.
16
- # This setting is only used if ActiveRecord::Base.schema_format == :ruby
17
- cattr_accessor :ignore_tables
18
- @@ignore_tables = []
16
+ # Acceptable values are strings as well as regexp if ActiveRecord::Base.schema_format == :ruby.
17
+ # Only strings are accepted if ActiveRecord::Base.schema_format == :sql.
18
+ cattr_accessor :ignore_tables, default: []
19
+
20
+ ##
21
+ # :singleton-method:
22
+ # Specify a custom regular expression matching foreign keys which name
23
+ # should not be dumped to db/schema.rb.
24
+ cattr_accessor :fk_ignore_pattern, default: /^fk_rails_[0-9a-f]{10}$/
19
25
 
20
26
  class << self
21
- def dump(connection=ActiveRecord::Base.connection, stream=STDOUT, config = ActiveRecord::Base)
22
- new(connection, generate_options(config)).dump(stream)
27
+ def dump(connection = ActiveRecord::Base.connection, stream = STDOUT, config = ActiveRecord::Base)
28
+ connection.create_schema_dumper(generate_options(config)).dump(stream)
23
29
  stream
24
30
  end
25
31
 
@@ -41,31 +47,36 @@ module ActiveRecord
41
47
  end
42
48
 
43
49
  private
50
+ attr_accessor :table_name
44
51
 
45
52
  def initialize(connection, options = {})
46
53
  @connection = connection
47
- @types = @connection.native_database_types
48
- @version = Migrator::current_version rescue nil
54
+ @version = connection.migration_context.current_version rescue nil
49
55
  @options = options
50
56
  end
51
57
 
52
- def header(stream)
53
- define_params = @version ? "version: #{@version}" : ""
58
+ # turns 20170404131909 into "2017_04_04_131909"
59
+ def formatted_version
60
+ stringified = @version.to_s
61
+ return stringified unless stringified.length == 14
62
+ stringified.insert(4, "_").insert(7, "_").insert(10, "_")
63
+ end
54
64
 
55
- if stream.respond_to?(:external_encoding) && stream.external_encoding
56
- stream.puts "# encoding: #{stream.external_encoding.name}"
57
- end
65
+ def define_params
66
+ @version ? "version: #{formatted_version}" : ""
67
+ end
58
68
 
69
+ def header(stream)
59
70
  stream.puts <<HEADER
60
71
  # This file is auto-generated from the current state of the database. Instead
61
72
  # of editing this file, please use the migrations feature of Active Record to
62
73
  # incrementally modify your database, and then regenerate this schema definition.
63
74
  #
64
- # Note that this schema.rb definition is the authoritative source for your
65
- # database schema. If you need to create the application database on another
66
- # system, you should be using db:schema:load, not running all the migrations
67
- # from scratch. The latter is a flawed and unsustainable approach (the more migrations
68
- # you'll amass, the slower it'll run and the greater likelihood for issues).
75
+ # This file is the source Rails uses to define your schema when running `rails
76
+ # db:schema:load`. When creating a new database, `rails db:schema:load` tends to
77
+ # be faster and is potentially less error prone than running all of your
78
+ # migrations from scratch. Old migrations may fail to apply correctly if those
79
+ # migrations use external dependencies or application code.
69
80
  #
70
81
  # It's strongly recommended that you check this file into your version control system.
71
82
 
@@ -78,16 +89,8 @@ HEADER
78
89
  stream.puts "end"
79
90
  end
80
91
 
92
+ # extensions are only supported by PostgreSQL
81
93
  def extensions(stream)
82
- return unless @connection.supports_extensions?
83
- extensions = @connection.extensions
84
- if extensions.any?
85
- stream.puts " # These are extensions that must be enabled in order to support this database"
86
- extensions.each do |extension|
87
- stream.puts " enable_extension #{extension.inspect}"
88
- end
89
- stream.puts
90
- end
91
94
  end
92
95
 
93
96
  def tables(stream)
@@ -108,99 +111,72 @@ HEADER
108
111
  def table(table, stream)
109
112
  columns = @connection.columns(table)
110
113
  begin
114
+ self.table_name = table
115
+
111
116
  tbl = StringIO.new
112
117
 
113
118
  # first dump primary key column
114
119
  pk = @connection.primary_key(table)
115
120
 
116
121
  tbl.print " create_table #{remove_prefix_and_suffix(table).inspect}"
117
- pkcol = columns.detect { |c| c.name == pk }
118
- if pkcol
119
- if pk != 'id'
120
- tbl.print %Q(, primary_key: "#{pk}")
121
- elsif pkcol.sql_type == 'bigint'
122
- tbl.print ", id: :bigserial"
123
- elsif pkcol.sql_type == 'uuid'
124
- tbl.print ", id: :uuid"
125
- tbl.print %Q(, default: #{pkcol.default_function.inspect})
122
+
123
+ case pk
124
+ when String
125
+ tbl.print ", primary_key: #{pk.inspect}" unless pk == "id"
126
+ pkcol = columns.detect { |c| c.name == pk }
127
+ pkcolspec = column_spec_for_primary_key(pkcol)
128
+ if pkcolspec.present?
129
+ tbl.print ", #{format_colspec(pkcolspec)}"
126
130
  end
131
+ when Array
132
+ tbl.print ", primary_key: #{pk.inspect}"
127
133
  else
128
134
  tbl.print ", id: false"
129
135
  end
130
- tbl.print ", force: :cascade"
131
- tbl.puts " do |t|"
136
+
137
+ table_options = @connection.table_options(table)
138
+ if table_options.present?
139
+ tbl.print ", #{format_options(table_options)}"
140
+ end
141
+
142
+ tbl.puts ", force: :cascade do |t|"
132
143
 
133
144
  # then dump all non-primary key columns
134
- column_specs = columns.map do |column|
145
+ columns.each do |column|
135
146
  raise StandardError, "Unknown type '#{column.sql_type}' for column '#{column.name}'" unless @connection.valid_type?(column.type)
136
147
  next if column.name == pk
137
- @connection.column_spec(column, @types)
138
- end.compact
139
-
140
- # find all migration keys used in this table
141
- keys = @connection.migration_keys
142
-
143
- # figure out the lengths for each column based on above keys
144
- lengths = keys.map { |key|
145
- column_specs.map { |spec|
146
- spec[key] ? spec[key].length + 2 : 0
147
- }.max
148
- }
149
-
150
- # the string we're going to sprintf our values against, with standardized column widths
151
- format_string = lengths.map{ |len| "%-#{len}s" }
152
-
153
- # find the max length for the 'type' column, which is special
154
- type_length = column_specs.map{ |column| column[:type].length }.max
155
-
156
- # add column type definition to our format string
157
- format_string.unshift " t.%-#{type_length}s "
158
-
159
- format_string *= ''
160
-
161
- column_specs.each do |colspec|
162
- values = keys.zip(lengths).map{ |key, len| colspec.key?(key) ? colspec[key] + ", " : " " * len }
163
- values.unshift colspec[:type]
164
- tbl.print((format_string % values).gsub(/,\s*$/, ''))
148
+ type, colspec = column_spec(column)
149
+ if type.is_a?(Symbol)
150
+ tbl.print " t.#{type} #{column.name.inspect}"
151
+ else
152
+ tbl.print " t.column #{column.name.inspect}, #{type.inspect}"
153
+ end
154
+ tbl.print ", #{format_colspec(colspec)}" if colspec.present?
165
155
  tbl.puts
166
156
  end
167
157
 
158
+ indexes_in_create(table, tbl)
159
+
168
160
  tbl.puts " end"
169
161
  tbl.puts
170
162
 
171
- indexes(table, tbl)
172
-
173
163
  tbl.rewind
174
164
  stream.print tbl.read
175
165
  rescue => e
176
166
  stream.puts "# Could not dump table #{table.inspect} because of following #{e.class}"
177
167
  stream.puts "# #{e.message}"
178
168
  stream.puts
169
+ ensure
170
+ self.table_name = nil
179
171
  end
180
-
181
- stream
182
172
  end
183
173
 
174
+ # Keep it for indexing materialized views
184
175
  def indexes(table, stream)
185
176
  if (indexes = @connection.indexes(table)).any?
186
177
  add_index_statements = indexes.map do |index|
187
- statement_parts = [
188
- "add_index #{remove_prefix_and_suffix(index.table).inspect}",
189
- index.columns.inspect,
190
- "name: #{index.name.inspect}",
191
- ]
192
- statement_parts << 'unique: true' if index.unique
193
-
194
- index_lengths = (index.lengths || []).compact
195
- statement_parts << "length: #{Hash[index.columns.zip(index.lengths)].inspect}" if index_lengths.any?
196
-
197
- index_orders = index.orders || {}
198
- statement_parts << "order: #{index.orders.inspect}" if index_orders.any?
199
- statement_parts << "where: #{index.where.inspect}" if index.where
200
- statement_parts << "using: #{index.using.inspect}" if index.using
201
- statement_parts << "type: #{index.type.inspect}" if index.type
202
-
203
- " #{statement_parts.join(', ')}"
178
+ table_name = remove_prefix_and_suffix(index.table).inspect
179
+ " add_index #{([table_name] + index_parts(index)).join(', ')}"
204
180
  end
205
181
 
206
182
  stream.puts add_index_statements.sort.join("\n")
@@ -208,6 +184,31 @@ HEADER
208
184
  end
209
185
  end
210
186
 
187
+ def indexes_in_create(table, stream)
188
+ if (indexes = @connection.indexes(table)).any?
189
+ index_statements = indexes.map do |index|
190
+ " t.index #{index_parts(index).join(', ')}"
191
+ end
192
+ stream.puts index_statements.sort.join("\n")
193
+ end
194
+ end
195
+
196
+ def index_parts(index)
197
+ index_parts = [
198
+ index.columns.inspect,
199
+ "name: #{index.name.inspect}",
200
+ ]
201
+ index_parts << "unique: true" if index.unique
202
+ index_parts << "length: #{format_index_parts(index.lengths)}" if index.lengths.present?
203
+ index_parts << "order: #{format_index_parts(index.orders)}" if index.orders.present?
204
+ index_parts << "opclass: #{format_index_parts(index.opclasses)}" if index.opclasses.present?
205
+ index_parts << "where: #{index.where.inspect}" if index.where
206
+ index_parts << "using: #{index.using.inspect}" if !@connection.default_index_type?(index)
207
+ index_parts << "type: #{index.type.inspect}" if index.type
208
+ index_parts << "comment: #{index.comment.inspect}" if index.comment
209
+ index_parts
210
+ end
211
+
211
212
  def foreign_keys(table, stream)
212
213
  if (foreign_keys = @connection.foreign_keys(table)).any?
213
214
  add_foreign_key_statements = foreign_keys.map do |foreign_key|
@@ -224,7 +225,7 @@ HEADER
224
225
  parts << "primary_key: #{foreign_key.primary_key.inspect}"
225
226
  end
226
227
 
227
- if foreign_key.name !~ /^fk_rails_[0-9a-f]{10}$/
228
+ if foreign_key.export_name_on_schema_dump?
228
229
  parts << "name: #{foreign_key.name.inspect}"
229
230
  end
230
231
 
@@ -238,12 +239,30 @@ HEADER
238
239
  end
239
240
  end
240
241
 
242
+ def format_colspec(colspec)
243
+ colspec.map { |key, value| "#{key}: #{value}" }.join(", ")
244
+ end
245
+
246
+ def format_options(options)
247
+ options.map { |key, value| "#{key}: #{value.inspect}" }.join(", ")
248
+ end
249
+
250
+ def format_index_parts(options)
251
+ if options.is_a?(Hash)
252
+ "{ #{format_options(options)} }"
253
+ else
254
+ options.inspect
255
+ end
256
+ end
257
+
241
258
  def remove_prefix_and_suffix(table)
242
- table.gsub(/^(#{@options[:table_name_prefix]})(.+)(#{@options[:table_name_suffix]})$/, "\\2")
259
+ prefix = Regexp.escape(@options[:table_name_prefix].to_s)
260
+ suffix = Regexp.escape(@options[:table_name_suffix].to_s)
261
+ table.sub(/\A#{prefix}(.+)#{suffix}\z/, "\\1")
243
262
  end
244
263
 
245
264
  def ignored?(table_name)
246
- ['schema_migrations', ignore_tables].flatten.any? do |ignored|
265
+ [ActiveRecord::Base.schema_migrations_table_name, ActiveRecord::Base.internal_metadata_table_name, ignore_tables].flatten.any? do |ignored|
247
266
  ignored === remove_prefix_and_suffix(table_name)
248
267
  end
249
268
  end
@@ -1,40 +1,43 @@
1
- require 'active_record/scoping/default'
2
- require 'active_record/scoping/named'
3
- require 'active_record/base'
1
+ # frozen_string_literal: true
2
+
3
+ require "active_record/scoping/default"
4
+ require "active_record/scoping/named"
4
5
 
5
6
  module ActiveRecord
6
- class SchemaMigration < ActiveRecord::Base
7
+ # This class is used to create a table that keeps track of which migrations
8
+ # have been applied to a given database. When a migration is run, its schema
9
+ # number is inserted in to the `SchemaMigration.table_name` so it doesn't need
10
+ # to be executed the next time.
11
+ class SchemaMigration < ActiveRecord::Base # :nodoc:
7
12
  class << self
8
- def primary_key
9
- nil
13
+ def _internal?
14
+ true
10
15
  end
11
16
 
12
- def table_name
13
- "#{table_name_prefix}#{ActiveRecord::Base.schema_migrations_table_name}#{table_name_suffix}"
17
+ def primary_key
18
+ "version"
14
19
  end
15
20
 
16
- def index_name
17
- "#{table_name_prefix}unique_#{ActiveRecord::Base.schema_migrations_table_name}#{table_name_suffix}"
21
+ def table_name
22
+ "#{table_name_prefix}#{schema_migrations_table_name}#{table_name_suffix}"
18
23
  end
19
24
 
20
25
  def table_exists?
21
26
  connection.table_exists?(table_name)
22
27
  end
23
28
 
24
- def create_table(limit=nil)
29
+ def create_table
25
30
  unless table_exists?
26
- version_options = {null: false}
27
- version_options[:limit] = limit if limit
31
+ version_options = connection.internal_string_options_for_primary_key
28
32
 
29
33
  connection.create_table(table_name, id: false) do |t|
30
- t.column :version, :string, version_options
34
+ t.string :version, **version_options
31
35
  end
32
- connection.add_index table_name, :version, unique: true, name: index_name
33
36
  end
34
37
  end
35
38
 
36
39
  def drop_table
37
- connection.drop_table table_name if table_exists?
40
+ connection.drop_table table_name, if_exists: true
38
41
  end
39
42
 
40
43
  def normalize_migration_number(number)
@@ -42,7 +45,11 @@ module ActiveRecord
42
45
  end
43
46
 
44
47
  def normalized_versions
45
- pluck(:version).map { |v| normalize_migration_number v }
48
+ all_versions.map { |v| normalize_migration_number v }
49
+ end
50
+
51
+ def all_versions
52
+ order(:version).pluck(:version)
46
53
  end
47
54
  end
48
55
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ActiveRecord
2
4
  module Scoping
3
5
  module Default
@@ -5,9 +7,8 @@ module ActiveRecord
5
7
 
6
8
  included do
7
9
  # Stores the default scope for the class.
8
- class_attribute :default_scopes, instance_writer: false, instance_predicate: false
9
-
10
- self.default_scopes = []
10
+ class_attribute :default_scopes, instance_writer: false, instance_predicate: false, default: []
11
+ class_attribute :default_scope_override, instance_writer: false, instance_predicate: false, default: nil
11
12
  end
12
13
 
13
14
  module ClassMethods
@@ -15,7 +16,7 @@ module ActiveRecord
15
16
  #
16
17
  # class Post < ActiveRecord::Base
17
18
  # def self.default_scope
18
- # where published: true
19
+ # where(published: true)
19
20
  # end
20
21
  # end
21
22
  #
@@ -33,102 +34,116 @@ module ActiveRecord
33
34
  block_given? ? relation.scoping { yield } : relation
34
35
  end
35
36
 
37
+ # Are there attributes associated with this scope?
38
+ def scope_attributes? # :nodoc:
39
+ super || default_scopes.any? || respond_to?(:default_scope)
40
+ end
41
+
36
42
  def before_remove_const #:nodoc:
37
43
  self.current_scope = nil
38
44
  end
39
45
 
40
- protected
46
+ private
47
+ # Use this macro in your model to set a default scope for all operations on
48
+ # the model.
49
+ #
50
+ # class Article < ActiveRecord::Base
51
+ # default_scope { where(published: true) }
52
+ # end
53
+ #
54
+ # Article.all # => SELECT * FROM articles WHERE published = true
55
+ #
56
+ # The #default_scope is also applied while creating/building a record.
57
+ # It is not applied while updating a record.
58
+ #
59
+ # Article.new.published # => true
60
+ # Article.create.published # => true
61
+ #
62
+ # (You can also pass any object which responds to +call+ to the
63
+ # +default_scope+ macro, and it will be called when building the
64
+ # default scope.)
65
+ #
66
+ # If you use multiple #default_scope declarations in your model then
67
+ # they will be merged together:
68
+ #
69
+ # class Article < ActiveRecord::Base
70
+ # default_scope { where(published: true) }
71
+ # default_scope { where(rating: 'G') }
72
+ # end
73
+ #
74
+ # Article.all # => SELECT * FROM articles WHERE published = true AND rating = 'G'
75
+ #
76
+ # This is also the case with inheritance and module includes where the
77
+ # parent or module defines a #default_scope and the child or including
78
+ # class defines a second one.
79
+ #
80
+ # If you need to do more complex things with a default scope, you can
81
+ # alternatively define it as a class method:
82
+ #
83
+ # class Article < ActiveRecord::Base
84
+ # def self.default_scope
85
+ # # Should return a scope, you can call 'super' here etc.
86
+ # end
87
+ # end
88
+ def default_scope(scope = nil, &block) # :doc:
89
+ scope = block if block_given?
41
90
 
42
- # Use this macro in your model to set a default scope for all operations on
43
- # the model.
44
- #
45
- # class Article < ActiveRecord::Base
46
- # default_scope { where(published: true) }
47
- # end
48
- #
49
- # Article.all # => SELECT * FROM articles WHERE published = true
50
- #
51
- # The +default_scope+ is also applied while creating/building a record.
52
- # It is not applied while updating a record.
53
- #
54
- # Article.new.published # => true
55
- # Article.create.published # => true
56
- #
57
- # (You can also pass any object which responds to +call+ to the
58
- # +default_scope+ macro, and it will be called when building the
59
- # default scope.)
60
- #
61
- # If you use multiple +default_scope+ declarations in your model then
62
- # they will be merged together:
63
- #
64
- # class Article < ActiveRecord::Base
65
- # default_scope { where(published: true) }
66
- # default_scope { where(rating: 'G') }
67
- # end
68
- #
69
- # Article.all # => SELECT * FROM articles WHERE published = true AND rating = 'G'
70
- #
71
- # This is also the case with inheritance and module includes where the
72
- # parent or module defines a +default_scope+ and the child or including
73
- # class defines a second one.
74
- #
75
- # If you need to do more complex things with a default scope, you can
76
- # alternatively define it as a class method:
77
- #
78
- # class Article < ActiveRecord::Base
79
- # def self.default_scope
80
- # # Should return a scope, you can call 'super' here etc.
81
- # end
82
- # end
83
- def default_scope(scope = nil)
84
- scope = Proc.new if block_given?
91
+ if scope.is_a?(Relation) || !scope.respond_to?(:call)
92
+ raise ArgumentError,
93
+ "Support for calling #default_scope without a block is removed. For example instead " \
94
+ "of `default_scope where(color: 'red')`, please use " \
95
+ "`default_scope { where(color: 'red') }`. (Alternatively you can just redefine " \
96
+ "self.default_scope.)"
97
+ end
85
98
 
86
- if scope.is_a?(Relation) || !scope.respond_to?(:call)
87
- raise ArgumentError,
88
- "Support for calling #default_scope without a block is removed. For example instead " \
89
- "of `default_scope where(color: 'red')`, please use " \
90
- "`default_scope { where(color: 'red') }`. (Alternatively you can just redefine " \
91
- "self.default_scope.)"
99
+ self.default_scopes += [scope]
92
100
  end
93
101
 
94
- self.default_scopes += [scope]
95
- end
102
+ def build_default_scope(relation = relation())
103
+ return if abstract_class?
104
+
105
+ if default_scope_override.nil?
106
+ self.default_scope_override = !Base.is_a?(method(:default_scope).owner)
107
+ end
96
108
 
97
- def build_default_scope(base_rel = relation) # :nodoc:
98
- return if abstract_class?
99
- if !Base.is_a?(method(:default_scope).owner)
100
- # The user has defined their own default scope method, so call that
101
- evaluate_default_scope { default_scope }
102
- elsif default_scopes.any?
103
- evaluate_default_scope do
104
- default_scopes.inject(base_rel) do |default_scope, scope|
105
- default_scope.merge(base_rel.scoping { scope.call })
109
+ if default_scope_override
110
+ # The user has defined their own default scope method, so call that
111
+ evaluate_default_scope do
112
+ if scope = default_scope
113
+ relation.merge!(scope)
114
+ end
115
+ end
116
+ elsif default_scopes.any?
117
+ evaluate_default_scope do
118
+ default_scopes.inject(relation) do |default_scope, scope|
119
+ scope = scope.respond_to?(:to_proc) ? scope : scope.method(:call)
120
+ default_scope.instance_exec(&scope) || default_scope
121
+ end
106
122
  end
107
123
  end
108
124
  end
109
- end
110
125
 
111
- def ignore_default_scope? # :nodoc:
112
- ScopeRegistry.value_for(:ignore_default_scope, self)
113
- end
126
+ def ignore_default_scope?
127
+ ScopeRegistry.value_for(:ignore_default_scope, base_class)
128
+ end
114
129
 
115
- def ignore_default_scope=(ignore) # :nodoc:
116
- ScopeRegistry.set_value_for(:ignore_default_scope, self, ignore)
117
- end
130
+ def ignore_default_scope=(ignore)
131
+ ScopeRegistry.set_value_for(:ignore_default_scope, base_class, ignore)
132
+ end
118
133
 
119
- # The ignore_default_scope flag is used to prevent an infinite recursion
120
- # situation where a default scope references a scope which has a default
121
- # scope which references a scope...
122
- def evaluate_default_scope # :nodoc:
123
- return if ignore_default_scope?
134
+ # The ignore_default_scope flag is used to prevent an infinite recursion
135
+ # situation where a default scope references a scope which has a default
136
+ # scope which references a scope...
137
+ def evaluate_default_scope
138
+ return if ignore_default_scope?
124
139
 
125
- begin
126
- self.ignore_default_scope = true
127
- yield
128
- ensure
129
- self.ignore_default_scope = false
140
+ begin
141
+ self.ignore_default_scope = true
142
+ yield
143
+ ensure
144
+ self.ignore_default_scope = false
145
+ end
130
146
  end
131
- end
132
147
  end
133
148
  end
134
149
  end