mongoid 3.1.6 → 4.0.2

Sign up to get free protection for your applications and to get access to all the features.
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