mongoid 3.1.7 → 4.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (567) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +470 -9
  3. data/README.md +10 -7
  4. data/lib/config/locales/en.yml +34 -20
  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 +3 -14
  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 +63 -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/memory.rb +2 -2
  19. data/lib/mongoid/contextual/aggregable/mongo.rb +5 -9
  20. data/lib/mongoid/contextual/atomic.rb +53 -53
  21. data/lib/mongoid/contextual/geo_near.rb +1 -1
  22. data/lib/mongoid/contextual/map_reduce.rb +4 -2
  23. data/lib/mongoid/contextual/memory.rb +23 -11
  24. data/lib/mongoid/contextual/mongo.rb +75 -57
  25. data/lib/mongoid/contextual/none.rb +90 -0
  26. data/lib/mongoid/contextual/text_search.rb +178 -0
  27. data/lib/mongoid/contextual.rb +2 -0
  28. data/lib/mongoid/copyable.rb +2 -3
  29. data/lib/mongoid/{criterion → criteria}/findable.rb +7 -47
  30. data/lib/mongoid/{criterion/inspection.rb → criteria/inspectable.rb} +2 -2
  31. data/lib/mongoid/{criterion → criteria}/marshalable.rb +3 -1
  32. data/lib/mongoid/{criterion → criteria}/modifiable.rb +28 -8
  33. data/lib/mongoid/criteria/permission.rb +70 -0
  34. data/lib/mongoid/{criterion/scoping.rb → criteria/scopable.rb} +2 -2
  35. data/lib/mongoid/criteria.rb +39 -34
  36. data/lib/mongoid/document.rb +39 -24
  37. data/lib/mongoid/errors/document_not_destroyed.rb +25 -0
  38. data/lib/mongoid/errors/document_not_found.rb +2 -1
  39. data/lib/mongoid/errors/invalid_storage_options.rb +1 -1
  40. data/lib/mongoid/errors/invalid_storage_parent.rb +26 -0
  41. data/lib/mongoid/errors/invalid_value.rb +16 -0
  42. data/lib/mongoid/errors/mongoid_error.rb +1 -1
  43. data/lib/mongoid/errors/readonly_document.rb +24 -0
  44. data/lib/mongoid/errors.rb +4 -1
  45. data/lib/mongoid/extensions/array.rb +3 -3
  46. data/lib/mongoid/extensions/big_decimal.rb +1 -1
  47. data/lib/mongoid/extensions/boolean.rb +15 -17
  48. data/lib/mongoid/extensions/date.rb +1 -1
  49. data/lib/mongoid/extensions/date_time.rb +3 -3
  50. data/lib/mongoid/extensions/float.rb +2 -1
  51. data/lib/mongoid/extensions/hash.rb +3 -3
  52. data/lib/mongoid/extensions/integer.rb +1 -1
  53. data/lib/mongoid/extensions/object.rb +7 -7
  54. data/lib/mongoid/extensions/object_id.rb +5 -5
  55. data/lib/mongoid/extensions/range.rb +9 -3
  56. data/lib/mongoid/extensions/regexp.rb +1 -1
  57. data/lib/mongoid/extensions/set.rb +1 -1
  58. data/lib/mongoid/extensions/string.rb +6 -18
  59. data/lib/mongoid/extensions/symbol.rb +1 -1
  60. data/lib/mongoid/extensions/time.rb +3 -3
  61. data/lib/mongoid/extensions/time_with_zone.rb +1 -1
  62. data/lib/mongoid/extensions.rb +15 -7
  63. data/lib/mongoid/factory.rb +8 -6
  64. data/lib/mongoid/fields/foreign_key.rb +3 -3
  65. data/lib/mongoid/fields/localized.rb +1 -1
  66. data/lib/mongoid/fields/standard.rb +5 -17
  67. data/lib/mongoid/fields/validators/macro.rb +15 -5
  68. data/lib/mongoid/fields.rb +41 -8
  69. data/lib/mongoid/{finders.rb → findable.rb} +35 -7
  70. data/lib/mongoid/indexable/specification.rb +104 -0
  71. data/lib/mongoid/{indexes → indexable}/validators/options.rb +2 -1
  72. data/lib/mongoid/{indexes.rb → indexable.rb} +50 -55
  73. data/lib/mongoid/{inspection.rb → inspectable.rb} +15 -11
  74. data/lib/mongoid/{callbacks.rb → interceptable.rb} +30 -62
  75. data/lib/mongoid/log_subscriber.rb +55 -0
  76. data/lib/mongoid/{matchers → matchable}/all.rb +1 -1
  77. data/lib/mongoid/{matchers → matchable}/and.rb +2 -2
  78. data/lib/mongoid/{matchers → matchable}/default.rb +1 -1
  79. data/lib/mongoid/{matchers → matchable}/exists.rb +1 -1
  80. data/lib/mongoid/{matchers → matchable}/gt.rb +1 -1
  81. data/lib/mongoid/{matchers → matchable}/gte.rb +1 -1
  82. data/lib/mongoid/{matchers → matchable}/in.rb +2 -2
  83. data/lib/mongoid/{matchers → matchable}/lt.rb +1 -1
  84. data/lib/mongoid/{matchers → matchable}/lte.rb +1 -1
  85. data/lib/mongoid/{matchers → matchable}/ne.rb +1 -1
  86. data/lib/mongoid/{matchers → matchable}/nin.rb +3 -2
  87. data/lib/mongoid/{matchers → matchable}/or.rb +2 -2
  88. data/lib/mongoid/{matchers → matchable}/size.rb +1 -1
  89. data/lib/mongoid/matchable.rb +152 -0
  90. data/lib/mongoid/persistable/creatable.rb +189 -0
  91. data/lib/mongoid/persistable/deletable.rb +149 -0
  92. data/lib/mongoid/persistable/destroyable.rb +60 -0
  93. data/lib/mongoid/persistable/incrementable.rb +36 -0
  94. data/lib/mongoid/persistable/logical.rb +38 -0
  95. data/lib/mongoid/persistable/poppable.rb +39 -0
  96. data/lib/mongoid/persistable/pullable.rb +55 -0
  97. data/lib/mongoid/persistable/pushable.rb +62 -0
  98. data/lib/mongoid/persistable/renamable.rb +35 -0
  99. data/lib/mongoid/persistable/savable.rb +52 -0
  100. data/lib/mongoid/persistable/settable.rb +33 -0
  101. data/lib/mongoid/persistable/unsettable.rb +36 -0
  102. data/lib/mongoid/persistable/updatable.rb +153 -0
  103. data/lib/mongoid/persistable/upsertable.rb +55 -0
  104. data/lib/mongoid/persistable.rb +216 -0
  105. data/lib/mongoid/positional.rb +71 -0
  106. data/lib/mongoid/query_cache.rb +255 -0
  107. data/lib/mongoid/railtie.rb +34 -60
  108. data/lib/mongoid/railties/database.rake +9 -25
  109. data/lib/mongoid/relations/accessors.rb +15 -51
  110. data/lib/mongoid/relations/auto_save.rb +15 -36
  111. data/lib/mongoid/relations/binding.rb +2 -25
  112. data/lib/mongoid/relations/bindings/embedded/in.rb +1 -1
  113. data/lib/mongoid/relations/bindings/embedded/many.rb +1 -3
  114. data/lib/mongoid/relations/bindings/referenced/in.rb +3 -8
  115. data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +4 -2
  116. data/lib/mongoid/relations/builder.rb +1 -1
  117. data/lib/mongoid/relations/builders/embedded/one.rb +1 -1
  118. data/lib/mongoid/relations/builders/nested_attributes/many.rb +10 -13
  119. data/lib/mongoid/relations/builders/nested_attributes/one.rb +5 -6
  120. data/lib/mongoid/relations/builders/referenced/in.rb +1 -1
  121. data/lib/mongoid/relations/builders/referenced/many.rb +1 -2
  122. data/lib/mongoid/relations/builders/referenced/many_to_many.rb +1 -2
  123. data/lib/mongoid/relations/builders/referenced/one.rb +1 -1
  124. data/lib/mongoid/relations/builders.rb +2 -2
  125. data/lib/mongoid/relations/cascading.rb +3 -5
  126. data/lib/mongoid/relations/constraint.rb +1 -1
  127. data/lib/mongoid/relations/conversions.rb +1 -1
  128. data/lib/mongoid/relations/counter_cache.rb +39 -15
  129. data/lib/mongoid/relations/eager/base.rb +149 -0
  130. data/lib/mongoid/relations/eager/belongs_to.rb +31 -0
  131. data/lib/mongoid/relations/eager/has_and_belongs_to_many.rb +47 -0
  132. data/lib/mongoid/relations/eager/has_many.rb +38 -0
  133. data/lib/mongoid/relations/eager/has_one.rb +30 -0
  134. data/lib/mongoid/relations/eager.rb +46 -0
  135. data/lib/mongoid/relations/embedded/batchable.rb +4 -5
  136. data/lib/mongoid/relations/embedded/in.rb +4 -4
  137. data/lib/mongoid/relations/embedded/many.rb +14 -32
  138. data/lib/mongoid/relations/embedded/one.rb +1 -1
  139. data/lib/mongoid/relations/macros.rb +3 -4
  140. data/lib/mongoid/relations/many.rb +51 -31
  141. data/lib/mongoid/relations/marshalable.rb +3 -3
  142. data/lib/mongoid/relations/metadata.rb +14 -79
  143. data/lib/mongoid/relations/nested_builder.rb +2 -2
  144. data/lib/mongoid/relations/one.rb +1 -1
  145. data/lib/mongoid/relations/options.rb +1 -0
  146. data/lib/mongoid/relations/polymorphic.rb +0 -1
  147. data/lib/mongoid/relations/proxy.rb +21 -41
  148. data/lib/mongoid/relations/referenced/in.rb +4 -20
  149. data/lib/mongoid/relations/referenced/many.rb +22 -35
  150. data/lib/mongoid/relations/referenced/many_to_many.rb +19 -42
  151. data/lib/mongoid/relations/referenced/one.rb +6 -25
  152. data/lib/mongoid/relations/synchronization.rb +4 -4
  153. data/lib/mongoid/relations/targets/enumerable.rb +10 -10
  154. data/lib/mongoid/relations/touchable.rb +34 -1
  155. data/lib/mongoid/relations.rb +11 -25
  156. data/lib/mongoid/{reloading.rb → reloadable.rb} +7 -5
  157. data/lib/mongoid/{scoping.rb → scopable.rb} +36 -36
  158. data/lib/mongoid/selectable.rb +59 -0
  159. data/lib/mongoid/{serialization.rb → serializable.rb} +11 -2
  160. data/lib/mongoid/sessions/factory.rb +2 -0
  161. data/lib/mongoid/sessions/options.rb +185 -0
  162. data/lib/mongoid/sessions/storage_options.rb +140 -0
  163. data/lib/mongoid/sessions/thread_options.rb +19 -0
  164. data/lib/mongoid/sessions/validators/storage.rb +16 -3
  165. data/lib/mongoid/sessions.rb +37 -345
  166. data/lib/mongoid/{sharding.rb → shardable.rb} +5 -1
  167. data/lib/mongoid/{state.rb → stateful.rb} +13 -1
  168. data/lib/mongoid/support/query_counter.rb +23 -0
  169. data/lib/mongoid/tasks/database.rake +31 -0
  170. data/lib/mongoid/tasks/database.rb +107 -0
  171. data/lib/mongoid/threaded/lifecycle.rb +0 -28
  172. data/lib/mongoid/threaded.rb +26 -172
  173. data/lib/mongoid/timestamps/updated/short.rb +2 -2
  174. data/lib/mongoid/{hierarchy.rb → traversable.rb} +15 -7
  175. data/lib/mongoid/{validations → validatable}/associated.rb +4 -2
  176. data/lib/mongoid/{validations → validatable}/format.rb +1 -1
  177. data/lib/mongoid/{validations → validatable}/length.rb +1 -1
  178. data/lib/mongoid/{validations → validatable}/localizable.rb +1 -1
  179. data/lib/mongoid/{validations → validatable}/macros.rb +4 -3
  180. data/lib/mongoid/{validations → validatable}/presence.rb +1 -1
  181. data/lib/mongoid/{validations → validatable}/queryable.rb +1 -2
  182. data/lib/mongoid/{validations → validatable}/uniqueness.rb +25 -21
  183. data/lib/mongoid/{validations.rb → validatable.rb} +23 -10
  184. data/lib/mongoid/version.rb +1 -1
  185. data/lib/mongoid.rb +10 -76
  186. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +46 -25
  187. data/lib/rails/generators/mongoid/model/model_generator.rb +0 -1
  188. data/lib/rails/generators/mongoid/model/templates/model.rb.tt +0 -3
  189. data/lib/rails/generators/mongoid_generator.rb +3 -40
  190. data/lib/rails/mongoid.rb +0 -122
  191. data/lib/support/ruby_version.rb +1 -1
  192. data/spec/app/models/account.rb +2 -6
  193. data/spec/app/models/acolyte.rb +2 -1
  194. data/spec/app/models/actor.rb +0 -1
  195. data/spec/app/models/address.rb +8 -3
  196. data/spec/app/models/animal.rb +1 -1
  197. data/spec/app/models/appointment.rb +3 -3
  198. data/spec/app/models/article.rb +1 -4
  199. data/spec/app/models/audio.rb +5 -0
  200. data/spec/app/models/author.rb +0 -2
  201. data/spec/app/models/band.rb +3 -2
  202. data/spec/app/models/bar.rb +1 -0
  203. data/spec/app/models/book.rb +1 -0
  204. data/spec/app/models/building.rb +0 -2
  205. data/spec/app/models/building_address.rb +0 -2
  206. data/spec/app/models/bus.rb +1 -1
  207. data/spec/app/models/canvas.rb +1 -1
  208. data/spec/app/models/contextable_item.rb +5 -0
  209. data/spec/app/models/contractor.rb +0 -2
  210. data/spec/app/models/country_code.rb +1 -1
  211. data/spec/app/models/definition.rb +2 -2
  212. data/spec/app/models/dog.rb +1 -1
  213. data/spec/app/models/dragon.rb +4 -0
  214. data/spec/app/models/drug.rb +1 -3
  215. data/spec/app/models/dungeon.rb +4 -0
  216. data/spec/app/models/edit.rb +5 -0
  217. data/spec/app/models/even.rb +7 -0
  218. data/spec/app/models/event.rb +1 -1
  219. data/spec/app/models/filesystem.rb +1 -0
  220. data/spec/app/models/fish.rb +0 -1
  221. data/spec/app/models/fruits.rb +6 -0
  222. data/spec/app/models/game.rb +0 -2
  223. data/spec/app/models/house.rb +1 -3
  224. data/spec/app/models/id_key.rb +6 -0
  225. data/spec/app/models/item.rb +1 -5
  226. data/spec/app/models/jar.rb +1 -1
  227. data/spec/app/models/label.rb +4 -4
  228. data/spec/app/models/line_item.rb +1 -1
  229. data/spec/app/models/login.rb +1 -1
  230. data/spec/app/models/message.rb +8 -0
  231. data/spec/app/models/movie.rb +1 -0
  232. data/spec/app/models/name.rb +3 -3
  233. data/spec/app/models/note.rb +3 -1
  234. data/spec/app/models/odd.rb +7 -0
  235. data/spec/app/models/oscar.rb +1 -1
  236. data/spec/app/models/parent_doc.rb +1 -1
  237. data/spec/app/models/person.rb +16 -10
  238. data/spec/app/models/phone.rb +1 -3
  239. data/spec/app/models/player.rb +3 -3
  240. data/spec/app/models/post.rb +5 -3
  241. data/spec/app/models/preference.rb +1 -1
  242. data/spec/app/models/quiz.rb +0 -3
  243. data/spec/app/models/record.rb +10 -5
  244. data/spec/app/models/registry.rb +1 -1
  245. data/spec/app/models/server.rb +1 -1
  246. data/spec/app/models/service.rb +3 -3
  247. data/spec/app/models/sound.rb +5 -0
  248. data/spec/app/models/symptom.rb +1 -1
  249. data/spec/app/models/template.rb +1 -1
  250. data/spec/app/models/title.rb +0 -1
  251. data/spec/app/models/track.rb +5 -5
  252. data/spec/app/models/tree.rb +3 -3
  253. data/spec/app/models/video.rb +1 -5
  254. data/spec/app/models/wiki_page.rb +2 -5
  255. data/spec/app/models/word.rb +3 -0
  256. data/spec/app/models/word_origin.rb +1 -1
  257. data/spec/config/mongoid.yml +7 -8
  258. data/spec/helpers.rb +18 -0
  259. data/spec/mongoid/atomic/modifiers_spec.rb +22 -22
  260. data/spec/mongoid/atomic/paths/embedded/many_spec.rb +8 -49
  261. data/spec/mongoid/atomic/paths/embedded/one_spec.rb +7 -49
  262. data/spec/mongoid/atomic/paths/root_spec.rb +3 -61
  263. data/spec/mongoid/atomic/paths_spec.rb +19 -19
  264. data/spec/mongoid/atomic_spec.rb +19 -19
  265. data/spec/mongoid/{nested_attributes_spec.rb → attributes/nested_spec.rb} +474 -592
  266. data/spec/mongoid/attributes/readonly_spec.rb +58 -18
  267. data/spec/mongoid/attributes_spec.rb +334 -434
  268. data/spec/mongoid/{dirty_spec.rb → changeable_spec.rb} +203 -153
  269. data/spec/mongoid/{components_spec.rb → composable_spec.rb} +3 -3
  270. data/spec/mongoid/config/environment_spec.rb +3 -3
  271. data/spec/mongoid/config/options_spec.rb +6 -6
  272. data/spec/mongoid/config_spec.rb +24 -48
  273. data/spec/mongoid/contextual/aggregable/memory_spec.rb +12 -12
  274. data/spec/mongoid/contextual/aggregable/mongo_spec.rb +46 -38
  275. data/spec/mongoid/contextual/atomic_spec.rb +59 -55
  276. data/spec/mongoid/contextual/find_and_modify_spec.rb +14 -14
  277. data/spec/mongoid/contextual/geo_near_spec.rb +22 -22
  278. data/spec/mongoid/contextual/map_reduce_spec.rb +27 -27
  279. data/spec/mongoid/contextual/memory_spec.rb +156 -94
  280. data/spec/mongoid/contextual/mongo_spec.rb +238 -150
  281. data/spec/mongoid/contextual/none_spec.rb +127 -0
  282. data/spec/mongoid/contextual/text_search_spec.rb +209 -0
  283. data/spec/mongoid/copyable_spec.rb +56 -68
  284. data/spec/mongoid/criteria/findable_spec.rb +991 -0
  285. data/spec/mongoid/{criterion/inspection_spec.rb → criteria/inspectable_spec.rb} +5 -5
  286. data/spec/mongoid/{criterion → criteria}/marshalable_spec.rb +2 -2
  287. data/spec/mongoid/criteria/modifiable_spec.rb +1252 -0
  288. data/spec/mongoid/{criterion/scoping_spec.rb → criteria/scopable_spec.rb} +37 -37
  289. data/spec/mongoid/criteria_spec.rb +713 -2419
  290. data/spec/mongoid/document_spec.rb +171 -121
  291. data/spec/mongoid/equality_spec.rb +22 -22
  292. data/spec/mongoid/errors/ambiguous_relationship_spec.rb +3 -3
  293. data/spec/mongoid/errors/callback_spec.rb +3 -3
  294. data/spec/mongoid/errors/delete_restriction_spec.rb +3 -3
  295. data/spec/mongoid/errors/document_not_destroyed_spec.rb +33 -0
  296. data/spec/mongoid/errors/document_not_found_spec.rb +11 -11
  297. data/spec/mongoid/errors/eager_load_spec.rb +3 -3
  298. data/spec/mongoid/errors/invalid_collection_spec.rb +3 -3
  299. data/spec/mongoid/errors/invalid_config_option_spec.rb +3 -3
  300. data/spec/mongoid/errors/invalid_field_option_spec.rb +3 -3
  301. data/spec/mongoid/errors/invalid_field_spec.rb +3 -3
  302. data/spec/mongoid/errors/invalid_find_spec.rb +3 -3
  303. data/spec/mongoid/errors/invalid_includes_spec.rb +3 -3
  304. data/spec/mongoid/errors/invalid_index_spec.rb +3 -3
  305. data/spec/mongoid/errors/invalid_options_spec.rb +3 -3
  306. data/spec/mongoid/errors/invalid_path_spec.rb +3 -3
  307. data/spec/mongoid/errors/invalid_scope_spec.rb +5 -5
  308. data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +3 -3
  309. data/spec/mongoid/errors/invalid_storage_options_spec.rb +3 -3
  310. data/spec/mongoid/errors/invalid_time_spec.rb +3 -3
  311. data/spec/mongoid/errors/inverse_not_found_spec.rb +3 -3
  312. data/spec/mongoid/errors/mixed_relations_spec.rb +3 -3
  313. data/spec/mongoid/errors/mixed_session_configuration_spec.rb +3 -3
  314. data/spec/mongoid/errors/mongoid_error_spec.rb +8 -8
  315. data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +3 -3
  316. data/spec/mongoid/errors/no_environment_spec.rb +3 -3
  317. data/spec/mongoid/errors/no_map_reduce_output_spec.rb +3 -3
  318. data/spec/mongoid/errors/no_metadata_spec.rb +3 -3
  319. data/spec/mongoid/errors/no_parent_spec.rb +3 -3
  320. data/spec/mongoid/errors/no_session_config_spec.rb +3 -3
  321. data/spec/mongoid/errors/no_session_database_spec.rb +3 -3
  322. data/spec/mongoid/errors/no_session_hosts_spec.rb +3 -3
  323. data/spec/mongoid/errors/no_sessions_config_spec.rb +3 -3
  324. data/spec/mongoid/errors/readonly_attribute_spec.rb +3 -3
  325. data/spec/mongoid/errors/readonly_document_spec.rb +29 -0
  326. data/spec/mongoid/errors/scope_overwrite_spec.rb +3 -3
  327. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +3 -3
  328. data/spec/mongoid/errors/unknown_attribute_spec.rb +5 -5
  329. data/spec/mongoid/errors/unsaved_document_spec.rb +3 -3
  330. data/spec/mongoid/errors/unsupported_javascript_spec.rb +3 -3
  331. data/spec/mongoid/errors/validations_spec.rb +7 -7
  332. data/spec/mongoid/extensions/array_spec.rb +61 -61
  333. data/spec/mongoid/extensions/big_decimal_spec.rb +11 -11
  334. data/spec/mongoid/extensions/binary_spec.rb +12 -12
  335. data/spec/mongoid/extensions/boolean_spec.rb +18 -18
  336. data/spec/mongoid/extensions/date_spec.rb +13 -13
  337. data/spec/mongoid/extensions/date_time_spec.rb +8 -8
  338. data/spec/mongoid/extensions/false_class_spec.rb +5 -5
  339. data/spec/mongoid/extensions/float_spec.rb +29 -15
  340. data/spec/mongoid/extensions/hash_spec.rb +29 -29
  341. data/spec/mongoid/extensions/integer_spec.rb +15 -15
  342. data/spec/mongoid/extensions/module_spec.rb +2 -2
  343. data/spec/mongoid/extensions/nil_class_spec.rb +1 -1
  344. data/spec/mongoid/extensions/object_id_spec.rb +134 -134
  345. data/spec/mongoid/extensions/object_spec.rb +26 -26
  346. data/spec/mongoid/extensions/range_spec.rb +61 -12
  347. data/spec/mongoid/extensions/regexp_spec.rb +4 -4
  348. data/spec/mongoid/extensions/set_spec.rb +4 -4
  349. data/spec/mongoid/extensions/string_spec.rb +35 -46
  350. data/spec/mongoid/extensions/symbol_spec.rb +9 -9
  351. data/spec/mongoid/extensions/time_spec.rb +49 -49
  352. data/spec/mongoid/extensions/time_with_zone_spec.rb +34 -34
  353. data/spec/mongoid/extensions/true_class_spec.rb +5 -5
  354. data/spec/mongoid/extensions_spec.rb +29 -0
  355. data/spec/mongoid/factory_spec.rb +15 -15
  356. data/spec/mongoid/fields/foreign_key_spec.rb +73 -66
  357. data/spec/mongoid/fields/internal/foreign_keys/array_spec.rb +15 -15
  358. data/spec/mongoid/fields/internal/foreign_keys/object_spec.rb +22 -22
  359. data/spec/mongoid/fields/localized_spec.rb +38 -23
  360. data/spec/mongoid/fields/standard_spec.rb +12 -12
  361. data/spec/mongoid/fields_spec.rb +263 -217
  362. data/spec/mongoid/findable_spec.rb +509 -0
  363. data/spec/mongoid/indexable/specification_spec.rb +102 -0
  364. data/spec/mongoid/{indexes_spec.rb → indexable_spec.rb} +171 -51
  365. data/spec/mongoid/{inspection_spec.rb → inspectable_spec.rb} +6 -14
  366. data/spec/mongoid/{callbacks_spec.rb → interceptable_spec.rb} +117 -116
  367. data/spec/mongoid/log_subscriber_spec.rb +75 -0
  368. data/spec/mongoid/loggable_spec.rb +1 -1
  369. data/spec/mongoid/{matchers → matchable}/all_spec.rb +4 -4
  370. data/spec/mongoid/{matchers → matchable}/and_spec.rb +11 -11
  371. data/spec/mongoid/{matchers → matchable}/default_spec.rb +15 -15
  372. data/spec/mongoid/{matchers → matchable}/exists_spec.rb +5 -5
  373. data/spec/mongoid/{matchers → matchable}/gt_spec.rb +9 -8
  374. data/spec/mongoid/{matchers → matchable}/gte_spec.rb +7 -7
  375. data/spec/mongoid/matchable/in_spec.rb +49 -0
  376. data/spec/mongoid/{matchers → matchable}/lt_spec.rb +7 -7
  377. data/spec/mongoid/{matchers → matchable}/lte_spec.rb +7 -7
  378. data/spec/mongoid/{matchers → matchable}/ne_spec.rb +3 -3
  379. data/spec/mongoid/matchable/nin_spec.rb +48 -0
  380. data/spec/mongoid/{matchers → matchable}/or_spec.rb +6 -6
  381. data/spec/mongoid/{matchers → matchable}/size_spec.rb +3 -3
  382. data/spec/mongoid/{matchers_spec.rb → matchable_spec.rb} +41 -41
  383. data/spec/mongoid/persistable/creatable_spec.rb +553 -0
  384. data/spec/mongoid/persistable/deletable_spec.rb +218 -0
  385. data/spec/mongoid/persistable/destroyable_spec.rb +192 -0
  386. data/spec/mongoid/persistable/incrementable_spec.rb +173 -0
  387. data/spec/mongoid/persistable/logical_spec.rb +143 -0
  388. data/spec/mongoid/persistable/poppable_spec.rb +115 -0
  389. data/spec/mongoid/persistable/pullable_spec.rb +228 -0
  390. data/spec/mongoid/persistable/pushable_spec.rb +258 -0
  391. data/spec/mongoid/persistable/renamable_spec.rb +135 -0
  392. data/spec/mongoid/persistable/savable_spec.rb +498 -0
  393. data/spec/mongoid/persistable/settable_spec.rb +162 -0
  394. data/spec/mongoid/persistable/unsettable_spec.rb +155 -0
  395. data/spec/mongoid/persistable/updatable_spec.rb +558 -0
  396. data/spec/mongoid/persistable/upsertable_spec.rb +106 -0
  397. data/spec/mongoid/persistable_spec.rb +206 -0
  398. data/spec/mongoid/{atomic/positionable_spec.rb → positional_spec.rb} +9 -9
  399. data/spec/mongoid/query_cache_spec.rb +263 -0
  400. data/spec/mongoid/railties/document_spec.rb +2 -2
  401. data/spec/mongoid/relations/accessors_spec.rb +53 -145
  402. data/spec/mongoid/relations/auto_save_spec.rb +37 -17
  403. data/spec/mongoid/relations/bindings/embedded/in_spec.rb +12 -12
  404. data/spec/mongoid/relations/bindings/embedded/many_spec.rb +3 -3
  405. data/spec/mongoid/relations/bindings/embedded/one_spec.rb +5 -5
  406. data/spec/mongoid/relations/bindings/referenced/in_spec.rb +26 -26
  407. data/spec/mongoid/relations/bindings/referenced/many_spec.rb +10 -10
  408. data/spec/mongoid/relations/bindings/referenced/many_to_many_spec.rb +19 -19
  409. data/spec/mongoid/relations/bindings/referenced/one_spec.rb +12 -12
  410. data/spec/mongoid/relations/builders/embedded/in_spec.rb +4 -4
  411. data/spec/mongoid/relations/builders/embedded/many_spec.rb +18 -18
  412. data/spec/mongoid/relations/builders/embedded/one_spec.rb +11 -11
  413. data/spec/mongoid/relations/builders/nested_attributes/many_spec.rb +12 -13
  414. data/spec/mongoid/relations/builders/nested_attributes/one_spec.rb +14 -14
  415. data/spec/mongoid/relations/builders/referenced/in_spec.rb +24 -35
  416. data/spec/mongoid/relations/builders/referenced/many_spec.rb +15 -15
  417. data/spec/mongoid/relations/builders/referenced/many_to_many_spec.rb +18 -18
  418. data/spec/mongoid/relations/builders/referenced/one_spec.rb +12 -25
  419. data/spec/mongoid/relations/builders_spec.rb +21 -21
  420. data/spec/mongoid/relations/cascading/delete_spec.rb +9 -9
  421. data/spec/mongoid/relations/cascading/destroy_spec.rb +6 -6
  422. data/spec/mongoid/relations/cascading/nullify_spec.rb +4 -4
  423. data/spec/mongoid/relations/cascading/restrict_spec.rb +7 -7
  424. data/spec/mongoid/relations/cascading_spec.rb +16 -16
  425. data/spec/mongoid/relations/constraint_spec.rb +8 -7
  426. data/spec/mongoid/relations/conversions_spec.rb +16 -14
  427. data/spec/mongoid/relations/counter_cache_spec.rb +85 -0
  428. data/spec/mongoid/relations/cyclic_spec.rb +18 -18
  429. data/spec/mongoid/relations/eager/belongs_to_spec.rb +154 -0
  430. data/spec/mongoid/relations/eager/has_and_belongs_to_many_spec.rb +117 -0
  431. data/spec/mongoid/relations/eager/has_many_spec.rb +207 -0
  432. data/spec/mongoid/relations/eager/has_one_spec.rb +163 -0
  433. data/spec/mongoid/relations/eager_spec.rb +228 -0
  434. data/spec/mongoid/relations/embedded/dirty_spec.rb +8 -8
  435. data/spec/mongoid/relations/embedded/in_spec.rb +56 -57
  436. data/spec/mongoid/relations/embedded/many_spec.rb +467 -372
  437. data/spec/mongoid/relations/embedded/one_spec.rb +108 -141
  438. data/spec/mongoid/relations/macros_spec.rb +108 -102
  439. data/spec/mongoid/relations/metadata_spec.rb +180 -255
  440. data/spec/mongoid/relations/options_spec.rb +1 -1
  441. data/spec/mongoid/relations/polymorphic_spec.rb +13 -17
  442. data/spec/mongoid/relations/proxy_spec.rb +2 -2
  443. data/spec/mongoid/relations/referenced/in_spec.rb +128 -303
  444. data/spec/mongoid/relations/referenced/many_spec.rb +587 -527
  445. data/spec/mongoid/relations/referenced/many_to_many_spec.rb +401 -424
  446. data/spec/mongoid/relations/referenced/one_spec.rb +149 -264
  447. data/spec/mongoid/relations/reflections_spec.rb +6 -6
  448. data/spec/mongoid/relations/synchronization_spec.rb +46 -50
  449. data/spec/mongoid/relations/targets/enumerable_spec.rb +118 -118
  450. data/spec/mongoid/relations/touchable_spec.rb +333 -0
  451. data/spec/mongoid/relations_spec.rb +16 -15
  452. data/spec/mongoid/{reloading_spec.rb → reloadable_spec.rb} +38 -55
  453. data/spec/mongoid/{scoping_spec.rb → scopable_spec.rb} +89 -164
  454. data/spec/mongoid/selectable_spec.rb +134 -0
  455. data/spec/mongoid/{serialization_spec.rb → serializable_spec.rb} +129 -82
  456. data/spec/mongoid/sessions/factory_spec.rb +49 -28
  457. data/spec/mongoid/sessions/mongo_uri_spec.rb +7 -7
  458. data/spec/mongoid/sessions/options_spec.rb +108 -0
  459. data/spec/mongoid/sessions_spec.rb +319 -178
  460. data/spec/mongoid/{sharding_spec.rb → shardable_spec.rb} +8 -8
  461. data/spec/mongoid/{state_spec.rb → stateful_spec.rb} +36 -11
  462. data/spec/mongoid/tasks/database_rake_spec.rb +285 -0
  463. data/spec/mongoid/tasks/database_spec.rb +160 -0
  464. data/spec/mongoid/threaded_spec.rb +17 -70
  465. data/spec/mongoid/timestamps/created/short_spec.rb +6 -6
  466. data/spec/mongoid/timestamps/created_spec.rb +5 -5
  467. data/spec/mongoid/timestamps/timeless_spec.rb +6 -6
  468. data/spec/mongoid/timestamps/updated/short_spec.rb +11 -11
  469. data/spec/mongoid/timestamps/updated_spec.rb +9 -13
  470. data/spec/mongoid/timestamps_spec.rb +9 -13
  471. data/spec/mongoid/{hierarchy_spec.rb → traversable_spec.rb} +19 -19
  472. data/spec/mongoid/{validations → validatable}/associated_spec.rb +45 -22
  473. data/spec/mongoid/{validations → validatable}/format_spec.rb +6 -6
  474. data/spec/mongoid/{validations → validatable}/length_spec.rb +14 -14
  475. data/spec/mongoid/{validations → validatable}/numericality_spec.rb +1 -1
  476. data/spec/mongoid/{validations → validatable}/presence_spec.rb +37 -44
  477. data/spec/mongoid/{validations → validatable}/uniqueness_spec.rb +184 -192
  478. data/spec/mongoid/{validations_spec.rb → validatable_spec.rb} +28 -28
  479. data/spec/mongoid_spec.rb +8 -8
  480. data/spec/rails/mongoid_spec.rb +19 -350
  481. data/spec/spec_helper.rb +26 -15
  482. metadata +262 -247
  483. data/lib/mongoid/atomic/positionable.rb +0 -73
  484. data/lib/mongoid/components.rb +0 -92
  485. data/lib/mongoid/config/inflections.rb +0 -6
  486. data/lib/mongoid/contextual/eager.rb +0 -158
  487. data/lib/mongoid/errors/versioning_not_on_root.rb +0 -23
  488. data/lib/mongoid/identity_map.rb +0 -163
  489. data/lib/mongoid/json.rb +0 -16
  490. data/lib/mongoid/matchers/strategies.rb +0 -97
  491. data/lib/mongoid/matchers.rb +0 -32
  492. data/lib/mongoid/multi_parameter_attributes.rb +0 -105
  493. data/lib/mongoid/nested_attributes.rb +0 -78
  494. data/lib/mongoid/observer.rb +0 -192
  495. data/lib/mongoid/paranoia.rb +0 -136
  496. data/lib/mongoid/persistence/atomic/add_to_set.rb +0 -47
  497. data/lib/mongoid/persistence/atomic/bit.rb +0 -35
  498. data/lib/mongoid/persistence/atomic/inc.rb +0 -45
  499. data/lib/mongoid/persistence/atomic/operation.rb +0 -154
  500. data/lib/mongoid/persistence/atomic/pop.rb +0 -32
  501. data/lib/mongoid/persistence/atomic/pull.rb +0 -32
  502. data/lib/mongoid/persistence/atomic/pull_all.rb +0 -32
  503. data/lib/mongoid/persistence/atomic/push.rb +0 -25
  504. data/lib/mongoid/persistence/atomic/push_all.rb +0 -25
  505. data/lib/mongoid/persistence/atomic/rename.rb +0 -30
  506. data/lib/mongoid/persistence/atomic/sets.rb +0 -28
  507. data/lib/mongoid/persistence/atomic/unset.rb +0 -27
  508. data/lib/mongoid/persistence/atomic.rb +0 -231
  509. data/lib/mongoid/persistence/deletion.rb +0 -31
  510. data/lib/mongoid/persistence/insertion.rb +0 -38
  511. data/lib/mongoid/persistence/modification.rb +0 -35
  512. data/lib/mongoid/persistence/operations/embedded/insert.rb +0 -46
  513. data/lib/mongoid/persistence/operations/embedded/remove.rb +0 -43
  514. data/lib/mongoid/persistence/operations/insert.rb +0 -34
  515. data/lib/mongoid/persistence/operations/remove.rb +0 -33
  516. data/lib/mongoid/persistence/operations/update.rb +0 -59
  517. data/lib/mongoid/persistence/operations/upsert.rb +0 -28
  518. data/lib/mongoid/persistence/operations.rb +0 -214
  519. data/lib/mongoid/persistence/upsertion.rb +0 -31
  520. data/lib/mongoid/persistence.rb +0 -357
  521. data/lib/mongoid/unit_of_work.rb +0 -61
  522. data/lib/mongoid/versioning.rb +0 -217
  523. data/lib/rack/mongoid/middleware/identity_map.rb +0 -39
  524. data/lib/rack/mongoid.rb +0 -2
  525. data/lib/rails/generators/mongoid/observer/observer_generator.rb +0 -17
  526. data/lib/rails/generators/mongoid/observer/templates/observer.rb.tt +0 -4
  527. data/spec/app/models/actor_observer.rb +0 -15
  528. data/spec/app/models/callback_recorder.rb +0 -25
  529. data/spec/app/models/paranoid_phone.rb +0 -25
  530. data/spec/app/models/paranoid_post.rb +0 -36
  531. data/spec/app/models/phone_observer.rb +0 -6
  532. data/spec/mongoid/attributes/processing_spec.rb +0 -149
  533. data/spec/mongoid/criterion/destructive_spec.rb +0 -101
  534. data/spec/mongoid/criterion/modifiable_spec.rb +0 -409
  535. data/spec/mongoid/criterion/modification_spec.rb +0 -402
  536. data/spec/mongoid/errors/versioning_not_on_root_spec.rb +0 -29
  537. data/spec/mongoid/finders_spec.rb +0 -321
  538. data/spec/mongoid/identity_map_spec.rb +0 -564
  539. data/spec/mongoid/json_spec.rb +0 -33
  540. data/spec/mongoid/matchers/in_spec.rb +0 -25
  541. data/spec/mongoid/matchers/nin_spec.rb +0 -25
  542. data/spec/mongoid/multi_parameter_attributes_spec.rb +0 -128
  543. data/spec/mongoid/observer_spec.rb +0 -290
  544. data/spec/mongoid/paranoia_spec.rb +0 -759
  545. data/spec/mongoid/persistence/atomic/add_to_set_spec.rb +0 -262
  546. data/spec/mongoid/persistence/atomic/bit_spec.rb +0 -88
  547. data/spec/mongoid/persistence/atomic/inc_spec.rb +0 -133
  548. data/spec/mongoid/persistence/atomic/pop_spec.rb +0 -111
  549. data/spec/mongoid/persistence/atomic/pull_all_spec.rb +0 -77
  550. data/spec/mongoid/persistence/atomic/pull_spec.rb +0 -80
  551. data/spec/mongoid/persistence/atomic/push_all_spec.rb +0 -77
  552. data/spec/mongoid/persistence/atomic/push_spec.rb +0 -77
  553. data/spec/mongoid/persistence/atomic/rename_spec.rb +0 -42
  554. data/spec/mongoid/persistence/atomic/sets_spec.rb +0 -154
  555. data/spec/mongoid/persistence/atomic/unset_spec.rb +0 -65
  556. data/spec/mongoid/persistence/atomic_spec.rb +0 -216
  557. data/spec/mongoid/persistence/operations/embedded/insert_spec.rb +0 -191
  558. data/spec/mongoid/persistence/operations/embedded/remove_spec.rb +0 -8
  559. data/spec/mongoid/persistence/operations/insert_spec.rb +0 -149
  560. data/spec/mongoid/persistence/operations/remove_spec.rb +0 -113
  561. data/spec/mongoid/persistence/operations/update_spec.rb +0 -141
  562. data/spec/mongoid/persistence/operations/upsert_spec.rb +0 -59
  563. data/spec/mongoid/persistence/operations_spec.rb +0 -313
  564. data/spec/mongoid/persistence_spec.rb +0 -2279
  565. data/spec/mongoid/unit_of_work_spec.rb +0 -196
  566. data/spec/mongoid/versioning_spec.rb +0 -540
  567. data/spec/rack/mongoid/middleware/identity_map_spec.rb +0 -72
@@ -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,16 +73,16 @@ 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
63
80
  #
64
- # @return [ Array ] An array containing [document.class, document.id]
81
+ # @return [ Array ] An array containing [document.class, document._id]
65
82
  #
66
83
  # @since 3.0.0
67
84
  def identity
68
- [ self.class, self.id ]
85
+ [ self.class, self._id ]
69
86
  end
70
87
 
71
88
  # Instantiate a new +Document+, setting the Document's attributes if
@@ -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
@@ -118,11 +134,11 @@ module Mongoid
118
134
  # @example Return the key.
119
135
  # document.to_key
120
136
  #
121
- # @return [ Object ] The id of the document or nil if new.
137
+ # @return [ String ] The id of the document or nil if new.
122
138
  #
123
139
  # @since 2.4.0
124
140
  def to_key
125
- (persisted? || destroyed?) ? [ id ] : nil
141
+ (persisted? || destroyed?) ? [ id.to_s ] : nil
126
142
  end
127
143
 
128
144
  # Return an array with this +Document+ only in it.
@@ -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)
186
- became.id = id
201
+ became = klass.new(clone_document)
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
 
@@ -209,7 +225,7 @@ module Mongoid
209
225
  # plural model name.
210
226
  #
211
227
  # If new_record? - will append /new
212
- # If not - will append /id-updated_at.to_s(:number)
228
+ # If not - will append /id-updated_at.to_s(:nsec)
213
229
  # Without updated_at - will append /id
214
230
  #
215
231
  # This is usually called insode a cache() block
@@ -222,7 +238,7 @@ module Mongoid
222
238
  # @since 2.4.0
223
239
  def cache_key
224
240
  return "#{model_key}/new" if new_record?
225
- return "#{model_key}/#{id}-#{updated_at.utc.to_s(:number)}" if do_or_do_not(:updated_at)
241
+ return "#{model_key}/#{id}-#{updated_at.utc.to_s(:nsec)}" if do_or_do_not(:updated_at)
226
242
  "#{model_key}/#{id}"
227
243
  end
228
244
 
@@ -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)
@@ -11,7 +11,7 @@ module Mongoid
11
11
  # @example Evolve the string.
12
12
  # "test".__evolve_object_id__
13
13
  #
14
- # @return [ String, Moped::BSON::ObjectId ] The evolved string.
14
+ # @return [ String, BSON::ObjectId ] The evolved string.
15
15
  #
16
16
  # @since 3.0.0
17
17
  def __evolve_object_id__
@@ -23,7 +23,7 @@ module Mongoid
23
23
  # @example Evolve the string.
24
24
  # "test".__mongoize_object_id__
25
25
  #
26
- # @return [ String, Moped::BSON::ObjectId, nil ] The mongoized string.
26
+ # @return [ String, BSON::ObjectId, nil ] The mongoized string.
27
27
  #
28
28
  # @since 3.0.0
29
29
  def __mongoize_object_id__
@@ -96,18 +96,6 @@ module Mongoid
96
96
  delete("=").sub(/\_before\_type\_cast$/, '')
97
97
  end
98
98
 
99
- # Convert the string to an array with the string in it.
100
- #
101
- # @example Convert the string to an array.
102
- # "Testing".to_a
103
- #
104
- # @return [ Array ] An array with only the string in it.
105
- #
106
- # @since 1.0.0
107
- def to_a
108
- [ self ]
109
- end
110
-
111
99
  # Is this string a writer?
112
100
  #
113
101
  # @example Is the string a setter method?
@@ -129,7 +117,7 @@ module Mongoid
129
117
  #
130
118
  # @since 3.0.15
131
119
  def valid_method_name?
132
- /[@$"]/ !~ to_sym.inspect
120
+ /[@$"]/ !~ self
133
121
  end
134
122
 
135
123
  # Does the string end with _before_type_cast?
@@ -165,11 +153,11 @@ module Mongoid
165
153
  # @example Convert to the object id.
166
154
  # string.convert_to_object_id
167
155
  #
168
- # @return [ String, Moped::BSON::ObjectId ] The string or the id.
156
+ # @return [ String, BSON::ObjectId ] The string or the id.
169
157
  #
170
158
  # @since 3.0.0
171
159
  def convert_to_object_id
172
- Moped::BSON::ObjectId.legal?(self) ? Moped::BSON::ObjectId.from_string(self) : self
160
+ BSON::ObjectId.legal?(self) ? BSON::ObjectId.from_string(self) : self
173
161
  end
174
162
 
175
163
  module ClassMethods
@@ -208,4 +196,4 @@ module Mongoid
208
196
  end
209
197
 
210
198
  ::String.__send__(:include, Mongoid::Extensions::String)
211
- ::String.__send__(:extend, Mongoid::Extensions::String::ClassMethods)
199
+ ::String.extend(Mongoid::Extensions::String::ClassMethods)
@@ -51,4 +51,4 @@ module Mongoid
51
51
  end
52
52
 
53
53
  ::Symbol.__send__(:include, Mongoid::Extensions::Symbol)
54
- ::Symbol.__send__(:extend, Mongoid::Extensions::Symbol::ClassMethods)
54
+ ::Symbol.extend(Mongoid::Extensions::Symbol::ClassMethods)