mongoid 3.1.7 → 4.0.0.alpha1

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 (521) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +317 -11
  3. data/README.md +4 -5
  4. data/lib/config/locales/en.yml +9 -12
  5. data/lib/mongoid.rb +6 -75
  6. data/lib/mongoid/atomic.rb +0 -11
  7. data/lib/mongoid/atomic/paths/embedded.rb +0 -30
  8. data/lib/mongoid/atomic/paths/root.rb +0 -13
  9. data/lib/mongoid/attributes.rb +30 -108
  10. data/lib/mongoid/attributes/dynamic.rb +154 -0
  11. data/lib/mongoid/attributes/nested.rb +82 -0
  12. data/lib/mongoid/attributes/processing.rb +13 -66
  13. data/lib/mongoid/{dirty.rb → changeable.rb} +5 -2
  14. data/lib/mongoid/composable.rb +104 -0
  15. data/lib/mongoid/config.rb +3 -9
  16. data/lib/mongoid/config/options.rb +1 -1
  17. data/lib/mongoid/contextual/aggregable/mongo.rb +5 -9
  18. data/lib/mongoid/contextual/atomic.rb +53 -53
  19. data/lib/mongoid/contextual/command.rb +26 -0
  20. data/lib/mongoid/contextual/map_reduce.rb +1 -1
  21. data/lib/mongoid/contextual/memory.rb +6 -5
  22. data/lib/mongoid/contextual/mongo.rb +59 -28
  23. data/lib/mongoid/contextual/text_search.rb +180 -0
  24. data/lib/mongoid/copyable.rb +2 -3
  25. data/lib/mongoid/criteria.rb +13 -33
  26. data/lib/mongoid/criteria/{#findable.rb# → findable.rb} +0 -2
  27. data/lib/mongoid/{criterion/inspection.rb → criteria/inspectable.rb} +2 -2
  28. data/lib/mongoid/{criterion → criteria}/marshalable.rb +3 -1
  29. data/lib/mongoid/{criterion → criteria}/modifiable.rb +1 -1
  30. data/lib/mongoid/{criterion/scoping.rb → criteria/scopable.rb} +2 -2
  31. data/lib/mongoid/document.rb +28 -12
  32. data/lib/mongoid/errors.rb +1 -1
  33. data/lib/mongoid/errors/document_not_found.rb +2 -1
  34. data/lib/mongoid/errors/invalid_value.rb +16 -0
  35. data/lib/mongoid/errors/mongoid_error.rb +1 -1
  36. data/lib/mongoid/extensions.rb +2 -7
  37. data/lib/mongoid/extensions/array.rb +2 -2
  38. data/lib/mongoid/extensions/boolean.rb +14 -17
  39. data/lib/mongoid/extensions/float.rb +1 -0
  40. data/lib/mongoid/extensions/hash.rb +1 -1
  41. data/lib/mongoid/extensions/object.rb +4 -4
  42. data/lib/mongoid/extensions/object_id.rb +5 -5
  43. data/lib/mongoid/extensions/range.rb +8 -2
  44. data/lib/mongoid/extensions/string.rb +5 -17
  45. data/lib/mongoid/extensions/time.rb +2 -2
  46. data/lib/mongoid/factory.rb +3 -3
  47. data/lib/mongoid/fields.rb +9 -8
  48. data/lib/mongoid/fields/foreign_key.rb +3 -3
  49. data/lib/mongoid/fields/standard.rb +4 -16
  50. data/lib/mongoid/fields/validators/macro.rb +11 -3
  51. data/lib/mongoid/{finders.rb → findable.rb} +6 -2
  52. data/lib/mongoid/{indexes.rb → indexable.rb} +50 -55
  53. data/lib/mongoid/indexable/specification.rb +104 -0
  54. data/lib/mongoid/{indexes → indexable}/validators/options.rb +2 -1
  55. data/lib/mongoid/{inspection.rb → inspectable.rb} +15 -11
  56. data/lib/mongoid/{callbacks.rb → interceptable.rb} +3 -52
  57. data/lib/mongoid/log_subscriber.rb +22 -0
  58. data/lib/mongoid/matchable.rb +152 -0
  59. data/lib/mongoid/{matchers → matchable}/all.rb +1 -1
  60. data/lib/mongoid/{matchers → matchable}/and.rb +2 -2
  61. data/lib/mongoid/{matchers → matchable}/default.rb +1 -1
  62. data/lib/mongoid/{matchers → matchable}/exists.rb +1 -1
  63. data/lib/mongoid/{matchers → matchable}/gt.rb +1 -1
  64. data/lib/mongoid/{matchers → matchable}/gte.rb +1 -1
  65. data/lib/mongoid/{matchers → matchable}/in.rb +2 -2
  66. data/lib/mongoid/{matchers → matchable}/lt.rb +1 -1
  67. data/lib/mongoid/{matchers → matchable}/lte.rb +1 -1
  68. data/lib/mongoid/{matchers → matchable}/ne.rb +1 -1
  69. data/lib/mongoid/{matchers → matchable}/nin.rb +3 -2
  70. data/lib/mongoid/{matchers → matchable}/or.rb +2 -2
  71. data/lib/mongoid/{matchers → matchable}/size.rb +1 -1
  72. data/lib/mongoid/persistable.rb +212 -0
  73. data/lib/mongoid/persistable/creatable.rb +188 -0
  74. data/lib/mongoid/persistable/deletable.rb +148 -0
  75. data/lib/mongoid/persistable/destroyable.rb +55 -0
  76. data/lib/mongoid/persistable/incrementable.rb +36 -0
  77. data/lib/mongoid/persistable/logical.rb +38 -0
  78. data/lib/mongoid/persistable/poppable.rb +39 -0
  79. data/lib/mongoid/persistable/pullable.rb +55 -0
  80. data/lib/mongoid/persistable/pushable.rb +62 -0
  81. data/lib/mongoid/persistable/renamable.rb +35 -0
  82. data/lib/mongoid/persistable/savable.rb +52 -0
  83. data/lib/mongoid/persistable/settable.rb +33 -0
  84. data/lib/mongoid/persistable/unsettable.rb +36 -0
  85. data/lib/mongoid/persistable/updatable.rb +151 -0
  86. data/lib/mongoid/persistable/upsertable.rb +55 -0
  87. data/lib/mongoid/positional.rb +71 -0
  88. data/lib/mongoid/railtie.rb +32 -45
  89. data/lib/mongoid/railties/database.rake +12 -6
  90. data/lib/mongoid/relations.rb +3 -3
  91. data/lib/mongoid/relations/accessors.rb +13 -46
  92. data/lib/mongoid/relations/auto_save.rb +15 -36
  93. data/lib/mongoid/relations/binding.rb +0 -23
  94. data/lib/mongoid/relations/bindings/embedded/many.rb +1 -3
  95. data/lib/mongoid/relations/bindings/referenced/in.rb +3 -8
  96. data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +3 -1
  97. data/lib/mongoid/relations/builder.rb +1 -1
  98. data/lib/mongoid/relations/builders.rb +2 -2
  99. data/lib/mongoid/relations/builders/nested_attributes/many.rb +10 -13
  100. data/lib/mongoid/relations/builders/nested_attributes/one.rb +4 -5
  101. data/lib/mongoid/relations/builders/referenced/in.rb +1 -1
  102. data/lib/mongoid/relations/builders/referenced/many.rb +1 -2
  103. data/lib/mongoid/relations/builders/referenced/many_to_many.rb +1 -2
  104. data/lib/mongoid/relations/builders/referenced/one.rb +1 -1
  105. data/lib/mongoid/relations/cascading.rb +3 -5
  106. data/lib/mongoid/relations/constraint.rb +1 -1
  107. data/lib/mongoid/relations/conversions.rb +1 -1
  108. data/lib/mongoid/relations/counter_cache.rb +39 -15
  109. data/lib/mongoid/relations/eager.rb +47 -0
  110. data/lib/mongoid/relations/eager/base.rb +57 -0
  111. data/lib/mongoid/relations/eager/belongs_to.rb +30 -0
  112. data/lib/mongoid/relations/eager/has_and_belongs_to_many.rb +40 -0
  113. data/lib/mongoid/relations/eager/has_many.rb +37 -0
  114. data/lib/mongoid/relations/eager/has_one.rb +29 -0
  115. data/lib/mongoid/relations/embedded/batchable.rb +3 -4
  116. data/lib/mongoid/relations/embedded/many.rb +7 -27
  117. data/lib/mongoid/relations/macros.rb +2 -4
  118. data/lib/mongoid/relations/many.rb +30 -31
  119. data/lib/mongoid/relations/metadata.rb +6 -75
  120. data/lib/mongoid/relations/nested_builder.rb +2 -2
  121. data/lib/mongoid/relations/options.rb +1 -0
  122. data/lib/mongoid/relations/polymorphic.rb +0 -1
  123. data/lib/mongoid/relations/proxy.rb +10 -32
  124. data/lib/mongoid/relations/referenced/in.rb +2 -18
  125. data/lib/mongoid/relations/referenced/many.rb +9 -22
  126. data/lib/mongoid/relations/referenced/many_to_many.rb +10 -33
  127. data/lib/mongoid/relations/referenced/one.rb +2 -21
  128. data/lib/mongoid/relations/synchronization.rb +3 -3
  129. data/lib/mongoid/relations/touchable.rb +33 -0
  130. data/lib/mongoid/{reloading.rb → reloadable.rb} +6 -4
  131. data/lib/mongoid/{scoping.rb → scopable.rb} +26 -3
  132. data/lib/mongoid/selectable.rb +59 -0
  133. data/lib/mongoid/{serialization.rb → serializable.rb} +10 -1
  134. data/lib/mongoid/sessions.rb +37 -345
  135. data/lib/mongoid/sessions/factory.rb +2 -0
  136. data/lib/mongoid/sessions/options.rb +176 -0
  137. data/lib/mongoid/sessions/storage_options.rb +140 -0
  138. data/lib/mongoid/sessions/thread_options.rb +19 -0
  139. data/lib/mongoid/sessions/validators/storage.rb +15 -1
  140. data/lib/mongoid/{sharding.rb → shardable.rb} +5 -1
  141. data/lib/mongoid/support/query_counter.rb +23 -0
  142. data/lib/mongoid/threaded.rb +0 -110
  143. data/lib/mongoid/threaded/lifecycle.rb +0 -28
  144. data/lib/mongoid/timestamps/updated/short.rb +2 -2
  145. data/lib/mongoid/{hierarchy.rb → traversable.rb} +9 -5
  146. data/lib/mongoid/{validations.rb → validatable.rb} +23 -9
  147. data/lib/mongoid/{validations → validatable}/associated.rb +3 -1
  148. data/lib/mongoid/{validations → validatable}/format.rb +1 -1
  149. data/lib/mongoid/{validations → validatable}/length.rb +1 -1
  150. data/lib/mongoid/{validations → validatable}/localizable.rb +1 -1
  151. data/lib/mongoid/{validations → validatable}/macros.rb +4 -3
  152. data/lib/mongoid/{validations → validatable}/presence.rb +1 -1
  153. data/lib/mongoid/{validations → validatable}/queryable.rb +1 -2
  154. data/lib/mongoid/{validations → validatable}/uniqueness.rb +3 -3
  155. data/lib/mongoid/version.rb +1 -1
  156. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +9 -13
  157. data/lib/rails/generators/mongoid/model/model_generator.rb +0 -1
  158. data/lib/rails/generators/mongoid/model/templates/model.rb.tt +0 -3
  159. data/lib/rails/generators/mongoid_generator.rb +3 -40
  160. data/lib/rails/mongoid.rb +59 -57
  161. data/lib/support/ruby_version.rb +1 -1
  162. data/spec/app/models/account.rb +2 -6
  163. data/spec/app/models/acolyte.rb +1 -0
  164. data/spec/app/models/actor.rb +0 -1
  165. data/spec/app/models/address.rb +6 -1
  166. data/spec/app/models/animal.rb +1 -1
  167. data/spec/app/models/appointment.rb +2 -2
  168. data/spec/app/models/article.rb +1 -4
  169. data/spec/app/models/audio.rb +5 -0
  170. data/spec/app/models/author.rb +0 -2
  171. data/spec/app/models/band.rb +3 -2
  172. data/spec/app/models/bar.rb +1 -0
  173. data/spec/app/models/book.rb +1 -0
  174. data/spec/app/models/building.rb +0 -2
  175. data/spec/app/models/building_address.rb +0 -2
  176. data/spec/app/models/bus.rb +1 -1
  177. data/spec/app/models/canvas.rb +1 -1
  178. data/spec/app/models/contractor.rb +0 -2
  179. data/spec/app/models/country_code.rb +1 -1
  180. data/spec/app/models/definition.rb +2 -2
  181. data/spec/app/models/dragon.rb +4 -0
  182. data/spec/app/models/drug.rb +1 -3
  183. data/spec/app/models/dungeon.rb +4 -0
  184. data/spec/app/models/filesystem.rb +1 -0
  185. data/spec/app/models/fish.rb +0 -1
  186. data/spec/app/models/fruits.rb +6 -0
  187. data/spec/app/models/game.rb +0 -2
  188. data/spec/app/models/house.rb +0 -2
  189. data/spec/app/models/item.rb +1 -5
  190. data/spec/app/models/jar.rb +1 -1
  191. data/spec/app/models/label.rb +4 -4
  192. data/spec/app/models/login.rb +1 -1
  193. data/spec/app/models/movie.rb +1 -0
  194. data/spec/app/models/name.rb +3 -3
  195. data/spec/app/models/note.rb +1 -1
  196. data/spec/app/models/oscar.rb +1 -1
  197. data/spec/app/models/parent_doc.rb +1 -1
  198. data/spec/app/models/person.rb +13 -8
  199. data/spec/app/models/phone.rb +1 -3
  200. data/spec/app/models/player.rb +1 -1
  201. data/spec/app/models/post.rb +2 -1
  202. data/spec/app/models/quiz.rb +0 -3
  203. data/spec/app/models/record.rb +5 -5
  204. data/spec/app/models/registry.rb +1 -1
  205. data/spec/app/models/server.rb +1 -1
  206. data/spec/app/models/service.rb +3 -3
  207. data/spec/app/models/sound.rb +5 -0
  208. data/spec/app/models/template.rb +1 -1
  209. data/spec/app/models/title.rb +0 -1
  210. data/spec/app/models/track.rb +5 -5
  211. data/spec/app/models/tree.rb +1 -1
  212. data/spec/app/models/video.rb +0 -4
  213. data/spec/app/models/wiki_page.rb +1 -4
  214. data/spec/app/models/word.rb +3 -0
  215. data/spec/app/models/word_origin.rb +1 -1
  216. data/spec/config/mongoid.yml +7 -8
  217. data/spec/helpers.rb +18 -0
  218. data/spec/mongoid/atomic/modifiers_spec.rb +22 -22
  219. data/spec/mongoid/atomic/paths/embedded/many_spec.rb +8 -49
  220. data/spec/mongoid/atomic/paths/embedded/one_spec.rb +7 -49
  221. data/spec/mongoid/atomic/paths/root_spec.rb +3 -61
  222. data/spec/mongoid/atomic/paths_spec.rb +19 -19
  223. data/spec/mongoid/atomic_spec.rb +19 -19
  224. data/spec/mongoid/{nested_attributes_spec.rb → attributes/nested_spec.rb} +335 -448
  225. data/spec/mongoid/attributes/readonly_spec.rb +16 -16
  226. data/spec/mongoid/attributes_spec.rb +188 -434
  227. data/spec/mongoid/{dirty_spec.rb → changeable_spec.rb} +117 -148
  228. data/spec/mongoid/{components_spec.rb → composable_spec.rb} +3 -3
  229. data/spec/mongoid/config/environment_spec.rb +3 -3
  230. data/spec/mongoid/config/options_spec.rb +6 -6
  231. data/spec/mongoid/config_spec.rb +24 -48
  232. data/spec/mongoid/contextual/aggregable/memory_spec.rb +12 -12
  233. data/spec/mongoid/contextual/aggregable/mongo_spec.rb +46 -38
  234. data/spec/mongoid/contextual/atomic_spec.rb +60 -56
  235. data/spec/mongoid/contextual/find_and_modify_spec.rb +14 -14
  236. data/spec/mongoid/contextual/geo_near_spec.rb +22 -22
  237. data/spec/mongoid/contextual/map_reduce_spec.rb +27 -27
  238. data/spec/mongoid/contextual/memory_spec.rb +94 -94
  239. data/spec/mongoid/contextual/mongo_spec.rb +225 -139
  240. data/spec/mongoid/contextual/text_search_spec.rb +207 -0
  241. data/spec/mongoid/copyable_spec.rb +56 -68
  242. data/spec/mongoid/criteria/findable_spec.rb +991 -0
  243. data/spec/mongoid/{criterion/inspection_spec.rb → criteria/inspectable_spec.rb} +5 -5
  244. data/spec/mongoid/{criterion → criteria}/marshalable_spec.rb +2 -2
  245. data/spec/mongoid/criteria/modifiable_spec.rb +1063 -0
  246. data/spec/mongoid/{criterion/scoping_spec.rb → criteria/scopable_spec.rb} +31 -31
  247. data/spec/mongoid/criteria_spec.rb +530 -2207
  248. data/spec/mongoid/document_spec.rb +166 -120
  249. data/spec/mongoid/equality_spec.rb +22 -22
  250. data/spec/mongoid/errors/ambiguous_relationship_spec.rb +3 -3
  251. data/spec/mongoid/errors/callback_spec.rb +3 -3
  252. data/spec/mongoid/errors/delete_restriction_spec.rb +3 -3
  253. data/spec/mongoid/errors/document_not_found_spec.rb +11 -11
  254. data/spec/mongoid/errors/eager_load_spec.rb +3 -3
  255. data/spec/mongoid/errors/invalid_collection_spec.rb +3 -3
  256. data/spec/mongoid/errors/invalid_config_option_spec.rb +3 -3
  257. data/spec/mongoid/errors/invalid_field_option_spec.rb +3 -3
  258. data/spec/mongoid/errors/invalid_field_spec.rb +3 -3
  259. data/spec/mongoid/errors/invalid_find_spec.rb +3 -3
  260. data/spec/mongoid/errors/invalid_includes_spec.rb +3 -3
  261. data/spec/mongoid/errors/invalid_index_spec.rb +3 -3
  262. data/spec/mongoid/errors/invalid_options_spec.rb +3 -3
  263. data/spec/mongoid/errors/invalid_path_spec.rb +3 -3
  264. data/spec/mongoid/errors/invalid_scope_spec.rb +3 -3
  265. data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +3 -3
  266. data/spec/mongoid/errors/invalid_storage_options_spec.rb +3 -3
  267. data/spec/mongoid/errors/invalid_time_spec.rb +3 -3
  268. data/spec/mongoid/errors/inverse_not_found_spec.rb +3 -3
  269. data/spec/mongoid/errors/mixed_relations_spec.rb +3 -3
  270. data/spec/mongoid/errors/mixed_session_configuration_spec.rb +3 -3
  271. data/spec/mongoid/errors/mongoid_error_spec.rb +7 -7
  272. data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +3 -3
  273. data/spec/mongoid/errors/no_environment_spec.rb +3 -3
  274. data/spec/mongoid/errors/no_map_reduce_output_spec.rb +3 -3
  275. data/spec/mongoid/errors/no_metadata_spec.rb +3 -3
  276. data/spec/mongoid/errors/no_parent_spec.rb +3 -3
  277. data/spec/mongoid/errors/no_session_config_spec.rb +3 -3
  278. data/spec/mongoid/errors/no_session_database_spec.rb +3 -3
  279. data/spec/mongoid/errors/no_session_hosts_spec.rb +3 -3
  280. data/spec/mongoid/errors/no_sessions_config_spec.rb +3 -3
  281. data/spec/mongoid/errors/readonly_attribute_spec.rb +3 -3
  282. data/spec/mongoid/errors/scope_overwrite_spec.rb +3 -3
  283. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +3 -3
  284. data/spec/mongoid/errors/unknown_attribute_spec.rb +5 -5
  285. data/spec/mongoid/errors/unsaved_document_spec.rb +3 -3
  286. data/spec/mongoid/errors/unsupported_javascript_spec.rb +3 -3
  287. data/spec/mongoid/errors/validations_spec.rb +7 -7
  288. data/spec/mongoid/extensions/array_spec.rb +61 -61
  289. data/spec/mongoid/extensions/big_decimal_spec.rb +11 -11
  290. data/spec/mongoid/extensions/binary_spec.rb +12 -12
  291. data/spec/mongoid/extensions/boolean_spec.rb +18 -18
  292. data/spec/mongoid/extensions/date_spec.rb +13 -13
  293. data/spec/mongoid/extensions/date_time_spec.rb +9 -9
  294. data/spec/mongoid/extensions/false_class_spec.rb +5 -5
  295. data/spec/mongoid/extensions/float_spec.rb +29 -15
  296. data/spec/mongoid/extensions/hash_spec.rb +29 -29
  297. data/spec/mongoid/extensions/integer_spec.rb +15 -15
  298. data/spec/mongoid/extensions/module_spec.rb +2 -2
  299. data/spec/mongoid/extensions/nil_class_spec.rb +1 -1
  300. data/spec/mongoid/extensions/object_id_spec.rb +134 -134
  301. data/spec/mongoid/extensions/object_spec.rb +26 -26
  302. data/spec/mongoid/extensions/range_spec.rb +61 -12
  303. data/spec/mongoid/extensions/regexp_spec.rb +4 -4
  304. data/spec/mongoid/extensions/set_spec.rb +4 -4
  305. data/spec/mongoid/extensions/string_spec.rb +35 -46
  306. data/spec/mongoid/extensions/symbol_spec.rb +9 -9
  307. data/spec/mongoid/extensions/time_spec.rb +49 -49
  308. data/spec/mongoid/extensions/time_with_zone_spec.rb +34 -34
  309. data/spec/mongoid/extensions/true_class_spec.rb +5 -5
  310. data/spec/mongoid/extensions_spec.rb +15 -0
  311. data/spec/mongoid/factory_spec.rb +15 -15
  312. data/spec/mongoid/fields/foreign_key_spec.rb +73 -66
  313. data/spec/mongoid/fields/internal/foreign_keys/array_spec.rb +15 -15
  314. data/spec/mongoid/fields/internal/foreign_keys/object_spec.rb +22 -22
  315. data/spec/mongoid/fields/localized_spec.rb +23 -23
  316. data/spec/mongoid/fields/standard_spec.rb +12 -12
  317. data/spec/mongoid/fields_spec.rb +168 -209
  318. data/spec/mongoid/{finders_spec.rb → findable_spec.rb} +62 -27
  319. data/spec/mongoid/indexable/specification_spec.rb +102 -0
  320. data/spec/mongoid/{indexes_spec.rb → indexable_spec.rb} +171 -51
  321. data/spec/mongoid/{inspection_spec.rb → inspectable_spec.rb} +6 -14
  322. data/spec/mongoid/{callbacks_spec.rb → interceptable_spec.rb} +105 -105
  323. data/spec/mongoid/log_subscriber_spec.rb +74 -0
  324. data/spec/mongoid/loggable_spec.rb +1 -1
  325. data/spec/mongoid/{matchers → matchable}/all_spec.rb +4 -4
  326. data/spec/mongoid/{matchers → matchable}/and_spec.rb +11 -11
  327. data/spec/mongoid/{matchers → matchable}/default_spec.rb +15 -15
  328. data/spec/mongoid/{matchers → matchable}/exists_spec.rb +5 -5
  329. data/spec/mongoid/{matchers → matchable}/gt_spec.rb +9 -8
  330. data/spec/mongoid/{matchers → matchable}/gte_spec.rb +7 -7
  331. data/spec/mongoid/matchable/in_spec.rb +49 -0
  332. data/spec/mongoid/{matchers → matchable}/lt_spec.rb +7 -7
  333. data/spec/mongoid/{matchers → matchable}/lte_spec.rb +7 -7
  334. data/spec/mongoid/{matchers → matchable}/ne_spec.rb +3 -3
  335. data/spec/mongoid/matchable/nin_spec.rb +48 -0
  336. data/spec/mongoid/{matchers → matchable}/or_spec.rb +6 -6
  337. data/spec/mongoid/{matchers → matchable}/size_spec.rb +3 -3
  338. data/spec/mongoid/{matchers_spec.rb → matchable_spec.rb} +41 -41
  339. data/spec/mongoid/persistable/creatable_spec.rb +512 -0
  340. data/spec/mongoid/persistable/deletable_spec.rb +205 -0
  341. data/spec/mongoid/persistable/destroyable_spec.rb +148 -0
  342. data/spec/mongoid/persistable/incrementable_spec.rb +173 -0
  343. data/spec/mongoid/persistable/logical_spec.rb +143 -0
  344. data/spec/mongoid/persistable/poppable_spec.rb +115 -0
  345. data/spec/mongoid/persistable/pullable_spec.rb +228 -0
  346. data/spec/mongoid/persistable/pushable_spec.rb +258 -0
  347. data/spec/mongoid/persistable/renamable_spec.rb +135 -0
  348. data/spec/mongoid/persistable/savable_spec.rb +432 -0
  349. data/spec/mongoid/persistable/settable_spec.rb +139 -0
  350. data/spec/mongoid/persistable/unsettable_spec.rb +155 -0
  351. data/spec/mongoid/persistable/updatable_spec.rb +558 -0
  352. data/spec/mongoid/persistable/upsertable_spec.rb +106 -0
  353. data/spec/mongoid/persistable_spec.rb +206 -0
  354. data/spec/mongoid/{atomic/positionable_spec.rb → positional_spec.rb} +19 -14
  355. data/spec/mongoid/railties/document_spec.rb +2 -2
  356. data/spec/mongoid/relations/accessors_spec.rb +53 -145
  357. data/spec/mongoid/relations/auto_save_spec.rb +36 -16
  358. data/spec/mongoid/relations/bindings/embedded/in_spec.rb +6 -6
  359. data/spec/mongoid/relations/bindings/embedded/many_spec.rb +2 -2
  360. data/spec/mongoid/relations/bindings/embedded/one_spec.rb +3 -3
  361. data/spec/mongoid/relations/bindings/referenced/in_spec.rb +12 -12
  362. data/spec/mongoid/relations/bindings/referenced/many_spec.rb +6 -6
  363. data/spec/mongoid/relations/bindings/referenced/many_to_many_spec.rb +9 -9
  364. data/spec/mongoid/relations/bindings/referenced/one_spec.rb +6 -6
  365. data/spec/mongoid/relations/builders/embedded/in_spec.rb +4 -4
  366. data/spec/mongoid/relations/builders/embedded/many_spec.rb +18 -18
  367. data/spec/mongoid/relations/builders/embedded/one_spec.rb +11 -11
  368. data/spec/mongoid/relations/builders/nested_attributes/many_spec.rb +12 -13
  369. data/spec/mongoid/relations/builders/nested_attributes/one_spec.rb +14 -14
  370. data/spec/mongoid/relations/builders/referenced/in_spec.rb +22 -33
  371. data/spec/mongoid/relations/builders/referenced/many_spec.rb +15 -15
  372. data/spec/mongoid/relations/builders/referenced/many_to_many_spec.rb +18 -18
  373. data/spec/mongoid/relations/builders/referenced/one_spec.rb +11 -24
  374. data/spec/mongoid/relations/builders_spec.rb +21 -21
  375. data/spec/mongoid/relations/cascading/delete_spec.rb +7 -7
  376. data/spec/mongoid/relations/cascading/destroy_spec.rb +2 -2
  377. data/spec/mongoid/relations/cascading/nullify_spec.rb +2 -2
  378. data/spec/mongoid/relations/cascading/restrict_spec.rb +3 -3
  379. data/spec/mongoid/relations/cascading_spec.rb +16 -16
  380. data/spec/mongoid/relations/constraint_spec.rb +8 -7
  381. data/spec/mongoid/relations/conversions_spec.rb +16 -14
  382. data/spec/mongoid/relations/counter_cache_spec.rb +85 -0
  383. data/spec/mongoid/relations/cyclic_spec.rb +18 -18
  384. data/spec/mongoid/relations/eager/belongs_to_spec.rb +154 -0
  385. data/spec/mongoid/relations/eager/has_and_belongs_to_many_spec.rb +143 -0
  386. data/spec/mongoid/relations/eager/has_many_spec.rb +207 -0
  387. data/spec/mongoid/relations/eager/has_one_spec.rb +163 -0
  388. data/spec/mongoid/relations/eager_spec.rb +228 -0
  389. data/spec/mongoid/relations/embedded/dirty_spec.rb +8 -8
  390. data/spec/mongoid/relations/embedded/in_spec.rb +55 -56
  391. data/spec/mongoid/relations/embedded/many_spec.rb +357 -367
  392. data/spec/mongoid/relations/embedded/one_spec.rb +98 -139
  393. data/spec/mongoid/relations/macros_spec.rb +108 -102
  394. data/spec/mongoid/relations/metadata_spec.rb +147 -241
  395. data/spec/mongoid/relations/options_spec.rb +1 -1
  396. data/spec/mongoid/relations/polymorphic_spec.rb +13 -17
  397. data/spec/mongoid/relations/proxy_spec.rb +2 -2
  398. data/spec/mongoid/relations/referenced/in_spec.rb +128 -303
  399. data/spec/mongoid/relations/referenced/many_spec.rb +379 -522
  400. data/spec/mongoid/relations/referenced/many_to_many_spec.rb +345 -417
  401. data/spec/mongoid/relations/referenced/one_spec.rb +148 -263
  402. data/spec/mongoid/relations/reflections_spec.rb +6 -6
  403. data/spec/mongoid/relations/synchronization_spec.rb +46 -50
  404. data/spec/mongoid/relations/targets/enumerable_spec.rb +116 -116
  405. data/spec/mongoid/relations/touchable_spec.rb +296 -0
  406. data/spec/mongoid/relations_spec.rb +16 -15
  407. data/spec/mongoid/{reloading_spec.rb → reloadable_spec.rb} +20 -60
  408. data/spec/mongoid/{scoping_spec.rb → scopable_spec.rb} +74 -126
  409. data/spec/mongoid/selectable_spec.rb +134 -0
  410. data/spec/mongoid/{serialization_spec.rb → serializable_spec.rb} +111 -82
  411. data/spec/mongoid/sessions/factory_spec.rb +49 -28
  412. data/spec/mongoid/sessions/mongo_uri_spec.rb +7 -7
  413. data/spec/mongoid/sessions/options_spec.rb +92 -0
  414. data/spec/mongoid/sessions_spec.rb +288 -177
  415. data/spec/mongoid/{sharding_spec.rb → shardable_spec.rb} +8 -8
  416. data/spec/mongoid/state_spec.rb +10 -10
  417. data/spec/mongoid/threaded_spec.rb +17 -70
  418. data/spec/mongoid/timestamps/created/short_spec.rb +6 -6
  419. data/spec/mongoid/timestamps/created_spec.rb +5 -5
  420. data/spec/mongoid/timestamps/updated/short_spec.rb +10 -10
  421. data/spec/mongoid/timestamps/updated_spec.rb +8 -12
  422. data/spec/mongoid/timestamps_spec.rb +7 -11
  423. data/spec/mongoid/{hierarchy_spec.rb → traversable_spec.rb} +19 -19
  424. data/spec/mongoid/{validations → validatable}/associated_spec.rb +18 -18
  425. data/spec/mongoid/{validations → validatable}/format_spec.rb +6 -6
  426. data/spec/mongoid/{validations → validatable}/length_spec.rb +7 -7
  427. data/spec/mongoid/{validations → validatable}/numericality_spec.rb +1 -1
  428. data/spec/mongoid/{validations → validatable}/presence_spec.rb +31 -38
  429. data/spec/mongoid/{validations → validatable}/uniqueness_spec.rb +126 -183
  430. data/spec/mongoid/{validations_spec.rb → validatable_spec.rb} +28 -28
  431. data/spec/mongoid_spec.rb +8 -8
  432. data/spec/rails/mongoid_spec.rb +72 -87
  433. data/spec/spec_helper.rb +19 -17
  434. metadata +261 -283
  435. data/lib/mongoid/atomic/positionable.rb +0 -73
  436. data/lib/mongoid/components.rb +0 -92
  437. data/lib/mongoid/config/inflections.rb +0 -6
  438. data/lib/mongoid/contextual/eager.rb +0 -158
  439. data/lib/mongoid/criterion/findable.rb +0 -179
  440. data/lib/mongoid/errors/versioning_not_on_root.rb +0 -23
  441. data/lib/mongoid/identity_map.rb +0 -163
  442. data/lib/mongoid/json.rb +0 -16
  443. data/lib/mongoid/matchers.rb +0 -32
  444. data/lib/mongoid/matchers/strategies.rb +0 -97
  445. data/lib/mongoid/multi_parameter_attributes.rb +0 -105
  446. data/lib/mongoid/nested_attributes.rb +0 -78
  447. data/lib/mongoid/observer.rb +0 -192
  448. data/lib/mongoid/paranoia.rb +0 -136
  449. data/lib/mongoid/persistence.rb +0 -357
  450. data/lib/mongoid/persistence/atomic.rb +0 -231
  451. data/lib/mongoid/persistence/atomic/add_to_set.rb +0 -47
  452. data/lib/mongoid/persistence/atomic/bit.rb +0 -35
  453. data/lib/mongoid/persistence/atomic/inc.rb +0 -45
  454. data/lib/mongoid/persistence/atomic/operation.rb +0 -154
  455. data/lib/mongoid/persistence/atomic/pop.rb +0 -32
  456. data/lib/mongoid/persistence/atomic/pull.rb +0 -32
  457. data/lib/mongoid/persistence/atomic/pull_all.rb +0 -32
  458. data/lib/mongoid/persistence/atomic/push.rb +0 -25
  459. data/lib/mongoid/persistence/atomic/push_all.rb +0 -25
  460. data/lib/mongoid/persistence/atomic/rename.rb +0 -30
  461. data/lib/mongoid/persistence/atomic/sets.rb +0 -28
  462. data/lib/mongoid/persistence/atomic/unset.rb +0 -27
  463. data/lib/mongoid/persistence/deletion.rb +0 -31
  464. data/lib/mongoid/persistence/insertion.rb +0 -38
  465. data/lib/mongoid/persistence/modification.rb +0 -35
  466. data/lib/mongoid/persistence/operations.rb +0 -214
  467. data/lib/mongoid/persistence/operations/embedded/insert.rb +0 -46
  468. data/lib/mongoid/persistence/operations/embedded/remove.rb +0 -43
  469. data/lib/mongoid/persistence/operations/insert.rb +0 -34
  470. data/lib/mongoid/persistence/operations/remove.rb +0 -33
  471. data/lib/mongoid/persistence/operations/update.rb +0 -59
  472. data/lib/mongoid/persistence/operations/upsert.rb +0 -28
  473. data/lib/mongoid/persistence/upsertion.rb +0 -31
  474. data/lib/mongoid/unit_of_work.rb +0 -61
  475. data/lib/mongoid/versioning.rb +0 -217
  476. data/lib/rack/mongoid.rb +0 -2
  477. data/lib/rack/mongoid/middleware/identity_map.rb +0 -39
  478. data/lib/rails/generators/mongoid/observer/observer_generator.rb +0 -17
  479. data/lib/rails/generators/mongoid/observer/templates/observer.rb.tt +0 -4
  480. data/spec/app/models/actor_observer.rb +0 -15
  481. data/spec/app/models/callback_recorder.rb +0 -25
  482. data/spec/app/models/draft.rb +0 -9
  483. data/spec/app/models/paranoid_phone.rb +0 -25
  484. data/spec/app/models/paranoid_post.rb +0 -36
  485. data/spec/app/models/phone_observer.rb +0 -6
  486. data/spec/mongoid/#atomic_spec.rb# +0 -365
  487. data/spec/mongoid/attributes/processing_spec.rb +0 -149
  488. data/spec/mongoid/criterion/destructive_spec.rb +0 -101
  489. data/spec/mongoid/criterion/modifiable_spec.rb +0 -409
  490. data/spec/mongoid/criterion/modification_spec.rb +0 -402
  491. data/spec/mongoid/errors/versioning_not_on_root_spec.rb +0 -29
  492. data/spec/mongoid/identity_map_spec.rb +0 -564
  493. data/spec/mongoid/json_spec.rb +0 -33
  494. data/spec/mongoid/matchers/in_spec.rb +0 -25
  495. data/spec/mongoid/matchers/nin_spec.rb +0 -25
  496. data/spec/mongoid/multi_parameter_attributes_spec.rb +0 -128
  497. data/spec/mongoid/observer_spec.rb +0 -290
  498. data/spec/mongoid/paranoia_spec.rb +0 -759
  499. data/spec/mongoid/persistence/atomic/add_to_set_spec.rb +0 -262
  500. data/spec/mongoid/persistence/atomic/bit_spec.rb +0 -88
  501. data/spec/mongoid/persistence/atomic/inc_spec.rb +0 -133
  502. data/spec/mongoid/persistence/atomic/pop_spec.rb +0 -111
  503. data/spec/mongoid/persistence/atomic/pull_all_spec.rb +0 -77
  504. data/spec/mongoid/persistence/atomic/pull_spec.rb +0 -80
  505. data/spec/mongoid/persistence/atomic/push_all_spec.rb +0 -77
  506. data/spec/mongoid/persistence/atomic/push_spec.rb +0 -77
  507. data/spec/mongoid/persistence/atomic/rename_spec.rb +0 -42
  508. data/spec/mongoid/persistence/atomic/sets_spec.rb +0 -154
  509. data/spec/mongoid/persistence/atomic/unset_spec.rb +0 -65
  510. data/spec/mongoid/persistence/atomic_spec.rb +0 -216
  511. data/spec/mongoid/persistence/operations/embedded/insert_spec.rb +0 -191
  512. data/spec/mongoid/persistence/operations/embedded/remove_spec.rb +0 -8
  513. data/spec/mongoid/persistence/operations/insert_spec.rb +0 -149
  514. data/spec/mongoid/persistence/operations/remove_spec.rb +0 -113
  515. data/spec/mongoid/persistence/operations/update_spec.rb +0 -141
  516. data/spec/mongoid/persistence/operations/upsert_spec.rb +0 -59
  517. data/spec/mongoid/persistence/operations_spec.rb +0 -313
  518. data/spec/mongoid/persistence_spec.rb +0 -2279
  519. data/spec/mongoid/unit_of_work_spec.rb +0 -196
  520. data/spec/mongoid/versioning_spec.rb +0 -540
  521. data/spec/rack/mongoid/middleware/identity_map_spec.rb +0 -72
@@ -6,7 +6,7 @@ module Mongoid
6
6
  # Contains behaviour for executing operations in batch on embedded
7
7
  # documents.
8
8
  module Batchable
9
- include Mongoid::Atomic::Positionable
9
+ include Positional
10
10
 
11
11
  # Insert new documents as a batch push ($pushAll). This ensures that
12
12
  # all callbacks are run at the appropriate time and only 1 request is
@@ -200,7 +200,7 @@ module Mongoid
200
200
  docs.map do |doc|
201
201
  attributes = { metadata: metadata, _parent: base }
202
202
  attributes.merge!(doc)
203
- Factory.build(klass, attributes, base.send(:mass_assignment_options))
203
+ Factory.build(klass, attributes)
204
204
  end
205
205
  else
206
206
  docs
@@ -296,7 +296,7 @@ module Mongoid
296
296
  docs.map do |doc|
297
297
  self.path = doc.atomic_path unless path
298
298
  execute_callback :before_remove, doc
299
- if !_assigning? && !metadata.versioned?
299
+ unless _assigning?
300
300
  doc.cascade!
301
301
  doc.run_before_callbacks(:destroy) if method == :destroy
302
302
  end
@@ -346,7 +346,6 @@ module Mongoid
346
346
  doc.run_after_callbacks(:destroy) if method == :destroy
347
347
  doc.freeze
348
348
  doc.destroyed = true
349
- IdentityMap.remove(doc)
350
349
  end
351
350
  end
352
351
  end
@@ -71,7 +71,6 @@ module Mongoid
71
71
  #
72
72
  # @overload build(attributes = {}, options = {}, type = nil)
73
73
  # @param [ Hash ] attributes The attributes to build the document with.
74
- # @param [ Hash ] options The scoped assignment options.
75
74
  # @param [ Class ] type Optional class to build the document with.
76
75
  #
77
76
  # @overload build(attributes = {}, type = nil)
@@ -79,11 +78,8 @@ module Mongoid
79
78
  # @param [ Class ] type Optional class to build the document with.
80
79
  #
81
80
  # @return [ Document ] The new document.
82
- def build(attributes = {}, options = {}, type = nil)
83
- if options.is_a?(Class)
84
- options, type = {}, options
85
- end
86
- doc = Factory.build(type || metadata.klass, attributes, options)
81
+ def build(attributes = {}, type = nil)
82
+ doc = Factory.build(type || metadata.klass, attributes)
87
83
  append(doc)
88
84
  doc.apply_post_processed_defaults
89
85
  yield(doc) if block_given?
@@ -133,13 +129,9 @@ module Mongoid
133
129
  execute_callback :before_remove, document
134
130
  doc = target.delete_one(document)
135
131
  if doc && !_binding?
136
- _unscoped.delete_one(doc) unless doc.paranoid?
132
+ _unscoped.delete_one(doc)
137
133
  if _assigning?
138
- if doc.paranoid?
139
- doc.destroy(suppress: true)
140
- else
141
- base.add_atomic_pull(doc)
142
- end
134
+ base.add_atomic_pull(doc)
143
135
  else
144
136
  doc.delete(suppress: true)
145
137
  unbind_one(doc)
@@ -150,18 +142,6 @@ module Mongoid
150
142
  doc
151
143
  end
152
144
 
153
- # For use only with Mongoid::Paranoia - will be removed in 4.0.
154
- #
155
- # @example Get the deleted documents from the relation.
156
- # person.paranoid_phones.deleted
157
- #
158
- # @return [ Criteria ] The deleted documents.
159
- #
160
- # @since 3.0.10
161
- def deleted
162
- unscoped.deleted
163
- end
164
-
165
145
  # Delete all the documents in the association without running callbacks.
166
146
  #
167
147
  # @example Delete all documents from the relation.
@@ -228,10 +208,10 @@ module Mongoid
228
208
  # methods.
229
209
  #
230
210
  # @example Find a document by its id.
231
- # person.addresses.find(Moped::BSON::ObjectId.new)
211
+ # person.addresses.find(BSON::ObjectId.new)
232
212
  #
233
213
  # @example Find documents for multiple ids.
234
- # person.addresses.find([ Moped::BSON::ObjectId.new, Moped::BSON::ObjectId.new ])
214
+ # person.addresses.find([ BSON::ObjectId.new, BSON::ObjectId.new ])
235
215
  #
236
216
  # @param [ Array<Object> ] args Various arguments.
237
217
  #
@@ -635,7 +615,7 @@ module Mongoid
635
615
  # @since 2.1.0
636
616
  def valid_options
637
617
  [
638
- :as, :cascade_callbacks, :cyclic, :order, :versioned, :store_as,
618
+ :as, :cascade_callbacks, :cyclic, :order, :store_as,
639
619
  :before_add, :after_add, :before_remove, :after_remove
640
620
  ]
641
621
  end
@@ -51,9 +51,6 @@ module Mongoid
51
51
  # @param [ Hash ] options The relation options.
52
52
  # @param [ Proc ] block Optional block for defining extensions.
53
53
  def embedded_in(name, options = {}, &block)
54
- if ancestors.include?(Mongoid::Versioning)
55
- raise Errors::VersioningNotOnRoot.new(self)
56
- end
57
54
  meta = characterize(name, Embedded::In, options, &block)
58
55
  self.embedded = true
59
56
  relate(name, meta)
@@ -306,6 +303,7 @@ module Mongoid
306
303
  key,
307
304
  type: type,
308
305
  identity: true,
306
+ overwrite: true,
309
307
  metadata: metadata,
310
308
  default: metadata.foreign_key_default
311
309
  )
@@ -351,7 +349,7 @@ module Mongoid
351
349
  # @param [ Metadata ] metadata The metadata for the relation.
352
350
  def relate(name, metadata)
353
351
  self.relations = relations.merge(name.to_s => metadata)
354
- getter(name, metadata).setter(name, metadata).existence_check(name, metadata)
352
+ getter(name, metadata).setter(name, metadata).existence_check(name)
355
353
  end
356
354
  end
357
355
  end
@@ -21,11 +21,11 @@ module Mongoid
21
21
  size == 0
22
22
  end
23
23
 
24
- # Creates a new document on the references many relation. This will
25
- # save the document if the parent has been persisted.
26
- #
27
- # @example Create and save the new document.
28
- # person.posts.create(:text => "Testing")
24
+ # Creates a new document on the references many relation. This will
25
+ # save the document if the parent has been persisted.
26
+ #
27
+ # @example Create and save the new document.
28
+ # person.posts.create(:text => "Testing")
29
29
  #
30
30
  # @overload create(attributes = nil, options = {}, type = nil)
31
31
  # @param [ Hash ] attributes The attributes to create with.
@@ -39,10 +39,14 @@ module Mongoid
39
39
  # @return [ Document ] The newly created document.
40
40
  #
41
41
  # @since 2.0.0.beta.1
42
- def create(attributes = nil, options = {}, type = nil, &block)
43
- doc = build(attributes, options, type, &block)
44
- base.persisted? ? doc.save : raise_unsaved(doc)
45
- doc
42
+ def create(attributes = nil, type = nil, &block)
43
+ if attributes.is_a?(::Array)
44
+ attributes.map { |attrs| create(attrs, type, &block) }
45
+ else
46
+ doc = build(attributes, type, &block)
47
+ base.persisted? ? doc.save : raise_unsaved(doc)
48
+ doc
49
+ end
46
50
  end
47
51
 
48
52
  # Creates a new document on the references many relation. This will
@@ -54,7 +58,6 @@ module Mongoid
54
58
  #
55
59
  # @overload create!(attributes = nil, options = {}, type = nil)
56
60
  # @param [ Hash ] attributes The attributes to create with.
57
- # @param [ Hash ] options The scoped assignment options.
58
61
  # @param [ Class ] type The optional type of document to create.
59
62
  #
60
63
  # @overload create!(attributes = nil, type = nil)
@@ -66,10 +69,14 @@ module Mongoid
66
69
  # @return [ Document ] The newly created document.
67
70
  #
68
71
  # @since 2.0.0.beta.1
69
- def create!(attributes = nil, options = {}, type = nil, &block)
70
- doc = build(attributes, options, type, &block)
71
- base.persisted? ? doc.save! : raise_unsaved(doc)
72
- doc
72
+ def create!(attributes = nil, type = nil, &block)
73
+ if attributes.is_a?(::Array)
74
+ attributes.map { |attrs| create!(attrs, type, &block) }
75
+ else
76
+ doc = build(attributes, type, &block)
77
+ base.persisted? ? doc.save! : raise_unsaved(doc)
78
+ doc
79
+ end
73
80
  end
74
81
 
75
82
  # Find the first document given the conditions, or creates a new document
@@ -78,9 +85,8 @@ module Mongoid
78
85
  # @example Find or create.
79
86
  # person.posts.find_or_create_by(:title => "Testing")
80
87
  #
81
- # @overload find_or_create_by(attributes = nil, options = {}, type = nil)
88
+ # @overload find_or_create_by(attributes = nil, type = nil)
82
89
  # @param [ Hash ] attributes The attributes to search or create with.
83
- # @param [ Hash ] options The scoped assignment options.
84
90
  # @param [ Class ] type The optional type of document to create.
85
91
  #
86
92
  # @overload find_or_create_by(attributes = nil, type = nil)
@@ -88,8 +94,8 @@ module Mongoid
88
94
  # @param [ Class ] type The optional type of document to create.
89
95
  #
90
96
  # @return [ Document ] An existing document or newly created one.
91
- def find_or_create_by(attrs = {}, options = {}, type = nil, &block)
92
- find_or(:create, attrs, options, type, &block)
97
+ def find_or_create_by(attrs = {}, type = nil, &block)
98
+ find_or(:create, attrs, type, &block)
93
99
  end
94
100
 
95
101
  # Find the first +Document+ given the conditions, or instantiates a new document
@@ -98,9 +104,8 @@ module Mongoid
98
104
  # @example Find or initialize.
99
105
  # person.posts.find_or_initialize_by(:title => "Test")
100
106
  #
101
- # @overload find_or_initialize_by(attributes = {}, options = {}, type = nil)
107
+ # @overload find_or_initialize_by(attributes = {}, type = nil)
102
108
  # @param [ Hash ] attributes The attributes to search or initialize with.
103
- # @param [ Hash ] options The scoped assignment options.
104
109
  # @param [ Class ] type The optional subclass to build.
105
110
  #
106
111
  # @overload find_or_initialize_by(attributes = {}, type = nil)
@@ -108,8 +113,8 @@ module Mongoid
108
113
  # @param [ Class ] type The optional subclass to build.
109
114
  #
110
115
  # @return [ Document ] An existing document or newly instantiated one.
111
- def find_or_initialize_by(attrs = {}, options = {}, type = nil, &block)
112
- find_or(:build, attrs, options, type, &block)
116
+ def find_or_initialize_by(attrs = {}, type = nil, &block)
117
+ find_or(:build, attrs, type, &block)
113
118
  end
114
119
 
115
120
  # This proxy can never be nil.
@@ -191,10 +196,9 @@ module Mongoid
191
196
  # @example Find or create|initialize.
192
197
  # person.addresses.find_or(:create, :street => "Bond")
193
198
  #
194
- # @overload find_or(method, attributes = {}, options = {}, type = nil)
199
+ # @overload find_or(method, attributes = {}, type = nil)
195
200
  # @param [ Symbol ] method The method name, create or new.
196
201
  # @param [ Hash ] attributes The attributes to search or build with.
197
- # @param [ Hash ] options The scoped assignment options.
198
202
  # @param [ Class ] type The optional subclass to build.
199
203
  #
200
204
  # @overload find_or(attributes = {}, type = nil)
@@ -203,14 +207,9 @@ module Mongoid
203
207
  # @param [ Class ] type The optional subclass to build.
204
208
  #
205
209
  # @return [ Document ] A matching document or a new/created one.
206
- def find_or(method, attrs = {}, options = {}, type = nil, &block)
207
- if options.is_a? Class
208
- options, type = {}, options
209
- end
210
-
210
+ def find_or(method, attrs = {}, type = nil, &block)
211
211
  attrs["_type"] = type.to_s if type
212
-
213
- where(attrs).first || send(method, attrs, options, type, &block)
212
+ where(attrs).first || send(method, attrs, type, &block)
214
213
  end
215
214
  end
216
215
  end
@@ -229,20 +229,6 @@ module Mongoid
229
229
  !!dependent
230
230
  end
231
231
 
232
- # Get the criteria needed to eager load this relation.
233
- #
234
- # @example Get the eager loading criteria.
235
- # metadata.eager_load(criteria)
236
- #
237
- # @param [ Array<Object> ] ids The ids of the returned parents.
238
- #
239
- # @return [ Criteria ] The eager loading criteria.
240
- #
241
- # @since 2.2.0
242
- def eager_load(ids)
243
- relation.eager_load(self, ids)
244
- end
245
-
246
232
  # Will determine if the relation is an embedded one or not. Currently
247
233
  # only checks against embeds one and many.
248
234
  #
@@ -398,8 +384,7 @@ module Mongoid
398
384
  order: #{order.inspect}
399
385
  polymorphic: #{polymorphic?}
400
386
  relation: #{relation}
401
- setter: #{setter}
402
- versioned: #{versioned?}>
387
+ setter: #{setter}>
403
388
  }
404
389
  end
405
390
 
@@ -460,21 +445,6 @@ module Mongoid
460
445
  !!inverse_class_name
461
446
  end
462
447
 
463
- # Is the inverse field bindable? Ie, do we have more than one definition
464
- # on the parent class with the same polymorphic name (as).
465
- #
466
- # @example Is the inverse of bindable?
467
- # metadata.inverse_of_bindable?
468
- #
469
- # @return [ true, false ] If the relation needs the inverse of field set.
470
- #
471
- # @since 3.0.6
472
- def inverse_field_bindable?
473
- @inverse_field_bindable ||= (inverse_klass.relations.values.count do |meta|
474
- meta.as == as
475
- end > 1)
476
- end
477
-
478
448
  # Used for relational many to many only. This determines the name of the
479
449
  # foreign key field on the inverse side of the relation, since in this
480
450
  # case there are keys on both sides.
@@ -579,31 +549,6 @@ module Mongoid
579
549
  @inverse_type_setter ||= inverse_type.__setter__
580
550
  end
581
551
 
582
- # Returns the name of the field in which to store the name of the inverse
583
- # field for the polymorphic relation.
584
- #
585
- # @example Get the name of the field.
586
- # metadata.inverse_of_field
587
- #
588
- # @return [ String ] The name of the field for storing the name of the
589
- # inverse field.
590
- #
591
- # @since 2.4.5
592
- def inverse_of_field
593
- @inverse_of_field ||= determine_inverse_for(:field)
594
- end
595
-
596
- # Gets the setter for the field that stores the name of the inverse field
597
- # on a polymorphic relation.
598
- #
599
- # @example Get the inverse type setter.
600
- # metadata.inverse_of_field_setter
601
- #
602
- # @return [ String ] The name of the setter.
603
- def inverse_of_field_setter
604
- @inverse_of_field_setter ||= inverse_of_field.__setter__
605
- end
606
-
607
552
  # This returns the key that is to be used to grab the attributes for the
608
553
  # relation or the foreign key or id that a referenced relation will use
609
554
  # to query for the object.
@@ -823,18 +768,6 @@ module Mongoid
823
768
  end
824
769
  end
825
770
 
826
- # Is this relation using Mongoid's internal versioning system?
827
- #
828
- # @example Is this relation versioned?
829
- # metadata.versioned?
830
- #
831
- # @return [ true, false ] If the relation uses Mongoid versioning.
832
- #
833
- # @since 2.1.0
834
- def versioned?
835
- !!self[:versioned]
836
- end
837
-
838
771
  # Returns the metadata itself. Here for compatibility with Rails
839
772
  # association metadata.
840
773
  #
@@ -1033,15 +966,13 @@ module Mongoid
1033
966
  # @since 2.0.0.rc.1
1034
967
  def determine_foreign_key
1035
968
  return self[:foreign_key].to_s if self[:foreign_key]
1036
- suffix = relation.foreign_key_suffix
969
+ return nil if relation.embedded?
970
+
1037
971
  if relation.stores_foreign_key?
1038
972
  relation.foreign_key(name)
1039
973
  else
1040
- if polymorphic?
1041
- "#{self[:as]}#{suffix}"
1042
- else
1043
- inverse_of ? "#{inverse_of}#{suffix}" : inverse_class_name.foreign_key
1044
- end
974
+ suffix = relation.foreign_key_suffix
975
+ "#{inverse}#{suffix}"
1045
976
  end
1046
977
  end
1047
978
 
@@ -1112,7 +1043,7 @@ module Mongoid
1112
1043
  # @since 3.0.0
1113
1044
  def inverse_relation_candidates
1114
1045
  relations_metadata.select do |meta|
1115
- next if meta.versioned? || meta.name == name
1046
+ next if meta.name == name
1116
1047
  meta.class_name == inverse_class_name
1117
1048
  end
1118
1049
  end
@@ -63,11 +63,11 @@ module Mongoid
63
63
  # @param [ Class ] klass The class we're trying to convert for.
64
64
  # @param [ String ] id The id, usually coming from the form.
65
65
  #
66
- # @return [ Moped::BSON::ObjectId, String, Object ] The converted id.
66
+ # @return [ BSON::ObjectId, String, Object ] The converted id.
67
67
  #
68
68
  # @since 2.0.0.rc.6
69
69
  def convert_id(klass, id)
70
- klass.using_object_ids? ? Moped::BSON::ObjectId.mongoize(id) : id
70
+ klass.using_object_ids? ? BSON::ObjectId.mongoize(id) : id
71
71
  end
72
72
  end
73
73
  end
@@ -42,6 +42,7 @@ module Mongoid
42
42
  )
43
43
  end
44
44
  end
45
+ true
45
46
  end
46
47
  end
47
48
  end
@@ -29,7 +29,6 @@ module Mongoid
29
29
  self.polymorphic = true
30
30
  if metadata.relation.stores_foreign_key?
31
31
  field(metadata.inverse_type, type: String)
32
- field(metadata.inverse_of_field, type: Symbol)
33
32
  end
34
33
  end
35
34
  self
@@ -12,13 +12,13 @@ module Mongoid
12
12
  # We undefine most methods to get them sent through to the target.
13
13
  instance_methods.each do |method|
14
14
  undef_method(method) unless
15
- method =~ /(^__|^send|^object_id|^respond_to|^tap|extend_proxy)/
15
+ method =~ /(^__|^send|^object_id|^respond_to|^tap|extend_proxy|extend_proxies)/
16
16
  end
17
17
 
18
18
  include Threaded::Lifecycle
19
19
  include Marshalable
20
20
 
21
- attr_accessor :base, :loaded, :metadata, :target
21
+ attr_accessor :base, :metadata, :target
22
22
 
23
23
  # Backwards compatibility with Mongoid beta releases.
24
24
  delegate :foreign_key, :inverse_foreign_key, to: :metadata
@@ -39,7 +39,12 @@ module Mongoid
39
39
  def init(base, target, metadata)
40
40
  @base, @target, @metadata = base, target, metadata
41
41
  yield(self) if block_given?
42
- extend_proxy(metadata.extension) if metadata.extension?
42
+ extend_proxies(metadata.extension) if metadata.extension?
43
+ end
44
+
45
+ # Allow extension to be an array and extend each module
46
+ def extend_proxies(*extension)
47
+ extension.flatten.each {|ext| extend_proxy(ext) }
43
48
  end
44
49
 
45
50
  # Get the class from the metadata, or return nil if no metadata present.
@@ -103,7 +108,7 @@ module Mongoid
103
108
  #
104
109
  # @since 3.0.0
105
110
  def with(options)
106
- Threaded.set_persistence_options(klass, options)
111
+ @persistence_options = options
107
112
  self
108
113
  end
109
114
 
@@ -119,6 +124,7 @@ module Mongoid
119
124
  # @since 2.0.0
120
125
  def collection
121
126
  root = base._root
127
+ root.with(@persistence_options)
122
128
  root.collection unless root.embedded?
123
129
  end
124
130
 
@@ -230,34 +236,6 @@ module Mongoid
230
236
  def apply_ordering(criteria, metadata)
231
237
  metadata.order ? criteria.order_by(metadata.order) : criteria
232
238
  end
233
-
234
- # Get the criteria that is used to eager load a relation of this
235
- # type.
236
- #
237
- # @example Get the eager load criteria.
238
- # Proxy.eager_load(metadata, criteria)
239
- #
240
- # @param [ Metadata ] metadata The relation metadata.
241
- # @param [ Array<Object> ] ids The ids of the base docs.
242
- #
243
- # @return [ Criteria ] The criteria to eager load the relation.
244
- #
245
- # @since 2.2.0
246
- def eager_load_ids(metadata, ids)
247
- klass, foreign_key = metadata.klass, metadata.foreign_key
248
- eager_loaded = klass.any_in(foreign_key => ids).entries
249
- ids.each do |id|
250
- sel = { foreign_key => id }
251
- sel.merge!(metadata.type_relation) if klass.hereditary?
252
- IdentityMap.clear_many(klass, sel)
253
- end
254
- eager_loaded.each do |doc|
255
- base_id = doc.__send__(foreign_key)
256
- sel = { foreign_key => base_id }
257
- sel.merge!(metadata.type_relation) if klass.hereditary?
258
- yield(doc, sel)
259
- end
260
- end
261
239
  end
262
240
  end
263
241
  end