activerecord 4.2.0 → 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.

Files changed (372) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +612 -971
  3. data/MIT-LICENSE +4 -2
  4. data/README.rdoc +13 -12
  5. data/examples/performance.rb +33 -32
  6. data/examples/simple.rb +5 -4
  7. data/lib/active_record/aggregations.rb +267 -248
  8. data/lib/active_record/association_relation.rb +24 -6
  9. data/lib/active_record/associations/alias_tracker.rb +29 -35
  10. data/lib/active_record/associations/association.rb +135 -56
  11. data/lib/active_record/associations/association_scope.rb +103 -131
  12. data/lib/active_record/associations/belongs_to_association.rb +67 -54
  13. data/lib/active_record/associations/belongs_to_polymorphic_association.rb +8 -12
  14. data/lib/active_record/associations/builder/association.rb +27 -40
  15. data/lib/active_record/associations/builder/belongs_to.rb +69 -55
  16. data/lib/active_record/associations/builder/collection_association.rb +10 -29
  17. data/lib/active_record/associations/builder/has_and_belongs_to_many.rb +60 -70
  18. data/lib/active_record/associations/builder/has_many.rb +8 -4
  19. data/lib/active_record/associations/builder/has_one.rb +46 -5
  20. data/lib/active_record/associations/builder/singular_association.rb +16 -10
  21. data/lib/active_record/associations/collection_association.rb +138 -274
  22. data/lib/active_record/associations/collection_proxy.rb +252 -151
  23. data/lib/active_record/associations/foreign_association.rb +20 -0
  24. data/lib/active_record/associations/has_many_association.rb +35 -83
  25. data/lib/active_record/associations/has_many_through_association.rb +62 -80
  26. data/lib/active_record/associations/has_one_association.rb +62 -49
  27. data/lib/active_record/associations/has_one_through_association.rb +20 -11
  28. data/lib/active_record/associations/join_dependency/join_association.rb +38 -80
  29. data/lib/active_record/associations/join_dependency/join_base.rb +10 -9
  30. data/lib/active_record/associations/join_dependency/join_part.rb +14 -14
  31. data/lib/active_record/associations/join_dependency.rb +138 -162
  32. data/lib/active_record/associations/preloader/association.rb +90 -119
  33. data/lib/active_record/associations/preloader/through_association.rb +85 -65
  34. data/lib/active_record/associations/preloader.rb +92 -94
  35. data/lib/active_record/associations/singular_association.rb +18 -45
  36. data/lib/active_record/associations/through_association.rb +48 -23
  37. data/lib/active_record/associations.rb +1737 -1596
  38. data/lib/active_record/attribute_assignment.rb +56 -183
  39. data/lib/active_record/attribute_decorators.rb +39 -15
  40. data/lib/active_record/attribute_methods/before_type_cast.rb +15 -5
  41. data/lib/active_record/attribute_methods/dirty.rb +174 -134
  42. data/lib/active_record/attribute_methods/primary_key.rb +91 -83
  43. data/lib/active_record/attribute_methods/query.rb +6 -5
  44. data/lib/active_record/attribute_methods/read.rb +20 -76
  45. data/lib/active_record/attribute_methods/serialization.rb +40 -20
  46. data/lib/active_record/attribute_methods/time_zone_conversion.rb +62 -36
  47. data/lib/active_record/attribute_methods/write.rb +33 -55
  48. data/lib/active_record/attribute_methods.rb +124 -143
  49. data/lib/active_record/attributes.rb +214 -74
  50. data/lib/active_record/autosave_association.rb +115 -46
  51. data/lib/active_record/base.rb +60 -49
  52. data/lib/active_record/callbacks.rb +100 -74
  53. data/lib/active_record/coders/json.rb +3 -1
  54. data/lib/active_record/coders/yaml_column.rb +24 -12
  55. data/lib/active_record/connection_adapters/abstract/connection_pool.rb +796 -290
  56. data/lib/active_record/connection_adapters/abstract/database_limits.rb +26 -8
  57. data/lib/active_record/connection_adapters/abstract/database_statements.rb +247 -108
  58. data/lib/active_record/connection_adapters/abstract/query_cache.rb +82 -23
  59. data/lib/active_record/connection_adapters/abstract/quoting.rb +171 -53
  60. data/lib/active_record/connection_adapters/abstract/savepoints.rb +6 -4
  61. data/lib/active_record/connection_adapters/abstract/schema_creation.rb +74 -46
  62. data/lib/active_record/connection_adapters/abstract/schema_definitions.rb +366 -227
  63. data/lib/active_record/connection_adapters/abstract/schema_dumper.rb +79 -36
  64. data/lib/active_record/connection_adapters/abstract/schema_statements.rb +706 -222
  65. data/lib/active_record/connection_adapters/abstract/transaction.rb +191 -87
  66. data/lib/active_record/connection_adapters/abstract_adapter.rb +468 -194
  67. data/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +535 -597
  68. data/lib/active_record/connection_adapters/column.rb +56 -43
  69. data/lib/active_record/connection_adapters/connection_specification.rb +174 -152
  70. data/lib/active_record/connection_adapters/determine_if_preparable_visitor.rb +29 -0
  71. data/lib/active_record/connection_adapters/mysql/column.rb +27 -0
  72. data/lib/active_record/connection_adapters/mysql/database_statements.rb +200 -0
  73. data/lib/active_record/connection_adapters/mysql/explain_pretty_printer.rb +72 -0
  74. data/lib/active_record/connection_adapters/mysql/quoting.rb +81 -0
  75. data/lib/active_record/connection_adapters/mysql/schema_creation.rb +72 -0
  76. data/lib/active_record/connection_adapters/mysql/schema_definitions.rb +95 -0
  77. data/lib/active_record/connection_adapters/mysql/schema_dumper.rb +88 -0
  78. data/lib/active_record/connection_adapters/mysql/schema_statements.rb +264 -0
  79. data/lib/active_record/connection_adapters/mysql/type_metadata.rb +31 -0
  80. data/lib/active_record/connection_adapters/mysql2_adapter.rb +59 -195
  81. data/lib/active_record/connection_adapters/postgresql/column.rb +21 -11
  82. data/lib/active_record/connection_adapters/postgresql/database_statements.rb +65 -115
  83. data/lib/active_record/connection_adapters/postgresql/explain_pretty_printer.rb +44 -0
  84. data/lib/active_record/connection_adapters/postgresql/oid/array.rb +50 -57
  85. data/lib/active_record/connection_adapters/postgresql/oid/bit.rb +9 -8
  86. data/lib/active_record/connection_adapters/postgresql/oid/bit_varying.rb +2 -0
  87. data/lib/active_record/connection_adapters/postgresql/oid/bytea.rb +5 -2
  88. data/lib/active_record/connection_adapters/postgresql/oid/cidr.rb +5 -1
  89. data/lib/active_record/connection_adapters/postgresql/oid/date.rb +13 -1
  90. data/lib/active_record/connection_adapters/postgresql/oid/date_time.rb +9 -13
  91. data/lib/active_record/connection_adapters/postgresql/oid/decimal.rb +3 -1
  92. data/lib/active_record/connection_adapters/postgresql/oid/enum.rb +7 -3
  93. data/lib/active_record/connection_adapters/postgresql/oid/hstore.rb +31 -19
  94. data/lib/active_record/connection_adapters/postgresql/oid/inet.rb +2 -0
  95. data/lib/active_record/connection_adapters/postgresql/oid/jsonb.rb +3 -11
  96. data/lib/active_record/connection_adapters/postgresql/oid/legacy_point.rb +45 -0
  97. data/lib/active_record/connection_adapters/postgresql/oid/money.rb +7 -9
  98. data/lib/active_record/connection_adapters/postgresql/oid/{integer.rb → oid.rb} +6 -2
  99. data/lib/active_record/connection_adapters/postgresql/oid/point.rb +33 -11
  100. data/lib/active_record/connection_adapters/postgresql/oid/range.rb +52 -34
  101. data/lib/active_record/connection_adapters/postgresql/oid/specialized_string.rb +4 -1
  102. data/lib/active_record/connection_adapters/postgresql/oid/type_map_initializer.rb +67 -51
  103. data/lib/active_record/connection_adapters/postgresql/oid/uuid.rb +10 -5
  104. data/lib/active_record/connection_adapters/postgresql/oid/vector.rb +3 -1
  105. data/lib/active_record/connection_adapters/postgresql/oid/xml.rb +3 -1
  106. data/lib/active_record/connection_adapters/postgresql/oid.rb +23 -25
  107. data/lib/active_record/connection_adapters/postgresql/quoting.rb +144 -47
  108. data/lib/active_record/connection_adapters/postgresql/referential_integrity.rb +27 -14
  109. data/lib/active_record/connection_adapters/postgresql/schema_creation.rb +76 -0
  110. data/lib/active_record/connection_adapters/postgresql/schema_definitions.rb +178 -108
  111. data/lib/active_record/connection_adapters/postgresql/schema_dumper.rb +50 -0
  112. data/lib/active_record/connection_adapters/postgresql/schema_statements.rb +474 -286
  113. data/lib/active_record/connection_adapters/postgresql/type_metadata.rb +36 -0
  114. data/lib/active_record/connection_adapters/postgresql/utils.rb +12 -8
  115. data/lib/active_record/connection_adapters/postgresql_adapter.rb +558 -363
  116. data/lib/active_record/connection_adapters/schema_cache.rb +72 -25
  117. data/lib/active_record/connection_adapters/sql_type_metadata.rb +37 -0
  118. data/lib/active_record/connection_adapters/sqlite3/database_statements.rb +118 -0
  119. data/lib/active_record/connection_adapters/sqlite3/explain_pretty_printer.rb +21 -0
  120. data/lib/active_record/connection_adapters/sqlite3/quoting.rb +103 -0
  121. data/lib/active_record/connection_adapters/sqlite3/schema_creation.rb +17 -0
  122. data/lib/active_record/connection_adapters/sqlite3/schema_definitions.rb +19 -0
  123. data/lib/active_record/connection_adapters/sqlite3/schema_dumper.rb +18 -0
  124. data/lib/active_record/connection_adapters/sqlite3/schema_statements.rb +137 -0
  125. data/lib/active_record/connection_adapters/sqlite3_adapter.rb +288 -359
  126. data/lib/active_record/connection_adapters/statement_pool.rb +34 -13
  127. data/lib/active_record/connection_handling.rb +176 -41
  128. data/lib/active_record/core.rb +266 -233
  129. data/lib/active_record/counter_cache.rb +68 -50
  130. data/lib/active_record/database_configurations/database_config.rb +37 -0
  131. data/lib/active_record/database_configurations/hash_config.rb +50 -0
  132. data/lib/active_record/database_configurations/url_config.rb +79 -0
  133. data/lib/active_record/database_configurations.rb +233 -0
  134. data/lib/active_record/define_callbacks.rb +22 -0
  135. data/lib/active_record/dynamic_matchers.rb +87 -105
  136. data/lib/active_record/enum.rb +164 -88
  137. data/lib/active_record/errors.rb +189 -53
  138. data/lib/active_record/explain.rb +23 -11
  139. data/lib/active_record/explain_registry.rb +4 -2
  140. data/lib/active_record/explain_subscriber.rb +11 -6
  141. data/lib/active_record/fixture_set/file.rb +35 -9
  142. data/lib/active_record/fixture_set/model_metadata.rb +33 -0
  143. data/lib/active_record/fixture_set/render_context.rb +17 -0
  144. data/lib/active_record/fixture_set/table_row.rb +153 -0
  145. data/lib/active_record/fixture_set/table_rows.rb +47 -0
  146. data/lib/active_record/fixtures.rb +226 -495
  147. data/lib/active_record/gem_version.rb +4 -2
  148. data/lib/active_record/inheritance.rb +158 -112
  149. data/lib/active_record/insert_all.rb +179 -0
  150. data/lib/active_record/integration.rb +123 -29
  151. data/lib/active_record/internal_metadata.rb +53 -0
  152. data/lib/active_record/legacy_yaml_adapter.rb +48 -0
  153. data/lib/active_record/locale/en.yml +3 -2
  154. data/lib/active_record/locking/optimistic.rb +91 -98
  155. data/lib/active_record/locking/pessimistic.rb +18 -6
  156. data/lib/active_record/log_subscriber.rb +76 -33
  157. data/lib/active_record/middleware/database_selector/resolver/session.rb +45 -0
  158. data/lib/active_record/middleware/database_selector/resolver.rb +92 -0
  159. data/lib/active_record/middleware/database_selector.rb +75 -0
  160. data/lib/active_record/migration/command_recorder.rb +177 -90
  161. data/lib/active_record/migration/compatibility.rb +244 -0
  162. data/lib/active_record/migration/join_table.rb +8 -6
  163. data/lib/active_record/migration.rb +634 -288
  164. data/lib/active_record/model_schema.rb +314 -112
  165. data/lib/active_record/nested_attributes.rb +266 -214
  166. data/lib/active_record/no_touching.rb +15 -2
  167. data/lib/active_record/null_relation.rb +24 -37
  168. data/lib/active_record/persistence.rb +559 -124
  169. data/lib/active_record/query_cache.rb +19 -23
  170. data/lib/active_record/querying.rb +43 -29
  171. data/lib/active_record/railtie.rb +148 -47
  172. data/lib/active_record/railties/collection_cache_association_loading.rb +34 -0
  173. data/lib/active_record/railties/console_sandbox.rb +2 -0
  174. data/lib/active_record/railties/controller_runtime.rb +34 -33
  175. data/lib/active_record/railties/databases.rake +338 -202
  176. data/lib/active_record/readonly_attributes.rb +5 -4
  177. data/lib/active_record/reflection.rb +460 -299
  178. data/lib/active_record/relation/batches/batch_enumerator.rb +69 -0
  179. data/lib/active_record/relation/batches.rb +207 -55
  180. data/lib/active_record/relation/calculations.rb +269 -248
  181. data/lib/active_record/relation/delegation.rb +70 -80
  182. data/lib/active_record/relation/finder_methods.rb +279 -255
  183. data/lib/active_record/relation/from_clause.rb +26 -0
  184. data/lib/active_record/relation/merger.rb +83 -69
  185. data/lib/active_record/relation/predicate_builder/array_handler.rb +27 -25
  186. data/lib/active_record/relation/predicate_builder/association_query_value.rb +43 -0
  187. data/lib/active_record/relation/predicate_builder/base_handler.rb +18 -0
  188. data/lib/active_record/relation/predicate_builder/basic_object_handler.rb +19 -0
  189. data/lib/active_record/relation/predicate_builder/polymorphic_array_value.rb +53 -0
  190. data/lib/active_record/relation/predicate_builder/range_handler.rb +22 -0
  191. data/lib/active_record/relation/predicate_builder/relation_handler.rb +7 -1
  192. data/lib/active_record/relation/predicate_builder.rb +116 -92
  193. data/lib/active_record/relation/query_attribute.rb +50 -0
  194. data/lib/active_record/relation/query_methods.rb +574 -391
  195. data/lib/active_record/relation/record_fetch_warning.rb +51 -0
  196. data/lib/active_record/relation/spawn_methods.rb +18 -16
  197. data/lib/active_record/relation/where_clause.rb +190 -0
  198. data/lib/active_record/relation/where_clause_factory.rb +33 -0
  199. data/lib/active_record/relation.rb +518 -340
  200. data/lib/active_record/result.rb +79 -42
  201. data/lib/active_record/runtime_registry.rb +6 -4
  202. data/lib/active_record/sanitization.rb +144 -121
  203. data/lib/active_record/schema.rb +21 -24
  204. data/lib/active_record/schema_dumper.rb +112 -93
  205. data/lib/active_record/schema_migration.rb +24 -20
  206. data/lib/active_record/scoping/default.rb +101 -84
  207. data/lib/active_record/scoping/named.rb +86 -33
  208. data/lib/active_record/scoping.rb +45 -26
  209. data/lib/active_record/secure_token.rb +40 -0
  210. data/lib/active_record/serialization.rb +5 -5
  211. data/lib/active_record/statement_cache.rb +73 -36
  212. data/lib/active_record/store.rb +127 -42
  213. data/lib/active_record/suppressor.rb +61 -0
  214. data/lib/active_record/table_metadata.rb +75 -0
  215. data/lib/active_record/tasks/database_tasks.rb +309 -99
  216. data/lib/active_record/tasks/mysql_database_tasks.rb +58 -88
  217. data/lib/active_record/tasks/postgresql_database_tasks.rb +82 -31
  218. data/lib/active_record/tasks/sqlite_database_tasks.rb +38 -16
  219. data/lib/active_record/test_databases.rb +23 -0
  220. data/lib/active_record/test_fixtures.rb +224 -0
  221. data/lib/active_record/timestamp.rb +86 -40
  222. data/lib/active_record/touch_later.rb +66 -0
  223. data/lib/active_record/transactions.rb +215 -139
  224. data/lib/active_record/translation.rb +3 -1
  225. data/lib/active_record/type/adapter_specific_registry.rb +129 -0
  226. data/lib/active_record/type/date.rb +4 -41
  227. data/lib/active_record/type/date_time.rb +4 -38
  228. data/lib/active_record/type/decimal_without_scale.rb +6 -2
  229. data/lib/active_record/type/hash_lookup_type_map.rb +13 -5
  230. data/lib/active_record/type/internal/timezone.rb +17 -0
  231. data/lib/active_record/type/json.rb +30 -0
  232. data/lib/active_record/type/serialized.rb +30 -15
  233. data/lib/active_record/type/text.rb +2 -2
  234. data/lib/active_record/type/time.rb +11 -16
  235. data/lib/active_record/type/type_map.rb +15 -17
  236. data/lib/active_record/type/unsigned_integer.rb +9 -7
  237. data/lib/active_record/type.rb +78 -23
  238. data/lib/active_record/type_caster/connection.rb +34 -0
  239. data/lib/active_record/type_caster/map.rb +20 -0
  240. data/lib/active_record/type_caster.rb +9 -0
  241. data/lib/active_record/validations/absence.rb +25 -0
  242. data/lib/active_record/validations/associated.rb +13 -4
  243. data/lib/active_record/validations/length.rb +26 -0
  244. data/lib/active_record/validations/presence.rb +14 -13
  245. data/lib/active_record/validations/uniqueness.rb +43 -46
  246. data/lib/active_record/validations.rb +39 -35
  247. data/lib/active_record/version.rb +3 -1
  248. data/lib/active_record.rb +43 -21
  249. data/lib/arel/alias_predication.rb +9 -0
  250. data/lib/arel/attributes/attribute.rb +37 -0
  251. data/lib/arel/attributes.rb +22 -0
  252. data/lib/arel/collectors/bind.rb +24 -0
  253. data/lib/arel/collectors/composite.rb +31 -0
  254. data/lib/arel/collectors/plain_string.rb +20 -0
  255. data/lib/arel/collectors/sql_string.rb +20 -0
  256. data/lib/arel/collectors/substitute_binds.rb +28 -0
  257. data/lib/arel/crud.rb +42 -0
  258. data/lib/arel/delete_manager.rb +18 -0
  259. data/lib/arel/errors.rb +9 -0
  260. data/lib/arel/expressions.rb +29 -0
  261. data/lib/arel/factory_methods.rb +49 -0
  262. data/lib/arel/insert_manager.rb +49 -0
  263. data/lib/arel/math.rb +45 -0
  264. data/lib/arel/nodes/and.rb +32 -0
  265. data/lib/arel/nodes/ascending.rb +23 -0
  266. data/lib/arel/nodes/binary.rb +52 -0
  267. data/lib/arel/nodes/bind_param.rb +36 -0
  268. data/lib/arel/nodes/case.rb +55 -0
  269. data/lib/arel/nodes/casted.rb +50 -0
  270. data/lib/arel/nodes/comment.rb +29 -0
  271. data/lib/arel/nodes/count.rb +12 -0
  272. data/lib/arel/nodes/delete_statement.rb +45 -0
  273. data/lib/arel/nodes/descending.rb +23 -0
  274. data/lib/arel/nodes/equality.rb +18 -0
  275. data/lib/arel/nodes/extract.rb +24 -0
  276. data/lib/arel/nodes/false.rb +16 -0
  277. data/lib/arel/nodes/full_outer_join.rb +8 -0
  278. data/lib/arel/nodes/function.rb +44 -0
  279. data/lib/arel/nodes/grouping.rb +8 -0
  280. data/lib/arel/nodes/in.rb +8 -0
  281. data/lib/arel/nodes/infix_operation.rb +80 -0
  282. data/lib/arel/nodes/inner_join.rb +8 -0
  283. data/lib/arel/nodes/insert_statement.rb +37 -0
  284. data/lib/arel/nodes/join_source.rb +20 -0
  285. data/lib/arel/nodes/matches.rb +18 -0
  286. data/lib/arel/nodes/named_function.rb +23 -0
  287. data/lib/arel/nodes/node.rb +50 -0
  288. data/lib/arel/nodes/node_expression.rb +13 -0
  289. data/lib/arel/nodes/outer_join.rb +8 -0
  290. data/lib/arel/nodes/over.rb +15 -0
  291. data/lib/arel/nodes/regexp.rb +16 -0
  292. data/lib/arel/nodes/right_outer_join.rb +8 -0
  293. data/lib/arel/nodes/select_core.rb +67 -0
  294. data/lib/arel/nodes/select_statement.rb +41 -0
  295. data/lib/arel/nodes/sql_literal.rb +16 -0
  296. data/lib/arel/nodes/string_join.rb +11 -0
  297. data/lib/arel/nodes/table_alias.rb +27 -0
  298. data/lib/arel/nodes/terminal.rb +16 -0
  299. data/lib/arel/nodes/true.rb +16 -0
  300. data/lib/arel/nodes/unary.rb +45 -0
  301. data/lib/arel/nodes/unary_operation.rb +20 -0
  302. data/lib/arel/nodes/unqualified_column.rb +22 -0
  303. data/lib/arel/nodes/update_statement.rb +41 -0
  304. data/lib/arel/nodes/values_list.rb +9 -0
  305. data/lib/arel/nodes/window.rb +126 -0
  306. data/lib/arel/nodes/with.rb +11 -0
  307. data/lib/arel/nodes.rb +68 -0
  308. data/lib/arel/order_predications.rb +13 -0
  309. data/lib/arel/predications.rb +257 -0
  310. data/lib/arel/select_manager.rb +271 -0
  311. data/lib/arel/table.rb +110 -0
  312. data/lib/arel/tree_manager.rb +72 -0
  313. data/lib/arel/update_manager.rb +34 -0
  314. data/lib/arel/visitors/depth_first.rb +204 -0
  315. data/lib/arel/visitors/dot.rb +297 -0
  316. data/lib/arel/visitors/ibm_db.rb +34 -0
  317. data/lib/arel/visitors/informix.rb +62 -0
  318. data/lib/arel/visitors/mssql.rb +157 -0
  319. data/lib/arel/visitors/mysql.rb +83 -0
  320. data/lib/arel/visitors/oracle.rb +159 -0
  321. data/lib/arel/visitors/oracle12.rb +66 -0
  322. data/lib/arel/visitors/postgresql.rb +110 -0
  323. data/lib/arel/visitors/sqlite.rb +39 -0
  324. data/lib/arel/visitors/to_sql.rb +889 -0
  325. data/lib/arel/visitors/visitor.rb +46 -0
  326. data/lib/arel/visitors/where_sql.rb +23 -0
  327. data/lib/arel/visitors.rb +20 -0
  328. data/lib/arel/window_predications.rb +9 -0
  329. data/lib/arel.rb +51 -0
  330. data/lib/rails/generators/active_record/application_record/application_record_generator.rb +27 -0
  331. data/lib/rails/generators/active_record/application_record/templates/application_record.rb.tt +5 -0
  332. data/lib/rails/generators/active_record/migration/migration_generator.rb +42 -37
  333. data/lib/rails/generators/active_record/migration/templates/create_table_migration.rb.tt +24 -0
  334. data/lib/rails/generators/active_record/migration/templates/{migration.rb → migration.rb.tt} +11 -8
  335. data/lib/rails/generators/active_record/migration.rb +31 -1
  336. data/lib/rails/generators/active_record/model/model_generator.rb +19 -22
  337. data/lib/rails/generators/active_record/model/templates/model.rb.tt +22 -0
  338. data/lib/rails/generators/active_record.rb +7 -5
  339. metadata +166 -60
  340. data/lib/active_record/associations/preloader/belongs_to.rb +0 -17
  341. data/lib/active_record/associations/preloader/collection_association.rb +0 -24
  342. data/lib/active_record/associations/preloader/has_many.rb +0 -17
  343. data/lib/active_record/associations/preloader/has_many_through.rb +0 -19
  344. data/lib/active_record/associations/preloader/has_one.rb +0 -23
  345. data/lib/active_record/associations/preloader/has_one_through.rb +0 -9
  346. data/lib/active_record/associations/preloader/singular_association.rb +0 -21
  347. data/lib/active_record/attribute.rb +0 -149
  348. data/lib/active_record/attribute_set/builder.rb +0 -86
  349. data/lib/active_record/attribute_set.rb +0 -77
  350. data/lib/active_record/connection_adapters/mysql_adapter.rb +0 -491
  351. data/lib/active_record/connection_adapters/postgresql/array_parser.rb +0 -93
  352. data/lib/active_record/connection_adapters/postgresql/oid/float.rb +0 -21
  353. data/lib/active_record/connection_adapters/postgresql/oid/infinity.rb +0 -13
  354. data/lib/active_record/connection_adapters/postgresql/oid/json.rb +0 -35
  355. data/lib/active_record/connection_adapters/postgresql/oid/time.rb +0 -11
  356. data/lib/active_record/railties/jdbcmysql_error.rb +0 -16
  357. data/lib/active_record/serializers/xml_serializer.rb +0 -193
  358. data/lib/active_record/type/big_integer.rb +0 -13
  359. data/lib/active_record/type/binary.rb +0 -50
  360. data/lib/active_record/type/boolean.rb +0 -30
  361. data/lib/active_record/type/decimal.rb +0 -40
  362. data/lib/active_record/type/decorator.rb +0 -14
  363. data/lib/active_record/type/float.rb +0 -19
  364. data/lib/active_record/type/integer.rb +0 -55
  365. data/lib/active_record/type/mutable.rb +0 -16
  366. data/lib/active_record/type/numeric.rb +0 -36
  367. data/lib/active_record/type/string.rb +0 -36
  368. data/lib/active_record/type/time_value.rb +0 -38
  369. data/lib/active_record/type/value.rb +0 -101
  370. data/lib/rails/generators/active_record/migration/templates/create_table_migration.rb +0 -22
  371. data/lib/rails/generators/active_record/model/templates/model.rb +0 -10
  372. /data/lib/rails/generators/active_record/model/templates/{module.rb → module.rb.tt} +0 -0
@@ -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}") if pkcol.default_function
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,43 +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
- if table_exists?
38
- connection.remove_index table_name, name: index_name
39
- connection.drop_table(table_name)
40
- end
40
+ connection.drop_table table_name, if_exists: true
41
41
  end
42
42
 
43
43
  def normalize_migration_number(number)
@@ -45,7 +45,11 @@ module ActiveRecord
45
45
  end
46
46
 
47
47
  def normalized_versions
48
- 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)
49
53
  end
50
54
  end
51
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,101 +34,117 @@ 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
41
47
 
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?
85
-
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.)"
48
+ # Use this macro in your model to set a default scope for all operations on
49
+ # the model.
50
+ #
51
+ # class Article < ActiveRecord::Base
52
+ # default_scope { where(published: true) }
53
+ # end
54
+ #
55
+ # Article.all # => SELECT * FROM articles WHERE published = true
56
+ #
57
+ # The #default_scope is also applied while creating/building a record.
58
+ # It is not applied while updating a record.
59
+ #
60
+ # Article.new.published # => true
61
+ # Article.create.published # => true
62
+ #
63
+ # (You can also pass any object which responds to +call+ to the
64
+ # +default_scope+ macro, and it will be called when building the
65
+ # default scope.)
66
+ #
67
+ # If you use multiple #default_scope declarations in your model then
68
+ # they will be merged together:
69
+ #
70
+ # class Article < ActiveRecord::Base
71
+ # default_scope { where(published: true) }
72
+ # default_scope { where(rating: 'G') }
73
+ # end
74
+ #
75
+ # Article.all # => SELECT * FROM articles WHERE published = true AND rating = 'G'
76
+ #
77
+ # This is also the case with inheritance and module includes where the
78
+ # parent or module defines a #default_scope and the child or including
79
+ # class defines a second one.
80
+ #
81
+ # If you need to do more complex things with a default scope, you can
82
+ # alternatively define it as a class method:
83
+ #
84
+ # class Article < ActiveRecord::Base
85
+ # def self.default_scope
86
+ # # Should return a scope, you can call 'super' here etc.
87
+ # end
88
+ # end
89
+ def default_scope(scope = nil, &block) # :doc:
90
+ scope = block if block_given?
91
+
92
+ if scope.is_a?(Relation) || !scope.respond_to?(:call)
93
+ raise ArgumentError,
94
+ "Support for calling #default_scope without a block is removed. For example instead " \
95
+ "of `default_scope where(color: 'red')`, please use " \
96
+ "`default_scope { where(color: 'red') }`. (Alternatively you can just redefine " \
97
+ "self.default_scope.)"
98
+ end
99
+
100
+ self.default_scopes += [scope]
92
101
  end
93
102
 
94
- self.default_scopes += [scope]
95
- end
103
+ def build_default_scope(relation = relation())
104
+ return if abstract_class?
105
+
106
+ if default_scope_override.nil?
107
+ self.default_scope_override = !Base.is_a?(method(:default_scope).owner)
108
+ end
96
109
 
97
- def build_default_scope(base_rel = relation) # :nodoc:
98
- if !Base.is_a?(method(:default_scope).owner)
99
- # The user has defined their own default scope method, so call that
100
- evaluate_default_scope { default_scope }
101
- elsif default_scopes.any?
102
- evaluate_default_scope do
103
- default_scopes.inject(base_rel) do |default_scope, scope|
104
- default_scope.merge(base_rel.scoping { scope.call })
110
+ if default_scope_override
111
+ # The user has defined their own default scope method, so call that
112
+ evaluate_default_scope do
113
+ if scope = default_scope
114
+ relation.merge!(scope)
115
+ end
116
+ end
117
+ elsif default_scopes.any?
118
+ evaluate_default_scope do
119
+ default_scopes.inject(relation) do |default_scope, scope|
120
+ scope = scope.respond_to?(:to_proc) ? scope : scope.method(:call)
121
+ default_scope.instance_exec(&scope) || default_scope
122
+ end
105
123
  end
106
124
  end
107
125
  end
108
- end
109
126
 
110
- def ignore_default_scope? # :nodoc:
111
- ScopeRegistry.value_for(:ignore_default_scope, self)
112
- end
127
+ def ignore_default_scope?
128
+ ScopeRegistry.value_for(:ignore_default_scope, base_class)
129
+ end
113
130
 
114
- def ignore_default_scope=(ignore) # :nodoc:
115
- ScopeRegistry.set_value_for(:ignore_default_scope, self, ignore)
116
- end
131
+ def ignore_default_scope=(ignore)
132
+ ScopeRegistry.set_value_for(:ignore_default_scope, base_class, ignore)
133
+ end
134
+
135
+ # The ignore_default_scope flag is used to prevent an infinite recursion
136
+ # situation where a default scope references a scope which has a default
137
+ # scope which references a scope...
138
+ def evaluate_default_scope
139
+ return if ignore_default_scope?
117
140
 
118
- # The ignore_default_scope flag is used to prevent an infinite recursion
119
- # situation where a default scope references a scope which has a default
120
- # scope which references a scope...
121
- def evaluate_default_scope # :nodoc:
122
- return if ignore_default_scope?
123
-
124
- begin
125
- self.ignore_default_scope = true
126
- yield
127
- ensure
128
- self.ignore_default_scope = false
141
+ begin
142
+ self.ignore_default_scope = true
143
+ yield
144
+ ensure
145
+ self.ignore_default_scope = false
146
+ end
129
147
  end
130
- end
131
148
  end
132
149
  end
133
150
  end