mongoid 3.1.6 → 4.0.2

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 (571) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +479 -8
  3. data/README.md +10 -7
  4. data/lib/config/locales/en.yml +34 -20
  5. data/lib/mongoid.rb +10 -76
  6. data/lib/mongoid/atomic.rb +3 -14
  7. data/lib/mongoid/atomic/paths/embedded.rb +0 -30
  8. data/lib/mongoid/atomic/paths/embedded/many.rb +1 -1
  9. data/lib/mongoid/atomic/paths/embedded/one.rb +1 -1
  10. data/lib/mongoid/atomic/paths/root.rb +0 -13
  11. data/lib/mongoid/attributes.rb +65 -101
  12. data/lib/mongoid/attributes/dynamic.rb +154 -0
  13. data/lib/mongoid/attributes/nested.rb +82 -0
  14. data/lib/mongoid/attributes/processing.rb +13 -66
  15. data/lib/mongoid/{dirty.rb → changeable.rb} +32 -2
  16. data/lib/mongoid/composable.rb +105 -0
  17. data/lib/mongoid/config.rb +3 -9
  18. data/lib/mongoid/config/options.rb +1 -1
  19. data/lib/mongoid/contextual.rb +2 -0
  20. data/lib/mongoid/contextual/aggregable/memory.rb +2 -2
  21. data/lib/mongoid/contextual/aggregable/mongo.rb +7 -9
  22. data/lib/mongoid/contextual/atomic.rb +53 -53
  23. data/lib/mongoid/contextual/geo_near.rb +1 -1
  24. data/lib/mongoid/contextual/map_reduce.rb +4 -2
  25. data/lib/mongoid/contextual/memory.rb +23 -11
  26. data/lib/mongoid/contextual/mongo.rb +75 -57
  27. data/lib/mongoid/contextual/none.rb +90 -0
  28. data/lib/mongoid/contextual/text_search.rb +178 -0
  29. data/lib/mongoid/copyable.rb +2 -3
  30. data/lib/mongoid/criteria.rb +39 -34
  31. data/lib/mongoid/criteria/#findable.rb# +141 -0
  32. data/lib/mongoid/{criterion → criteria}/findable.rb +7 -47
  33. data/lib/mongoid/{criterion/inspection.rb → criteria/inspectable.rb} +2 -2
  34. data/lib/mongoid/{criterion → criteria}/marshalable.rb +3 -1
  35. data/lib/mongoid/{criterion → criteria}/modifiable.rb +28 -8
  36. data/lib/mongoid/criteria/permission.rb +70 -0
  37. data/lib/mongoid/{criterion/scoping.rb → criteria/scopable.rb} +2 -2
  38. data/lib/mongoid/document.rb +39 -24
  39. data/lib/mongoid/errors.rb +4 -1
  40. data/lib/mongoid/errors/document_not_destroyed.rb +25 -0
  41. data/lib/mongoid/errors/document_not_found.rb +2 -1
  42. data/lib/mongoid/errors/invalid_storage_options.rb +1 -1
  43. data/lib/mongoid/errors/invalid_storage_parent.rb +26 -0
  44. data/lib/mongoid/errors/invalid_value.rb +16 -0
  45. data/lib/mongoid/errors/mongoid_error.rb +1 -1
  46. data/lib/mongoid/errors/readonly_document.rb +24 -0
  47. data/lib/mongoid/extensions.rb +15 -7
  48. data/lib/mongoid/extensions/array.rb +3 -3
  49. data/lib/mongoid/extensions/big_decimal.rb +1 -1
  50. data/lib/mongoid/extensions/boolean.rb +15 -17
  51. data/lib/mongoid/extensions/date.rb +1 -1
  52. data/lib/mongoid/extensions/date_time.rb +3 -3
  53. data/lib/mongoid/extensions/float.rb +2 -1
  54. data/lib/mongoid/extensions/hash.rb +3 -3
  55. data/lib/mongoid/extensions/integer.rb +1 -1
  56. data/lib/mongoid/extensions/object.rb +7 -7
  57. data/lib/mongoid/extensions/object_id.rb +5 -5
  58. data/lib/mongoid/extensions/range.rb +9 -3
  59. data/lib/mongoid/extensions/regexp.rb +1 -1
  60. data/lib/mongoid/extensions/set.rb +1 -1
  61. data/lib/mongoid/extensions/string.rb +6 -18
  62. data/lib/mongoid/extensions/symbol.rb +1 -1
  63. data/lib/mongoid/extensions/time.rb +3 -3
  64. data/lib/mongoid/extensions/time_with_zone.rb +1 -1
  65. data/lib/mongoid/factory.rb +8 -6
  66. data/lib/mongoid/fields.rb +41 -8
  67. data/lib/mongoid/fields/foreign_key.rb +3 -3
  68. data/lib/mongoid/fields/localized.rb +1 -1
  69. data/lib/mongoid/fields/standard.rb +5 -17
  70. data/lib/mongoid/fields/validators/macro.rb +15 -5
  71. data/lib/mongoid/{finders.rb → findable.rb} +35 -7
  72. data/lib/mongoid/{indexes.rb → indexable.rb} +50 -55
  73. data/lib/mongoid/indexable/specification.rb +104 -0
  74. data/lib/mongoid/{indexes → indexable}/validators/options.rb +2 -1
  75. data/lib/mongoid/{inspection.rb → inspectable.rb} +15 -11
  76. data/lib/mongoid/{callbacks.rb → interceptable.rb} +30 -62
  77. data/lib/mongoid/log_subscriber.rb +55 -0
  78. data/lib/mongoid/matchable.rb +152 -0
  79. data/lib/mongoid/{matchers → matchable}/all.rb +1 -1
  80. data/lib/mongoid/{matchers → matchable}/and.rb +2 -2
  81. data/lib/mongoid/{matchers → matchable}/default.rb +1 -1
  82. data/lib/mongoid/{matchers → matchable}/exists.rb +1 -1
  83. data/lib/mongoid/{matchers → matchable}/gt.rb +1 -1
  84. data/lib/mongoid/{matchers → matchable}/gte.rb +1 -1
  85. data/lib/mongoid/{matchers → matchable}/in.rb +2 -2
  86. data/lib/mongoid/{matchers → matchable}/lt.rb +1 -1
  87. data/lib/mongoid/{matchers → matchable}/lte.rb +1 -1
  88. data/lib/mongoid/{matchers → matchable}/ne.rb +2 -2
  89. data/lib/mongoid/{matchers → matchable}/nin.rb +3 -2
  90. data/lib/mongoid/{matchers → matchable}/or.rb +2 -2
  91. data/lib/mongoid/{matchers → matchable}/size.rb +1 -1
  92. data/lib/mongoid/persistable.rb +216 -0
  93. data/lib/mongoid/persistable/creatable.rb +189 -0
  94. data/lib/mongoid/persistable/deletable.rb +149 -0
  95. data/lib/mongoid/persistable/destroyable.rb +60 -0
  96. data/lib/mongoid/persistable/incrementable.rb +36 -0
  97. data/lib/mongoid/persistable/logical.rb +38 -0
  98. data/lib/mongoid/persistable/poppable.rb +39 -0
  99. data/lib/mongoid/persistable/pullable.rb +55 -0
  100. data/lib/mongoid/persistable/pushable.rb +62 -0
  101. data/lib/mongoid/persistable/renamable.rb +35 -0
  102. data/lib/mongoid/persistable/savable.rb +52 -0
  103. data/lib/mongoid/persistable/settable.rb +33 -0
  104. data/lib/mongoid/persistable/unsettable.rb +36 -0
  105. data/lib/mongoid/persistable/updatable.rb +153 -0
  106. data/lib/mongoid/persistable/upsertable.rb +55 -0
  107. data/lib/mongoid/positional.rb +71 -0
  108. data/lib/mongoid/query_cache.rb +255 -0
  109. data/lib/mongoid/railtie.rb +34 -60
  110. data/lib/mongoid/railties/database.rake +9 -25
  111. data/lib/mongoid/relations.rb +11 -25
  112. data/lib/mongoid/relations/accessors.rb +15 -51
  113. data/lib/mongoid/relations/auto_save.rb +15 -36
  114. data/lib/mongoid/relations/binding.rb +2 -25
  115. data/lib/mongoid/relations/bindings/embedded/in.rb +1 -1
  116. data/lib/mongoid/relations/bindings/embedded/many.rb +1 -3
  117. data/lib/mongoid/relations/bindings/referenced/in.rb +3 -8
  118. data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +4 -2
  119. data/lib/mongoid/relations/builder.rb +1 -1
  120. data/lib/mongoid/relations/builders.rb +2 -2
  121. data/lib/mongoid/relations/builders/embedded/one.rb +1 -1
  122. data/lib/mongoid/relations/builders/nested_attributes/many.rb +10 -13
  123. data/lib/mongoid/relations/builders/nested_attributes/one.rb +5 -6
  124. data/lib/mongoid/relations/builders/referenced/in.rb +1 -1
  125. data/lib/mongoid/relations/builders/referenced/many.rb +1 -2
  126. data/lib/mongoid/relations/builders/referenced/many_to_many.rb +1 -2
  127. data/lib/mongoid/relations/builders/referenced/one.rb +1 -1
  128. data/lib/mongoid/relations/cascading.rb +3 -5
  129. data/lib/mongoid/relations/constraint.rb +1 -1
  130. data/lib/mongoid/relations/conversions.rb +1 -1
  131. data/lib/mongoid/relations/counter_cache.rb +39 -15
  132. data/lib/mongoid/relations/eager.rb +46 -0
  133. data/lib/mongoid/relations/eager/base.rb +149 -0
  134. data/lib/mongoid/relations/eager/belongs_to.rb +31 -0
  135. data/lib/mongoid/relations/eager/has_and_belongs_to_many.rb +47 -0
  136. data/lib/mongoid/relations/eager/has_many.rb +38 -0
  137. data/lib/mongoid/relations/eager/has_one.rb +30 -0
  138. data/lib/mongoid/relations/embedded/batchable.rb +4 -5
  139. data/lib/mongoid/relations/embedded/in.rb +4 -4
  140. data/lib/mongoid/relations/embedded/many.rb +14 -32
  141. data/lib/mongoid/relations/embedded/one.rb +1 -1
  142. data/lib/mongoid/relations/macros.rb +3 -4
  143. data/lib/mongoid/relations/many.rb +51 -31
  144. data/lib/mongoid/relations/marshalable.rb +3 -3
  145. data/lib/mongoid/relations/metadata.rb +14 -79
  146. data/lib/mongoid/relations/nested_builder.rb +2 -2
  147. data/lib/mongoid/relations/one.rb +1 -1
  148. data/lib/mongoid/relations/options.rb +1 -0
  149. data/lib/mongoid/relations/polymorphic.rb +0 -1
  150. data/lib/mongoid/relations/proxy.rb +21 -41
  151. data/lib/mongoid/relations/referenced/in.rb +4 -20
  152. data/lib/mongoid/relations/referenced/many.rb +22 -35
  153. data/lib/mongoid/relations/referenced/many_to_many.rb +19 -42
  154. data/lib/mongoid/relations/referenced/one.rb +6 -25
  155. data/lib/mongoid/relations/synchronization.rb +4 -4
  156. data/lib/mongoid/relations/targets/enumerable.rb +10 -10
  157. data/lib/mongoid/relations/touchable.rb +34 -1
  158. data/lib/mongoid/{reloading.rb → reloadable.rb} +7 -5
  159. data/lib/mongoid/{scoping.rb → scopable.rb} +36 -36
  160. data/lib/mongoid/selectable.rb +59 -0
  161. data/lib/mongoid/{serialization.rb → serializable.rb} +11 -2
  162. data/lib/mongoid/sessions.rb +37 -345
  163. data/lib/mongoid/sessions/factory.rb +2 -0
  164. data/lib/mongoid/sessions/options.rb +185 -0
  165. data/lib/mongoid/sessions/storage_options.rb +140 -0
  166. data/lib/mongoid/sessions/thread_options.rb +19 -0
  167. data/lib/mongoid/sessions/validators/storage.rb +16 -3
  168. data/lib/mongoid/{sharding.rb → shardable.rb} +5 -1
  169. data/lib/mongoid/{state.rb → stateful.rb} +13 -1
  170. data/lib/mongoid/support/query_counter.rb +23 -0
  171. data/lib/mongoid/tasks/database.rake +31 -0
  172. data/lib/mongoid/tasks/database.rb +107 -0
  173. data/lib/mongoid/threaded.rb +26 -172
  174. data/lib/mongoid/threaded/lifecycle.rb +0 -28
  175. data/lib/mongoid/timestamps/updated/short.rb +2 -2
  176. data/lib/mongoid/{hierarchy.rb → traversable.rb} +15 -7
  177. data/lib/mongoid/{validations.rb → validatable.rb} +23 -10
  178. data/lib/mongoid/{validations → validatable}/associated.rb +4 -2
  179. data/lib/mongoid/{validations → validatable}/format.rb +1 -1
  180. data/lib/mongoid/{validations → validatable}/length.rb +1 -1
  181. data/lib/mongoid/{validations → validatable}/localizable.rb +1 -1
  182. data/lib/mongoid/{validations → validatable}/macros.rb +4 -3
  183. data/lib/mongoid/{validations → validatable}/presence.rb +1 -1
  184. data/lib/mongoid/{validations → validatable}/queryable.rb +1 -2
  185. data/lib/mongoid/{validations → validatable}/uniqueness.rb +25 -21
  186. data/lib/mongoid/version.rb +1 -1
  187. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +46 -25
  188. data/lib/rails/generators/mongoid/model/model_generator.rb +0 -1
  189. data/lib/rails/generators/mongoid/model/templates/model.rb.tt +0 -3
  190. data/lib/rails/generators/mongoid_generator.rb +3 -40
  191. data/lib/rails/mongoid.rb +0 -122
  192. data/lib/support/ruby_version.rb +1 -1
  193. data/spec/app/models/account.rb +2 -6
  194. data/spec/app/models/acolyte.rb +2 -1
  195. data/spec/app/models/actor.rb +0 -1
  196. data/spec/app/models/address.rb +8 -3
  197. data/spec/app/models/animal.rb +1 -1
  198. data/spec/app/models/appointment.rb +3 -3
  199. data/spec/app/models/article.rb +1 -4
  200. data/spec/app/models/audio.rb +5 -0
  201. data/spec/app/models/author.rb +0 -2
  202. data/spec/app/models/band.rb +3 -2
  203. data/spec/app/models/bar.rb +1 -0
  204. data/spec/app/models/book.rb +1 -0
  205. data/spec/app/models/building.rb +0 -2
  206. data/spec/app/models/building_address.rb +0 -2
  207. data/spec/app/models/bus.rb +1 -1
  208. data/spec/app/models/canvas.rb +1 -1
  209. data/spec/app/models/contextable_item.rb +5 -0
  210. data/spec/app/models/contractor.rb +0 -2
  211. data/spec/app/models/country_code.rb +1 -1
  212. data/spec/app/models/definition.rb +2 -2
  213. data/spec/app/models/dog.rb +1 -1
  214. data/spec/app/models/draft.rb +9 -0
  215. data/spec/app/models/dragon.rb +4 -0
  216. data/spec/app/models/drug.rb +1 -3
  217. data/spec/app/models/dungeon.rb +4 -0
  218. data/spec/app/models/edit.rb +5 -0
  219. data/spec/app/models/even.rb +7 -0
  220. data/spec/app/models/event.rb +1 -1
  221. data/spec/app/models/filesystem.rb +1 -0
  222. data/spec/app/models/fish.rb +0 -1
  223. data/spec/app/models/fruits.rb +6 -0
  224. data/spec/app/models/game.rb +0 -2
  225. data/spec/app/models/house.rb +1 -3
  226. data/spec/app/models/id_key.rb +6 -0
  227. data/spec/app/models/item.rb +1 -5
  228. data/spec/app/models/jar.rb +1 -1
  229. data/spec/app/models/label.rb +4 -4
  230. data/spec/app/models/line_item.rb +1 -1
  231. data/spec/app/models/login.rb +1 -1
  232. data/spec/app/models/message.rb +8 -0
  233. data/spec/app/models/movie.rb +1 -0
  234. data/spec/app/models/name.rb +3 -3
  235. data/spec/app/models/note.rb +3 -1
  236. data/spec/app/models/odd.rb +7 -0
  237. data/spec/app/models/oscar.rb +1 -1
  238. data/spec/app/models/parent_doc.rb +1 -1
  239. data/spec/app/models/person.rb +16 -10
  240. data/spec/app/models/phone.rb +1 -3
  241. data/spec/app/models/player.rb +3 -3
  242. data/spec/app/models/post.rb +5 -3
  243. data/spec/app/models/preference.rb +1 -1
  244. data/spec/app/models/quiz.rb +0 -3
  245. data/spec/app/models/record.rb +10 -5
  246. data/spec/app/models/registry.rb +1 -1
  247. data/spec/app/models/server.rb +1 -1
  248. data/spec/app/models/service.rb +3 -3
  249. data/spec/app/models/sound.rb +5 -0
  250. data/spec/app/models/symptom.rb +1 -1
  251. data/spec/app/models/template.rb +1 -1
  252. data/spec/app/models/title.rb +0 -1
  253. data/spec/app/models/track.rb +5 -5
  254. data/spec/app/models/tree.rb +3 -3
  255. data/spec/app/models/video.rb +1 -5
  256. data/spec/app/models/wiki_page.rb +2 -5
  257. data/spec/app/models/word.rb +3 -0
  258. data/spec/app/models/word_origin.rb +1 -1
  259. data/spec/config/mongoid.yml +7 -8
  260. data/spec/helpers.rb +18 -0
  261. data/spec/mongoid/#atomic_spec.rb# +365 -0
  262. data/spec/mongoid/atomic/modifiers_spec.rb +22 -22
  263. data/spec/mongoid/atomic/paths/embedded/many_spec.rb +8 -49
  264. data/spec/mongoid/atomic/paths/embedded/one_spec.rb +7 -49
  265. data/spec/mongoid/atomic/paths/root_spec.rb +3 -61
  266. data/spec/mongoid/atomic/paths_spec.rb +19 -19
  267. data/spec/mongoid/atomic_spec.rb +19 -19
  268. data/spec/mongoid/{nested_attributes_spec.rb → attributes/nested_spec.rb} +474 -592
  269. data/spec/mongoid/attributes/readonly_spec.rb +58 -18
  270. data/spec/mongoid/attributes_spec.rb +349 -434
  271. data/spec/mongoid/{dirty_spec.rb → changeable_spec.rb} +203 -153
  272. data/spec/mongoid/{components_spec.rb → composable_spec.rb} +3 -3
  273. data/spec/mongoid/config/environment_spec.rb +3 -3
  274. data/spec/mongoid/config/options_spec.rb +6 -6
  275. data/spec/mongoid/config_spec.rb +24 -48
  276. data/spec/mongoid/contextual/aggregable/memory_spec.rb +12 -12
  277. data/spec/mongoid/contextual/aggregable/mongo_spec.rb +78 -38
  278. data/spec/mongoid/contextual/atomic_spec.rb +60 -56
  279. data/spec/mongoid/contextual/find_and_modify_spec.rb +14 -14
  280. data/spec/mongoid/contextual/geo_near_spec.rb +22 -22
  281. data/spec/mongoid/contextual/map_reduce_spec.rb +27 -27
  282. data/spec/mongoid/contextual/memory_spec.rb +156 -94
  283. data/spec/mongoid/contextual/mongo_spec.rb +238 -150
  284. data/spec/mongoid/contextual/none_spec.rb +127 -0
  285. data/spec/mongoid/contextual/text_search_spec.rb +209 -0
  286. data/spec/mongoid/copyable_spec.rb +56 -68
  287. data/spec/mongoid/criteria/findable_spec.rb +991 -0
  288. data/spec/mongoid/{criterion/inspection_spec.rb → criteria/inspectable_spec.rb} +5 -5
  289. data/spec/mongoid/{criterion → criteria}/marshalable_spec.rb +2 -2
  290. data/spec/mongoid/criteria/modifiable_spec.rb +1252 -0
  291. data/spec/mongoid/{criterion/scoping_spec.rb → criteria/scopable_spec.rb} +37 -37
  292. data/spec/mongoid/criteria_spec.rb +715 -2421
  293. data/spec/mongoid/document_spec.rb +171 -121
  294. data/spec/mongoid/equality_spec.rb +22 -22
  295. data/spec/mongoid/errors/ambiguous_relationship_spec.rb +3 -3
  296. data/spec/mongoid/errors/callback_spec.rb +3 -3
  297. data/spec/mongoid/errors/delete_restriction_spec.rb +3 -3
  298. data/spec/mongoid/errors/document_not_destroyed_spec.rb +33 -0
  299. data/spec/mongoid/errors/document_not_found_spec.rb +11 -11
  300. data/spec/mongoid/errors/eager_load_spec.rb +3 -3
  301. data/spec/mongoid/errors/invalid_collection_spec.rb +3 -3
  302. data/spec/mongoid/errors/invalid_config_option_spec.rb +3 -3
  303. data/spec/mongoid/errors/invalid_field_option_spec.rb +3 -3
  304. data/spec/mongoid/errors/invalid_field_spec.rb +3 -3
  305. data/spec/mongoid/errors/invalid_find_spec.rb +3 -3
  306. data/spec/mongoid/errors/invalid_includes_spec.rb +3 -3
  307. data/spec/mongoid/errors/invalid_index_spec.rb +3 -3
  308. data/spec/mongoid/errors/invalid_options_spec.rb +3 -3
  309. data/spec/mongoid/errors/invalid_path_spec.rb +3 -3
  310. data/spec/mongoid/errors/invalid_scope_spec.rb +5 -5
  311. data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +3 -3
  312. data/spec/mongoid/errors/invalid_storage_options_spec.rb +3 -3
  313. data/spec/mongoid/errors/invalid_time_spec.rb +3 -3
  314. data/spec/mongoid/errors/inverse_not_found_spec.rb +3 -3
  315. data/spec/mongoid/errors/mixed_relations_spec.rb +3 -3
  316. data/spec/mongoid/errors/mixed_session_configuration_spec.rb +3 -3
  317. data/spec/mongoid/errors/mongoid_error_spec.rb +8 -8
  318. data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +3 -3
  319. data/spec/mongoid/errors/no_environment_spec.rb +3 -3
  320. data/spec/mongoid/errors/no_map_reduce_output_spec.rb +3 -3
  321. data/spec/mongoid/errors/no_metadata_spec.rb +3 -3
  322. data/spec/mongoid/errors/no_parent_spec.rb +3 -3
  323. data/spec/mongoid/errors/no_session_config_spec.rb +3 -3
  324. data/spec/mongoid/errors/no_session_database_spec.rb +3 -3
  325. data/spec/mongoid/errors/no_session_hosts_spec.rb +3 -3
  326. data/spec/mongoid/errors/no_sessions_config_spec.rb +3 -3
  327. data/spec/mongoid/errors/readonly_attribute_spec.rb +3 -3
  328. data/spec/mongoid/errors/readonly_document_spec.rb +29 -0
  329. data/spec/mongoid/errors/scope_overwrite_spec.rb +3 -3
  330. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +3 -3
  331. data/spec/mongoid/errors/unknown_attribute_spec.rb +5 -5
  332. data/spec/mongoid/errors/unsaved_document_spec.rb +3 -3
  333. data/spec/mongoid/errors/unsupported_javascript_spec.rb +3 -3
  334. data/spec/mongoid/errors/validations_spec.rb +7 -7
  335. data/spec/mongoid/extensions/array_spec.rb +61 -61
  336. data/spec/mongoid/extensions/big_decimal_spec.rb +11 -11
  337. data/spec/mongoid/extensions/binary_spec.rb +12 -12
  338. data/spec/mongoid/extensions/boolean_spec.rb +18 -18
  339. data/spec/mongoid/extensions/date_spec.rb +13 -13
  340. data/spec/mongoid/extensions/date_time_spec.rb +8 -8
  341. data/spec/mongoid/extensions/false_class_spec.rb +5 -5
  342. data/spec/mongoid/extensions/float_spec.rb +29 -15
  343. data/spec/mongoid/extensions/hash_spec.rb +29 -29
  344. data/spec/mongoid/extensions/integer_spec.rb +15 -15
  345. data/spec/mongoid/extensions/module_spec.rb +2 -2
  346. data/spec/mongoid/extensions/nil_class_spec.rb +1 -1
  347. data/spec/mongoid/extensions/object_id_spec.rb +134 -134
  348. data/spec/mongoid/extensions/object_spec.rb +26 -26
  349. data/spec/mongoid/extensions/range_spec.rb +61 -12
  350. data/spec/mongoid/extensions/regexp_spec.rb +4 -4
  351. data/spec/mongoid/extensions/set_spec.rb +4 -4
  352. data/spec/mongoid/extensions/string_spec.rb +35 -46
  353. data/spec/mongoid/extensions/symbol_spec.rb +9 -9
  354. data/spec/mongoid/extensions/time_spec.rb +49 -49
  355. data/spec/mongoid/extensions/time_with_zone_spec.rb +34 -34
  356. data/spec/mongoid/extensions/true_class_spec.rb +5 -5
  357. data/spec/mongoid/extensions_spec.rb +29 -0
  358. data/spec/mongoid/factory_spec.rb +15 -15
  359. data/spec/mongoid/fields/foreign_key_spec.rb +73 -66
  360. data/spec/mongoid/fields/internal/foreign_keys/array_spec.rb +15 -15
  361. data/spec/mongoid/fields/internal/foreign_keys/object_spec.rb +22 -22
  362. data/spec/mongoid/fields/localized_spec.rb +38 -23
  363. data/spec/mongoid/fields/standard_spec.rb +12 -12
  364. data/spec/mongoid/fields_spec.rb +263 -217
  365. data/spec/mongoid/findable_spec.rb +509 -0
  366. data/spec/mongoid/indexable/specification_spec.rb +102 -0
  367. data/spec/mongoid/{indexes_spec.rb → indexable_spec.rb} +171 -51
  368. data/spec/mongoid/{inspection_spec.rb → inspectable_spec.rb} +6 -14
  369. data/spec/mongoid/{callbacks_spec.rb → interceptable_spec.rb} +117 -116
  370. data/spec/mongoid/log_subscriber_spec.rb +75 -0
  371. data/spec/mongoid/loggable_spec.rb +1 -1
  372. data/spec/mongoid/{matchers → matchable}/all_spec.rb +4 -4
  373. data/spec/mongoid/{matchers → matchable}/and_spec.rb +11 -11
  374. data/spec/mongoid/{matchers → matchable}/default_spec.rb +15 -15
  375. data/spec/mongoid/{matchers → matchable}/exists_spec.rb +5 -5
  376. data/spec/mongoid/{matchers → matchable}/gt_spec.rb +9 -8
  377. data/spec/mongoid/{matchers → matchable}/gte_spec.rb +7 -7
  378. data/spec/mongoid/matchable/in_spec.rb +49 -0
  379. data/spec/mongoid/{matchers → matchable}/lt_spec.rb +7 -7
  380. data/spec/mongoid/{matchers → matchable}/lte_spec.rb +7 -7
  381. data/spec/mongoid/matchable/ne_spec.rb +46 -0
  382. data/spec/mongoid/matchable/nin_spec.rb +48 -0
  383. data/spec/mongoid/{matchers → matchable}/or_spec.rb +6 -6
  384. data/spec/mongoid/{matchers → matchable}/size_spec.rb +3 -3
  385. data/spec/mongoid/{matchers_spec.rb → matchable_spec.rb} +41 -41
  386. data/spec/mongoid/persistable/creatable_spec.rb +553 -0
  387. data/spec/mongoid/persistable/deletable_spec.rb +218 -0
  388. data/spec/mongoid/persistable/destroyable_spec.rb +192 -0
  389. data/spec/mongoid/persistable/incrementable_spec.rb +173 -0
  390. data/spec/mongoid/persistable/logical_spec.rb +143 -0
  391. data/spec/mongoid/persistable/poppable_spec.rb +115 -0
  392. data/spec/mongoid/persistable/pullable_spec.rb +228 -0
  393. data/spec/mongoid/persistable/pushable_spec.rb +258 -0
  394. data/spec/mongoid/persistable/renamable_spec.rb +135 -0
  395. data/spec/mongoid/persistable/savable_spec.rb +498 -0
  396. data/spec/mongoid/persistable/settable_spec.rb +162 -0
  397. data/spec/mongoid/persistable/unsettable_spec.rb +155 -0
  398. data/spec/mongoid/persistable/updatable_spec.rb +558 -0
  399. data/spec/mongoid/persistable/upsertable_spec.rb +106 -0
  400. data/spec/mongoid/persistable_spec.rb +206 -0
  401. data/spec/mongoid/{atomic/positionable_spec.rb → positional_spec.rb} +14 -19
  402. data/spec/mongoid/query_cache_spec.rb +263 -0
  403. data/spec/mongoid/railties/document_spec.rb +2 -2
  404. data/spec/mongoid/relations/accessors_spec.rb +53 -145
  405. data/spec/mongoid/relations/auto_save_spec.rb +37 -17
  406. data/spec/mongoid/relations/bindings/embedded/in_spec.rb +12 -12
  407. data/spec/mongoid/relations/bindings/embedded/many_spec.rb +3 -3
  408. data/spec/mongoid/relations/bindings/embedded/one_spec.rb +5 -5
  409. data/spec/mongoid/relations/bindings/referenced/in_spec.rb +26 -26
  410. data/spec/mongoid/relations/bindings/referenced/many_spec.rb +10 -10
  411. data/spec/mongoid/relations/bindings/referenced/many_to_many_spec.rb +19 -19
  412. data/spec/mongoid/relations/bindings/referenced/one_spec.rb +12 -12
  413. data/spec/mongoid/relations/builders/embedded/in_spec.rb +4 -4
  414. data/spec/mongoid/relations/builders/embedded/many_spec.rb +18 -18
  415. data/spec/mongoid/relations/builders/embedded/one_spec.rb +11 -11
  416. data/spec/mongoid/relations/builders/nested_attributes/many_spec.rb +12 -13
  417. data/spec/mongoid/relations/builders/nested_attributes/one_spec.rb +14 -14
  418. data/spec/mongoid/relations/builders/referenced/in_spec.rb +24 -35
  419. data/spec/mongoid/relations/builders/referenced/many_spec.rb +15 -15
  420. data/spec/mongoid/relations/builders/referenced/many_to_many_spec.rb +18 -18
  421. data/spec/mongoid/relations/builders/referenced/one_spec.rb +12 -25
  422. data/spec/mongoid/relations/builders_spec.rb +21 -21
  423. data/spec/mongoid/relations/cascading/delete_spec.rb +9 -9
  424. data/spec/mongoid/relations/cascading/destroy_spec.rb +6 -6
  425. data/spec/mongoid/relations/cascading/nullify_spec.rb +4 -4
  426. data/spec/mongoid/relations/cascading/restrict_spec.rb +7 -7
  427. data/spec/mongoid/relations/cascading_spec.rb +16 -16
  428. data/spec/mongoid/relations/constraint_spec.rb +8 -7
  429. data/spec/mongoid/relations/conversions_spec.rb +16 -14
  430. data/spec/mongoid/relations/counter_cache_spec.rb +85 -0
  431. data/spec/mongoid/relations/cyclic_spec.rb +18 -18
  432. data/spec/mongoid/relations/eager/belongs_to_spec.rb +154 -0
  433. data/spec/mongoid/relations/eager/has_and_belongs_to_many_spec.rb +117 -0
  434. data/spec/mongoid/relations/eager/has_many_spec.rb +207 -0
  435. data/spec/mongoid/relations/eager/has_one_spec.rb +163 -0
  436. data/spec/mongoid/relations/eager_spec.rb +228 -0
  437. data/spec/mongoid/relations/embedded/dirty_spec.rb +8 -8
  438. data/spec/mongoid/relations/embedded/in_spec.rb +56 -57
  439. data/spec/mongoid/relations/embedded/many_spec.rb +467 -372
  440. data/spec/mongoid/relations/embedded/one_spec.rb +108 -141
  441. data/spec/mongoid/relations/macros_spec.rb +108 -102
  442. data/spec/mongoid/relations/metadata_spec.rb +180 -255
  443. data/spec/mongoid/relations/options_spec.rb +1 -1
  444. data/spec/mongoid/relations/polymorphic_spec.rb +13 -17
  445. data/spec/mongoid/relations/proxy_spec.rb +2 -2
  446. data/spec/mongoid/relations/referenced/in_spec.rb +128 -303
  447. data/spec/mongoid/relations/referenced/many_spec.rb +587 -527
  448. data/spec/mongoid/relations/referenced/many_to_many_spec.rb +401 -424
  449. data/spec/mongoid/relations/referenced/one_spec.rb +149 -264
  450. data/spec/mongoid/relations/reflections_spec.rb +6 -6
  451. data/spec/mongoid/relations/synchronization_spec.rb +46 -50
  452. data/spec/mongoid/relations/targets/enumerable_spec.rb +118 -118
  453. data/spec/mongoid/relations/touchable_spec.rb +333 -0
  454. data/spec/mongoid/relations_spec.rb +16 -15
  455. data/spec/mongoid/{reloading_spec.rb → reloadable_spec.rb} +38 -55
  456. data/spec/mongoid/{scoping_spec.rb → scopable_spec.rb} +89 -164
  457. data/spec/mongoid/selectable_spec.rb +134 -0
  458. data/spec/mongoid/{serialization_spec.rb → serializable_spec.rb} +129 -82
  459. data/spec/mongoid/sessions/factory_spec.rb +49 -28
  460. data/spec/mongoid/sessions/mongo_uri_spec.rb +7 -7
  461. data/spec/mongoid/sessions/options_spec.rb +108 -0
  462. data/spec/mongoid/sessions_spec.rb +319 -178
  463. data/spec/mongoid/{sharding_spec.rb → shardable_spec.rb} +8 -8
  464. data/spec/mongoid/{state_spec.rb → stateful_spec.rb} +36 -11
  465. data/spec/mongoid/tasks/database_rake_spec.rb +285 -0
  466. data/spec/mongoid/tasks/database_spec.rb +160 -0
  467. data/spec/mongoid/threaded_spec.rb +17 -70
  468. data/spec/mongoid/timestamps/created/short_spec.rb +6 -6
  469. data/spec/mongoid/timestamps/created_spec.rb +5 -5
  470. data/spec/mongoid/timestamps/timeless_spec.rb +6 -6
  471. data/spec/mongoid/timestamps/updated/short_spec.rb +11 -11
  472. data/spec/mongoid/timestamps/updated_spec.rb +9 -13
  473. data/spec/mongoid/timestamps_spec.rb +9 -13
  474. data/spec/mongoid/{hierarchy_spec.rb → traversable_spec.rb} +19 -19
  475. data/spec/mongoid/{validations → validatable}/associated_spec.rb +45 -22
  476. data/spec/mongoid/{validations → validatable}/format_spec.rb +6 -6
  477. data/spec/mongoid/{validations → validatable}/length_spec.rb +14 -14
  478. data/spec/mongoid/{validations → validatable}/numericality_spec.rb +1 -1
  479. data/spec/mongoid/{validations → validatable}/presence_spec.rb +37 -44
  480. data/spec/mongoid/{validations → validatable}/uniqueness_spec.rb +184 -192
  481. data/spec/mongoid/{validations_spec.rb → validatable_spec.rb} +28 -28
  482. data/spec/mongoid_spec.rb +8 -8
  483. data/spec/rails/mongoid_spec.rb +19 -335
  484. data/spec/spec_helper.rb +31 -13
  485. metadata +303 -283
  486. data/lib/mongoid/atomic/positionable.rb +0 -73
  487. data/lib/mongoid/components.rb +0 -92
  488. data/lib/mongoid/config/inflections.rb +0 -6
  489. data/lib/mongoid/contextual/eager.rb +0 -158
  490. data/lib/mongoid/errors/versioning_not_on_root.rb +0 -23
  491. data/lib/mongoid/identity_map.rb +0 -163
  492. data/lib/mongoid/json.rb +0 -16
  493. data/lib/mongoid/matchers.rb +0 -32
  494. data/lib/mongoid/matchers/strategies.rb +0 -97
  495. data/lib/mongoid/multi_parameter_attributes.rb +0 -105
  496. data/lib/mongoid/nested_attributes.rb +0 -78
  497. data/lib/mongoid/observer.rb +0 -192
  498. data/lib/mongoid/paranoia.rb +0 -136
  499. data/lib/mongoid/persistence.rb +0 -357
  500. data/lib/mongoid/persistence/atomic.rb +0 -231
  501. data/lib/mongoid/persistence/atomic/add_to_set.rb +0 -47
  502. data/lib/mongoid/persistence/atomic/bit.rb +0 -35
  503. data/lib/mongoid/persistence/atomic/inc.rb +0 -45
  504. data/lib/mongoid/persistence/atomic/operation.rb +0 -154
  505. data/lib/mongoid/persistence/atomic/pop.rb +0 -32
  506. data/lib/mongoid/persistence/atomic/pull.rb +0 -32
  507. data/lib/mongoid/persistence/atomic/pull_all.rb +0 -32
  508. data/lib/mongoid/persistence/atomic/push.rb +0 -25
  509. data/lib/mongoid/persistence/atomic/push_all.rb +0 -25
  510. data/lib/mongoid/persistence/atomic/rename.rb +0 -30
  511. data/lib/mongoid/persistence/atomic/sets.rb +0 -28
  512. data/lib/mongoid/persistence/atomic/unset.rb +0 -27
  513. data/lib/mongoid/persistence/deletion.rb +0 -31
  514. data/lib/mongoid/persistence/insertion.rb +0 -38
  515. data/lib/mongoid/persistence/modification.rb +0 -35
  516. data/lib/mongoid/persistence/operations.rb +0 -214
  517. data/lib/mongoid/persistence/operations/embedded/insert.rb +0 -46
  518. data/lib/mongoid/persistence/operations/embedded/remove.rb +0 -43
  519. data/lib/mongoid/persistence/operations/insert.rb +0 -34
  520. data/lib/mongoid/persistence/operations/remove.rb +0 -33
  521. data/lib/mongoid/persistence/operations/update.rb +0 -59
  522. data/lib/mongoid/persistence/operations/upsert.rb +0 -28
  523. data/lib/mongoid/persistence/upsertion.rb +0 -31
  524. data/lib/mongoid/unit_of_work.rb +0 -61
  525. data/lib/mongoid/versioning.rb +0 -217
  526. data/lib/rack/mongoid.rb +0 -2
  527. data/lib/rack/mongoid/middleware/identity_map.rb +0 -39
  528. data/lib/rails/generators/mongoid/observer/observer_generator.rb +0 -17
  529. data/lib/rails/generators/mongoid/observer/templates/observer.rb.tt +0 -4
  530. data/spec/app/models/actor_observer.rb +0 -15
  531. data/spec/app/models/callback_recorder.rb +0 -25
  532. data/spec/app/models/paranoid_phone.rb +0 -25
  533. data/spec/app/models/paranoid_post.rb +0 -36
  534. data/spec/app/models/phone_observer.rb +0 -6
  535. data/spec/mongoid/attributes/processing_spec.rb +0 -149
  536. data/spec/mongoid/criterion/destructive_spec.rb +0 -101
  537. data/spec/mongoid/criterion/modifiable_spec.rb +0 -409
  538. data/spec/mongoid/criterion/modification_spec.rb +0 -402
  539. data/spec/mongoid/errors/versioning_not_on_root_spec.rb +0 -29
  540. data/spec/mongoid/finders_spec.rb +0 -321
  541. data/spec/mongoid/identity_map_spec.rb +0 -564
  542. data/spec/mongoid/json_spec.rb +0 -33
  543. data/spec/mongoid/matchers/in_spec.rb +0 -25
  544. data/spec/mongoid/matchers/ne_spec.rb +0 -25
  545. data/spec/mongoid/matchers/nin_spec.rb +0 -25
  546. data/spec/mongoid/multi_parameter_attributes_spec.rb +0 -128
  547. data/spec/mongoid/observer_spec.rb +0 -290
  548. data/spec/mongoid/paranoia_spec.rb +0 -759
  549. data/spec/mongoid/persistence/atomic/add_to_set_spec.rb +0 -262
  550. data/spec/mongoid/persistence/atomic/bit_spec.rb +0 -88
  551. data/spec/mongoid/persistence/atomic/inc_spec.rb +0 -133
  552. data/spec/mongoid/persistence/atomic/pop_spec.rb +0 -111
  553. data/spec/mongoid/persistence/atomic/pull_all_spec.rb +0 -77
  554. data/spec/mongoid/persistence/atomic/pull_spec.rb +0 -80
  555. data/spec/mongoid/persistence/atomic/push_all_spec.rb +0 -77
  556. data/spec/mongoid/persistence/atomic/push_spec.rb +0 -77
  557. data/spec/mongoid/persistence/atomic/rename_spec.rb +0 -42
  558. data/spec/mongoid/persistence/atomic/sets_spec.rb +0 -154
  559. data/spec/mongoid/persistence/atomic/unset_spec.rb +0 -65
  560. data/spec/mongoid/persistence/atomic_spec.rb +0 -216
  561. data/spec/mongoid/persistence/operations/embedded/insert_spec.rb +0 -191
  562. data/spec/mongoid/persistence/operations/embedded/remove_spec.rb +0 -8
  563. data/spec/mongoid/persistence/operations/insert_spec.rb +0 -149
  564. data/spec/mongoid/persistence/operations/remove_spec.rb +0 -113
  565. data/spec/mongoid/persistence/operations/update_spec.rb +0 -141
  566. data/spec/mongoid/persistence/operations/upsert_spec.rb +0 -59
  567. data/spec/mongoid/persistence/operations_spec.rb +0 -313
  568. data/spec/mongoid/persistence_spec.rb +0 -2279
  569. data/spec/mongoid/unit_of_work_spec.rb +0 -196
  570. data/spec/mongoid/versioning_spec.rb +0 -540
  571. data/spec/rack/mongoid/middleware/identity_map_spec.rb +0 -72
@@ -71,7 +71,7 @@ module Mongoid
71
71
  #
72
72
  # @since 2.0.0.rc.1
73
73
  def binding
74
- Bindings::Referenced::In.new(base, target, metadata)
74
+ Bindings::Referenced::In.new(base, target, __metadata)
75
75
  end
76
76
 
77
77
  # Normalize the value provided as a replacement for substitution.
@@ -88,7 +88,7 @@ module Mongoid
88
88
  # @since 3.1.5
89
89
  def normalize(replacement)
90
90
  return replacement if replacement.is_a?(Document)
91
- metadata.builder(klass, replacement).build
91
+ __metadata.builder(klass, replacement).build
92
92
  end
93
93
 
94
94
  # Are we able to persist this relation?
@@ -139,24 +139,8 @@ module Mongoid
139
139
  type.where(metadata.primary_key => object)
140
140
  end
141
141
 
142
- # Get the criteria that is used to eager load a relation of this
143
- # type.
144
- #
145
- # @example Get the eager load criteria.
146
- # Proxy.eager_load(metadata, criteria)
147
- #
148
- # @param [ Metadata ] metadata The relation metadata.
149
- # @param [ Array<Object> ] ids The ids of the target docs.
150
- #
151
- # @return [ Criteria ] The criteria to eager load the relation.
152
- #
153
- # @since 2.2.0
154
- def eager_load(metadata, ids)
155
- raise Errors::EagerLoad.new(metadata.name) if metadata.polymorphic?
156
- klass, _ = metadata.klass, metadata.foreign_key
157
- klass.any_in("_id" => ids.uniq).each do |doc|
158
- IdentityMap.set(doc)
159
- end
142
+ def eager_load_klass
143
+ Relations::Eager::BelongsTo
160
144
  end
161
145
 
162
146
  # Returns true if the relation is an embedded one. In this case
@@ -78,12 +78,8 @@ module Mongoid
78
78
  # @return [ Document ] The new document.
79
79
  #
80
80
  # @since 2.0.0.beta.1
81
- def build(attributes = {}, options = {}, type = nil)
82
- if options.is_a? Class
83
- options, type = {}, options
84
- end
85
-
86
- doc = Factory.build(type || klass, attributes, options)
81
+ def build(attributes = {}, type = nil)
82
+ doc = Factory.build(type || klass, attributes)
87
83
  append(doc)
88
84
  doc.apply_post_processed_defaults
89
85
  yield(doc) if block_given?
@@ -186,15 +182,15 @@ module Mongoid
186
182
  # conditions.
187
183
  #
188
184
  # @example Find by an id.
189
- # person.posts.find(Moped::BSON::ObjectId.new)
185
+ # person.posts.find(BSON::ObjectId.new)
190
186
  #
191
187
  # @example Find by multiple ids.
192
- # person.posts.find([ Moped::BSON::ObjectId.new, Moped::BSON::ObjectId.new ])
188
+ # person.posts.find([ BSON::ObjectId.new, BSON::ObjectId.new ])
193
189
  #
194
190
  # @note This will keep matching documents in memory for iteration
195
191
  # later.
196
192
  #
197
- # @param [ Moped::BSON::ObjectId, Array<Moped::BSON::ObjectId> ] arg The ids.
193
+ # @param [ BSON::ObjectId, Array<BSON::ObjectId> ] arg The ids.
198
194
  #
199
195
  # @return [ Document, Criteria ] The matching document(s).
200
196
  #
@@ -249,7 +245,7 @@ module Mongoid
249
245
  #
250
246
  # @since 2.0.0.beta.1
251
247
  def purge
252
- unless metadata.destructive?
248
+ unless __metadata.destructive?
253
249
  nullify
254
250
  else
255
251
  after_remove_error = nil
@@ -285,10 +281,10 @@ module Mongoid
285
281
  def substitute(replacement)
286
282
  if replacement
287
283
  new_docs, docs = replacement.compact, []
288
- new_ids = new_docs.map { |doc| doc.id }
284
+ new_ids = new_docs.map { |doc| doc._id }
289
285
  remove_not_in(new_ids)
290
286
  new_docs.each do |doc|
291
- docs.push(doc) if doc.send(foreign_key) != base.id
287
+ docs.push(doc) if doc.send(foreign_key) != base._id
292
288
  end
293
289
  concat(docs)
294
290
  else
@@ -308,7 +304,7 @@ module Mongoid
308
304
  # @since 2.4.0
309
305
  def unscoped
310
306
  klass.unscoped.where(
311
- foreign_key => Conversions.flag(base.id, metadata)
307
+ foreign_key => Conversions.flag(base._id, __metadata)
312
308
  )
313
309
  end
314
310
 
@@ -324,6 +320,8 @@ module Mongoid
324
320
  #
325
321
  # @since 2.0.0.rc.1
326
322
  def append(document)
323
+ document.with(@persistence_options) if @persistence_options
324
+
327
325
  execute_callback :before_add, document
328
326
  target.push(document)
329
327
  characterize_one(document)
@@ -342,7 +340,7 @@ module Mongoid
342
340
  #
343
341
  # @since 2.0.0.rc.1
344
342
  def binding
345
- Bindings::Referenced::Many.new(base, target, metadata)
343
+ Bindings::Referenced::Many.new(base, target, __metadata)
346
344
  end
347
345
 
348
346
  # Get the collection of the relation in question.
@@ -368,8 +366,8 @@ module Mongoid
368
366
  # @since 2.0.0.beta.1
369
367
  def criteria
370
368
  Many.criteria(
371
- metadata,
372
- Conversions.flag(base.send(metadata.primary_key), metadata),
369
+ __metadata,
370
+ Conversions.flag(base.send(__metadata.primary_key), __metadata),
373
371
  base.class
374
372
  )
375
373
  end
@@ -387,8 +385,8 @@ module Mongoid
387
385
  # @since 2.1.0
388
386
  def cascade!(document)
389
387
  if persistable?
390
- if metadata.destructive?
391
- document.send(metadata.dependent)
388
+ if __metadata.destructive?
389
+ document.send(__metadata.dependent)
392
390
  else
393
391
  document.save
394
392
  end
@@ -412,7 +410,7 @@ module Mongoid
412
410
  target.send(name, *args, &block)
413
411
  else
414
412
  klass.send(:with_scope, criteria) do
415
- criteria.send(name, *args, &block)
413
+ criteria.public_send(name, *args, &block)
416
414
  end
417
415
  end
418
416
  end
@@ -488,16 +486,16 @@ module Mongoid
488
486
  # @since 2.4.0
489
487
  def remove_not_in(ids)
490
488
  removed = criteria.not_in(_id: ids)
491
- if metadata.destructive?
489
+ if __metadata.destructive?
492
490
  removed.delete_all
493
491
  else
494
492
  removed.update_all(foreign_key => nil)
495
493
  end
496
494
  in_memory.each do |doc|
497
- if !ids.include?(doc.id)
495
+ if !ids.include?(doc._id)
498
496
  unbind_one(doc)
499
497
  target.delete(doc)
500
- if metadata.destructive?
498
+ if __metadata.destructive?
501
499
  doc.destroyed = true
502
500
  end
503
501
  end
@@ -571,19 +569,8 @@ module Mongoid
571
569
  )
572
570
  end
573
571
 
574
- # Eager load the relation based on the criteria.
575
- #
576
- # @example Eager load the criteria.
577
- # Proxy.eager_load(metadata, criteria)
578
- #
579
- # @param [ Metadata ] metadata The relation metadata.
580
- # @param [ Array<Object> ] ids The ids of the base docs.
581
- #
582
- # @return [ Criteria ] The criteria to eager load the relation.
583
- #
584
- # @since 2.2.0
585
- def eager_load(metadata, ids)
586
- eager_load_ids(metadata, ids) { |doc, key| IdentityMap.set_many(doc, key) }
572
+ def eager_load_klass
573
+ Relations::Eager::HasMany
587
574
  end
588
575
 
589
576
  # Returns true if the relation is an embedded one. In this case
@@ -29,7 +29,7 @@ module Mongoid
29
29
  return concat(docs) if docs.size > 1
30
30
  if doc = docs.first
31
31
  append(doc)
32
- base.add_to_set(foreign_key, doc.send(metadata.primary_key))
32
+ base.add_to_set(foreign_key => doc.send(__metadata.primary_key))
33
33
  if child_persistable?(doc)
34
34
  doc.save
35
35
  end
@@ -55,17 +55,17 @@ module Mongoid
55
55
  next unless doc
56
56
  append(doc)
57
57
  if persistable? || _creating?
58
- ids[doc.id] = true
58
+ ids[doc._id] = true
59
59
  save_or_delay(doc, docs, inserts)
60
60
  else
61
61
  existing = base.send(foreign_key)
62
- unless existing.include?(doc.id)
63
- existing.push(doc.id) and unsynced(base, foreign_key)
62
+ unless existing.include?(doc._id)
63
+ existing.push(doc._id) and unsynced(base, foreign_key)
64
64
  end
65
65
  end
66
66
  end
67
67
  if persistable? || _creating?
68
- base.push_all(foreign_key, ids.keys)
68
+ base.push(foreign_key => ids.keys)
69
69
  end
70
70
  persist_delayed(docs, inserts)
71
71
  self
@@ -77,26 +77,20 @@ module Mongoid
77
77
  # @example Build a new document on the relation.
78
78
  # person.posts.build(:title => "A new post")
79
79
  #
80
- # @overload build(attributes = {}, options = {}, type = nil)
80
+ # @overload build(attributes = {}, type = nil)
81
81
  # @param [ Hash ] attributes The attributes of the new document.
82
- # @param [ Hash ] options The scoped assignment options.
83
82
  # @param [ Class ] type The optional subclass to build.
84
83
  #
85
84
  # @overload build(attributes = {}, type = nil)
86
85
  # @param [ Hash ] attributes The attributes of the new document.
87
- # @param [ Hash ] options The scoped assignment options.
88
86
  # @param [ Class ] type The optional subclass to build.
89
87
  #
90
88
  # @return [ Document ] The new document.
91
89
  #
92
90
  # @since 2.0.0.beta.1
93
- def build(attributes = {}, options = {}, type = nil)
94
- if options.is_a? Class
95
- options, type = {}, options
96
- end
97
-
98
- doc = Factory.build(type || klass, attributes, options)
99
- base.send(foreign_key).push(doc.id)
91
+ def build(attributes = {}, type = nil)
92
+ doc = Factory.build(type || klass, attributes)
93
+ base.send(foreign_key).push(doc._id)
100
94
  append(doc)
101
95
  doc.apply_post_processed_defaults
102
96
  unsynced(doc, inverse_foreign_key)
@@ -120,7 +114,7 @@ module Mongoid
120
114
  def delete(document)
121
115
  doc = super
122
116
  if doc && persistable?
123
- base.pull(foreign_key, doc.send(metadata.primary_key))
117
+ base.pull(foreign_key => doc.send(__metadata.primary_key))
124
118
  target._unloaded = criteria
125
119
  unsynced(base, foreign_key)
126
120
  end
@@ -139,19 +133,16 @@ module Mongoid
139
133
  target.each do |doc|
140
134
  execute_callback :before_remove, doc
141
135
  end
142
- unless metadata.forced_nil_inverse?
143
- criteria.pull(inverse_foreign_key, base.id)
136
+ unless __metadata.forced_nil_inverse?
137
+ criteria.pull(inverse_foreign_key => base._id)
144
138
  end
145
139
  if persistable?
146
- base.set(
147
- foreign_key,
148
- base.send(foreign_key).clear
149
- )
140
+ base.set(foreign_key => base.send(foreign_key).clear)
150
141
  end
151
142
  after_remove_error = nil
152
143
  many_to_many = target.clear do |doc|
153
144
  unbind_one(doc)
154
- unless metadata.forced_nil_inverse?
145
+ unless __metadata.forced_nil_inverse?
155
146
  doc.changed_attributes.delete(inverse_foreign_key)
156
147
  end
157
148
  begin
@@ -230,7 +221,7 @@ module Mongoid
230
221
  #
231
222
  # @since 2.0.0.rc.1
232
223
  def binding
233
- Bindings::Referenced::ManyToMany.new(base, target, metadata)
224
+ Bindings::Referenced::ManyToMany.new(base, target, __metadata)
234
225
  end
235
226
 
236
227
  # Determine if the child document should be persisted.
@@ -247,7 +238,7 @@ module Mongoid
247
238
  # @since 3.0.20
248
239
  def child_persistable?(doc)
249
240
  (persistable? || _creating?) &&
250
- !(doc.persisted? && metadata.forced_nil_inverse?)
241
+ !(doc.persisted? && __metadata.forced_nil_inverse?)
251
242
  end
252
243
 
253
244
  # Returns the criteria object for the target class with its documents set
@@ -258,7 +249,7 @@ module Mongoid
258
249
  #
259
250
  # @return [ Criteria ] A new criteria.
260
251
  def criteria
261
- ManyToMany.criteria(metadata, base.send(foreign_key))
252
+ ManyToMany.criteria(__metadata, base.send(foreign_key))
262
253
  end
263
254
 
264
255
  # Flag the base as unsynced with respect to the foreign key.
@@ -320,22 +311,8 @@ module Mongoid
320
311
  )
321
312
  end
322
313
 
323
- # Get the criteria that is used to eager load a relation of this
324
- # type.
325
- #
326
- # @example Get the eager load criteria.
327
- # Proxy.eager_load(metadata, criteria)
328
- #
329
- # @param [ Metadata ] metadata The relation metadata.
330
- # @param [ Array<Object> ] ids The ids of the documents to load.
331
- #
332
- # @return [ Criteria ] The criteria to eager load the relation.
333
- #
334
- # @since 2.2.0
335
- def eager_load(metadata, ids)
336
- metadata.klass.any_in(_id: ids).each do |doc|
337
- IdentityMap.set(doc)
338
- end
314
+ def eager_load_klass
315
+ Relations::Eager::HasAndBelongsToMany
339
316
  end
340
317
 
341
318
  # Returns true if the relation is an embedded one. In this case
@@ -53,13 +53,13 @@ module Mongoid
53
53
  def substitute(replacement)
54
54
  unbind_one
55
55
  if persistable?
56
- if metadata.destructive?
57
- send(metadata.dependent)
56
+ if __metadata.destructive?
57
+ send(__metadata.dependent)
58
58
  else
59
59
  save if persisted?
60
60
  end
61
61
  end
62
- One.new(base, replacement, metadata) if replacement
62
+ One.new(base, replacement, __metadata) if replacement
63
63
  end
64
64
 
65
65
  private
@@ -73,7 +73,7 @@ module Mongoid
73
73
  #
74
74
  # @return [ Binding ] The binding object.
75
75
  def binding
76
- Bindings::Referenced::One.new(base, target, metadata)
76
+ Bindings::Referenced::One.new(base, target, __metadata)
77
77
  end
78
78
 
79
79
  # Are we able to persist this relation?
@@ -122,33 +122,14 @@ module Mongoid
122
122
  # @since 2.1.0
123
123
  def criteria(metadata, object, type = nil)
124
124
  crit = metadata.klass.where(metadata.foreign_key => object)
125
-
126
125
  if metadata.polymorphic?
127
126
  crit = crit.where(metadata.type => type.name)
128
127
  end
129
-
130
- inverse_metadata = metadata.inverse_metadata(metadata.klass)
131
- if inverse_metadata.inverse_of_field
132
- crit = crit.any_in(inverse_metadata.inverse_of_field => [metadata.name, nil])
133
- end
134
-
135
128
  crit
136
129
  end
137
130
 
138
- # Get the criteria that is used to eager load a relation of this
139
- # type.
140
- #
141
- # @example Get the eager load criteria.
142
- # Proxy.eager_load(metadata, criteria)
143
- #
144
- # @param [ Metadata ] metadata The relation metadata.
145
- # @param [ Array<Object> ] ids The ids of the base docs.
146
- #
147
- # @return [ Criteria ] The criteria to eager load the relation.
148
- #
149
- # @since 2.2.0
150
- def eager_load(metadata, ids)
151
- eager_load_ids(metadata, ids) { |doc, key| IdentityMap.set_one(doc, key) }
131
+ def eager_load_klass
132
+ Relations::Eager::HasOne
152
133
  end
153
134
 
154
135
  # Returns true if the relation is an embedded one. In this case
@@ -61,7 +61,7 @@ module Mongoid
61
61
  def remove_inverse_keys(meta)
62
62
  foreign_keys = send(meta.foreign_key)
63
63
  unless foreign_keys.nil? || foreign_keys.empty?
64
- meta.criteria(foreign_keys, self.class).pull(meta.inverse_foreign_key, id)
64
+ meta.criteria(foreign_keys, self.class).pull(meta.inverse_foreign_key => _id)
65
65
  end
66
66
  end
67
67
 
@@ -87,15 +87,15 @@ module Mongoid
87
87
  # had occurred.
88
88
  if meta.autosave?
89
89
  send(meta.name).in_memory.each do |doc|
90
- adds.delete_one(doc.id)
90
+ adds.delete_one(doc._id)
91
91
  end
92
92
  end
93
93
 
94
94
  unless adds.empty?
95
- meta.criteria(adds, self.class).without_options.add_to_set(meta.inverse_foreign_key, id)
95
+ meta.criteria(adds, self.class).without_options.add_to_set(meta.inverse_foreign_key => _id)
96
96
  end
97
97
  unless subs.empty?
98
- meta.criteria(subs, self.class).without_options.pull(meta.inverse_foreign_key, id)
98
+ meta.criteria(subs, self.class).without_options.pull(meta.inverse_foreign_key => _id)
99
99
  end
100
100
  end
101
101
  end
@@ -59,7 +59,7 @@ module Mongoid
59
59
  #
60
60
  # @since 2.1.0
61
61
  def <<(document)
62
- _added[document.id] = document
62
+ _added[document._id] = document
63
63
  self
64
64
  end
65
65
  alias :push :<<
@@ -110,9 +110,9 @@ module Mongoid
110
110
  #
111
111
  # @since 2.1.0
112
112
  def delete(document)
113
- doc = (_loaded.delete(document.id) || _added.delete(document.id))
113
+ doc = (_loaded.delete(document._id) || _added.delete(document._id))
114
114
  unless doc
115
- if _unloaded && _unloaded.where(_id: document.id).exists?
115
+ if _unloaded && _unloaded.where(_id: document._id).exists?
116
116
  yield(document) if block_given?
117
117
  return document
118
118
  end
@@ -128,7 +128,7 @@ module Mongoid
128
128
  #
129
129
  # @example Delete all matching documents.
130
130
  # enumerable.delete_if do |doc|
131
- # dod.id == id
131
+ # dod._id == _id
132
132
  # end
133
133
  #
134
134
  # @return [ Array<Document> ] The remaining docs.
@@ -138,8 +138,8 @@ module Mongoid
138
138
  load_all!
139
139
  deleted = in_memory.select(&block)
140
140
  deleted.each do |doc|
141
- _loaded.delete(doc.id)
142
- _added.delete(doc.id)
141
+ _loaded.delete(doc._id)
142
+ _added.delete(doc._id)
143
143
  end
144
144
  self
145
145
  end
@@ -179,8 +179,8 @@ module Mongoid
179
179
  end
180
180
  else
181
181
  unloaded_documents.each do |doc|
182
- document = _added.delete(doc.id) || _loaded.delete(doc.id) || doc
183
- _loaded[document.id] = document
182
+ document = _added.delete(doc._id) || _loaded.delete(doc._id) || doc
183
+ _loaded[document._id] = document
184
184
  yield(document)
185
185
  end
186
186
  end
@@ -237,7 +237,7 @@ module Mongoid
237
237
  else
238
238
  @_added, @executed = {}, true
239
239
  @_loaded = target.inject({}) do |_target, doc|
240
- _target[doc.id] = doc
240
+ _target[doc._id] = doc
241
241
  _target
242
242
  end
243
243
  end
@@ -255,7 +255,7 @@ module Mongoid
255
255
  # @since 3.0.0
256
256
  def include?(doc)
257
257
  return super unless _unloaded
258
- _unloaded.where(_id: doc.id).exists? || _added.has_key?(doc.id)
258
+ _unloaded.where(_id: doc._id).exists? || _added.has_key?(doc._id)
259
259
  end
260
260
 
261
261
  # Inspection will just inspect the entries for nice array-style