mongoid 6.4.8 → 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (320) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/Rakefile +0 -26
  4. data/lib/config/locales/en.yml +17 -0
  5. data/lib/mongoid/association/accessors.rb +339 -0
  6. data/lib/mongoid/{relations/binding.rb → association/bindable.rb} +32 -52
  7. data/lib/mongoid/association/builders.rb +92 -0
  8. data/lib/mongoid/{relations/constraint.rb → association/constrainable.rb} +11 -22
  9. data/lib/mongoid/association/depending.rb +116 -0
  10. data/lib/mongoid/{relations/eager.rb → association/eager_loadable.rb} +11 -11
  11. data/lib/mongoid/{relations → association}/embedded/batchable.rb +21 -21
  12. data/lib/mongoid/association/embedded/cyclic.rb +109 -0
  13. data/lib/mongoid/association/embedded/embedded_in/binding.rb +56 -0
  14. data/lib/mongoid/{relations/builders/embedded/in.rb → association/embedded/embedded_in/buildable.rb} +12 -6
  15. data/lib/mongoid/association/embedded/embedded_in/proxy.rb +121 -0
  16. data/lib/mongoid/association/embedded/embedded_in.rb +154 -0
  17. data/lib/mongoid/{relations/bindings/embedded/many.rb → association/embedded/embeds_many/binding.rb} +11 -9
  18. data/lib/mongoid/{relations/builders/embedded/many.rb → association/embedded/embeds_many/buildable.rb} +13 -7
  19. data/lib/mongoid/association/embedded/embeds_many/proxy.rb +529 -0
  20. data/lib/mongoid/association/embedded/embeds_many.rb +210 -0
  21. data/lib/mongoid/{relations/bindings/embedded/one.rb → association/embedded/embeds_one/binding.rb} +12 -10
  22. data/lib/mongoid/{relations/builders/embedded/one.rb → association/embedded/embeds_one/buildable.rb} +13 -7
  23. data/lib/mongoid/association/embedded/embeds_one/proxy.rb +130 -0
  24. data/lib/mongoid/association/embedded/embeds_one.rb +173 -0
  25. data/lib/mongoid/association/embedded.rb +4 -0
  26. data/lib/mongoid/association/macros.rb +204 -0
  27. data/lib/mongoid/{relations → association}/many.rb +20 -50
  28. data/lib/mongoid/{relations → association}/marshalable.rb +6 -4
  29. data/lib/mongoid/association/nested/many.rb +200 -0
  30. data/lib/mongoid/association/nested/nested_buildable.rb +72 -0
  31. data/lib/mongoid/association/nested/one.rb +127 -0
  32. data/lib/mongoid/association/nested.rb +15 -0
  33. data/lib/mongoid/{relations → association}/one.rb +6 -6
  34. data/lib/mongoid/association/options.rb +152 -0
  35. data/lib/mongoid/{relations → association}/proxy.rb +31 -58
  36. data/lib/mongoid/association/referenced/auto_save.rb +79 -0
  37. data/lib/mongoid/association/referenced/belongs_to/binding.rb +87 -0
  38. data/lib/mongoid/association/referenced/belongs_to/buildable.rb +46 -0
  39. data/lib/mongoid/association/referenced/belongs_to/eager.rb +36 -0
  40. data/lib/mongoid/association/referenced/belongs_to/proxy.rb +136 -0
  41. data/lib/mongoid/association/referenced/belongs_to.rb +248 -0
  42. data/lib/mongoid/association/referenced/counter_cache.rb +163 -0
  43. data/lib/mongoid/association/referenced/eager.rb +159 -0
  44. data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +71 -0
  45. data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +40 -0
  46. data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +52 -0
  47. data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +310 -0
  48. data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +290 -0
  49. data/lib/mongoid/{relations/bindings/referenced/many.rb → association/referenced/has_many/binding.rb} +6 -5
  50. data/lib/mongoid/association/referenced/has_many/buildable.rb +38 -0
  51. data/lib/mongoid/association/referenced/has_many/eager.rb +43 -0
  52. data/lib/mongoid/association/referenced/has_many/enumerable.rb +510 -0
  53. data/lib/mongoid/association/referenced/has_many/proxy.rb +578 -0
  54. data/lib/mongoid/association/referenced/has_many.rb +275 -0
  55. data/lib/mongoid/{relations/bindings/referenced/one.rb → association/referenced/has_one/binding.rb} +11 -8
  56. data/lib/mongoid/association/referenced/has_one/buildable.rb +60 -0
  57. data/lib/mongoid/association/referenced/has_one/eager.rb +35 -0
  58. data/lib/mongoid/{relations/builders/nested_attributes/one.rb → association/referenced/has_one/nested_builder.rb} +9 -9
  59. data/lib/mongoid/association/referenced/has_one/proxy.rb +113 -0
  60. data/lib/mongoid/association/referenced/has_one.rb +204 -0
  61. data/lib/mongoid/association/referenced/syncable.rb +170 -0
  62. data/lib/mongoid/association/referenced.rb +7 -0
  63. data/lib/mongoid/{relations → association}/reflections.rb +21 -17
  64. data/lib/mongoid/association/relatable.rb +415 -0
  65. data/lib/mongoid/association/touchable.rb +97 -0
  66. data/lib/mongoid/association.rb +150 -0
  67. data/lib/mongoid/atomic/paths/embedded/many.rb +1 -1
  68. data/lib/mongoid/atomic/paths/embedded/one.rb +1 -1
  69. data/lib/mongoid/atomic.rb +4 -4
  70. data/lib/mongoid/attributes/dynamic.rb +2 -2
  71. data/lib/mongoid/attributes/nested.rb +10 -10
  72. data/lib/mongoid/attributes/processing.rb +2 -2
  73. data/lib/mongoid/attributes/readonly.rb +2 -4
  74. data/lib/mongoid/attributes.rb +22 -13
  75. data/lib/mongoid/changeable.rb +1 -1
  76. data/lib/mongoid/clients/options.rb +1 -1
  77. data/lib/mongoid/clients/sessions.rb +2 -2
  78. data/lib/mongoid/composable.rb +4 -4
  79. data/lib/mongoid/config.rb +1 -0
  80. data/lib/mongoid/contextual/aggregable/mongo.rb +1 -1
  81. data/lib/mongoid/contextual/atomic.rb +1 -1
  82. data/lib/mongoid/contextual/geo_near.rb +1 -1
  83. data/lib/mongoid/contextual/map_reduce.rb +4 -4
  84. data/lib/mongoid/contextual/memory.rb +25 -7
  85. data/lib/mongoid/contextual/mongo.rb +13 -11
  86. data/lib/mongoid/copyable.rb +6 -6
  87. data/lib/mongoid/criteria/includable.rb +14 -14
  88. data/lib/mongoid/criteria/modifiable.rb +8 -14
  89. data/lib/mongoid/criteria/queryable/extensions/string.rb +1 -1
  90. data/lib/mongoid/criteria/queryable/pipeline.rb +10 -5
  91. data/lib/mongoid/criteria/queryable/selectable.rb +10 -34
  92. data/lib/mongoid/criteria.rb +2 -2
  93. data/lib/mongoid/document.rb +6 -6
  94. data/lib/mongoid/errors/invalid_dependent_strategy.rb +32 -0
  95. data/lib/mongoid/errors/invalid_relation_option.rb +29 -0
  96. data/lib/mongoid/errors/unknown_model.rb +25 -0
  97. data/lib/mongoid/errors.rb +3 -0
  98. data/lib/mongoid/extensions/array.rb +5 -5
  99. data/lib/mongoid/extensions/big_decimal.rb +1 -1
  100. data/lib/mongoid/extensions/hash.rb +5 -2
  101. data/lib/mongoid/extensions/object.rb +4 -4
  102. data/lib/mongoid/extensions/range.rb +1 -0
  103. data/lib/mongoid/extensions/regexp.rb +0 -1
  104. data/lib/mongoid/extensions/string.rb +1 -3
  105. data/lib/mongoid/extensions.rb +0 -4
  106. data/lib/mongoid/factory.rb +13 -3
  107. data/lib/mongoid/fields/foreign_key.rb +5 -5
  108. data/lib/mongoid/fields/standard.rb +2 -14
  109. data/lib/mongoid/fields/validators/macro.rb +1 -1
  110. data/lib/mongoid/fields.rb +3 -3
  111. data/lib/mongoid/indexable.rb +8 -5
  112. data/lib/mongoid/interceptable.rb +5 -5
  113. data/lib/mongoid/matchable/and.rb +1 -1
  114. data/lib/mongoid/matchable/elem_match.rb +9 -3
  115. data/lib/mongoid/matchable.rb +0 -3
  116. data/lib/mongoid/persistable/creatable.rb +2 -2
  117. data/lib/mongoid/persistable/deletable.rb +9 -8
  118. data/lib/mongoid/persistable/incrementable.rb +1 -1
  119. data/lib/mongoid/persistable/logical.rb +1 -1
  120. data/lib/mongoid/persistable/settable.rb +5 -5
  121. data/lib/mongoid/persistable/updatable.rb +2 -2
  122. data/lib/mongoid/persistable/upsertable.rb +1 -1
  123. data/lib/mongoid/persistable.rb +5 -6
  124. data/lib/mongoid/persistence_context.rb +1 -5
  125. data/lib/mongoid/query_cache.rb +19 -64
  126. data/lib/mongoid/railtie.rb +0 -17
  127. data/lib/mongoid/reloadable.rb +1 -1
  128. data/lib/mongoid/scopable.rb +3 -3
  129. data/lib/mongoid/serializable.rb +4 -4
  130. data/lib/mongoid/shardable.rb +1 -1
  131. data/lib/mongoid/tasks/database.rb +2 -2
  132. data/lib/mongoid/threaded.rb +0 -36
  133. data/lib/mongoid/traversable.rb +3 -3
  134. data/lib/mongoid/validatable/presence.rb +2 -2
  135. data/lib/mongoid/validatable/uniqueness.rb +4 -4
  136. data/lib/mongoid/validatable.rb +8 -8
  137. data/lib/mongoid/version.rb +1 -1
  138. data/lib/mongoid.rb +1 -1
  139. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +3 -0
  140. data/spec/app/models/animal.rb +2 -1
  141. data/spec/app/models/bomb.rb +1 -1
  142. data/spec/app/models/message.rb +1 -1
  143. data/spec/app/models/person.rb +5 -2
  144. data/spec/app/models/shipment_address.rb +1 -0
  145. data/spec/app/models/vertex.rb +6 -0
  146. data/spec/app/models/wiki_page.rb +1 -1
  147. data/spec/config/mongoid.yml +1 -0
  148. data/spec/mongoid/{relations → association}/accessors_spec.rb +1 -1
  149. data/spec/mongoid/{relations → association}/auto_save_spec.rb +60 -12
  150. data/spec/mongoid/{relations → association}/builders_spec.rb +1 -1
  151. data/spec/mongoid/association/constrainable_spec.rb +115 -0
  152. data/spec/mongoid/{relations → association}/counter_cache_spec.rb +1 -1
  153. data/spec/mongoid/association/depending_spec.rb +613 -0
  154. data/spec/mongoid/{relations → association}/eager_spec.rb +12 -12
  155. data/spec/mongoid/{relations → association/embedded}/cyclic_spec.rb +1 -1
  156. data/spec/mongoid/{relations/bindings/embedded/in_spec.rb → association/embedded/embedded_in/binding_spec.rb} +13 -13
  157. data/spec/mongoid/{relations/builders/embedded/in_spec.rb → association/embedded/embedded_in/buildable_spec.rb} +9 -9
  158. data/spec/mongoid/{relations/embedded/in_spec.rb → association/embedded/embedded_in/proxy_spec.rb} +5 -77
  159. data/spec/mongoid/association/embedded/embedded_in_spec.rb +843 -0
  160. data/spec/mongoid/{relations/bindings/embedded/many_spec.rb → association/embedded/embeds_many/binding_spec.rb} +3 -3
  161. data/spec/mongoid/{relations/builders/embedded/many_spec.rb → association/embedded/embeds_many/buildable_spec.rb} +17 -45
  162. data/spec/mongoid/{relations/embedded/many_spec.rb → association/embedded/embeds_many/proxy_spec.rb} +140 -428
  163. data/spec/mongoid/association/embedded/embeds_many_spec.rb +852 -0
  164. data/spec/mongoid/{relations/bindings/embedded/one_spec.rb → association/embedded/embeds_one/binding_spec.rb} +4 -4
  165. data/spec/mongoid/{relations/builders/embedded/one_spec.rb → association/embedded/embeds_one/buildable_spec.rb} +14 -34
  166. data/spec/mongoid/{relations/embedded/one_spec.rb → association/embedded/embeds_one/proxy_spec.rb} +39 -84
  167. data/spec/mongoid/association/embedded/embeds_one_spec.rb +908 -0
  168. data/spec/mongoid/{relations → association}/macros_spec.rb +148 -73
  169. data/spec/mongoid/{relations/builders/nested_attributes → association/nested}/many_spec.rb +16 -19
  170. data/spec/mongoid/{relations/builders/nested_attributes → association/nested}/one_spec.rb +17 -20
  171. data/spec/mongoid/association/options_spec.rb +1321 -0
  172. data/spec/mongoid/{relations → association}/polymorphic_spec.rb +7 -34
  173. data/spec/mongoid/{relations/bindings/referenced/in_spec.rb → association/referenced/belongs_to/binding_spec.rb} +7 -7
  174. data/spec/mongoid/{relations/builders/referenced/in_spec.rb → association/referenced/belongs_to/buildable_spec.rb} +46 -79
  175. data/spec/mongoid/{relations/eager/belongs_to_spec.rb → association/referenced/belongs_to/eager_spec.rb} +9 -9
  176. data/spec/mongoid/{relations/referenced/in_spec.rb → association/referenced/belongs_to/proxy_spec.rb} +57 -91
  177. data/spec/mongoid/association/referenced/belongs_to_spec.rb +1963 -0
  178. data/spec/mongoid/{relations/bindings/referenced/many_to_many_spec.rb → association/referenced/has_and_belongs_to_many/binding_spec.rb} +5 -5
  179. data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +121 -0
  180. data/spec/mongoid/{relations/eager/has_and_belongs_to_many_spec.rb → association/referenced/has_and_belongs_to_many/eager_spec.rb} +5 -5
  181. data/spec/mongoid/{relations/referenced/many_to_many_spec.rb → association/referenced/has_and_belongs_to_many/proxy_spec.rb} +107 -98
  182. data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +1027 -0
  183. data/spec/mongoid/{relations/bindings/referenced/many_spec.rb → association/referenced/has_many/binding_spec.rb} +5 -5
  184. data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +119 -0
  185. data/spec/mongoid/{relations/eager/has_many_spec.rb → association/referenced/has_many/eager_spec.rb} +26 -11
  186. data/spec/mongoid/{relations/targets → association/referenced/has_many}/enumerable_spec.rb +122 -1
  187. data/spec/mongoid/{relations/referenced/many_spec.rb → association/referenced/has_many/proxy_spec.rb} +28 -93
  188. data/spec/mongoid/association/referenced/has_many_spec.rb +1225 -0
  189. data/spec/mongoid/{relations/bindings/referenced/one_spec.rb → association/referenced/has_one/binding_spec.rb} +4 -4
  190. data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +113 -0
  191. data/spec/mongoid/{relations/eager/has_one_spec.rb → association/referenced/has_one/eager_spec.rb} +10 -10
  192. data/spec/mongoid/{relations/referenced/one_spec.rb → association/referenced/has_one/proxy_spec.rb} +9 -109
  193. data/spec/mongoid/association/referenced/has_one_spec.rb +1244 -0
  194. data/spec/mongoid/{relations → association}/reflections_spec.rb +1 -12
  195. data/spec/mongoid/{relations/synchronization_spec.rb → association/syncable_spec.rb} +4 -2
  196. data/spec/mongoid/{relations → association}/touchable_spec.rb +19 -1
  197. data/spec/mongoid/{relations_spec.rb → association_spec.rb} +1 -1
  198. data/spec/mongoid/atomic/modifiers_spec.rb +2 -2
  199. data/spec/mongoid/atomic_spec.rb +4 -4
  200. data/spec/mongoid/attributes/nested_spec.rb +14 -12
  201. data/spec/mongoid/attributes/readonly_spec.rb +80 -125
  202. data/spec/mongoid/attributes_spec.rb +38 -2
  203. data/spec/mongoid/clients/factory_spec.rb +28 -52
  204. data/spec/mongoid/clients/options_spec.rb +65 -69
  205. data/spec/mongoid/clients/sessions_spec.rb +4 -13
  206. data/spec/mongoid/config_spec.rb +24 -0
  207. data/spec/mongoid/contextual/geo_near_spec.rb +0 -1
  208. data/spec/mongoid/contextual/memory_spec.rb +19 -0
  209. data/spec/mongoid/contextual/mongo_spec.rb +30 -5
  210. data/spec/mongoid/copyable_spec.rb +34 -0
  211. data/spec/mongoid/criteria/modifiable_spec.rb +183 -60
  212. data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +3 -3
  213. data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +43 -0
  214. data/spec/mongoid/criteria/queryable/pipeline_spec.rb +12 -0
  215. data/spec/mongoid/criteria/queryable/selectable_spec.rb +3 -42
  216. data/spec/mongoid/criteria/queryable/selector_spec.rb +2 -2
  217. data/spec/mongoid/criteria/scopable_spec.rb +0 -81
  218. data/spec/mongoid/criteria_spec.rb +16 -19
  219. data/spec/mongoid/document_spec.rb +2 -56
  220. data/spec/mongoid/extensions/array_spec.rb +11 -15
  221. data/spec/mongoid/extensions/big_decimal_spec.rb +9 -9
  222. data/spec/mongoid/extensions/hash_spec.rb +18 -1
  223. data/spec/mongoid/extensions/object_spec.rb +7 -11
  224. data/spec/mongoid/extensions/range_spec.rb +7 -0
  225. data/spec/mongoid/extensions/regexp_spec.rb +0 -23
  226. data/spec/mongoid/extensions/string_spec.rb +7 -35
  227. data/spec/mongoid/factory_spec.rb +19 -1
  228. data/spec/mongoid/fields/foreign_key_spec.rb +24 -32
  229. data/spec/mongoid/fields_spec.rb +2 -2
  230. data/spec/mongoid/findable_spec.rb +1 -1
  231. data/spec/mongoid/indexable_spec.rb +18 -8
  232. data/spec/mongoid/interceptable_spec.rb +22 -1
  233. data/spec/mongoid/matchable/elem_match_spec.rb +20 -0
  234. data/spec/mongoid/matchable_spec.rb +1 -26
  235. data/spec/mongoid/persistable/incrementable_spec.rb +6 -6
  236. data/spec/mongoid/persistable/savable_spec.rb +2 -2
  237. data/spec/mongoid/persistable/settable_spec.rb +1 -35
  238. data/spec/mongoid/persistable_spec.rb +21 -6
  239. data/spec/mongoid/query_cache_spec.rb +16 -99
  240. data/spec/mongoid/relations/proxy_spec.rb +124 -124
  241. data/spec/mongoid/scopable_spec.rb +0 -13
  242. data/spec/mongoid/shardable_spec.rb +32 -12
  243. data/spec/mongoid/threaded_spec.rb +0 -68
  244. data/spec/mongoid/validatable/associated_spec.rb +1 -1
  245. data/spec/mongoid/validatable/presence_spec.rb +7 -6
  246. data/spec/mongoid/validatable_spec.rb +1 -1
  247. data/spec/spec_helper.rb +12 -14
  248. data.tar.gz.sig +1 -1
  249. metadata +192 -207
  250. metadata.gz.sig +0 -0
  251. data/lib/mongoid/matchable/nor.rb +0 -37
  252. data/lib/mongoid/railties/controller_runtime.rb +0 -86
  253. data/lib/mongoid/relations/accessors.rb +0 -267
  254. data/lib/mongoid/relations/auto_save.rb +0 -94
  255. data/lib/mongoid/relations/bindings/embedded/in.rb +0 -59
  256. data/lib/mongoid/relations/bindings/referenced/in.rb +0 -65
  257. data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +0 -70
  258. data/lib/mongoid/relations/bindings.rb +0 -9
  259. data/lib/mongoid/relations/builder.rb +0 -57
  260. data/lib/mongoid/relations/builders/nested_attributes/many.rb +0 -199
  261. data/lib/mongoid/relations/builders/referenced/in.rb +0 -26
  262. data/lib/mongoid/relations/builders/referenced/many.rb +0 -26
  263. data/lib/mongoid/relations/builders/referenced/many_to_many.rb +0 -39
  264. data/lib/mongoid/relations/builders/referenced/one.rb +0 -26
  265. data/lib/mongoid/relations/builders.rb +0 -106
  266. data/lib/mongoid/relations/cascading/delete.rb +0 -44
  267. data/lib/mongoid/relations/cascading/destroy.rb +0 -43
  268. data/lib/mongoid/relations/cascading/nullify.rb +0 -35
  269. data/lib/mongoid/relations/cascading/restrict.rb +0 -39
  270. data/lib/mongoid/relations/cascading.rb +0 -56
  271. data/lib/mongoid/relations/conversions.rb +0 -34
  272. data/lib/mongoid/relations/counter_cache.rb +0 -160
  273. data/lib/mongoid/relations/cyclic.rb +0 -107
  274. data/lib/mongoid/relations/eager/base.rb +0 -153
  275. data/lib/mongoid/relations/eager/belongs_to.rb +0 -31
  276. data/lib/mongoid/relations/eager/has_and_belongs_to_many.rb +0 -47
  277. data/lib/mongoid/relations/eager/has_many.rb +0 -38
  278. data/lib/mongoid/relations/eager/has_one.rb +0 -30
  279. data/lib/mongoid/relations/embedded/in.rb +0 -241
  280. data/lib/mongoid/relations/embedded/many.rb +0 -683
  281. data/lib/mongoid/relations/embedded/one.rb +0 -235
  282. data/lib/mongoid/relations/macros.rb +0 -367
  283. data/lib/mongoid/relations/metadata.rb +0 -1179
  284. data/lib/mongoid/relations/nested_builder.rb +0 -74
  285. data/lib/mongoid/relations/options.rb +0 -49
  286. data/lib/mongoid/relations/polymorphic.rb +0 -39
  287. data/lib/mongoid/relations/referenced/in.rb +0 -304
  288. data/lib/mongoid/relations/referenced/many.rb +0 -812
  289. data/lib/mongoid/relations/referenced/many_to_many.rb +0 -479
  290. data/lib/mongoid/relations/referenced/one.rb +0 -290
  291. data/lib/mongoid/relations/synchronization.rb +0 -169
  292. data/lib/mongoid/relations/targets/enumerable.rb +0 -493
  293. data/lib/mongoid/relations/targets.rb +0 -2
  294. data/lib/mongoid/relations/touchable.rb +0 -97
  295. data/lib/mongoid/relations.rb +0 -148
  296. data/spec/app/models/array_field.rb +0 -7
  297. data/spec/app/models/delegating_patient.rb +0 -16
  298. data/spec/integration/document_spec.rb +0 -22
  299. data/spec/mongoid/fields/internal/foreign_keys/array_spec.rb +0 -184
  300. data/spec/mongoid/fields/internal/foreign_keys/object_spec.rb +0 -201
  301. data/spec/mongoid/matchable/nor_spec.rb +0 -209
  302. data/spec/mongoid/relations/builders/referenced/many_spec.rb +0 -137
  303. data/spec/mongoid/relations/builders/referenced/many_to_many_spec.rb +0 -178
  304. data/spec/mongoid/relations/builders/referenced/one_spec.rb +0 -111
  305. data/spec/mongoid/relations/cascading/delete_spec.rb +0 -101
  306. data/spec/mongoid/relations/cascading/destroy_spec.rb +0 -47
  307. data/spec/mongoid/relations/cascading/nullify_spec.rb +0 -32
  308. data/spec/mongoid/relations/cascading/restrict_spec.rb +0 -68
  309. data/spec/mongoid/relations/cascading_spec.rb +0 -355
  310. data/spec/mongoid/relations/constraint_spec.rb +0 -75
  311. data/spec/mongoid/relations/conversions_spec.rb +0 -128
  312. data/spec/mongoid/relations/metadata_spec.rb +0 -1985
  313. data/spec/mongoid/relations/options_spec.rb +0 -35
  314. data/spec/rails/controller_extension/controller_runtime_spec.rb +0 -110
  315. data/spec/support/cluster_config.rb +0 -158
  316. data/spec/support/constraints.rb +0 -101
  317. data/spec/support/macros.rb +0 -20
  318. data/spec/support/session_registry.rb +0 -50
  319. data/spec/support/spec_config.rb +0 -42
  320. /data/spec/mongoid/{relations → association}/embedded/dirty_spec.rb +0 -0
@@ -36,7 +36,7 @@ module Mongoid
36
36
  # @since 2.2.0
37
37
  def add_atomic_pull(document)
38
38
  document.flagged_for_destroy = true
39
- (delayed_atomic_pulls[document.metadata_name.to_s] ||= []).push(document)
39
+ (delayed_atomic_pulls[document.association_name.to_s] ||= []).push(document)
40
40
  end
41
41
 
42
42
  # Add an atomic unset for the document.
@@ -51,7 +51,7 @@ module Mongoid
51
51
  # @since 3.0.0
52
52
  def add_atomic_unset(document)
53
53
  document.flagged_for_destroy = true
54
- (delayed_atomic_unsets[document.metadata_name.to_s] ||= []).push(document)
54
+ (delayed_atomic_unsets[document.association_name.to_s] ||= []).push(document)
55
55
  end
56
56
 
57
57
  # Returns path of the attribute for modification
@@ -189,7 +189,7 @@ module Mongoid
189
189
  #
190
190
  # @since 2.1.0
191
191
  def atomic_paths
192
- @atomic_paths ||= __metadata ? __metadata.path(self) : Atomic::Paths::Root.new(self)
192
+ @atomic_paths ||= _association ? _association.path(self) : Atomic::Paths::Root.new(self)
193
193
  end
194
194
 
195
195
  # Get all the attributes that need to be pulled.
@@ -218,7 +218,7 @@ module Mongoid
218
218
  # @example Get the pushes.
219
219
  # person.atomic_pushes
220
220
  #
221
- # @return [ Hash ] The The $push and $each operations.
221
+ # @return [ Hash ] The $push and $each operations.
222
222
  #
223
223
  # @since 2.1.0
224
224
  def atomic_pushes
@@ -41,7 +41,7 @@ module Mongoid
41
41
  class_eval <<-READER, __FILE__, __LINE__ + 1
42
42
  def #{name}
43
43
  attribute_will_change!(#{name.inspect})
44
- read_attribute(#{name.inspect})
44
+ read_raw_attribute(#{name.inspect})
45
45
  end
46
46
  READER
47
47
  end
@@ -147,7 +147,7 @@ module Mongoid
147
147
  getter = attr.reader
148
148
  define_dynamic_reader(getter)
149
149
  attribute_will_change!(attr.reader)
150
- read_attribute(getter)
150
+ read_raw_attribute(getter)
151
151
  end
152
152
  end
153
153
  end
@@ -48,15 +48,15 @@ module Mongoid
48
48
  args.each do |name|
49
49
  meth = "#{name}_attributes="
50
50
  self.nested_attributes["#{name}_attributes"] = meth
51
- metadata = relations[name.to_s]
52
- raise Errors::NestedAttributesMetadataNotFound.new(self, name) unless metadata
53
- autosave_nested_attributes(metadata)
51
+ association = relations[name.to_s]
52
+ raise Errors::NestedAttributesMetadataNotFound.new(self, name) unless association
53
+ autosave_nested_attributes(association)
54
54
  re_define_method(meth) do |attrs|
55
55
  _assigning do
56
- if metadata.polymorphic? and metadata.inverse_type
57
- options = options.merge!(:class_name => self.send(metadata.inverse_type))
56
+ if association.polymorphic? and association.inverse_type
57
+ options = options.merge!(:class_name => self.send(association.inverse_type))
58
58
  end
59
- metadata.nested_builder(attrs, options).build(self)
59
+ association.nested_builder(attrs, options).build(self)
60
60
  end
61
61
  end
62
62
  end
@@ -71,12 +71,12 @@ module Mongoid
71
71
  # @example Add the autosave if appropriate.
72
72
  # Person.autosave_nested_attributes(metadata)
73
73
  #
74
- # @param [ Metadata ] metadata The existing relation metadata.
74
+ # @param [ Association ] association The existing association metadata.
75
75
  #
76
76
  # @since 3.1.4
77
- def autosave_nested_attributes(metadata)
78
- unless metadata.autosave == false
79
- autosave(metadata.merge!(autosave: true))
77
+ def autosave_nested_attributes(association)
78
+ if association.autosave?
79
+ Association::Referenced::AutoSave.define_autosave!(association)
80
80
  end
81
81
  end
82
82
  end
@@ -133,9 +133,9 @@ module Mongoid
133
133
  # @since 2.0.0.rc.7
134
134
  def process_relations
135
135
  pending_relations.each_pair do |name, value|
136
- metadata = relations[name]
136
+ association = relations[name]
137
137
  if value.is_a?(Hash)
138
- metadata.nested_builder(value, {}).build(self)
138
+ association.nested_builder(value, {}).build(self)
139
139
  else
140
140
  send("#{name}=", value)
141
141
  end
@@ -22,17 +22,15 @@ module Mongoid
22
22
  # readonly.
23
23
  #
24
24
  # @since 3.0.0
25
- #
26
- # @deprecated Use #as_writable_attribute! instead.
27
25
  def attribute_writable?(name)
28
- new_record? || !readonly_attributes.include?(database_field_name(name))
26
+ new_record? || (!readonly_attributes.include?(name) && _loaded?(name))
29
27
  end
30
28
 
31
29
  private
32
30
 
33
31
  def as_writable_attribute!(name, value = :nil)
34
32
  normalized_name = database_field_name(name)
35
- if new_record? || (!readonly_attributes.include?(normalized_name) && _loaded?(normalized_name))
33
+ if attribute_writable?(normalized_name)
36
34
  yield(normalized_name)
37
35
  else
38
36
  raise Errors::ReadonlyAttribute.new(name, value)
@@ -29,7 +29,7 @@ module Mongoid
29
29
  #
30
30
  # @since 1.0.0
31
31
  def attribute_present?(name)
32
- attribute = read_attribute(name)
32
+ attribute = read_raw_attribute(name)
33
33
  !attribute.blank? || attribute == false
34
34
  rescue ActiveModel::MissingAttributeError
35
35
  false
@@ -92,21 +92,15 @@ module Mongoid
92
92
  #
93
93
  # @since 1.0.0
94
94
  def read_attribute(name)
95
- normalized = database_field_name(name.to_s)
96
- if attribute_missing?(normalized)
97
- raise ActiveModel::MissingAttributeError, "Missing attribute: '#{name}'."
98
- end
99
- if hash_dot_syntax?(normalized)
100
- attributes.__nested__(normalized)
101
- else
102
- attributes[normalized]
103
- end
95
+ field = fields[name.to_s]
96
+ raw = read_raw_attribute(name)
97
+ field ? field.demongoize(raw) : raw
104
98
  end
105
99
  alias :[] :read_attribute
106
100
 
107
101
  # Read a value from the attributes before type cast. If the value has not
108
102
  # yet been assigned then this will return the attribute's existing value
109
- # using read_attribute.
103
+ # using read_raw_attribute.
110
104
  #
111
105
  # @example Read an attribute before type cast.
112
106
  # person.read_attribute_before_type_cast(:price)
@@ -122,7 +116,7 @@ module Mongoid
122
116
  if attributes_before_type_cast.key?(attr)
123
117
  attributes_before_type_cast[attr]
124
118
  else
125
- read_attribute(attr)
119
+ read_raw_attribute(attr)
126
120
  end
127
121
  end
128
122
 
@@ -163,7 +157,8 @@ module Mongoid
163
157
  #
164
158
  # @since 1.0.0
165
159
  def write_attribute(name, value)
166
- as_writable_attribute!(name) do |access|
160
+ access = database_field_name(name)
161
+ if attribute_writable?(access)
167
162
  _assigning do
168
163
  validate_attribute_value(access, value)
169
164
  localized = fields[access].try(:localized?)
@@ -292,6 +287,20 @@ module Mongoid
292
287
  fields.key?(key) ? fields[key].mongoize(value) : value.mongoize
293
288
  end
294
289
 
290
+ private
291
+
292
+ def read_raw_attribute(name)
293
+ normalized = database_field_name(name.to_s)
294
+ if attribute_missing?(normalized)
295
+ raise ActiveModel::MissingAttributeError, "Missing attribute: '#{name}'."
296
+ end
297
+ if hash_dot_syntax?(normalized)
298
+ attributes.__nested__(normalized)
299
+ else
300
+ attributes[normalized]
301
+ end
302
+ end
303
+
295
304
  module ClassMethods
296
305
 
297
306
  # Alias the provided name to the original field. This will provide an
@@ -227,7 +227,7 @@ module Mongoid
227
227
  # @since 2.3.0
228
228
  def attribute_will_change!(attr)
229
229
  unless changed_attributes.key?(attr)
230
- changed_attributes[attr] = read_attribute(attr).__deep_copy__
230
+ changed_attributes[attr] = read_raw_attribute(attr).__deep_copy__
231
231
  end
232
232
  end
233
233
 
@@ -38,7 +38,7 @@ module Mongoid
38
38
  def mongo_client
39
39
  persistence_context.client
40
40
  end
41
-
41
+
42
42
  def persistence_context
43
43
  PersistenceContext.get(self) ||
44
44
  PersistenceContext.get(self.class) ||
@@ -53,7 +53,7 @@ module Mongoid
53
53
 
54
54
  private
55
55
 
56
- def _session
56
+ def session
57
57
  Threaded.get_session
58
58
  end
59
59
 
@@ -104,7 +104,7 @@ module Mongoid
104
104
 
105
105
  private
106
106
 
107
- def _session
107
+ def session
108
108
  Threaded.get_session
109
109
  end
110
110
  end
@@ -43,7 +43,7 @@ module Mongoid
43
43
  include Inspectable
44
44
  include Matchable
45
45
  include Persistable
46
- include Relations
46
+ include Association
47
47
  include Reloadable
48
48
  include Scopable
49
49
  include Selectable
@@ -70,7 +70,7 @@ module Mongoid
70
70
  Interceptable,
71
71
  Matchable,
72
72
  Persistable,
73
- Relations,
73
+ Association,
74
74
  Reloadable,
75
75
  Scopable,
76
76
  Serializable,
@@ -83,8 +83,8 @@ module Mongoid
83
83
  Traversable,
84
84
  Validatable,
85
85
  Equality,
86
- Relations::Synchronization,
87
- Relations::Macros,
86
+ Association::Referenced::Syncable,
87
+ Association::Macros,
88
88
  ActiveModel::Model,
89
89
  ActiveModel::Validations
90
90
  ]
@@ -27,6 +27,7 @@ module Mongoid
27
27
  option :log_level, default: :info
28
28
  option :belongs_to_required_by_default, default: true
29
29
  option :app_name, default: nil
30
+ option :background_indexing, default: false
30
31
 
31
32
  # Has Mongoid been configured? This is checking that at least a valid
32
33
  # client config exists.
@@ -23,7 +23,7 @@ module Mongoid
23
23
  #
24
24
  # @since 3.0.0
25
25
  def aggregates(field)
26
- result = collection.find.aggregate(pipeline(field), session: _session).to_a
26
+ result = collection.find.aggregate(pipeline(field), session: session).to_a
27
27
  if result.empty?
28
28
  { "count" => 0, "sum" => nil, "avg" => nil, "min" => nil, "max" => nil }
29
29
  else
@@ -118,7 +118,7 @@ module Mongoid
118
118
  # @since 3.0.0
119
119
  def push_all(pushes)
120
120
  push_each_updates = collect_operations(pushes).each.inject({}) do |ops, (field, elements)|
121
- ops.merge!(field => {'$each' => elements})
121
+ ops.merge!(field => { '$each' => elements })
122
122
  end
123
123
  view.update_many("$push" => push_each_updates)
124
124
  end
@@ -242,7 +242,7 @@ module Mongoid
242
242
  # @since 3.0.0
243
243
  def documents
244
244
  results["results"].map do |attributes|
245
- doc = Factory.from_db(criteria.klass, attributes["obj"], criteria.options[:fields])
245
+ doc = Factory.from_db(criteria.klass, attributes["obj"], criteria)
246
246
  doc.attributes["geo_near_distance"] = attributes["dis"]
247
247
  doc
248
248
  end
@@ -165,8 +165,8 @@ module Mongoid
165
165
  def raw
166
166
  validate_out!
167
167
  cmd = command
168
- opts = { read: cmd.delete(:read) } if cmd[:read]
169
- @map_reduce.database.command(cmd, (opts || {}).merge(session: _session)).first
168
+ opts = { read: cmd.delete(:read).options } if cmd[:read]
169
+ @map_reduce.database.command(cmd, (opts || {}).merge(session: session)).first
170
170
  end
171
171
  alias :results :raw
172
172
 
@@ -250,8 +250,8 @@ module Mongoid
250
250
  raise Errors::NoMapReduceOutput.new({}) unless @map_reduce.out
251
251
  end
252
252
 
253
- def _session
254
- criteria.send(:_session)
253
+ def session
254
+ criteria.send(:session)
255
255
  end
256
256
  end
257
257
  end
@@ -1,13 +1,13 @@
1
1
  # encoding: utf-8
2
2
  require "mongoid/contextual/aggregable/memory"
3
- require "mongoid/relations/eager"
3
+ require "mongoid/association/eager_loadable"
4
4
 
5
5
  module Mongoid
6
6
  module Contextual
7
7
  class Memory
8
8
  include Enumerable
9
9
  include Aggregable::Memory
10
- include Relations::Eager
10
+ include Association::EagerLoadable
11
11
  include Queryable
12
12
  include Positional
13
13
 
@@ -49,7 +49,7 @@ module Mongoid
49
49
  unless removed.empty?
50
50
  collection.find(selector).update_one(
51
51
  positionally(selector, "$pullAll" => { path => removed }),
52
- session: _session
52
+ session: session
53
53
  )
54
54
  end
55
55
  deleted
@@ -130,7 +130,7 @@ module Mongoid
130
130
  # @return [ Document ] The first document.
131
131
  #
132
132
  # @since 3.0.0
133
- def first
133
+ def first(*args)
134
134
  eager_load([documents.first]).first
135
135
  end
136
136
  alias :one :first
@@ -155,6 +155,22 @@ module Mongoid
155
155
  apply_options
156
156
  end
157
157
 
158
+ # Increment a value on all documents.
159
+ #
160
+ # @example Perform the increment.
161
+ # context.inc(likes: 10)
162
+ #
163
+ # @param [ Hash ] incs The operations.
164
+ #
165
+ # @return [ Enumerator ] The enumerator.
166
+ #
167
+ # @since 7.0.0
168
+ def inc(*args)
169
+ each do |document|
170
+ document.inc *args
171
+ end
172
+ end
173
+
158
174
  # Get the last document in the database for the criteria's selector.
159
175
  #
160
176
  # @example Get the last document.
@@ -304,7 +320,7 @@ module Mongoid
304
320
  updates["$set"].merge!(doc.atomic_updates["$set"] || {})
305
321
  doc.move_changes
306
322
  end
307
- collection.find(selector).update_one(updates, session: _session) unless updates["$set"].empty?
323
+ collection.find(selector).update_one(updates, session: session) unless updates["$set"].empty?
308
324
  end
309
325
 
310
326
  # Get the limiting value.
@@ -446,8 +462,10 @@ module Mongoid
446
462
  doc.destroyed = true
447
463
  end
448
464
 
449
- def _session
450
- @criteria.send(:_session)
465
+ private
466
+
467
+ def session
468
+ @criteria.send(:session)
451
469
  end
452
470
  end
453
471
  end
@@ -4,7 +4,7 @@ require "mongoid/contextual/aggregable/mongo"
4
4
  require "mongoid/contextual/command"
5
5
  require "mongoid/contextual/geo_near"
6
6
  require "mongoid/contextual/map_reduce"
7
- require "mongoid/relations/eager"
7
+ require "mongoid/association/eager_loadable"
8
8
 
9
9
  module Mongoid
10
10
  module Contextual
@@ -12,7 +12,7 @@ module Mongoid
12
12
  include Enumerable
13
13
  include Aggregable::Mongo
14
14
  include Atomic
15
- include Relations::Eager
15
+ include Association::EagerLoadable
16
16
  include Queryable
17
17
 
18
18
  # Options constant.
@@ -256,12 +256,12 @@ module Mongoid
256
256
  try_cache(:first) do
257
257
  if sort = view.sort || ({ _id: 1 } unless opts[:id_sort] == :none)
258
258
  if raw_doc = view.sort(sort).limit(-1).first
259
- doc = Factory.from_db(klass, raw_doc, criteria.options[:fields])
259
+ doc = Factory.from_db(klass, raw_doc, criteria)
260
260
  eager_load([doc]).first
261
261
  end
262
262
  else
263
263
  if raw_doc = view.limit(-1).first
264
- doc = Factory.from_db(klass, raw_doc, criteria.options[:fields])
264
+ doc = Factory.from_db(klass, raw_doc, criteria)
265
265
  eager_load([doc]).first
266
266
  end
267
267
  end
@@ -277,7 +277,7 @@ module Mongoid
277
277
  def find_first
278
278
  return documents.first if cached? && cache_loaded?
279
279
  if raw_doc = view.first
280
- doc = Factory.from_db(klass, raw_doc, criteria.options[:fields])
280
+ doc = Factory.from_db(klass, raw_doc, criteria)
281
281
  eager_load([doc]).first
282
282
  end
283
283
  end
@@ -341,7 +341,7 @@ module Mongoid
341
341
  @criteria, @klass, @cache = criteria, criteria.klass, criteria.options[:cache]
342
342
  @collection = @klass.collection
343
343
  criteria.send(:merge_type_selection)
344
- @view = collection.find(criteria.selector, session: _session)
344
+ @view = collection.find(criteria.selector, session: session)
345
345
  apply_options
346
346
  end
347
347
 
@@ -368,7 +368,7 @@ module Mongoid
368
368
  try_cache(:last) do
369
369
  with_inverse_sorting(opts) do
370
370
  if raw_doc = view.limit(-1).first
371
- doc = Factory.from_db(klass, raw_doc, criteria.options[:fields])
371
+ doc = Factory.from_db(klass, raw_doc, criteria)
372
372
  eager_load([doc]).first
373
373
  end
374
374
  end
@@ -683,7 +683,7 @@ module Mongoid
683
683
  def documents_for_iteration
684
684
  return documents if cached? && !documents.empty?
685
685
  return view unless eager_loadable?
686
- docs = view.map{ |doc| Factory.from_db(klass, doc, criteria.options[:fields]) }
686
+ docs = view.map{ |doc| Factory.from_db(klass, doc, criteria) }
687
687
  eager_load(docs)
688
688
  end
689
689
 
@@ -701,13 +701,15 @@ module Mongoid
701
701
  # @since 3.0.0
702
702
  def yield_document(document, &block)
703
703
  doc = document.respond_to?(:_id) ?
704
- document : Factory.from_db(klass, document, criteria.options[:fields])
704
+ document : Factory.from_db(klass, document, criteria)
705
705
  yield(doc)
706
706
  documents.push(doc) if cacheable?
707
707
  end
708
708
 
709
- def _session
710
- @criteria.send(:_session)
709
+ private
710
+
711
+ def session
712
+ @criteria.send(:session)
711
713
  end
712
714
 
713
715
  def acknowledged_write?
@@ -69,15 +69,15 @@ module Mongoid
69
69
  attrs["#{name}_translations"] = value
70
70
  end
71
71
  end
72
- klass.embedded_relations.each do |_, metadata|
73
- next unless attrs.present? && attrs[metadata.key].present?
72
+ klass.embedded_relations.each do |_, association|
73
+ next unless attrs.present? && attrs[association.key].present?
74
74
 
75
- if metadata.macro == :embeds_many
76
- attrs[metadata.key].each do |attr|
77
- process_localized_attributes(metadata.klass, attr)
75
+ if association.is_a?(Association::Embedded::EmbedsMany)
76
+ attrs[association.name.to_s].each_with_index do |attr, index|
77
+ process_localized_attributes(send(association.name)[index].class, attr)
78
78
  end
79
79
  else
80
- process_localized_attributes(metadata.klass, attrs[metadata.key])
80
+ process_localized_attributes(association.klass, attrs[association.key])
81
81
  end
82
82
  end
83
83
  end
@@ -36,7 +36,7 @@ module Mongoid
36
36
  # @example Get the eager loading inclusions.
37
37
  # Person.includes(:game).inclusions
38
38
  #
39
- # @return [ Array<Metadata> ] The inclusions.
39
+ # @return [ Array<Association> ] The inclusions.
40
40
  #
41
41
  # @since 2.2.0
42
42
  def inclusions
@@ -46,11 +46,11 @@ module Mongoid
46
46
  # Set the inclusions for the criteria.
47
47
  #
48
48
  # @example Set the inclusions.
49
- # criteria.inclusions = [ meta ]
49
+ # criteria.inclusions = [ association ]
50
50
  #
51
- # @param [ Array<Metadata> ] value The inclusions.
51
+ # @param [ Array<Association> ] value The inclusions.
52
52
  #
53
- # @return [ Array<Metadata> ] The new inclusions.
53
+ # @return [ Array<Association> ] The new inclusions.
54
54
  #
55
55
  # @since 3.0.0
56
56
  def inclusions=(value)
@@ -65,28 +65,28 @@ module Mongoid
65
65
  # criteria.add_inclusion(Person, :posts)
66
66
  #
67
67
  # @param [ Class, String, Symbol ] _klass The class or string/symbol of the class name.
68
- # @param [ Symbol ] metadata The relation.
68
+ # @param [ Symbol ] association The relation.
69
69
  #
70
70
  # @raise [ Errors::InvalidIncludes ] If no relation is found.
71
71
  #
72
72
  # @since 5.1.0
73
- def add_inclusion(_klass, metadata)
74
- inclusions.push(metadata) unless inclusions.include?(metadata)
73
+ def add_inclusion(_klass, association)
74
+ inclusions.push(association) unless inclusions.include?(association)
75
75
  end
76
76
 
77
77
  def extract_includes_list(_parent_class, *relations_list)
78
78
  relations_list.flatten.each do |relation_object|
79
79
  if relation_object.is_a?(Hash)
80
80
  relation_object.each do |relation, _includes|
81
- metadata = _parent_class.reflect_on_association(relation)
82
- raise Errors::InvalidIncludes.new(_klass, [ relation ]) unless metadata
83
- add_inclusion(_parent_class, metadata)
84
- extract_includes_list(metadata.klass, _includes)
81
+ association = _parent_class.reflect_on_association(relation)
82
+ raise Errors::InvalidIncludes.new(_klass, [ relation ]) unless association
83
+ add_inclusion(_parent_class, association)
84
+ extract_includes_list(association.klass, _includes)
85
85
  end
86
86
  else
87
- metadata = _parent_class.reflect_on_association(relation_object)
88
- raise Errors::InvalidIncludes.new(_parent_class, [ relation_object ]) unless metadata
89
- add_inclusion(_parent_class, metadata)
87
+ association = _parent_class.reflect_on_association(relation_object)
88
+ raise Errors::InvalidIncludes.new(_parent_class, [ relation_object ]) unless association
89
+ add_inclusion(_parent_class, association)
90
90
  end
91
91
  end
92
92
  end
@@ -3,10 +3,6 @@ module Mongoid
3
3
  class Criteria
4
4
  module Modifiable
5
5
 
6
- # @attribute [r] create_attrs Additional attributes to add to the Document upon creation.
7
- # @api private
8
- attr_reader :create_attrs
9
-
10
6
  # Build a document given the selector and return it.
11
7
  # Complex criteria, such as $in and $or operations will get ignored.
12
8
  #
@@ -61,9 +57,6 @@ module Mongoid
61
57
 
62
58
  # Define attributes with which new documents will be created.
63
59
  #
64
- # Note that if `find_or_create_by` is called after this in a method chain, the attributes in
65
- # the query will override those from this method.
66
- #
67
60
  # @example Define attributes to be used when a new document is created.
68
61
  # Person.create_with(job: 'Engineer').find_or_create_by(employer: 'MongoDB')
69
62
  #
@@ -71,9 +64,7 @@ module Mongoid
71
64
  #
72
65
  # @since 5.1.0
73
66
  def create_with(attrs = {})
74
- tap do
75
- (@create_attrs ||= {}).merge!(attrs)
76
- end
67
+ where(selector.merge(attrs))
77
68
  end
78
69
 
79
70
  # Find the first +Document+ given the conditions, or creates a new document
@@ -181,8 +172,7 @@ module Mongoid
181
172
  #
182
173
  # @since 3.0.0
183
174
  def create_document(method, attrs = nil, &block)
184
- attrs = (create_attrs || {}).merge(attrs || {})
185
- attributes = selector.reduce(attrs) do |hash, (key, value)|
175
+ attributes = selector.reduce(attrs ? attrs.dup : {}) do |hash, (key, value)|
186
176
  unless invalid_key?(hash, key) || invalid_embedded_doc?(value)
187
177
  hash[key] = value
188
178
  end
@@ -190,9 +180,13 @@ module Mongoid
190
180
  end
191
181
  if embedded?
192
182
  attributes[:_parent] = parent_document
193
- attributes[:__metadata] = metadata
183
+ attributes[:_association] = association
184
+ end
185
+ if polymorphic? && @criterion
186
+ klass.__send__(method, attributes.merge(@criterion), &block)
187
+ else
188
+ klass.__send__(method, attributes, &block)
194
189
  end
195
- klass.__send__(method, attributes, &block)
196
190
  end
197
191
 
198
192
  # Find the first object or create/initialize it.
@@ -29,7 +29,7 @@ module Mongoid
29
29
  #
30
30
  # @since 1.0.0
31
31
  def __evolve_time__
32
- ::Time.parse(self).utc
32
+ __mongoize_time__.utc
33
33
  end
34
34
 
35
35
  # Get the string as a mongo expression, adding $ to the front.