mongoid 3.1.7 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (562) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +423 -9
  3. data/README.md +5 -6
  4. data/lib/config/locales/en.yml +32 -18
  5. data/lib/mongoid/atomic/paths/embedded/many.rb +1 -1
  6. data/lib/mongoid/atomic/paths/embedded/one.rb +1 -1
  7. data/lib/mongoid/atomic/paths/embedded.rb +0 -30
  8. data/lib/mongoid/atomic/paths/root.rb +0 -13
  9. data/lib/mongoid/atomic.rb +1 -12
  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/attributes.rb +61 -99
  14. data/lib/mongoid/{dirty.rb → changeable.rb} +32 -2
  15. data/lib/mongoid/composable.rb +105 -0
  16. data/lib/mongoid/config/options.rb +1 -1
  17. data/lib/mongoid/config.rb +3 -9
  18. data/lib/mongoid/contextual/aggregable/mongo.rb +5 -9
  19. data/lib/mongoid/contextual/atomic.rb +53 -53
  20. data/lib/mongoid/contextual/geo_near.rb +1 -1
  21. data/lib/mongoid/contextual/map_reduce.rb +4 -2
  22. data/lib/mongoid/contextual/memory.rb +18 -6
  23. data/lib/mongoid/contextual/mongo.rb +64 -56
  24. data/lib/mongoid/contextual/none.rb +90 -0
  25. data/lib/mongoid/contextual/text_search.rb +178 -0
  26. data/lib/mongoid/contextual.rb +2 -0
  27. data/lib/mongoid/copyable.rb +2 -3
  28. data/lib/mongoid/criteria/{#findable.rb# → findable.rb} +0 -2
  29. data/lib/mongoid/{criterion/inspection.rb → criteria/inspectable.rb} +2 -2
  30. data/lib/mongoid/{criterion → criteria}/marshalable.rb +3 -1
  31. data/lib/mongoid/{criterion → criteria}/modifiable.rb +28 -8
  32. data/lib/mongoid/criteria/permission.rb +70 -0
  33. data/lib/mongoid/{criterion/scoping.rb → criteria/scopable.rb} +2 -2
  34. data/lib/mongoid/criteria.rb +39 -34
  35. data/lib/mongoid/document.rb +32 -17
  36. data/lib/mongoid/errors/document_not_destroyed.rb +25 -0
  37. data/lib/mongoid/errors/document_not_found.rb +2 -1
  38. data/lib/mongoid/errors/invalid_storage_options.rb +1 -1
  39. data/lib/mongoid/errors/invalid_storage_parent.rb +26 -0
  40. data/lib/mongoid/errors/invalid_value.rb +16 -0
  41. data/lib/mongoid/errors/mongoid_error.rb +1 -1
  42. data/lib/mongoid/errors/readonly_document.rb +24 -0
  43. data/lib/mongoid/errors.rb +4 -1
  44. data/lib/mongoid/extensions/array.rb +3 -3
  45. data/lib/mongoid/extensions/big_decimal.rb +1 -1
  46. data/lib/mongoid/extensions/boolean.rb +15 -17
  47. data/lib/mongoid/extensions/date.rb +1 -1
  48. data/lib/mongoid/extensions/date_time.rb +3 -3
  49. data/lib/mongoid/extensions/float.rb +2 -1
  50. data/lib/mongoid/extensions/hash.rb +3 -3
  51. data/lib/mongoid/extensions/integer.rb +1 -1
  52. data/lib/mongoid/extensions/object.rb +7 -7
  53. data/lib/mongoid/extensions/object_id.rb +5 -5
  54. data/lib/mongoid/extensions/range.rb +9 -3
  55. data/lib/mongoid/extensions/regexp.rb +1 -1
  56. data/lib/mongoid/extensions/set.rb +1 -1
  57. data/lib/mongoid/extensions/string.rb +6 -18
  58. data/lib/mongoid/extensions/symbol.rb +1 -1
  59. data/lib/mongoid/extensions/time.rb +3 -3
  60. data/lib/mongoid/extensions/time_with_zone.rb +1 -1
  61. data/lib/mongoid/extensions.rb +2 -7
  62. data/lib/mongoid/factory.rb +8 -6
  63. data/lib/mongoid/fields/foreign_key.rb +3 -3
  64. data/lib/mongoid/fields/localized.rb +1 -1
  65. data/lib/mongoid/fields/standard.rb +5 -17
  66. data/lib/mongoid/fields/validators/macro.rb +15 -5
  67. data/lib/mongoid/fields.rb +41 -8
  68. data/lib/mongoid/{finders.rb → findable.rb} +8 -2
  69. data/lib/mongoid/indexable/specification.rb +104 -0
  70. data/lib/mongoid/{indexes → indexable}/validators/options.rb +2 -1
  71. data/lib/mongoid/{indexes.rb → indexable.rb} +50 -55
  72. data/lib/mongoid/{inspection.rb → inspectable.rb} +15 -11
  73. data/lib/mongoid/{callbacks.rb → interceptable.rb} +30 -62
  74. data/lib/mongoid/log_subscriber.rb +55 -0
  75. data/lib/mongoid/{matchers → matchable}/all.rb +1 -1
  76. data/lib/mongoid/{matchers → matchable}/and.rb +2 -2
  77. data/lib/mongoid/{matchers → matchable}/default.rb +1 -1
  78. data/lib/mongoid/{matchers → matchable}/exists.rb +1 -1
  79. data/lib/mongoid/{matchers → matchable}/gt.rb +1 -1
  80. data/lib/mongoid/{matchers → matchable}/gte.rb +1 -1
  81. data/lib/mongoid/{matchers → matchable}/in.rb +2 -2
  82. data/lib/mongoid/{matchers → matchable}/lt.rb +1 -1
  83. data/lib/mongoid/{matchers → matchable}/lte.rb +1 -1
  84. data/lib/mongoid/{matchers → matchable}/ne.rb +1 -1
  85. data/lib/mongoid/{matchers → matchable}/nin.rb +3 -2
  86. data/lib/mongoid/{matchers → matchable}/or.rb +2 -2
  87. data/lib/mongoid/{matchers → matchable}/size.rb +1 -1
  88. data/lib/mongoid/matchable.rb +152 -0
  89. data/lib/mongoid/persistable/creatable.rb +188 -0
  90. data/lib/mongoid/persistable/deletable.rb +149 -0
  91. data/lib/mongoid/persistable/destroyable.rb +60 -0
  92. data/lib/mongoid/persistable/incrementable.rb +36 -0
  93. data/lib/mongoid/persistable/logical.rb +38 -0
  94. data/lib/mongoid/persistable/poppable.rb +39 -0
  95. data/lib/mongoid/persistable/pullable.rb +55 -0
  96. data/lib/mongoid/persistable/pushable.rb +62 -0
  97. data/lib/mongoid/persistable/renamable.rb +35 -0
  98. data/lib/mongoid/persistable/savable.rb +52 -0
  99. data/lib/mongoid/persistable/settable.rb +33 -0
  100. data/lib/mongoid/persistable/unsettable.rb +36 -0
  101. data/lib/mongoid/persistable/updatable.rb +152 -0
  102. data/lib/mongoid/persistable/upsertable.rb +55 -0
  103. data/lib/mongoid/persistable.rb +216 -0
  104. data/lib/mongoid/positional.rb +71 -0
  105. data/lib/mongoid/query_cache.rb +247 -0
  106. data/lib/mongoid/railtie.rb +32 -45
  107. data/lib/mongoid/railties/database.rake +9 -25
  108. data/lib/mongoid/relations/accessors.rb +13 -49
  109. data/lib/mongoid/relations/auto_save.rb +15 -36
  110. data/lib/mongoid/relations/binding.rb +1 -24
  111. data/lib/mongoid/relations/bindings/embedded/in.rb +1 -1
  112. data/lib/mongoid/relations/bindings/embedded/many.rb +1 -3
  113. data/lib/mongoid/relations/bindings/referenced/in.rb +3 -8
  114. data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +3 -1
  115. data/lib/mongoid/relations/builder.rb +1 -1
  116. data/lib/mongoid/relations/builders/nested_attributes/many.rb +10 -13
  117. data/lib/mongoid/relations/builders/nested_attributes/one.rb +4 -5
  118. data/lib/mongoid/relations/builders/referenced/in.rb +1 -1
  119. data/lib/mongoid/relations/builders/referenced/many.rb +1 -2
  120. data/lib/mongoid/relations/builders/referenced/many_to_many.rb +1 -2
  121. data/lib/mongoid/relations/builders/referenced/one.rb +1 -1
  122. data/lib/mongoid/relations/builders.rb +2 -2
  123. data/lib/mongoid/relations/cascading.rb +3 -5
  124. data/lib/mongoid/relations/constraint.rb +1 -1
  125. data/lib/mongoid/relations/conversions.rb +1 -1
  126. data/lib/mongoid/relations/counter_cache.rb +39 -15
  127. data/lib/mongoid/relations/eager/base.rb +149 -0
  128. data/lib/mongoid/relations/eager/belongs_to.rb +31 -0
  129. data/lib/mongoid/relations/eager/has_and_belongs_to_many.rb +47 -0
  130. data/lib/mongoid/relations/eager/has_many.rb +38 -0
  131. data/lib/mongoid/relations/eager/has_one.rb +30 -0
  132. data/lib/mongoid/relations/eager.rb +46 -0
  133. data/lib/mongoid/relations/embedded/batchable.rb +4 -5
  134. data/lib/mongoid/relations/embedded/in.rb +4 -4
  135. data/lib/mongoid/relations/embedded/many.rb +14 -32
  136. data/lib/mongoid/relations/embedded/one.rb +1 -1
  137. data/lib/mongoid/relations/macros.rb +3 -4
  138. data/lib/mongoid/relations/many.rb +30 -31
  139. data/lib/mongoid/relations/marshalable.rb +3 -3
  140. data/lib/mongoid/relations/metadata.rb +14 -79
  141. data/lib/mongoid/relations/nested_builder.rb +2 -2
  142. data/lib/mongoid/relations/options.rb +1 -0
  143. data/lib/mongoid/relations/polymorphic.rb +0 -1
  144. data/lib/mongoid/relations/proxy.rb +21 -41
  145. data/lib/mongoid/relations/referenced/in.rb +4 -20
  146. data/lib/mongoid/relations/referenced/many.rb +19 -32
  147. data/lib/mongoid/relations/referenced/many_to_many.rb +15 -38
  148. data/lib/mongoid/relations/referenced/one.rb +6 -25
  149. data/lib/mongoid/relations/synchronization.rb +3 -3
  150. data/lib/mongoid/relations/touchable.rb +34 -1
  151. data/lib/mongoid/relations.rb +11 -25
  152. data/lib/mongoid/{reloading.rb → reloadable.rb} +6 -4
  153. data/lib/mongoid/{scoping.rb → scopable.rb} +36 -36
  154. data/lib/mongoid/selectable.rb +59 -0
  155. data/lib/mongoid/{serialization.rb → serializable.rb} +11 -2
  156. data/lib/mongoid/sessions/factory.rb +2 -0
  157. data/lib/mongoid/sessions/options.rb +180 -0
  158. data/lib/mongoid/sessions/storage_options.rb +140 -0
  159. data/lib/mongoid/sessions/thread_options.rb +19 -0
  160. data/lib/mongoid/sessions/validators/storage.rb +16 -3
  161. data/lib/mongoid/sessions.rb +37 -345
  162. data/lib/mongoid/{sharding.rb → shardable.rb} +5 -1
  163. data/lib/mongoid/{state.rb → stateful.rb} +13 -1
  164. data/lib/mongoid/support/query_counter.rb +23 -0
  165. data/lib/mongoid/tasks/database.rake +31 -0
  166. data/lib/mongoid/tasks/database.rb +107 -0
  167. data/lib/mongoid/threaded/lifecycle.rb +0 -28
  168. data/lib/mongoid/threaded.rb +0 -157
  169. data/lib/mongoid/timestamps/updated/short.rb +2 -2
  170. data/lib/mongoid/{hierarchy.rb → traversable.rb} +9 -5
  171. data/lib/mongoid/{validations → validatable}/associated.rb +4 -2
  172. data/lib/mongoid/{validations → validatable}/format.rb +1 -1
  173. data/lib/mongoid/{validations → validatable}/length.rb +1 -1
  174. data/lib/mongoid/{validations → validatable}/localizable.rb +1 -1
  175. data/lib/mongoid/{validations → validatable}/macros.rb +4 -3
  176. data/lib/mongoid/{validations → validatable}/presence.rb +1 -1
  177. data/lib/mongoid/{validations → validatable}/queryable.rb +1 -2
  178. data/lib/mongoid/{validations → validatable}/uniqueness.rb +23 -19
  179. data/lib/mongoid/{validations.rb → validatable.rb} +23 -10
  180. data/lib/mongoid/version.rb +1 -1
  181. data/lib/mongoid.rb +10 -76
  182. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +13 -24
  183. data/lib/rails/generators/mongoid/model/model_generator.rb +0 -1
  184. data/lib/rails/generators/mongoid/model/templates/model.rb.tt +0 -3
  185. data/lib/rails/generators/mongoid_generator.rb +3 -40
  186. data/lib/rails/mongoid.rb +0 -122
  187. data/lib/support/ruby_version.rb +1 -1
  188. data/spec/app/models/account.rb +2 -6
  189. data/spec/app/models/acolyte.rb +2 -1
  190. data/spec/app/models/actor.rb +0 -1
  191. data/spec/app/models/address.rb +8 -3
  192. data/spec/app/models/animal.rb +1 -1
  193. data/spec/app/models/appointment.rb +3 -3
  194. data/spec/app/models/article.rb +1 -4
  195. data/spec/app/models/audio.rb +5 -0
  196. data/spec/app/models/author.rb +0 -2
  197. data/spec/app/models/band.rb +3 -2
  198. data/spec/app/models/bar.rb +1 -0
  199. data/spec/app/models/book.rb +1 -0
  200. data/spec/app/models/building.rb +0 -2
  201. data/spec/app/models/building_address.rb +0 -2
  202. data/spec/app/models/bus.rb +1 -1
  203. data/spec/app/models/canvas.rb +1 -1
  204. data/spec/app/models/contractor.rb +0 -2
  205. data/spec/app/models/country_code.rb +1 -1
  206. data/spec/app/models/definition.rb +2 -2
  207. data/spec/app/models/dog.rb +1 -1
  208. data/spec/app/models/dragon.rb +4 -0
  209. data/spec/app/models/drug.rb +1 -3
  210. data/spec/app/models/dungeon.rb +4 -0
  211. data/spec/app/models/edit.rb +5 -0
  212. data/spec/app/models/even.rb +7 -0
  213. data/spec/app/models/event.rb +1 -1
  214. data/spec/app/models/filesystem.rb +1 -0
  215. data/spec/app/models/fish.rb +0 -1
  216. data/spec/app/models/fruits.rb +6 -0
  217. data/spec/app/models/game.rb +0 -2
  218. data/spec/app/models/house.rb +1 -3
  219. data/spec/app/models/item.rb +1 -5
  220. data/spec/app/models/jar.rb +1 -1
  221. data/spec/app/models/label.rb +4 -4
  222. data/spec/app/models/line_item.rb +1 -1
  223. data/spec/app/models/login.rb +1 -1
  224. data/spec/app/models/message.rb +8 -0
  225. data/spec/app/models/movie.rb +1 -0
  226. data/spec/app/models/name.rb +3 -3
  227. data/spec/app/models/note.rb +3 -1
  228. data/spec/app/models/odd.rb +7 -0
  229. data/spec/app/models/oscar.rb +1 -1
  230. data/spec/app/models/parent_doc.rb +1 -1
  231. data/spec/app/models/person.rb +16 -10
  232. data/spec/app/models/phone.rb +1 -3
  233. data/spec/app/models/player.rb +3 -3
  234. data/spec/app/models/post.rb +5 -3
  235. data/spec/app/models/preference.rb +1 -1
  236. data/spec/app/models/quiz.rb +0 -3
  237. data/spec/app/models/record.rb +10 -5
  238. data/spec/app/models/registry.rb +1 -1
  239. data/spec/app/models/server.rb +1 -1
  240. data/spec/app/models/service.rb +3 -3
  241. data/spec/app/models/sound.rb +5 -0
  242. data/spec/app/models/symptom.rb +1 -1
  243. data/spec/app/models/template.rb +1 -1
  244. data/spec/app/models/title.rb +0 -1
  245. data/spec/app/models/track.rb +5 -5
  246. data/spec/app/models/tree.rb +3 -3
  247. data/spec/app/models/video.rb +1 -5
  248. data/spec/app/models/wiki_page.rb +2 -5
  249. data/spec/app/models/word.rb +3 -0
  250. data/spec/app/models/word_origin.rb +1 -1
  251. data/spec/config/mongoid.yml +7 -8
  252. data/spec/helpers.rb +18 -0
  253. data/spec/mongoid/atomic/modifiers_spec.rb +22 -22
  254. data/spec/mongoid/atomic/paths/embedded/many_spec.rb +8 -49
  255. data/spec/mongoid/atomic/paths/embedded/one_spec.rb +7 -49
  256. data/spec/mongoid/atomic/paths/root_spec.rb +3 -61
  257. data/spec/mongoid/atomic/paths_spec.rb +19 -19
  258. data/spec/mongoid/atomic_spec.rb +19 -19
  259. data/spec/mongoid/{nested_attributes_spec.rb → attributes/nested_spec.rb} +335 -448
  260. data/spec/mongoid/attributes/readonly_spec.rb +58 -18
  261. data/spec/mongoid/attributes_spec.rb +300 -436
  262. data/spec/mongoid/{dirty_spec.rb → changeable_spec.rb} +203 -153
  263. data/spec/mongoid/{components_spec.rb → composable_spec.rb} +3 -3
  264. data/spec/mongoid/config/environment_spec.rb +3 -3
  265. data/spec/mongoid/config/options_spec.rb +6 -6
  266. data/spec/mongoid/config_spec.rb +24 -48
  267. data/spec/mongoid/contextual/aggregable/memory_spec.rb +12 -12
  268. data/spec/mongoid/contextual/aggregable/mongo_spec.rb +46 -38
  269. data/spec/mongoid/contextual/atomic_spec.rb +69 -59
  270. data/spec/mongoid/contextual/find_and_modify_spec.rb +14 -14
  271. data/spec/mongoid/contextual/geo_near_spec.rb +22 -22
  272. data/spec/mongoid/contextual/map_reduce_spec.rb +27 -27
  273. data/spec/mongoid/contextual/memory_spec.rb +151 -94
  274. data/spec/mongoid/contextual/mongo_spec.rb +238 -150
  275. data/spec/mongoid/contextual/none_spec.rb +127 -0
  276. data/spec/mongoid/contextual/text_search_spec.rb +209 -0
  277. data/spec/mongoid/copyable_spec.rb +56 -68
  278. data/spec/mongoid/criteria/findable_spec.rb +991 -0
  279. data/spec/mongoid/{criterion/inspection_spec.rb → criteria/inspectable_spec.rb} +5 -5
  280. data/spec/mongoid/{criterion → criteria}/marshalable_spec.rb +2 -2
  281. data/spec/mongoid/criteria/modifiable_spec.rb +1255 -0
  282. data/spec/mongoid/{criterion/scoping_spec.rb → criteria/scopable_spec.rb} +37 -37
  283. data/spec/mongoid/criteria_spec.rb +576 -2293
  284. data/spec/mongoid/document_spec.rb +166 -120
  285. data/spec/mongoid/equality_spec.rb +22 -22
  286. data/spec/mongoid/errors/ambiguous_relationship_spec.rb +3 -3
  287. data/spec/mongoid/errors/callback_spec.rb +3 -3
  288. data/spec/mongoid/errors/delete_restriction_spec.rb +3 -3
  289. data/spec/mongoid/errors/document_not_destroyed_spec.rb +33 -0
  290. data/spec/mongoid/errors/document_not_found_spec.rb +11 -11
  291. data/spec/mongoid/errors/eager_load_spec.rb +3 -3
  292. data/spec/mongoid/errors/invalid_collection_spec.rb +3 -3
  293. data/spec/mongoid/errors/invalid_config_option_spec.rb +3 -3
  294. data/spec/mongoid/errors/invalid_field_option_spec.rb +3 -3
  295. data/spec/mongoid/errors/invalid_field_spec.rb +3 -3
  296. data/spec/mongoid/errors/invalid_find_spec.rb +3 -3
  297. data/spec/mongoid/errors/invalid_includes_spec.rb +3 -3
  298. data/spec/mongoid/errors/invalid_index_spec.rb +3 -3
  299. data/spec/mongoid/errors/invalid_options_spec.rb +3 -3
  300. data/spec/mongoid/errors/invalid_path_spec.rb +3 -3
  301. data/spec/mongoid/errors/invalid_scope_spec.rb +5 -5
  302. data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +3 -3
  303. data/spec/mongoid/errors/invalid_storage_options_spec.rb +3 -3
  304. data/spec/mongoid/errors/invalid_time_spec.rb +3 -3
  305. data/spec/mongoid/errors/inverse_not_found_spec.rb +3 -3
  306. data/spec/mongoid/errors/mixed_relations_spec.rb +3 -3
  307. data/spec/mongoid/errors/mixed_session_configuration_spec.rb +3 -3
  308. data/spec/mongoid/errors/mongoid_error_spec.rb +8 -8
  309. data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +3 -3
  310. data/spec/mongoid/errors/no_environment_spec.rb +3 -3
  311. data/spec/mongoid/errors/no_map_reduce_output_spec.rb +3 -3
  312. data/spec/mongoid/errors/no_metadata_spec.rb +3 -3
  313. data/spec/mongoid/errors/no_parent_spec.rb +3 -3
  314. data/spec/mongoid/errors/no_session_config_spec.rb +3 -3
  315. data/spec/mongoid/errors/no_session_database_spec.rb +3 -3
  316. data/spec/mongoid/errors/no_session_hosts_spec.rb +3 -3
  317. data/spec/mongoid/errors/no_sessions_config_spec.rb +3 -3
  318. data/spec/mongoid/errors/readonly_attribute_spec.rb +3 -3
  319. data/spec/mongoid/errors/readonly_document_spec.rb +29 -0
  320. data/spec/mongoid/errors/scope_overwrite_spec.rb +3 -3
  321. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +3 -3
  322. data/spec/mongoid/errors/unknown_attribute_spec.rb +5 -5
  323. data/spec/mongoid/errors/unsaved_document_spec.rb +3 -3
  324. data/spec/mongoid/errors/unsupported_javascript_spec.rb +3 -3
  325. data/spec/mongoid/errors/validations_spec.rb +7 -7
  326. data/spec/mongoid/extensions/array_spec.rb +61 -61
  327. data/spec/mongoid/extensions/big_decimal_spec.rb +11 -11
  328. data/spec/mongoid/extensions/binary_spec.rb +12 -12
  329. data/spec/mongoid/extensions/boolean_spec.rb +18 -18
  330. data/spec/mongoid/extensions/date_spec.rb +13 -13
  331. data/spec/mongoid/extensions/date_time_spec.rb +8 -8
  332. data/spec/mongoid/extensions/false_class_spec.rb +5 -5
  333. data/spec/mongoid/extensions/float_spec.rb +29 -15
  334. data/spec/mongoid/extensions/hash_spec.rb +29 -29
  335. data/spec/mongoid/extensions/integer_spec.rb +15 -15
  336. data/spec/mongoid/extensions/module_spec.rb +2 -2
  337. data/spec/mongoid/extensions/nil_class_spec.rb +1 -1
  338. data/spec/mongoid/extensions/object_id_spec.rb +134 -134
  339. data/spec/mongoid/extensions/object_spec.rb +26 -26
  340. data/spec/mongoid/extensions/range_spec.rb +61 -12
  341. data/spec/mongoid/extensions/regexp_spec.rb +4 -4
  342. data/spec/mongoid/extensions/set_spec.rb +4 -4
  343. data/spec/mongoid/extensions/string_spec.rb +35 -46
  344. data/spec/mongoid/extensions/symbol_spec.rb +9 -9
  345. data/spec/mongoid/extensions/time_spec.rb +49 -49
  346. data/spec/mongoid/extensions/time_with_zone_spec.rb +34 -34
  347. data/spec/mongoid/extensions/true_class_spec.rb +5 -5
  348. data/spec/mongoid/extensions_spec.rb +15 -0
  349. data/spec/mongoid/factory_spec.rb +15 -15
  350. data/spec/mongoid/fields/foreign_key_spec.rb +73 -66
  351. data/spec/mongoid/fields/internal/foreign_keys/array_spec.rb +15 -15
  352. data/spec/mongoid/fields/internal/foreign_keys/object_spec.rb +22 -22
  353. data/spec/mongoid/fields/localized_spec.rb +38 -23
  354. data/spec/mongoid/fields/standard_spec.rb +12 -12
  355. data/spec/mongoid/fields_spec.rb +263 -217
  356. data/spec/mongoid/{finders_spec.rb → findable_spec.rb} +127 -27
  357. data/spec/mongoid/indexable/specification_spec.rb +102 -0
  358. data/spec/mongoid/{indexes_spec.rb → indexable_spec.rb} +171 -51
  359. data/spec/mongoid/{inspection_spec.rb → inspectable_spec.rb} +6 -14
  360. data/spec/mongoid/{callbacks_spec.rb → interceptable_spec.rb} +117 -116
  361. data/spec/mongoid/log_subscriber_spec.rb +75 -0
  362. data/spec/mongoid/loggable_spec.rb +1 -1
  363. data/spec/mongoid/{matchers → matchable}/all_spec.rb +4 -4
  364. data/spec/mongoid/{matchers → matchable}/and_spec.rb +11 -11
  365. data/spec/mongoid/{matchers → matchable}/default_spec.rb +15 -15
  366. data/spec/mongoid/{matchers → matchable}/exists_spec.rb +5 -5
  367. data/spec/mongoid/{matchers → matchable}/gt_spec.rb +9 -8
  368. data/spec/mongoid/{matchers → matchable}/gte_spec.rb +7 -7
  369. data/spec/mongoid/matchable/in_spec.rb +49 -0
  370. data/spec/mongoid/{matchers → matchable}/lt_spec.rb +7 -7
  371. data/spec/mongoid/{matchers → matchable}/lte_spec.rb +7 -7
  372. data/spec/mongoid/{matchers → matchable}/ne_spec.rb +3 -3
  373. data/spec/mongoid/matchable/nin_spec.rb +48 -0
  374. data/spec/mongoid/{matchers → matchable}/or_spec.rb +6 -6
  375. data/spec/mongoid/{matchers → matchable}/size_spec.rb +3 -3
  376. data/spec/mongoid/{matchers_spec.rb → matchable_spec.rb} +41 -41
  377. data/spec/mongoid/persistable/creatable_spec.rb +512 -0
  378. data/spec/mongoid/persistable/deletable_spec.rb +218 -0
  379. data/spec/mongoid/persistable/destroyable_spec.rb +192 -0
  380. data/spec/mongoid/persistable/incrementable_spec.rb +173 -0
  381. data/spec/mongoid/persistable/logical_spec.rb +143 -0
  382. data/spec/mongoid/persistable/poppable_spec.rb +115 -0
  383. data/spec/mongoid/persistable/pullable_spec.rb +228 -0
  384. data/spec/mongoid/persistable/pushable_spec.rb +258 -0
  385. data/spec/mongoid/persistable/renamable_spec.rb +135 -0
  386. data/spec/mongoid/persistable/savable_spec.rb +461 -0
  387. data/spec/mongoid/persistable/settable_spec.rb +139 -0
  388. data/spec/mongoid/persistable/unsettable_spec.rb +155 -0
  389. data/spec/mongoid/persistable/updatable_spec.rb +558 -0
  390. data/spec/mongoid/persistable/upsertable_spec.rb +106 -0
  391. data/spec/mongoid/persistable_spec.rb +206 -0
  392. data/spec/mongoid/{atomic/positionable_spec.rb → positional_spec.rb} +19 -14
  393. data/spec/mongoid/query_cache_spec.rb +231 -0
  394. data/spec/mongoid/railties/document_spec.rb +2 -2
  395. data/spec/mongoid/relations/accessors_spec.rb +53 -145
  396. data/spec/mongoid/relations/auto_save_spec.rb +37 -17
  397. data/spec/mongoid/relations/bindings/embedded/in_spec.rb +12 -12
  398. data/spec/mongoid/relations/bindings/embedded/many_spec.rb +3 -3
  399. data/spec/mongoid/relations/bindings/embedded/one_spec.rb +5 -5
  400. data/spec/mongoid/relations/bindings/referenced/in_spec.rb +26 -26
  401. data/spec/mongoid/relations/bindings/referenced/many_spec.rb +10 -10
  402. data/spec/mongoid/relations/bindings/referenced/many_to_many_spec.rb +19 -19
  403. data/spec/mongoid/relations/bindings/referenced/one_spec.rb +12 -12
  404. data/spec/mongoid/relations/builders/embedded/in_spec.rb +4 -4
  405. data/spec/mongoid/relations/builders/embedded/many_spec.rb +18 -18
  406. data/spec/mongoid/relations/builders/embedded/one_spec.rb +11 -11
  407. data/spec/mongoid/relations/builders/nested_attributes/many_spec.rb +12 -13
  408. data/spec/mongoid/relations/builders/nested_attributes/one_spec.rb +14 -14
  409. data/spec/mongoid/relations/builders/referenced/in_spec.rb +24 -35
  410. data/spec/mongoid/relations/builders/referenced/many_spec.rb +15 -15
  411. data/spec/mongoid/relations/builders/referenced/many_to_many_spec.rb +18 -18
  412. data/spec/mongoid/relations/builders/referenced/one_spec.rb +12 -25
  413. data/spec/mongoid/relations/builders_spec.rb +21 -21
  414. data/spec/mongoid/relations/cascading/delete_spec.rb +9 -9
  415. data/spec/mongoid/relations/cascading/destroy_spec.rb +6 -6
  416. data/spec/mongoid/relations/cascading/nullify_spec.rb +4 -4
  417. data/spec/mongoid/relations/cascading/restrict_spec.rb +7 -7
  418. data/spec/mongoid/relations/cascading_spec.rb +16 -16
  419. data/spec/mongoid/relations/constraint_spec.rb +8 -7
  420. data/spec/mongoid/relations/conversions_spec.rb +16 -14
  421. data/spec/mongoid/relations/counter_cache_spec.rb +85 -0
  422. data/spec/mongoid/relations/cyclic_spec.rb +18 -18
  423. data/spec/mongoid/relations/eager/belongs_to_spec.rb +154 -0
  424. data/spec/mongoid/relations/eager/has_and_belongs_to_many_spec.rb +117 -0
  425. data/spec/mongoid/relations/eager/has_many_spec.rb +207 -0
  426. data/spec/mongoid/relations/eager/has_one_spec.rb +163 -0
  427. data/spec/mongoid/relations/eager_spec.rb +228 -0
  428. data/spec/mongoid/relations/embedded/dirty_spec.rb +8 -8
  429. data/spec/mongoid/relations/embedded/in_spec.rb +56 -57
  430. data/spec/mongoid/relations/embedded/many_spec.rb +393 -372
  431. data/spec/mongoid/relations/embedded/one_spec.rb +108 -141
  432. data/spec/mongoid/relations/macros_spec.rb +108 -102
  433. data/spec/mongoid/relations/metadata_spec.rb +180 -255
  434. data/spec/mongoid/relations/options_spec.rb +1 -1
  435. data/spec/mongoid/relations/polymorphic_spec.rb +13 -17
  436. data/spec/mongoid/relations/proxy_spec.rb +2 -2
  437. data/spec/mongoid/relations/referenced/in_spec.rb +128 -303
  438. data/spec/mongoid/relations/referenced/many_spec.rb +434 -527
  439. data/spec/mongoid/relations/referenced/many_to_many_spec.rb +352 -424
  440. data/spec/mongoid/relations/referenced/one_spec.rb +149 -264
  441. data/spec/mongoid/relations/reflections_spec.rb +6 -6
  442. data/spec/mongoid/relations/synchronization_spec.rb +46 -50
  443. data/spec/mongoid/relations/targets/enumerable_spec.rb +118 -118
  444. data/spec/mongoid/relations/touchable_spec.rb +333 -0
  445. data/spec/mongoid/relations_spec.rb +16 -15
  446. data/spec/mongoid/{reloading_spec.rb → reloadable_spec.rb} +20 -60
  447. data/spec/mongoid/{scoping_spec.rb → scopable_spec.rb} +89 -164
  448. data/spec/mongoid/selectable_spec.rb +134 -0
  449. data/spec/mongoid/{serialization_spec.rb → serializable_spec.rb} +129 -82
  450. data/spec/mongoid/sessions/factory_spec.rb +49 -28
  451. data/spec/mongoid/sessions/mongo_uri_spec.rb +7 -7
  452. data/spec/mongoid/sessions/options_spec.rb +107 -0
  453. data/spec/mongoid/sessions_spec.rb +289 -178
  454. data/spec/mongoid/{sharding_spec.rb → shardable_spec.rb} +8 -8
  455. data/spec/mongoid/{state_spec.rb → stateful_spec.rb} +36 -11
  456. data/spec/mongoid/tasks/database_rake_spec.rb +285 -0
  457. data/spec/mongoid/tasks/database_spec.rb +160 -0
  458. data/spec/mongoid/threaded_spec.rb +17 -70
  459. data/spec/mongoid/timestamps/created/short_spec.rb +6 -6
  460. data/spec/mongoid/timestamps/created_spec.rb +5 -5
  461. data/spec/mongoid/timestamps/timeless_spec.rb +6 -6
  462. data/spec/mongoid/timestamps/updated/short_spec.rb +11 -11
  463. data/spec/mongoid/timestamps/updated_spec.rb +9 -13
  464. data/spec/mongoid/timestamps_spec.rb +9 -13
  465. data/spec/mongoid/{hierarchy_spec.rb → traversable_spec.rb} +19 -19
  466. data/spec/mongoid/{validations → validatable}/associated_spec.rb +45 -22
  467. data/spec/mongoid/{validations → validatable}/format_spec.rb +6 -6
  468. data/spec/mongoid/{validations → validatable}/length_spec.rb +14 -14
  469. data/spec/mongoid/{validations → validatable}/numericality_spec.rb +1 -1
  470. data/spec/mongoid/{validations → validatable}/presence_spec.rb +37 -44
  471. data/spec/mongoid/{validations → validatable}/uniqueness_spec.rb +184 -192
  472. data/spec/mongoid/{validations_spec.rb → validatable_spec.rb} +28 -28
  473. data/spec/mongoid_spec.rb +8 -8
  474. data/spec/rails/mongoid_spec.rb +19 -350
  475. data/spec/spec_helper.rb +24 -15
  476. metadata +259 -251
  477. data/lib/mongoid/atomic/positionable.rb +0 -73
  478. data/lib/mongoid/components.rb +0 -92
  479. data/lib/mongoid/config/inflections.rb +0 -6
  480. data/lib/mongoid/contextual/eager.rb +0 -158
  481. data/lib/mongoid/criterion/findable.rb +0 -179
  482. data/lib/mongoid/errors/versioning_not_on_root.rb +0 -23
  483. data/lib/mongoid/identity_map.rb +0 -163
  484. data/lib/mongoid/json.rb +0 -16
  485. data/lib/mongoid/matchers/strategies.rb +0 -97
  486. data/lib/mongoid/matchers.rb +0 -32
  487. data/lib/mongoid/multi_parameter_attributes.rb +0 -105
  488. data/lib/mongoid/nested_attributes.rb +0 -78
  489. data/lib/mongoid/observer.rb +0 -192
  490. data/lib/mongoid/paranoia.rb +0 -136
  491. data/lib/mongoid/persistence/atomic/add_to_set.rb +0 -47
  492. data/lib/mongoid/persistence/atomic/bit.rb +0 -35
  493. data/lib/mongoid/persistence/atomic/inc.rb +0 -45
  494. data/lib/mongoid/persistence/atomic/operation.rb +0 -154
  495. data/lib/mongoid/persistence/atomic/pop.rb +0 -32
  496. data/lib/mongoid/persistence/atomic/pull.rb +0 -32
  497. data/lib/mongoid/persistence/atomic/pull_all.rb +0 -32
  498. data/lib/mongoid/persistence/atomic/push.rb +0 -25
  499. data/lib/mongoid/persistence/atomic/push_all.rb +0 -25
  500. data/lib/mongoid/persistence/atomic/rename.rb +0 -30
  501. data/lib/mongoid/persistence/atomic/sets.rb +0 -28
  502. data/lib/mongoid/persistence/atomic/unset.rb +0 -27
  503. data/lib/mongoid/persistence/atomic.rb +0 -231
  504. data/lib/mongoid/persistence/deletion.rb +0 -31
  505. data/lib/mongoid/persistence/insertion.rb +0 -38
  506. data/lib/mongoid/persistence/modification.rb +0 -35
  507. data/lib/mongoid/persistence/operations/embedded/insert.rb +0 -46
  508. data/lib/mongoid/persistence/operations/embedded/remove.rb +0 -43
  509. data/lib/mongoid/persistence/operations/insert.rb +0 -34
  510. data/lib/mongoid/persistence/operations/remove.rb +0 -33
  511. data/lib/mongoid/persistence/operations/update.rb +0 -59
  512. data/lib/mongoid/persistence/operations/upsert.rb +0 -28
  513. data/lib/mongoid/persistence/operations.rb +0 -214
  514. data/lib/mongoid/persistence/upsertion.rb +0 -31
  515. data/lib/mongoid/persistence.rb +0 -357
  516. data/lib/mongoid/unit_of_work.rb +0 -61
  517. data/lib/mongoid/versioning.rb +0 -217
  518. data/lib/rack/mongoid/middleware/identity_map.rb +0 -39
  519. data/lib/rack/mongoid.rb +0 -2
  520. data/lib/rails/generators/mongoid/observer/observer_generator.rb +0 -17
  521. data/lib/rails/generators/mongoid/observer/templates/observer.rb.tt +0 -4
  522. data/spec/app/models/actor_observer.rb +0 -15
  523. data/spec/app/models/callback_recorder.rb +0 -25
  524. data/spec/app/models/paranoid_phone.rb +0 -25
  525. data/spec/app/models/paranoid_post.rb +0 -36
  526. data/spec/app/models/phone_observer.rb +0 -6
  527. data/spec/mongoid/#atomic_spec.rb# +0 -365
  528. data/spec/mongoid/attributes/processing_spec.rb +0 -149
  529. data/spec/mongoid/criterion/destructive_spec.rb +0 -101
  530. data/spec/mongoid/criterion/modifiable_spec.rb +0 -409
  531. data/spec/mongoid/criterion/modification_spec.rb +0 -402
  532. data/spec/mongoid/errors/versioning_not_on_root_spec.rb +0 -29
  533. data/spec/mongoid/identity_map_spec.rb +0 -564
  534. data/spec/mongoid/json_spec.rb +0 -33
  535. data/spec/mongoid/matchers/in_spec.rb +0 -25
  536. data/spec/mongoid/matchers/nin_spec.rb +0 -25
  537. data/spec/mongoid/multi_parameter_attributes_spec.rb +0 -128
  538. data/spec/mongoid/observer_spec.rb +0 -290
  539. data/spec/mongoid/paranoia_spec.rb +0 -759
  540. data/spec/mongoid/persistence/atomic/add_to_set_spec.rb +0 -262
  541. data/spec/mongoid/persistence/atomic/bit_spec.rb +0 -88
  542. data/spec/mongoid/persistence/atomic/inc_spec.rb +0 -133
  543. data/spec/mongoid/persistence/atomic/pop_spec.rb +0 -111
  544. data/spec/mongoid/persistence/atomic/pull_all_spec.rb +0 -77
  545. data/spec/mongoid/persistence/atomic/pull_spec.rb +0 -80
  546. data/spec/mongoid/persistence/atomic/push_all_spec.rb +0 -77
  547. data/spec/mongoid/persistence/atomic/push_spec.rb +0 -77
  548. data/spec/mongoid/persistence/atomic/rename_spec.rb +0 -42
  549. data/spec/mongoid/persistence/atomic/sets_spec.rb +0 -154
  550. data/spec/mongoid/persistence/atomic/unset_spec.rb +0 -65
  551. data/spec/mongoid/persistence/atomic_spec.rb +0 -216
  552. data/spec/mongoid/persistence/operations/embedded/insert_spec.rb +0 -191
  553. data/spec/mongoid/persistence/operations/embedded/remove_spec.rb +0 -8
  554. data/spec/mongoid/persistence/operations/insert_spec.rb +0 -149
  555. data/spec/mongoid/persistence/operations/remove_spec.rb +0 -113
  556. data/spec/mongoid/persistence/operations/update_spec.rb +0 -141
  557. data/spec/mongoid/persistence/operations/upsert_spec.rb +0 -59
  558. data/spec/mongoid/persistence/operations_spec.rb +0 -313
  559. data/spec/mongoid/persistence_spec.rb +0 -2279
  560. data/spec/mongoid/unit_of_work_spec.rb +0 -196
  561. data/spec/mongoid/versioning_spec.rb +0 -540
  562. data/spec/rack/mongoid/middleware/identity_map_spec.rb +0 -72
@@ -1,7 +1,7 @@
1
1
  # encoding: utf-8
2
2
  module Mongoid
3
- module Criterion
4
- module Scoping
3
+ class Criteria
4
+ module Scopable
5
5
 
6
6
  # Applies the default scope to the criteria.
7
7
  #
@@ -1,9 +1,10 @@
1
1
  # encoding: utf-8
2
- require "mongoid/criterion/inspection"
3
- require "mongoid/criterion/findable"
4
- require "mongoid/criterion/marshalable"
5
- require "mongoid/criterion/modifiable"
6
- require "mongoid/criterion/scoping"
2
+ require "mongoid/criteria/findable"
3
+ require "mongoid/criteria/inspectable"
4
+ require "mongoid/criteria/marshalable"
5
+ require "mongoid/criteria/modifiable"
6
+ require "mongoid/criteria/scopable"
7
+ require "mongoid/sessions/options"
7
8
 
8
9
  module Mongoid
9
10
 
@@ -17,11 +18,12 @@ module Mongoid
17
18
  include Enumerable
18
19
  include Contextual
19
20
  include Origin::Queryable
20
- include Criterion::Inspection
21
- include Criterion::Findable
22
- include Criterion::Marshalable
23
- include Criterion::Modifiable
24
- include Criterion::Scoping
21
+ include Findable
22
+ include Inspectable
23
+ include Marshalable
24
+ include Modifiable
25
+ include Scopable
26
+ include Sessions::Options
25
27
 
26
28
  # Static array used to check with method missing - we only need to ever
27
29
  # instantiate once.
@@ -29,7 +31,7 @@ module Mongoid
29
31
  # @since 4.0.0
30
32
  CHECK = []
31
33
 
32
- attr_accessor :embedded, :klass
34
+ attr_accessor :embedded, :klass, :parent_document, :metadata
33
35
 
34
36
  # Returns true if the supplied +Enumerable+ or +Criteria+ is equal to the results
35
37
  # of this +Criteria+ or the criteria itself.
@@ -197,9 +199,6 @@ module Mongoid
197
199
  # into the identity map who's ids match based on the extra query for the
198
200
  # ids.
199
201
  #
200
- # @note This will only work if Mongoid's identity map is enabled. To do
201
- # so set identity_map_enabled: true in your mongoid.yml
202
- #
203
202
  # @note This will work for embedded relations that reference another
204
203
  # collection via belongs_to as well.
205
204
  #
@@ -298,6 +297,31 @@ module Mongoid
298
297
  self
299
298
  end
300
299
 
300
+ # Returns a criteria that will always contain zero results and never hits
301
+ # the database.
302
+ #
303
+ # @example Return a none criteria.
304
+ # criteria.none
305
+ #
306
+ # @return [ Criteria ] The none criteria.
307
+ #
308
+ # @since 4.0.0
309
+ def none
310
+ @none = true and self
311
+ end
312
+
313
+ # Is the criteria an empty but chainable criteria?
314
+ #
315
+ # @example Is the criteria a none criteria?
316
+ # criteria.empty_and_chainable?
317
+ #
318
+ # @return [ true, false ] If the criteria is a none.
319
+ #
320
+ # @since 4.0.0
321
+ def empty_and_chainable?
322
+ !!@none
323
+ end
324
+
301
325
  # Overriden to include _type in the fields.
302
326
  #
303
327
  # @example Limit the fields returned from the database.
@@ -396,25 +420,6 @@ module Mongoid
396
420
  super
397
421
  end
398
422
 
399
- # Tell the next persistance operation to query from a specific collection,
400
- # database or session.
401
- #
402
- # @example Send the criteria to another collection.
403
- # Band.where(name: "Depeche Mode").with(collection: "artists")
404
- #
405
- # @param [ Hash ] options The storage options.
406
- #
407
- # @option options [ String, Symbol ] :collection The collection name.
408
- # @option options [ String, Symbol ] :database The database name.
409
- # @option options [ String, Symbol ] :session The session name.
410
- #
411
- # @return [ Criteria ] The criteria.
412
- #
413
- # @since 3.0.0
414
- def with(options)
415
- Threaded.set_persistence_options(klass, options)
416
- self
417
- end
418
423
 
419
424
  # Get a version of this criteria without the options.
420
425
  #
@@ -445,7 +450,7 @@ module Mongoid
445
450
  #
446
451
  # @since 3.1.0
447
452
  def for_js(javascript, scope = {})
448
- js_query(Moped::BSON::Code.new(javascript, scope))
453
+ js_query(BSON::CodeWithScope.new(javascript, scope))
449
454
  end
450
455
 
451
456
  private
@@ -1,13 +1,30 @@
1
1
  # encoding: utf-8
2
+ require "mongoid/positional"
3
+ require "mongoid/evolvable"
4
+ require "mongoid/extensions"
5
+ require "mongoid/errors"
6
+ require "mongoid/threaded"
7
+ require "mongoid/relations"
8
+ require "mongoid/atomic"
9
+ require "mongoid/attributes"
10
+ require "mongoid/contextual"
11
+ require "mongoid/copyable"
12
+ require "mongoid/equality"
13
+ require "mongoid/criteria"
14
+ require "mongoid/factory"
15
+ require "mongoid/fields"
16
+ require "mongoid/timestamps"
17
+ require "mongoid/composable"
18
+
2
19
  module Mongoid
3
20
 
4
21
  # This is the base module for all domain objects that need to be persisted to
5
22
  # the database as documents.
6
23
  module Document
7
24
  extend ActiveSupport::Concern
8
- include Mongoid::Components
25
+ include Composable
9
26
 
10
- attr_accessor :criteria_instance_id
27
+ attr_accessor :__selected_fields
11
28
  attr_reader :new_record
12
29
 
13
30
  included do
@@ -56,7 +73,7 @@ module Mongoid
56
73
 
57
74
  # A Document's is identified absolutely by its class and database id:
58
75
  #
59
- # Person.first.identity #=> [Person, Moped::BSON::ObjectId('4f775130a04745933a000003')]
76
+ # Person.first.identity #=> [Person, BSON::ObjectId('4f775130a04745933a000003')]
60
77
  #
61
78
  # @example Get the identity
62
79
  # document.identity
@@ -73,25 +90,24 @@ module Mongoid
73
90
  # an empty +Hash+.
74
91
  #
75
92
  # If a primary key is defined, the document's id will be set to that key,
76
- # otherwise it will be set to a fresh +Moped::BSON::ObjectId+ string.
93
+ # otherwise it will be set to a fresh +BSON::ObjectId+ string.
77
94
  #
78
95
  # @example Create a new document.
79
96
  # Person.new(:title => "Sir")
80
97
  #
81
98
  # @param [ Hash ] attrs The attributes to set up the document with.
82
- # @param [ Hash ] options A mass-assignment protection options. Supports
83
- # :as and :without_protection
84
99
  #
85
100
  # @return [ Document ] A new document.
86
101
  #
87
102
  # @since 1.0.0
88
- def initialize(attrs = nil, options = nil)
103
+ def initialize(attrs = nil)
89
104
  _building do
90
105
  @new_record = true
91
106
  @attributes ||= {}
92
- options ||= {}
107
+ with(self.class.persistence_options)
93
108
  apply_pre_processed_defaults
94
- process_attributes(attrs, options[:as] || :default, !options[:without_protection]) do
109
+ apply_default_scoping
110
+ process_attributes(attrs) do
95
111
  yield(self) if block_given?
96
112
  end
97
113
  apply_post_processed_defaults
@@ -182,10 +198,11 @@ module Mongoid
182
198
  raise ArgumentError, "A class which includes Mongoid::Document is expected"
183
199
  end
184
200
 
185
- became = klass.new(clone_document, without_protection: true)
201
+ became = klass.new(clone_document)
186
202
  became.id = id
187
203
  became.instance_variable_set(:@changed_attributes, changed_attributes)
188
- became.instance_variable_set(:@errors, errors)
204
+ became.instance_variable_set(:@errors, ActiveModel::Errors.new(became))
205
+ became.errors.instance_variable_set(:@messages, errors.instance_variable_get(:@messages))
189
206
  became.instance_variable_set(:@new_record, new_record?)
190
207
  became.instance_variable_set(:@destroyed, destroyed?)
191
208
  became.changed_attributes["_type"] = self.class.to_s
@@ -201,7 +218,6 @@ module Mongoid
201
218
  end
202
219
  end
203
220
 
204
- IdentityMap.set(became) unless became.new_record?
205
221
  became
206
222
  end
207
223
 
@@ -284,19 +300,18 @@ module Mongoid
284
300
  # Person.instantiate(:title => "Sir", :age => 30)
285
301
  #
286
302
  # @param [ Hash ] attrs The hash of attributes to instantiate with.
287
- # @param [ Integer ] criteria_instance_id The criteria id that
288
- # instantiated the document.
303
+ # @param [ Integer ] selected_fields The selected fields from the
304
+ # criteria.
289
305
  #
290
306
  # @return [ Document ] A new document.
291
307
  #
292
308
  # @since 1.0.0
293
- def instantiate(attrs = nil, criteria_instance_id = nil)
309
+ def instantiate(attrs = nil, selected_fields = nil)
294
310
  attributes = attrs || {}
295
311
  doc = allocate
296
- doc.criteria_instance_id = criteria_instance_id
312
+ doc.__selected_fields = selected_fields
297
313
  doc.instance_variable_set(:@attributes, attributes)
298
314
  doc.apply_defaults
299
- IdentityMap.set(doc) unless _loading_revision?
300
315
  yield(doc) if block_given?
301
316
  doc.run_callbacks(:find) unless doc._find_callbacks.empty?
302
317
  doc.run_callbacks(:initialize) unless doc._initialize_callbacks.empty?
@@ -0,0 +1,25 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ module Errors
4
+
5
+ # Raised when attempting to destroy a document that had destory callbacks
6
+ # return false.
7
+ #
8
+ # @since 4.0.0
9
+ class DocumentNotDestroyed < MongoidError
10
+
11
+ # Instnatiate the exception.
12
+ #
13
+ # @example Create the error.
14
+ # DocumentNotDestroyed.new(Band)
15
+ #
16
+ # @param [ Object ] id The document id.
17
+ # @param [ Class ] klass The document class.
18
+ #
19
+ # @since 4.0.0
20
+ def initialize(id, klass)
21
+ super(compose_message("document_not_destroyed", { id: id.inspect, klass: klass }))
22
+ end
23
+ end
24
+ end
25
+ end
@@ -22,8 +22,9 @@ module Mongoid
22
22
  # @param [ Array ] unmatched The unmatched ids, if appropriate
23
23
  def initialize(klass, params, unmatched = nil)
24
24
  if !unmatched && !params.is_a?(Hash)
25
- raise ArgumentError, 'please also supply the unmatched ids'
25
+ unmatched = Array(params)
26
26
  end
27
+
27
28
  @klass, @params = klass, params
28
29
  super(
29
30
  compose_message(
@@ -8,7 +8,7 @@ module Mongoid
8
8
  # Create the new error.
9
9
  #
10
10
  # @example Create the new error.
11
- # InvalidStorageOptions.new(:collection_name)
11
+ # InvalidStorageOptions.new(Person, invalid_option: 'name')
12
12
  #
13
13
  # @param [ Class ] klass The model class.
14
14
  # @param [ Hash, String, Symbol ] options The provided options.
@@ -0,0 +1,26 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ module Errors
4
+
5
+ # Raised when calling store_in in a sub-class of Mongoid::Document
6
+ class InvalidStorageParent < MongoidError
7
+
8
+ # Create the new error.
9
+ #
10
+ # @example Create the new error.
11
+ # InvalidStorageParent.new(Person)
12
+ #
13
+ # @param [ Class ] klass The model class.
14
+ #
15
+ # @since 4.0.0
16
+ def initialize(klass)
17
+ super(
18
+ compose_message(
19
+ "invalid_storage_parent",
20
+ { klass: klass }
21
+ )
22
+ )
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,16 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ module Errors
4
+
5
+ # This error is raised when trying to set an attribute with an invalid value.
6
+ # For example when try to set an Array value to a Hash attribute.
7
+ #
8
+ class InvalidValue < MongoidError
9
+ def initialize(field_class, value_class)
10
+ super(
11
+ compose_message("invalid_value", { value_class: value_class, field_class: field_class })
12
+ )
13
+ end
14
+ end
15
+ end
16
+ end
@@ -40,7 +40,7 @@ module Mongoid
40
40
  #
41
41
  # @return [ String ] A localized error message string.
42
42
  def translate(key, options)
43
- ::I18n.translate("#{BASE_KEY}.#{key}", { locale: :en }.merge(options))
43
+ ::I18n.translate("#{BASE_KEY}.#{key}", options)
44
44
  end
45
45
 
46
46
  # Create the problem.
@@ -0,0 +1,24 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ module Errors
4
+
5
+ # Raised when attempting to persist a document that was loaded from the
6
+ # database with partial fields.
7
+ #
8
+ # @since 4.0.0
9
+ class ReadonlyDocument < MongoidError
10
+
11
+ # Instnatiate the exception.
12
+ #
13
+ # @example Create the error.
14
+ # ReadonlyDocument.new(Band)
15
+ #
16
+ # @param [ Class ] klass The document class.
17
+ #
18
+ # @since 4.0.0
19
+ def initialize(klass)
20
+ super(compose_message("readonly_document", { klass: klass }))
21
+ end
22
+ end
23
+ end
24
+ end
@@ -2,6 +2,7 @@
2
2
  require "mongoid/errors/mongoid_error"
3
3
  require "mongoid/errors/ambiguous_relationship"
4
4
  require "mongoid/errors/callback"
5
+ require "mongoid/errors/document_not_destroyed"
5
6
  require "mongoid/errors/document_not_found"
6
7
  require "mongoid/errors/eager_load"
7
8
  require "mongoid/errors/invalid_collection"
@@ -16,7 +17,9 @@ require "mongoid/errors/invalid_path"
16
17
  require "mongoid/errors/invalid_scope"
17
18
  require "mongoid/errors/invalid_set_polymorphic_relation"
18
19
  require "mongoid/errors/invalid_storage_options"
20
+ require "mongoid/errors/invalid_storage_parent"
19
21
  require "mongoid/errors/invalid_time"
22
+ require "mongoid/errors/invalid_value"
20
23
  require "mongoid/errors/inverse_not_found"
21
24
  require "mongoid/errors/mixed_relations"
22
25
  require "mongoid/errors/mixed_session_configuration"
@@ -31,11 +34,11 @@ require "mongoid/errors/no_sessions_config"
31
34
  require "mongoid/errors/no_session_database"
32
35
  require "mongoid/errors/no_session_hosts"
33
36
  require "mongoid/errors/readonly_attribute"
37
+ require "mongoid/errors/readonly_document"
34
38
  require "mongoid/errors/scope_overwrite"
35
39
  require "mongoid/errors/too_many_nested_attribute_records"
36
40
  require "mongoid/errors/unknown_attribute"
37
41
  require "mongoid/errors/unsaved_document"
38
42
  require "mongoid/errors/unsupported_javascript"
39
43
  require "mongoid/errors/validations"
40
- require "mongoid/errors/versioning_not_on_root"
41
44
  require "mongoid/errors/delete_restriction"
@@ -8,7 +8,7 @@ module Mongoid
8
8
  # @example Evolve the array to object ids.
9
9
  # [ id ].__evolve_object_id__
10
10
  #
11
- # @return [ Array<Moped::BSON::ObjectId> ] The converted array.
11
+ # @return [ Array<BSON::ObjectId> ] The converted array.
12
12
  #
13
13
  # @since 3.0.0
14
14
  def __evolve_object_id__
@@ -33,7 +33,7 @@ module Mongoid
33
33
  # @example Evolve the array to object ids.
34
34
  # [ id ].__mongoize_object_id__
35
35
  #
36
- # @return [ Array<Moped::BSON::ObjectId> ] The converted array.
36
+ # @return [ Array<BSON::ObjectId> ] The converted array.
37
37
  #
38
38
  # @since 3.0.0
39
39
  def __mongoize_object_id__
@@ -177,4 +177,4 @@ module Mongoid
177
177
  end
178
178
 
179
179
  ::Array.__send__(:include, Mongoid::Extensions::Array)
180
- ::Array.__send__(:extend, Mongoid::Extensions::Array::ClassMethods)
180
+ ::Array.extend(Mongoid::Extensions::Array::ClassMethods)
@@ -66,4 +66,4 @@ module Mongoid
66
66
  end
67
67
 
68
68
  ::BigDecimal.__send__(:include, Mongoid::Extensions::BigDecimal)
69
- ::BigDecimal.__send__(:extend, Mongoid::Extensions::BigDecimal::ClassMethods)
69
+ ::BigDecimal.extend(Mongoid::Extensions::BigDecimal::ClassMethods)
@@ -1,24 +1,22 @@
1
1
  # encoding: utf-8
2
2
  module Mongoid
3
- module Extensions
4
- module Boolean
5
- module ClassMethods
3
+ class Boolean
6
4
 
7
- # Turn the object from the ruby type we deal with to a Mongo friendly
8
- # type.
9
- #
10
- # @example Mongoize the object.
11
- # Boolean.mongoize("123.11")
12
- #
13
- # @return [ String ] The object mongoized.
14
- #
15
- # @since 3.0.0
16
- def mongoize(object)
17
- evolve(object)
18
- end
5
+ class << self
6
+
7
+ # Turn the object from the ruby type we deal with to a Mongo friendly
8
+ # type.
9
+ #
10
+ # @example Mongoize the object.
11
+ # Boolean.mongoize("123.11")
12
+ #
13
+ # @return [ String ] The object mongoized.
14
+ #
15
+ # @since 3.0.0
16
+ def mongoize(object)
17
+ ::Boolean.evolve(object)
19
18
  end
19
+ alias :evolve :mongoize
20
20
  end
21
21
  end
22
22
  end
23
-
24
- ::Boolean.__send__(:extend, Mongoid::Extensions::Boolean::ClassMethods)
@@ -74,4 +74,4 @@ module Mongoid
74
74
  end
75
75
 
76
76
  ::Date.__send__(:include, Mongoid::Extensions::Date)
77
- ::Date.__send__(:extend, Mongoid::Extensions::Date::ClassMethods)
77
+ ::Date.extend(Mongoid::Extensions::Date::ClassMethods)
@@ -12,9 +12,9 @@ module Mongoid
12
12
  #
13
13
  # @since 3.0.0
14
14
  def __mongoize_time__
15
- return self if utc? && Mongoid.use_utc?
15
+ return to_time if utc? && Mongoid.use_utc?
16
16
  if Mongoid.use_activesupport_time_zone?
17
- in_time_zone(::Time.zone)
17
+ in_time_zone(::Time.zone).to_time
18
18
  else
19
19
  time = to_time
20
20
  time.respond_to?(:getlocal) ? time.getlocal : time
@@ -70,4 +70,4 @@ module Mongoid
70
70
  end
71
71
 
72
72
  ::DateTime.__send__(:include, Mongoid::Extensions::DateTime)
73
- ::DateTime.__send__(:extend, Mongoid::Extensions::DateTime::ClassMethods)
73
+ ::DateTime.extend(Mongoid::Extensions::DateTime::ClassMethods)
@@ -47,10 +47,11 @@ module Mongoid
47
47
  nil
48
48
  end
49
49
  end
50
+ alias :demongoize :mongoize
50
51
  end
51
52
  end
52
53
  end
53
54
  end
54
55
 
55
56
  ::Float.__send__(:include, Mongoid::Extensions::Float)
56
- ::Float.__send__(:extend, Mongoid::Extensions::Float::ClassMethods)
57
+ ::Float.extend(Mongoid::Extensions::Float::ClassMethods)
@@ -40,7 +40,7 @@ module Mongoid
40
40
  each_pair do |key, value|
41
41
  if key =~ /\$/
42
42
  value.each_pair do |_key, _value|
43
- value[_key] = mongoize_for(key, klass, _key, _value)
43
+ value[_key] = (key == "$rename") ? _value.to_s : mongoize_for(key, klass, _key, _value)
44
44
  end
45
45
  (consolidated[key] ||= {}).merge!(value)
46
46
  else
@@ -170,7 +170,7 @@ module Mongoid
170
170
  field = klass.fields[key.to_s]
171
171
  if field
172
172
  val = field.mongoize(value)
173
- if Mongoid::Persistence::LIST_OPERATIONS.include?(operator) && field.resizable?
173
+ if Mongoid::Persistable::LIST_OPERATIONS.include?(operator) && field.resizable?
174
174
  val = val.first if !value.is_a?(Array)
175
175
  end
176
176
  val
@@ -214,4 +214,4 @@ module Mongoid
214
214
  end
215
215
 
216
216
  ::Hash.__send__(:include, Mongoid::Extensions::Hash)
217
- ::Hash.__send__(:extend, Mongoid::Extensions::Hash::ClassMethods)
217
+ ::Hash.extend(Mongoid::Extensions::Hash::ClassMethods)
@@ -64,4 +64,4 @@ module Mongoid
64
64
  end
65
65
 
66
66
  ::Integer.__send__(:include, Mongoid::Extensions::Integer)
67
- ::Integer.__send__(:extend, Mongoid::Extensions::Integer::ClassMethods)
67
+ ::Integer.extend(Mongoid::Extensions::Integer::ClassMethods)
@@ -104,19 +104,19 @@ module Mongoid
104
104
  send(name, *args) if name && respond_to?(name)
105
105
  end
106
106
 
107
- # Get the value for an instance variable or nil if it doesn't exist.
107
+ # Get the value for an instance variable or false if it doesn't exist.
108
108
  #
109
109
  # @example Get the value for an instance var.
110
110
  # document.ivar("person")
111
111
  #
112
112
  # @param [ String ] name The name of the variable.
113
113
  #
114
- # @return [ Object, nil ] The value or nil.
114
+ # @return [ Object, false ] The value or false.
115
115
  #
116
116
  # @since 2.0.0.rc.1
117
117
  def ivar(name)
118
- if instance_variable_defined?("@#{name}")
119
- return instance_variable_get("@#{name}")
118
+ if instance_variable_defined?("@_#{name}")
119
+ return instance_variable_get("@_#{name}")
120
120
  else
121
121
  false
122
122
  end
@@ -170,8 +170,8 @@ module Mongoid
170
170
  #
171
171
  # @since 2.1.0
172
172
  def remove_ivar(name)
173
- if instance_variable_defined?("@#{name}")
174
- return remove_instance_variable("@#{name}")
173
+ if instance_variable_defined?("@_#{name}")
174
+ return remove_instance_variable("@_#{name}")
175
175
  else
176
176
  false
177
177
  end
@@ -271,4 +271,4 @@ module Mongoid
271
271
  end
272
272
 
273
273
  ::Object.__send__(:include, Mongoid::Extensions::Object)
274
- ::Object.__send__(:extend, Mongoid::Extensions::Object::ClassMethods)
274
+ ::Object.extend(Mongoid::Extensions::Object::ClassMethods)
@@ -8,7 +8,7 @@ module Mongoid
8
8
  # @example Evolve the object id.
9
9
  # object_id.__evolve_object_id__
10
10
  #
11
- # @return [ Moped::BSON::ObjectId ] self.
11
+ # @return [ BSON::ObjectId ] self.
12
12
  #
13
13
  # @since 3.0.0
14
14
  def __evolve_object_id__
@@ -25,7 +25,7 @@ module Mongoid
25
25
  #
26
26
  # @param [ Object ] object The object to evolve.
27
27
  #
28
- # @return [ Moped::BSON::ObjectId ] The object id.
28
+ # @return [ BSON::ObjectId ] The object id.
29
29
  #
30
30
  # @since 3.0.0
31
31
  def evolve(object)
@@ -39,7 +39,7 @@ module Mongoid
39
39
  #
40
40
  # @param [ Object ] object The object to convert.
41
41
  #
42
- # @return [ Moped::BSON::ObjectId ] The object id.
42
+ # @return [ BSON::ObjectId ] The object id.
43
43
  #
44
44
  # @since 3.0.0
45
45
  def mongoize(object)
@@ -50,5 +50,5 @@ module Mongoid
50
50
  end
51
51
  end
52
52
 
53
- Moped::BSON::ObjectId.__send__(:include, Mongoid::Extensions::ObjectId)
54
- Moped::BSON::ObjectId.__send__(:extend, Mongoid::Extensions::ObjectId::ClassMethods)
53
+ BSON::ObjectId.__send__(:include, Mongoid::Extensions::ObjectId)
54
+ BSON::ObjectId.extend(Mongoid::Extensions::ObjectId::ClassMethods)
@@ -53,7 +53,7 @@ module Mongoid
53
53
  #
54
54
  # @since 3.0.0
55
55
  def demongoize(object)
56
- object.nil? ? nil : ::Range.new(object["min"], object["max"])
56
+ object.nil? ? nil : ::Range.new(object["min"], object["max"], object["exclude_end"])
57
57
  end
58
58
 
59
59
  # Turn the object from the ruby type we deal with to a Mongo friendly
@@ -68,7 +68,13 @@ module Mongoid
68
68
  #
69
69
  # @since 3.0.0
70
70
  def mongoize(object)
71
- object.nil? ? nil : { "min" => object.first, "max" => object.last }
71
+ return nil if object.nil?
72
+ return object if object.is_a?(::Hash)
73
+ hash = { "min" => object.first, "max" => object.last }
74
+ if object.respond_to?(:exclude_end?) && object.exclude_end?
75
+ hash.merge!("exclude_end" => true)
76
+ end
77
+ hash
72
78
  end
73
79
  end
74
80
  end
@@ -76,4 +82,4 @@ module Mongoid
76
82
  end
77
83
 
78
84
  ::Range.__send__(:include, Mongoid::Extensions::Range)
79
- ::Range.__send__(:extend, Mongoid::Extensions::Range::ClassMethods)
85
+ ::Range.extend(Mongoid::Extensions::Range::ClassMethods)
@@ -24,4 +24,4 @@ module Mongoid
24
24
  end
25
25
  end
26
26
 
27
- ::Regexp.__send__(:extend, Mongoid::Extensions::Regexp::ClassMethods)
27
+ ::Regexp.extend(Mongoid::Extensions::Regexp::ClassMethods)
@@ -52,4 +52,4 @@ module Mongoid
52
52
  end
53
53
 
54
54
  ::Set.__send__(:include, Mongoid::Extensions::Set)
55
- ::Set.__send__(:extend, Mongoid::Extensions::Set::ClassMethods)
55
+ ::Set.extend(Mongoid::Extensions::Set::ClassMethods)