mongoid 3.1.6 → 4.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (571) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +479 -8
  3. data/README.md +10 -7
  4. data/lib/config/locales/en.yml +34 -20
  5. data/lib/mongoid.rb +10 -76
  6. data/lib/mongoid/atomic.rb +3 -14
  7. data/lib/mongoid/atomic/paths/embedded.rb +0 -30
  8. data/lib/mongoid/atomic/paths/embedded/many.rb +1 -1
  9. data/lib/mongoid/atomic/paths/embedded/one.rb +1 -1
  10. data/lib/mongoid/atomic/paths/root.rb +0 -13
  11. data/lib/mongoid/attributes.rb +65 -101
  12. data/lib/mongoid/attributes/dynamic.rb +154 -0
  13. data/lib/mongoid/attributes/nested.rb +82 -0
  14. data/lib/mongoid/attributes/processing.rb +13 -66
  15. data/lib/mongoid/{dirty.rb → changeable.rb} +32 -2
  16. data/lib/mongoid/composable.rb +105 -0
  17. data/lib/mongoid/config.rb +3 -9
  18. data/lib/mongoid/config/options.rb +1 -1
  19. data/lib/mongoid/contextual.rb +2 -0
  20. data/lib/mongoid/contextual/aggregable/memory.rb +2 -2
  21. data/lib/mongoid/contextual/aggregable/mongo.rb +7 -9
  22. data/lib/mongoid/contextual/atomic.rb +53 -53
  23. data/lib/mongoid/contextual/geo_near.rb +1 -1
  24. data/lib/mongoid/contextual/map_reduce.rb +4 -2
  25. data/lib/mongoid/contextual/memory.rb +23 -11
  26. data/lib/mongoid/contextual/mongo.rb +75 -57
  27. data/lib/mongoid/contextual/none.rb +90 -0
  28. data/lib/mongoid/contextual/text_search.rb +178 -0
  29. data/lib/mongoid/copyable.rb +2 -3
  30. data/lib/mongoid/criteria.rb +39 -34
  31. data/lib/mongoid/criteria/#findable.rb# +141 -0
  32. data/lib/mongoid/{criterion → criteria}/findable.rb +7 -47
  33. data/lib/mongoid/{criterion/inspection.rb → criteria/inspectable.rb} +2 -2
  34. data/lib/mongoid/{criterion → criteria}/marshalable.rb +3 -1
  35. data/lib/mongoid/{criterion → criteria}/modifiable.rb +28 -8
  36. data/lib/mongoid/criteria/permission.rb +70 -0
  37. data/lib/mongoid/{criterion/scoping.rb → criteria/scopable.rb} +2 -2
  38. data/lib/mongoid/document.rb +39 -24
  39. data/lib/mongoid/errors.rb +4 -1
  40. data/lib/mongoid/errors/document_not_destroyed.rb +25 -0
  41. data/lib/mongoid/errors/document_not_found.rb +2 -1
  42. data/lib/mongoid/errors/invalid_storage_options.rb +1 -1
  43. data/lib/mongoid/errors/invalid_storage_parent.rb +26 -0
  44. data/lib/mongoid/errors/invalid_value.rb +16 -0
  45. data/lib/mongoid/errors/mongoid_error.rb +1 -1
  46. data/lib/mongoid/errors/readonly_document.rb +24 -0
  47. data/lib/mongoid/extensions.rb +15 -7
  48. data/lib/mongoid/extensions/array.rb +3 -3
  49. data/lib/mongoid/extensions/big_decimal.rb +1 -1
  50. data/lib/mongoid/extensions/boolean.rb +15 -17
  51. data/lib/mongoid/extensions/date.rb +1 -1
  52. data/lib/mongoid/extensions/date_time.rb +3 -3
  53. data/lib/mongoid/extensions/float.rb +2 -1
  54. data/lib/mongoid/extensions/hash.rb +3 -3
  55. data/lib/mongoid/extensions/integer.rb +1 -1
  56. data/lib/mongoid/extensions/object.rb +7 -7
  57. data/lib/mongoid/extensions/object_id.rb +5 -5
  58. data/lib/mongoid/extensions/range.rb +9 -3
  59. data/lib/mongoid/extensions/regexp.rb +1 -1
  60. data/lib/mongoid/extensions/set.rb +1 -1
  61. data/lib/mongoid/extensions/string.rb +6 -18
  62. data/lib/mongoid/extensions/symbol.rb +1 -1
  63. data/lib/mongoid/extensions/time.rb +3 -3
  64. data/lib/mongoid/extensions/time_with_zone.rb +1 -1
  65. data/lib/mongoid/factory.rb +8 -6
  66. data/lib/mongoid/fields.rb +41 -8
  67. data/lib/mongoid/fields/foreign_key.rb +3 -3
  68. data/lib/mongoid/fields/localized.rb +1 -1
  69. data/lib/mongoid/fields/standard.rb +5 -17
  70. data/lib/mongoid/fields/validators/macro.rb +15 -5
  71. data/lib/mongoid/{finders.rb → findable.rb} +35 -7
  72. data/lib/mongoid/{indexes.rb → indexable.rb} +50 -55
  73. data/lib/mongoid/indexable/specification.rb +104 -0
  74. data/lib/mongoid/{indexes → indexable}/validators/options.rb +2 -1
  75. data/lib/mongoid/{inspection.rb → inspectable.rb} +15 -11
  76. data/lib/mongoid/{callbacks.rb → interceptable.rb} +30 -62
  77. data/lib/mongoid/log_subscriber.rb +55 -0
  78. data/lib/mongoid/matchable.rb +152 -0
  79. data/lib/mongoid/{matchers → matchable}/all.rb +1 -1
  80. data/lib/mongoid/{matchers → matchable}/and.rb +2 -2
  81. data/lib/mongoid/{matchers → matchable}/default.rb +1 -1
  82. data/lib/mongoid/{matchers → matchable}/exists.rb +1 -1
  83. data/lib/mongoid/{matchers → matchable}/gt.rb +1 -1
  84. data/lib/mongoid/{matchers → matchable}/gte.rb +1 -1
  85. data/lib/mongoid/{matchers → matchable}/in.rb +2 -2
  86. data/lib/mongoid/{matchers → matchable}/lt.rb +1 -1
  87. data/lib/mongoid/{matchers → matchable}/lte.rb +1 -1
  88. data/lib/mongoid/{matchers → matchable}/ne.rb +2 -2
  89. data/lib/mongoid/{matchers → matchable}/nin.rb +3 -2
  90. data/lib/mongoid/{matchers → matchable}/or.rb +2 -2
  91. data/lib/mongoid/{matchers → matchable}/size.rb +1 -1
  92. data/lib/mongoid/persistable.rb +216 -0
  93. data/lib/mongoid/persistable/creatable.rb +189 -0
  94. data/lib/mongoid/persistable/deletable.rb +149 -0
  95. data/lib/mongoid/persistable/destroyable.rb +60 -0
  96. data/lib/mongoid/persistable/incrementable.rb +36 -0
  97. data/lib/mongoid/persistable/logical.rb +38 -0
  98. data/lib/mongoid/persistable/poppable.rb +39 -0
  99. data/lib/mongoid/persistable/pullable.rb +55 -0
  100. data/lib/mongoid/persistable/pushable.rb +62 -0
  101. data/lib/mongoid/persistable/renamable.rb +35 -0
  102. data/lib/mongoid/persistable/savable.rb +52 -0
  103. data/lib/mongoid/persistable/settable.rb +33 -0
  104. data/lib/mongoid/persistable/unsettable.rb +36 -0
  105. data/lib/mongoid/persistable/updatable.rb +153 -0
  106. data/lib/mongoid/persistable/upsertable.rb +55 -0
  107. data/lib/mongoid/positional.rb +71 -0
  108. data/lib/mongoid/query_cache.rb +255 -0
  109. data/lib/mongoid/railtie.rb +34 -60
  110. data/lib/mongoid/railties/database.rake +9 -25
  111. data/lib/mongoid/relations.rb +11 -25
  112. data/lib/mongoid/relations/accessors.rb +15 -51
  113. data/lib/mongoid/relations/auto_save.rb +15 -36
  114. data/lib/mongoid/relations/binding.rb +2 -25
  115. data/lib/mongoid/relations/bindings/embedded/in.rb +1 -1
  116. data/lib/mongoid/relations/bindings/embedded/many.rb +1 -3
  117. data/lib/mongoid/relations/bindings/referenced/in.rb +3 -8
  118. data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +4 -2
  119. data/lib/mongoid/relations/builder.rb +1 -1
  120. data/lib/mongoid/relations/builders.rb +2 -2
  121. data/lib/mongoid/relations/builders/embedded/one.rb +1 -1
  122. data/lib/mongoid/relations/builders/nested_attributes/many.rb +10 -13
  123. data/lib/mongoid/relations/builders/nested_attributes/one.rb +5 -6
  124. data/lib/mongoid/relations/builders/referenced/in.rb +1 -1
  125. data/lib/mongoid/relations/builders/referenced/many.rb +1 -2
  126. data/lib/mongoid/relations/builders/referenced/many_to_many.rb +1 -2
  127. data/lib/mongoid/relations/builders/referenced/one.rb +1 -1
  128. data/lib/mongoid/relations/cascading.rb +3 -5
  129. data/lib/mongoid/relations/constraint.rb +1 -1
  130. data/lib/mongoid/relations/conversions.rb +1 -1
  131. data/lib/mongoid/relations/counter_cache.rb +39 -15
  132. data/lib/mongoid/relations/eager.rb +46 -0
  133. data/lib/mongoid/relations/eager/base.rb +149 -0
  134. data/lib/mongoid/relations/eager/belongs_to.rb +31 -0
  135. data/lib/mongoid/relations/eager/has_and_belongs_to_many.rb +47 -0
  136. data/lib/mongoid/relations/eager/has_many.rb +38 -0
  137. data/lib/mongoid/relations/eager/has_one.rb +30 -0
  138. data/lib/mongoid/relations/embedded/batchable.rb +4 -5
  139. data/lib/mongoid/relations/embedded/in.rb +4 -4
  140. data/lib/mongoid/relations/embedded/many.rb +14 -32
  141. data/lib/mongoid/relations/embedded/one.rb +1 -1
  142. data/lib/mongoid/relations/macros.rb +3 -4
  143. data/lib/mongoid/relations/many.rb +51 -31
  144. data/lib/mongoid/relations/marshalable.rb +3 -3
  145. data/lib/mongoid/relations/metadata.rb +14 -79
  146. data/lib/mongoid/relations/nested_builder.rb +2 -2
  147. data/lib/mongoid/relations/one.rb +1 -1
  148. data/lib/mongoid/relations/options.rb +1 -0
  149. data/lib/mongoid/relations/polymorphic.rb +0 -1
  150. data/lib/mongoid/relations/proxy.rb +21 -41
  151. data/lib/mongoid/relations/referenced/in.rb +4 -20
  152. data/lib/mongoid/relations/referenced/many.rb +22 -35
  153. data/lib/mongoid/relations/referenced/many_to_many.rb +19 -42
  154. data/lib/mongoid/relations/referenced/one.rb +6 -25
  155. data/lib/mongoid/relations/synchronization.rb +4 -4
  156. data/lib/mongoid/relations/targets/enumerable.rb +10 -10
  157. data/lib/mongoid/relations/touchable.rb +34 -1
  158. data/lib/mongoid/{reloading.rb → reloadable.rb} +7 -5
  159. data/lib/mongoid/{scoping.rb → scopable.rb} +36 -36
  160. data/lib/mongoid/selectable.rb +59 -0
  161. data/lib/mongoid/{serialization.rb → serializable.rb} +11 -2
  162. data/lib/mongoid/sessions.rb +37 -345
  163. data/lib/mongoid/sessions/factory.rb +2 -0
  164. data/lib/mongoid/sessions/options.rb +185 -0
  165. data/lib/mongoid/sessions/storage_options.rb +140 -0
  166. data/lib/mongoid/sessions/thread_options.rb +19 -0
  167. data/lib/mongoid/sessions/validators/storage.rb +16 -3
  168. data/lib/mongoid/{sharding.rb → shardable.rb} +5 -1
  169. data/lib/mongoid/{state.rb → stateful.rb} +13 -1
  170. data/lib/mongoid/support/query_counter.rb +23 -0
  171. data/lib/mongoid/tasks/database.rake +31 -0
  172. data/lib/mongoid/tasks/database.rb +107 -0
  173. data/lib/mongoid/threaded.rb +26 -172
  174. data/lib/mongoid/threaded/lifecycle.rb +0 -28
  175. data/lib/mongoid/timestamps/updated/short.rb +2 -2
  176. data/lib/mongoid/{hierarchy.rb → traversable.rb} +15 -7
  177. data/lib/mongoid/{validations.rb → validatable.rb} +23 -10
  178. data/lib/mongoid/{validations → validatable}/associated.rb +4 -2
  179. data/lib/mongoid/{validations → validatable}/format.rb +1 -1
  180. data/lib/mongoid/{validations → validatable}/length.rb +1 -1
  181. data/lib/mongoid/{validations → validatable}/localizable.rb +1 -1
  182. data/lib/mongoid/{validations → validatable}/macros.rb +4 -3
  183. data/lib/mongoid/{validations → validatable}/presence.rb +1 -1
  184. data/lib/mongoid/{validations → validatable}/queryable.rb +1 -2
  185. data/lib/mongoid/{validations → validatable}/uniqueness.rb +25 -21
  186. data/lib/mongoid/version.rb +1 -1
  187. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +46 -25
  188. data/lib/rails/generators/mongoid/model/model_generator.rb +0 -1
  189. data/lib/rails/generators/mongoid/model/templates/model.rb.tt +0 -3
  190. data/lib/rails/generators/mongoid_generator.rb +3 -40
  191. data/lib/rails/mongoid.rb +0 -122
  192. data/lib/support/ruby_version.rb +1 -1
  193. data/spec/app/models/account.rb +2 -6
  194. data/spec/app/models/acolyte.rb +2 -1
  195. data/spec/app/models/actor.rb +0 -1
  196. data/spec/app/models/address.rb +8 -3
  197. data/spec/app/models/animal.rb +1 -1
  198. data/spec/app/models/appointment.rb +3 -3
  199. data/spec/app/models/article.rb +1 -4
  200. data/spec/app/models/audio.rb +5 -0
  201. data/spec/app/models/author.rb +0 -2
  202. data/spec/app/models/band.rb +3 -2
  203. data/spec/app/models/bar.rb +1 -0
  204. data/spec/app/models/book.rb +1 -0
  205. data/spec/app/models/building.rb +0 -2
  206. data/spec/app/models/building_address.rb +0 -2
  207. data/spec/app/models/bus.rb +1 -1
  208. data/spec/app/models/canvas.rb +1 -1
  209. data/spec/app/models/contextable_item.rb +5 -0
  210. data/spec/app/models/contractor.rb +0 -2
  211. data/spec/app/models/country_code.rb +1 -1
  212. data/spec/app/models/definition.rb +2 -2
  213. data/spec/app/models/dog.rb +1 -1
  214. data/spec/app/models/draft.rb +9 -0
  215. data/spec/app/models/dragon.rb +4 -0
  216. data/spec/app/models/drug.rb +1 -3
  217. data/spec/app/models/dungeon.rb +4 -0
  218. data/spec/app/models/edit.rb +5 -0
  219. data/spec/app/models/even.rb +7 -0
  220. data/spec/app/models/event.rb +1 -1
  221. data/spec/app/models/filesystem.rb +1 -0
  222. data/spec/app/models/fish.rb +0 -1
  223. data/spec/app/models/fruits.rb +6 -0
  224. data/spec/app/models/game.rb +0 -2
  225. data/spec/app/models/house.rb +1 -3
  226. data/spec/app/models/id_key.rb +6 -0
  227. data/spec/app/models/item.rb +1 -5
  228. data/spec/app/models/jar.rb +1 -1
  229. data/spec/app/models/label.rb +4 -4
  230. data/spec/app/models/line_item.rb +1 -1
  231. data/spec/app/models/login.rb +1 -1
  232. data/spec/app/models/message.rb +8 -0
  233. data/spec/app/models/movie.rb +1 -0
  234. data/spec/app/models/name.rb +3 -3
  235. data/spec/app/models/note.rb +3 -1
  236. data/spec/app/models/odd.rb +7 -0
  237. data/spec/app/models/oscar.rb +1 -1
  238. data/spec/app/models/parent_doc.rb +1 -1
  239. data/spec/app/models/person.rb +16 -10
  240. data/spec/app/models/phone.rb +1 -3
  241. data/spec/app/models/player.rb +3 -3
  242. data/spec/app/models/post.rb +5 -3
  243. data/spec/app/models/preference.rb +1 -1
  244. data/spec/app/models/quiz.rb +0 -3
  245. data/spec/app/models/record.rb +10 -5
  246. data/spec/app/models/registry.rb +1 -1
  247. data/spec/app/models/server.rb +1 -1
  248. data/spec/app/models/service.rb +3 -3
  249. data/spec/app/models/sound.rb +5 -0
  250. data/spec/app/models/symptom.rb +1 -1
  251. data/spec/app/models/template.rb +1 -1
  252. data/spec/app/models/title.rb +0 -1
  253. data/spec/app/models/track.rb +5 -5
  254. data/spec/app/models/tree.rb +3 -3
  255. data/spec/app/models/video.rb +1 -5
  256. data/spec/app/models/wiki_page.rb +2 -5
  257. data/spec/app/models/word.rb +3 -0
  258. data/spec/app/models/word_origin.rb +1 -1
  259. data/spec/config/mongoid.yml +7 -8
  260. data/spec/helpers.rb +18 -0
  261. data/spec/mongoid/#atomic_spec.rb# +365 -0
  262. data/spec/mongoid/atomic/modifiers_spec.rb +22 -22
  263. data/spec/mongoid/atomic/paths/embedded/many_spec.rb +8 -49
  264. data/spec/mongoid/atomic/paths/embedded/one_spec.rb +7 -49
  265. data/spec/mongoid/atomic/paths/root_spec.rb +3 -61
  266. data/spec/mongoid/atomic/paths_spec.rb +19 -19
  267. data/spec/mongoid/atomic_spec.rb +19 -19
  268. data/spec/mongoid/{nested_attributes_spec.rb → attributes/nested_spec.rb} +474 -592
  269. data/spec/mongoid/attributes/readonly_spec.rb +58 -18
  270. data/spec/mongoid/attributes_spec.rb +349 -434
  271. data/spec/mongoid/{dirty_spec.rb → changeable_spec.rb} +203 -153
  272. data/spec/mongoid/{components_spec.rb → composable_spec.rb} +3 -3
  273. data/spec/mongoid/config/environment_spec.rb +3 -3
  274. data/spec/mongoid/config/options_spec.rb +6 -6
  275. data/spec/mongoid/config_spec.rb +24 -48
  276. data/spec/mongoid/contextual/aggregable/memory_spec.rb +12 -12
  277. data/spec/mongoid/contextual/aggregable/mongo_spec.rb +78 -38
  278. data/spec/mongoid/contextual/atomic_spec.rb +60 -56
  279. data/spec/mongoid/contextual/find_and_modify_spec.rb +14 -14
  280. data/spec/mongoid/contextual/geo_near_spec.rb +22 -22
  281. data/spec/mongoid/contextual/map_reduce_spec.rb +27 -27
  282. data/spec/mongoid/contextual/memory_spec.rb +156 -94
  283. data/spec/mongoid/contextual/mongo_spec.rb +238 -150
  284. data/spec/mongoid/contextual/none_spec.rb +127 -0
  285. data/spec/mongoid/contextual/text_search_spec.rb +209 -0
  286. data/spec/mongoid/copyable_spec.rb +56 -68
  287. data/spec/mongoid/criteria/findable_spec.rb +991 -0
  288. data/spec/mongoid/{criterion/inspection_spec.rb → criteria/inspectable_spec.rb} +5 -5
  289. data/spec/mongoid/{criterion → criteria}/marshalable_spec.rb +2 -2
  290. data/spec/mongoid/criteria/modifiable_spec.rb +1252 -0
  291. data/spec/mongoid/{criterion/scoping_spec.rb → criteria/scopable_spec.rb} +37 -37
  292. data/spec/mongoid/criteria_spec.rb +715 -2421
  293. data/spec/mongoid/document_spec.rb +171 -121
  294. data/spec/mongoid/equality_spec.rb +22 -22
  295. data/spec/mongoid/errors/ambiguous_relationship_spec.rb +3 -3
  296. data/spec/mongoid/errors/callback_spec.rb +3 -3
  297. data/spec/mongoid/errors/delete_restriction_spec.rb +3 -3
  298. data/spec/mongoid/errors/document_not_destroyed_spec.rb +33 -0
  299. data/spec/mongoid/errors/document_not_found_spec.rb +11 -11
  300. data/spec/mongoid/errors/eager_load_spec.rb +3 -3
  301. data/spec/mongoid/errors/invalid_collection_spec.rb +3 -3
  302. data/spec/mongoid/errors/invalid_config_option_spec.rb +3 -3
  303. data/spec/mongoid/errors/invalid_field_option_spec.rb +3 -3
  304. data/spec/mongoid/errors/invalid_field_spec.rb +3 -3
  305. data/spec/mongoid/errors/invalid_find_spec.rb +3 -3
  306. data/spec/mongoid/errors/invalid_includes_spec.rb +3 -3
  307. data/spec/mongoid/errors/invalid_index_spec.rb +3 -3
  308. data/spec/mongoid/errors/invalid_options_spec.rb +3 -3
  309. data/spec/mongoid/errors/invalid_path_spec.rb +3 -3
  310. data/spec/mongoid/errors/invalid_scope_spec.rb +5 -5
  311. data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +3 -3
  312. data/spec/mongoid/errors/invalid_storage_options_spec.rb +3 -3
  313. data/spec/mongoid/errors/invalid_time_spec.rb +3 -3
  314. data/spec/mongoid/errors/inverse_not_found_spec.rb +3 -3
  315. data/spec/mongoid/errors/mixed_relations_spec.rb +3 -3
  316. data/spec/mongoid/errors/mixed_session_configuration_spec.rb +3 -3
  317. data/spec/mongoid/errors/mongoid_error_spec.rb +8 -8
  318. data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +3 -3
  319. data/spec/mongoid/errors/no_environment_spec.rb +3 -3
  320. data/spec/mongoid/errors/no_map_reduce_output_spec.rb +3 -3
  321. data/spec/mongoid/errors/no_metadata_spec.rb +3 -3
  322. data/spec/mongoid/errors/no_parent_spec.rb +3 -3
  323. data/spec/mongoid/errors/no_session_config_spec.rb +3 -3
  324. data/spec/mongoid/errors/no_session_database_spec.rb +3 -3
  325. data/spec/mongoid/errors/no_session_hosts_spec.rb +3 -3
  326. data/spec/mongoid/errors/no_sessions_config_spec.rb +3 -3
  327. data/spec/mongoid/errors/readonly_attribute_spec.rb +3 -3
  328. data/spec/mongoid/errors/readonly_document_spec.rb +29 -0
  329. data/spec/mongoid/errors/scope_overwrite_spec.rb +3 -3
  330. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +3 -3
  331. data/spec/mongoid/errors/unknown_attribute_spec.rb +5 -5
  332. data/spec/mongoid/errors/unsaved_document_spec.rb +3 -3
  333. data/spec/mongoid/errors/unsupported_javascript_spec.rb +3 -3
  334. data/spec/mongoid/errors/validations_spec.rb +7 -7
  335. data/spec/mongoid/extensions/array_spec.rb +61 -61
  336. data/spec/mongoid/extensions/big_decimal_spec.rb +11 -11
  337. data/spec/mongoid/extensions/binary_spec.rb +12 -12
  338. data/spec/mongoid/extensions/boolean_spec.rb +18 -18
  339. data/spec/mongoid/extensions/date_spec.rb +13 -13
  340. data/spec/mongoid/extensions/date_time_spec.rb +8 -8
  341. data/spec/mongoid/extensions/false_class_spec.rb +5 -5
  342. data/spec/mongoid/extensions/float_spec.rb +29 -15
  343. data/spec/mongoid/extensions/hash_spec.rb +29 -29
  344. data/spec/mongoid/extensions/integer_spec.rb +15 -15
  345. data/spec/mongoid/extensions/module_spec.rb +2 -2
  346. data/spec/mongoid/extensions/nil_class_spec.rb +1 -1
  347. data/spec/mongoid/extensions/object_id_spec.rb +134 -134
  348. data/spec/mongoid/extensions/object_spec.rb +26 -26
  349. data/spec/mongoid/extensions/range_spec.rb +61 -12
  350. data/spec/mongoid/extensions/regexp_spec.rb +4 -4
  351. data/spec/mongoid/extensions/set_spec.rb +4 -4
  352. data/spec/mongoid/extensions/string_spec.rb +35 -46
  353. data/spec/mongoid/extensions/symbol_spec.rb +9 -9
  354. data/spec/mongoid/extensions/time_spec.rb +49 -49
  355. data/spec/mongoid/extensions/time_with_zone_spec.rb +34 -34
  356. data/spec/mongoid/extensions/true_class_spec.rb +5 -5
  357. data/spec/mongoid/extensions_spec.rb +29 -0
  358. data/spec/mongoid/factory_spec.rb +15 -15
  359. data/spec/mongoid/fields/foreign_key_spec.rb +73 -66
  360. data/spec/mongoid/fields/internal/foreign_keys/array_spec.rb +15 -15
  361. data/spec/mongoid/fields/internal/foreign_keys/object_spec.rb +22 -22
  362. data/spec/mongoid/fields/localized_spec.rb +38 -23
  363. data/spec/mongoid/fields/standard_spec.rb +12 -12
  364. data/spec/mongoid/fields_spec.rb +263 -217
  365. data/spec/mongoid/findable_spec.rb +509 -0
  366. data/spec/mongoid/indexable/specification_spec.rb +102 -0
  367. data/spec/mongoid/{indexes_spec.rb → indexable_spec.rb} +171 -51
  368. data/spec/mongoid/{inspection_spec.rb → inspectable_spec.rb} +6 -14
  369. data/spec/mongoid/{callbacks_spec.rb → interceptable_spec.rb} +117 -116
  370. data/spec/mongoid/log_subscriber_spec.rb +75 -0
  371. data/spec/mongoid/loggable_spec.rb +1 -1
  372. data/spec/mongoid/{matchers → matchable}/all_spec.rb +4 -4
  373. data/spec/mongoid/{matchers → matchable}/and_spec.rb +11 -11
  374. data/spec/mongoid/{matchers → matchable}/default_spec.rb +15 -15
  375. data/spec/mongoid/{matchers → matchable}/exists_spec.rb +5 -5
  376. data/spec/mongoid/{matchers → matchable}/gt_spec.rb +9 -8
  377. data/spec/mongoid/{matchers → matchable}/gte_spec.rb +7 -7
  378. data/spec/mongoid/matchable/in_spec.rb +49 -0
  379. data/spec/mongoid/{matchers → matchable}/lt_spec.rb +7 -7
  380. data/spec/mongoid/{matchers → matchable}/lte_spec.rb +7 -7
  381. data/spec/mongoid/matchable/ne_spec.rb +46 -0
  382. data/spec/mongoid/matchable/nin_spec.rb +48 -0
  383. data/spec/mongoid/{matchers → matchable}/or_spec.rb +6 -6
  384. data/spec/mongoid/{matchers → matchable}/size_spec.rb +3 -3
  385. data/spec/mongoid/{matchers_spec.rb → matchable_spec.rb} +41 -41
  386. data/spec/mongoid/persistable/creatable_spec.rb +553 -0
  387. data/spec/mongoid/persistable/deletable_spec.rb +218 -0
  388. data/spec/mongoid/persistable/destroyable_spec.rb +192 -0
  389. data/spec/mongoid/persistable/incrementable_spec.rb +173 -0
  390. data/spec/mongoid/persistable/logical_spec.rb +143 -0
  391. data/spec/mongoid/persistable/poppable_spec.rb +115 -0
  392. data/spec/mongoid/persistable/pullable_spec.rb +228 -0
  393. data/spec/mongoid/persistable/pushable_spec.rb +258 -0
  394. data/spec/mongoid/persistable/renamable_spec.rb +135 -0
  395. data/spec/mongoid/persistable/savable_spec.rb +498 -0
  396. data/spec/mongoid/persistable/settable_spec.rb +162 -0
  397. data/spec/mongoid/persistable/unsettable_spec.rb +155 -0
  398. data/spec/mongoid/persistable/updatable_spec.rb +558 -0
  399. data/spec/mongoid/persistable/upsertable_spec.rb +106 -0
  400. data/spec/mongoid/persistable_spec.rb +206 -0
  401. data/spec/mongoid/{atomic/positionable_spec.rb → positional_spec.rb} +14 -19
  402. data/spec/mongoid/query_cache_spec.rb +263 -0
  403. data/spec/mongoid/railties/document_spec.rb +2 -2
  404. data/spec/mongoid/relations/accessors_spec.rb +53 -145
  405. data/spec/mongoid/relations/auto_save_spec.rb +37 -17
  406. data/spec/mongoid/relations/bindings/embedded/in_spec.rb +12 -12
  407. data/spec/mongoid/relations/bindings/embedded/many_spec.rb +3 -3
  408. data/spec/mongoid/relations/bindings/embedded/one_spec.rb +5 -5
  409. data/spec/mongoid/relations/bindings/referenced/in_spec.rb +26 -26
  410. data/spec/mongoid/relations/bindings/referenced/many_spec.rb +10 -10
  411. data/spec/mongoid/relations/bindings/referenced/many_to_many_spec.rb +19 -19
  412. data/spec/mongoid/relations/bindings/referenced/one_spec.rb +12 -12
  413. data/spec/mongoid/relations/builders/embedded/in_spec.rb +4 -4
  414. data/spec/mongoid/relations/builders/embedded/many_spec.rb +18 -18
  415. data/spec/mongoid/relations/builders/embedded/one_spec.rb +11 -11
  416. data/spec/mongoid/relations/builders/nested_attributes/many_spec.rb +12 -13
  417. data/spec/mongoid/relations/builders/nested_attributes/one_spec.rb +14 -14
  418. data/spec/mongoid/relations/builders/referenced/in_spec.rb +24 -35
  419. data/spec/mongoid/relations/builders/referenced/many_spec.rb +15 -15
  420. data/spec/mongoid/relations/builders/referenced/many_to_many_spec.rb +18 -18
  421. data/spec/mongoid/relations/builders/referenced/one_spec.rb +12 -25
  422. data/spec/mongoid/relations/builders_spec.rb +21 -21
  423. data/spec/mongoid/relations/cascading/delete_spec.rb +9 -9
  424. data/spec/mongoid/relations/cascading/destroy_spec.rb +6 -6
  425. data/spec/mongoid/relations/cascading/nullify_spec.rb +4 -4
  426. data/spec/mongoid/relations/cascading/restrict_spec.rb +7 -7
  427. data/spec/mongoid/relations/cascading_spec.rb +16 -16
  428. data/spec/mongoid/relations/constraint_spec.rb +8 -7
  429. data/spec/mongoid/relations/conversions_spec.rb +16 -14
  430. data/spec/mongoid/relations/counter_cache_spec.rb +85 -0
  431. data/spec/mongoid/relations/cyclic_spec.rb +18 -18
  432. data/spec/mongoid/relations/eager/belongs_to_spec.rb +154 -0
  433. data/spec/mongoid/relations/eager/has_and_belongs_to_many_spec.rb +117 -0
  434. data/spec/mongoid/relations/eager/has_many_spec.rb +207 -0
  435. data/spec/mongoid/relations/eager/has_one_spec.rb +163 -0
  436. data/spec/mongoid/relations/eager_spec.rb +228 -0
  437. data/spec/mongoid/relations/embedded/dirty_spec.rb +8 -8
  438. data/spec/mongoid/relations/embedded/in_spec.rb +56 -57
  439. data/spec/mongoid/relations/embedded/many_spec.rb +467 -372
  440. data/spec/mongoid/relations/embedded/one_spec.rb +108 -141
  441. data/spec/mongoid/relations/macros_spec.rb +108 -102
  442. data/spec/mongoid/relations/metadata_spec.rb +180 -255
  443. data/spec/mongoid/relations/options_spec.rb +1 -1
  444. data/spec/mongoid/relations/polymorphic_spec.rb +13 -17
  445. data/spec/mongoid/relations/proxy_spec.rb +2 -2
  446. data/spec/mongoid/relations/referenced/in_spec.rb +128 -303
  447. data/spec/mongoid/relations/referenced/many_spec.rb +587 -527
  448. data/spec/mongoid/relations/referenced/many_to_many_spec.rb +401 -424
  449. data/spec/mongoid/relations/referenced/one_spec.rb +149 -264
  450. data/spec/mongoid/relations/reflections_spec.rb +6 -6
  451. data/spec/mongoid/relations/synchronization_spec.rb +46 -50
  452. data/spec/mongoid/relations/targets/enumerable_spec.rb +118 -118
  453. data/spec/mongoid/relations/touchable_spec.rb +333 -0
  454. data/spec/mongoid/relations_spec.rb +16 -15
  455. data/spec/mongoid/{reloading_spec.rb → reloadable_spec.rb} +38 -55
  456. data/spec/mongoid/{scoping_spec.rb → scopable_spec.rb} +89 -164
  457. data/spec/mongoid/selectable_spec.rb +134 -0
  458. data/spec/mongoid/{serialization_spec.rb → serializable_spec.rb} +129 -82
  459. data/spec/mongoid/sessions/factory_spec.rb +49 -28
  460. data/spec/mongoid/sessions/mongo_uri_spec.rb +7 -7
  461. data/spec/mongoid/sessions/options_spec.rb +108 -0
  462. data/spec/mongoid/sessions_spec.rb +319 -178
  463. data/spec/mongoid/{sharding_spec.rb → shardable_spec.rb} +8 -8
  464. data/spec/mongoid/{state_spec.rb → stateful_spec.rb} +36 -11
  465. data/spec/mongoid/tasks/database_rake_spec.rb +285 -0
  466. data/spec/mongoid/tasks/database_spec.rb +160 -0
  467. data/spec/mongoid/threaded_spec.rb +17 -70
  468. data/spec/mongoid/timestamps/created/short_spec.rb +6 -6
  469. data/spec/mongoid/timestamps/created_spec.rb +5 -5
  470. data/spec/mongoid/timestamps/timeless_spec.rb +6 -6
  471. data/spec/mongoid/timestamps/updated/short_spec.rb +11 -11
  472. data/spec/mongoid/timestamps/updated_spec.rb +9 -13
  473. data/spec/mongoid/timestamps_spec.rb +9 -13
  474. data/spec/mongoid/{hierarchy_spec.rb → traversable_spec.rb} +19 -19
  475. data/spec/mongoid/{validations → validatable}/associated_spec.rb +45 -22
  476. data/spec/mongoid/{validations → validatable}/format_spec.rb +6 -6
  477. data/spec/mongoid/{validations → validatable}/length_spec.rb +14 -14
  478. data/spec/mongoid/{validations → validatable}/numericality_spec.rb +1 -1
  479. data/spec/mongoid/{validations → validatable}/presence_spec.rb +37 -44
  480. data/spec/mongoid/{validations → validatable}/uniqueness_spec.rb +184 -192
  481. data/spec/mongoid/{validations_spec.rb → validatable_spec.rb} +28 -28
  482. data/spec/mongoid_spec.rb +8 -8
  483. data/spec/rails/mongoid_spec.rb +19 -335
  484. data/spec/spec_helper.rb +31 -13
  485. metadata +303 -283
  486. data/lib/mongoid/atomic/positionable.rb +0 -73
  487. data/lib/mongoid/components.rb +0 -92
  488. data/lib/mongoid/config/inflections.rb +0 -6
  489. data/lib/mongoid/contextual/eager.rb +0 -158
  490. data/lib/mongoid/errors/versioning_not_on_root.rb +0 -23
  491. data/lib/mongoid/identity_map.rb +0 -163
  492. data/lib/mongoid/json.rb +0 -16
  493. data/lib/mongoid/matchers.rb +0 -32
  494. data/lib/mongoid/matchers/strategies.rb +0 -97
  495. data/lib/mongoid/multi_parameter_attributes.rb +0 -105
  496. data/lib/mongoid/nested_attributes.rb +0 -78
  497. data/lib/mongoid/observer.rb +0 -192
  498. data/lib/mongoid/paranoia.rb +0 -136
  499. data/lib/mongoid/persistence.rb +0 -357
  500. data/lib/mongoid/persistence/atomic.rb +0 -231
  501. data/lib/mongoid/persistence/atomic/add_to_set.rb +0 -47
  502. data/lib/mongoid/persistence/atomic/bit.rb +0 -35
  503. data/lib/mongoid/persistence/atomic/inc.rb +0 -45
  504. data/lib/mongoid/persistence/atomic/operation.rb +0 -154
  505. data/lib/mongoid/persistence/atomic/pop.rb +0 -32
  506. data/lib/mongoid/persistence/atomic/pull.rb +0 -32
  507. data/lib/mongoid/persistence/atomic/pull_all.rb +0 -32
  508. data/lib/mongoid/persistence/atomic/push.rb +0 -25
  509. data/lib/mongoid/persistence/atomic/push_all.rb +0 -25
  510. data/lib/mongoid/persistence/atomic/rename.rb +0 -30
  511. data/lib/mongoid/persistence/atomic/sets.rb +0 -28
  512. data/lib/mongoid/persistence/atomic/unset.rb +0 -27
  513. data/lib/mongoid/persistence/deletion.rb +0 -31
  514. data/lib/mongoid/persistence/insertion.rb +0 -38
  515. data/lib/mongoid/persistence/modification.rb +0 -35
  516. data/lib/mongoid/persistence/operations.rb +0 -214
  517. data/lib/mongoid/persistence/operations/embedded/insert.rb +0 -46
  518. data/lib/mongoid/persistence/operations/embedded/remove.rb +0 -43
  519. data/lib/mongoid/persistence/operations/insert.rb +0 -34
  520. data/lib/mongoid/persistence/operations/remove.rb +0 -33
  521. data/lib/mongoid/persistence/operations/update.rb +0 -59
  522. data/lib/mongoid/persistence/operations/upsert.rb +0 -28
  523. data/lib/mongoid/persistence/upsertion.rb +0 -31
  524. data/lib/mongoid/unit_of_work.rb +0 -61
  525. data/lib/mongoid/versioning.rb +0 -217
  526. data/lib/rack/mongoid.rb +0 -2
  527. data/lib/rack/mongoid/middleware/identity_map.rb +0 -39
  528. data/lib/rails/generators/mongoid/observer/observer_generator.rb +0 -17
  529. data/lib/rails/generators/mongoid/observer/templates/observer.rb.tt +0 -4
  530. data/spec/app/models/actor_observer.rb +0 -15
  531. data/spec/app/models/callback_recorder.rb +0 -25
  532. data/spec/app/models/paranoid_phone.rb +0 -25
  533. data/spec/app/models/paranoid_post.rb +0 -36
  534. data/spec/app/models/phone_observer.rb +0 -6
  535. data/spec/mongoid/attributes/processing_spec.rb +0 -149
  536. data/spec/mongoid/criterion/destructive_spec.rb +0 -101
  537. data/spec/mongoid/criterion/modifiable_spec.rb +0 -409
  538. data/spec/mongoid/criterion/modification_spec.rb +0 -402
  539. data/spec/mongoid/errors/versioning_not_on_root_spec.rb +0 -29
  540. data/spec/mongoid/finders_spec.rb +0 -321
  541. data/spec/mongoid/identity_map_spec.rb +0 -564
  542. data/spec/mongoid/json_spec.rb +0 -33
  543. data/spec/mongoid/matchers/in_spec.rb +0 -25
  544. data/spec/mongoid/matchers/ne_spec.rb +0 -25
  545. data/spec/mongoid/matchers/nin_spec.rb +0 -25
  546. data/spec/mongoid/multi_parameter_attributes_spec.rb +0 -128
  547. data/spec/mongoid/observer_spec.rb +0 -290
  548. data/spec/mongoid/paranoia_spec.rb +0 -759
  549. data/spec/mongoid/persistence/atomic/add_to_set_spec.rb +0 -262
  550. data/spec/mongoid/persistence/atomic/bit_spec.rb +0 -88
  551. data/spec/mongoid/persistence/atomic/inc_spec.rb +0 -133
  552. data/spec/mongoid/persistence/atomic/pop_spec.rb +0 -111
  553. data/spec/mongoid/persistence/atomic/pull_all_spec.rb +0 -77
  554. data/spec/mongoid/persistence/atomic/pull_spec.rb +0 -80
  555. data/spec/mongoid/persistence/atomic/push_all_spec.rb +0 -77
  556. data/spec/mongoid/persistence/atomic/push_spec.rb +0 -77
  557. data/spec/mongoid/persistence/atomic/rename_spec.rb +0 -42
  558. data/spec/mongoid/persistence/atomic/sets_spec.rb +0 -154
  559. data/spec/mongoid/persistence/atomic/unset_spec.rb +0 -65
  560. data/spec/mongoid/persistence/atomic_spec.rb +0 -216
  561. data/spec/mongoid/persistence/operations/embedded/insert_spec.rb +0 -191
  562. data/spec/mongoid/persistence/operations/embedded/remove_spec.rb +0 -8
  563. data/spec/mongoid/persistence/operations/insert_spec.rb +0 -149
  564. data/spec/mongoid/persistence/operations/remove_spec.rb +0 -113
  565. data/spec/mongoid/persistence/operations/update_spec.rb +0 -141
  566. data/spec/mongoid/persistence/operations/upsert_spec.rb +0 -59
  567. data/spec/mongoid/persistence/operations_spec.rb +0 -313
  568. data/spec/mongoid/persistence_spec.rb +0 -2279
  569. data/spec/mongoid/unit_of_work_spec.rb +0 -196
  570. data/spec/mongoid/versioning_spec.rb +0 -540
  571. data/spec/rack/mongoid/middleware/identity_map_spec.rb +0 -72
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d24616c46c93a31777a37b97c93cca0b10df2625
4
- data.tar.gz: 000fc93a80cfc7e296f305a1ddca2d77517578aa
3
+ metadata.gz: a5340f453822e7cbecd2710795296c23db607d92
4
+ data.tar.gz: 0adcfd1449d91980fb45bb60aa336e661b1482f9
5
5
  SHA512:
6
- metadata.gz: 71d177604ae5df43f63a5f45b1fa68ea2bedf263009ca58406e23ef6c3fdbe09f0b76bdf5e4c70a9612c515f3aa2fca8ae384d62ede1e86629f788905822e483
7
- data.tar.gz: f840e9a8796efaa27b3536c95270c9e5abcbe233718a546095cc09671fd1d6edb8c7d16b55505ad33e1737ab610fb422b04318d0486c37841a2b9c495959ca2f
6
+ metadata.gz: 9b1733f089831c0b58049cb486a8c13687f16a0845d2d9eb2acfb8c5aa0c99de3bbe3a81d6ab0bae0be9c8e4493c77864d64626b341565b5be8f7d695fb93acc
7
+ data.tar.gz: 1c7a4d343e583880595366b2f4afcb58a8d0f763c8a3bc5f04cea4134d1fb947f420d3ce7cb9b070902a0fd50cd03e71c1c4188c7f349a0e591774435b6a9908
data/CHANGELOG.md CHANGED
@@ -3,6 +3,479 @@
3
3
  For instructions on upgrading to newer versions, visit
4
4
  [mongoid.org](http://mongoid.org/en/mongoid/docs/upgrading.html).
5
5
 
6
+ ## 4.0.3 - Not released
7
+
8
+ ## 4.0.2
9
+
10
+ ### New Features
11
+
12
+ * \#3931 Add #find_or_create_by! method to many associations. (Tom Beynon)
13
+
14
+ * \#3731 Add find_by! method. (Guillermo Iguaran)
15
+
16
+ ### Resolved Issues
17
+
18
+ * \#3722 Use the right database name when combining #store_in and #with. (Arthur Neves)
19
+
20
+ * \#3934 Dont apply sort when doing a find_by. (Arthur Neves)
21
+
22
+ * \#3935 fix multiple fields sorting on contextual memory. (chamnap)
23
+
24
+ * \#3904 BSON::Document#symbolize_keys should return keys as symbols. (Arthur Neves)
25
+
26
+ * \#3948 Fix remove_undefined_indexes on rails 4.2, to symbolize right the Document keys. (Adam Wróbel)
27
+
28
+ * \#3626 Document#to_key, needs to return a ObjectId as String so we can query back using that id. (Arthur Neves)
29
+
30
+ * \#3888 raise UnknownAttributeError when 'set' is called on non existing field and Mongoid::Attributes::Dynamic is not included in model. (Shweta Kale)
31
+
32
+ * \#3889 'set' will allow to set value of non existing field when Mongoid::Attributes::Dynamic is included in model. (Shweta Kale)
33
+
34
+ * \#3812 Fixed validation context when saving (Yaroslav Zemlyanuhin)
35
+
36
+ ## 4.0.1
37
+
38
+ ### Resolved Issues
39
+
40
+ * \#3911 Fix relations named "parent". (nkriege)
41
+
42
+ * \#3792/\#3881 Fix many internal calls to #_id instead of #id to avoid issues
43
+ when overloading #id (Gauthier Delacroix)
44
+
45
+ * \#3847 Fix 'QueryCache#get_more' result, when collection has more documents than first query batch. (Angelica Korsun)
46
+
47
+ * \#3684 Dont raise MissingAttributeError, when using a only() scope. (Arthur Neves)
48
+
49
+ * \#3703 pluck method should not compact the values. (Arthur Neves)
50
+
51
+ * \#3773 Use nanoseconds for cache_key timestamp instead of plain seconds. (Máximo Mussini)
52
+
53
+ ## 4.0.0
54
+
55
+ ### Major Changes (Backwards Incompatible)
56
+
57
+ * \#3320 Remove Rails dependencies on database rake tasks. (Arthur Neves)
58
+
59
+ All db:* rake tasks should work as before when using Rails.
60
+ When not in a Rails, just load the database tasks using:
61
+
62
+ load 'mongoid/tasks/database.rake'
63
+
64
+ * Mongoid 4 now only supports MongoDB 2.4.0 and higher.
65
+
66
+ * `Document#metadata` has been renamed to `Document#relation_metadata` to
67
+ avoid common conflicts. Relation proxies also have this renamed to the
68
+ same as well.
69
+
70
+ * Scopes and default scopes must now all be defined within lambdas or procs.
71
+
72
+ * `skip_version_check` config option was removed.
73
+
74
+ * IdentityMap removed. (Arthur Neves)
75
+
76
+ * Eager load rework. Eager load now doesnt need the identity map to load
77
+ related documents. A set of preloaders can eager load the associations
78
+ passed to .includes method. (Arthur Neves)
79
+
80
+ * Mongoid now supports the new read preferences that the core drivers
81
+ provide. These include:
82
+
83
+ - `:primary`: Will always read from a primary node. (default)
84
+ - `:primary_preferred`: Attempt a primary first, then secondary if none available.
85
+ - `:secondary`: Will always read from a secondary node.
86
+ - `:secondary_preferred`: Attempt a secondary first, then primary if none available.
87
+ - `:nearest`: Attempt to read from the node with the lowest latency.
88
+
89
+ Sample syntax:
90
+
91
+ Person.with(read: :secondary).first
92
+
93
+ The `:consistency` option is no longer valid, use the `:read` option now.
94
+
95
+ * Mongoid now defaults all writes to propagate (formerly "safe mode") and now
96
+ has different propagate semantics:
97
+
98
+ - `{ w: -1 }`: Don't verify writes and raise no network errors.
99
+ - `{ w: 0 }`: Don't verify writes and raise network errors.
100
+ - `{ w: 1 }`: Verify writes on the primary node. (default)
101
+ - `{ w: n }`: Verify writes on n number of nodes.
102
+ - `{ w: "majority" }`: Verify writes on a majority of nodes.
103
+
104
+ Sample syntax:
105
+
106
+ Person.with(write: {w: :majority}).create!(name: "John")
107
+
108
+ The `:safe` option is no longer valid use the `:write` option now.
109
+
110
+ * \#3230 Array and Hash fields now validate that the correct types are
111
+ getting set, instead of allowing any value. (Rodrigo Saito)
112
+
113
+ * \#3043/\#2949 Rework on the internals of persistence options. (Arthur Neves)
114
+
115
+ * Mongoid now requires Active Model 4 or higher.
116
+
117
+ * `Document#set` now accepts multiple attributes in the form of a hash,
118
+ instead of the previous `(field, value)` args. Field aliases and typecasting
119
+ are also now supported in this operation.
120
+
121
+ document.set(name: "Photek", likes: 10000)
122
+
123
+ * `Document#rename` now accepts multiple attributes in the form of a hash,
124
+ instead of the previous `(field, value)` args. Field aliases are supported.
125
+
126
+ document.rename(first_name: "fn", last_name: "ln")
127
+
128
+ * `Document#inc` now accepts multiple attributes in the form of a hash, instead
129
+ of previously only being able to increment one value at a time. Aliases and
130
+ serialization is supported.
131
+
132
+ document.inc(score: 10, place: -1, lives: -10)
133
+
134
+ * `Document#pop` now accepts multiple attributes in the form of a hash, instead
135
+ of previously only being able to pop one value at a time. Aliases and
136
+ serialization is supported.
137
+
138
+ document.pop(names: 1, aliases: -1)
139
+
140
+ * `Document#bit` now accepts multiple attributes in the form of a hash, instead
141
+ of previously only being able to apply one set of operations at a time.
142
+ Aliases and serialization are supported.
143
+
144
+ document.bit(age: { and: 13 }, score: { or: 13 })
145
+
146
+ * `Document#pull` now accepts multiple attributes in the form of a hash, instead
147
+ of previously only being able to pull one value at a time. Aliases and
148
+ serialization is supported.
149
+
150
+ document.pull(names: "James", aliases: "007")
151
+
152
+ * `Document#pull_all` now accepts multiple attributes in the form of a hash,
153
+ instead of previously only being able to pull one value at a time. Aliases and
154
+ serialization is supported.
155
+
156
+ document.pull_all(names: ["James", "Bond"], aliases: ["007"])
157
+
158
+ * `Document#push_all` has been removed since it was deprecated in MongoDB 2.4.
159
+ Use `Document.push` instead.
160
+
161
+ * `Document#push` now accepts multiple attributes in the form of a hash, and
162
+ can handle the pushing of single values or multiple values to the field via
163
+ $push with $each. Aliases and serialization is supported.
164
+
165
+ document.push(names: "James", aliases: [ "007", "Jim" ])
166
+
167
+ * `Document#add_to_set` now accepts multiple attributes in the form of a hash,
168
+ and now aliases and serialization are supported.
169
+
170
+ document.add_to_set(names: "James", aliases: "007")
171
+
172
+ * Criteria atomic operations API is now changed to match the changes in the
173
+ single document atomic API, for example:
174
+
175
+ Band.where(name: "Depeche Mode").inc(likes: 10, followers: 20)
176
+
177
+ * \#3399 #create and #create! on relations can now take an array of attributes as
178
+ the first parameter to create multiple documents at once.
179
+
180
+ person.addresses.create([{ street: "Bond" }, { street: "Upper" }])
181
+ person.addresses.create!([{ street: "Bond" }, { street: "Upper" }])
182
+
183
+ * \#3141 `rake db:test:prepare` now sets up all defined indexes if Mongoid is the
184
+ only ODM/ORM in the environment.
185
+
186
+ * \#3138 `update_attributes` can now be accessed simply by calling `update`.
187
+
188
+ * \#3083 A new rake task: `rake db:mongoid:remove_undefined_indexes` has been added to
189
+ remove indexes from the database that are not explicitly defined in the models.
190
+ (Aidan Feldman)
191
+
192
+ * \#3029 The `relation_field` field that is added for a single use case with polymorphic
193
+ relations has been removed. So where the following would work before:
194
+
195
+ class Eye
196
+ include Mongoid::Document
197
+ belongs_to :eyeable, polymorphic: true
198
+ end
199
+
200
+ class Face
201
+ include Mongoid::Document
202
+ has_one :left_eye, class_name: "Eye", as: :eyeable
203
+ has_one :right_eye, class_name: "Eye", as: :eyeable
204
+ end
205
+
206
+ This would now need to be modeled as (with the appropriate migration):
207
+
208
+ class Eye
209
+ include Mongoid::Document
210
+ belongs_to :left_socket, class_name: "Face", inverse_of: :left_eye
211
+ belongs_to :right_socket, class_name: "Face", inverse_of: :right_eye
212
+ end
213
+
214
+ class Face
215
+ include Mongoid::Document
216
+ has_one :left_eye, class_name: "Eye", inverse_of: :left_socket
217
+ has_one :right_eye, class_name: "Eye", inverse_of: :right_socket
218
+ end
219
+
220
+ * \#3075 `update_attribute` now properly calls the setter method instead of
221
+ using `write_attribute`.
222
+
223
+ * \#3060 Allow atomically blocks to allow multiple calls of the same type.
224
+ (Brian Norton)
225
+
226
+ * \#3037 Model indexes are no longer stored in an `index_options` hash on the
227
+ model class. Instead, an array named `index_specifications` now exists on the
228
+ class which contains a list of `Indexable::Specification` objects. This is so
229
+ we could properly handle the case of indexes with the same keys but different
230
+ order.
231
+
232
+ * \#2956 Caching on queries now only happens when `cache` is specifically
233
+ called. (Arthur Neves)
234
+
235
+ * \#2659 `Mongoid::Railtie` now properly uses only one initializer and
236
+ the name has changed to `mongoid.load-config`.
237
+
238
+ * \#2656 `rake db:reseed` is now `rake db:reset` (Arthur Neves)
239
+
240
+ * \#2648 `Boolean` becomes `Mongoid::Boolean` to avoid polluting the global
241
+ namespace with a commonly used class by other libraries.
242
+
243
+ * \#2603 Return values from setters are now always the set value, regardless
244
+ of calling the setter or using send.
245
+
246
+ * \#2597 `Mongoid::Observer` was removed in line with Rails 4.
247
+
248
+ * \#2563 The `allow_dynamic_fields` configuration option has been removed as
249
+ dynamic fields are now allowed on a per-model level. In order to allow a
250
+ model to use dynamic fields, simply include the module in each.
251
+ (Josh Martin)
252
+
253
+ class Band
254
+ include Mongoid::Document
255
+ include Mongoid::Attributes::Dynamic
256
+ end
257
+
258
+ * \#2497 Calling `to_json` no longer tampers with the return value from the
259
+ driver, and proper returns `{ "$oid" : object_id.to_s }` instead of just
260
+ the string representation previously.
261
+
262
+ * \#2433 `Mongoid::Paranoia` has been removed.
263
+
264
+ * \#2432 `Mongoid::Versioning` has been removed.
265
+
266
+ * \#2218 Creating or instantiating documents that have default scopes will now
267
+ apply the default scope to the document, if the scope is not complex.
268
+
269
+ * \#2200 Mass assignment security now mirrors Rails 4's behavior.
270
+ `without_protection` option was also removed.
271
+ `attr_accessible` class method was removed.
272
+ Mongoid and Strong parameters should work fine for mass assignment protection.
273
+
274
+ * `delete_all` and `destroy_all` no longer take a `:conditions` hash but
275
+ just the raw attributes.
276
+
277
+ * \#1908 Documents now loaded from criteria using `#only` or `#without` will now
278
+ raise an error when attempting to save, update, or delete these records.
279
+ Additionally fields excluded from the fields retrieved from the database will
280
+ also raise an exception when trying to access them.
281
+
282
+ * \#1344 Atomic updates can now be executed in an `atomically` block, which will
283
+ delay any atomic updates on the document the block was called on until the
284
+ block is complete.
285
+
286
+ Update calls can be executed as normal in the block:
287
+
288
+ document.atomically do
289
+ document.inc(likes: 10)
290
+ document.bit(members: { and: 10 })
291
+ document.set(name: "Photek")
292
+ end
293
+
294
+ The document is also yielded to the block:
295
+
296
+ document.atomically do |doc|
297
+ doc.inc(likes: 10)
298
+ doc.bit(members: { and: 10 })
299
+ doc.set(name: "Photek")
300
+ end
301
+
302
+ The atomic commands are have a fluid interface:
303
+
304
+ document.atomically do |doc|
305
+ doc.inc(likes: 10).bit(members: { and: 10 }).set(name: "Photek")
306
+ end
307
+
308
+ If the fluid interface is leveraged without the `atomically` block, the
309
+ operations will persist in individual calls. For example, the following
310
+ would hit the database 3 times without the block provided:
311
+
312
+ doc.inc(likes: 10).bit(members: { and: 10 }).set(name: "Photek")
313
+
314
+ The block is only good for 1 document at a time, so embedded and root
315
+ document updates cannot be mixed at this time.
316
+
317
+ ### New Features
318
+
319
+ * Mongoid now uses ActiveSupport::LogSubscriber to subscribe logs, and
320
+ ActiveSupport::Notifications to send operation logs. (Arthur Neves)
321
+ Example of log subscription:
322
+
323
+ ActiveSupport::Notifications.subscribe('query.moped') do |event|
324
+ ..
325
+ end
326
+
327
+ * Field types can now use symbols as well as class names. See:
328
+ https://github.com/mongoid/mongoid/blob/master/lib/mongoid/fields.rb#L16
329
+ for the available mappings.
330
+
331
+ * \#3580 Fields can now be reset to their default values, with the methods:
332
+
333
+ document.reset_name_to_default!
334
+
335
+ * \#3513 Documents now have a `#destroy!` method that will raise a
336
+ `Mongoid::Errors::DocumentNotDestroyed` error if a destroy callback returns
337
+ a false value.
338
+
339
+ * \#3496 Added class level and criteria level `find_or_create_by!`.
340
+
341
+ * \#3479 Map/reduce now respects criteria no timeout options if output is not
342
+ inline.
343
+
344
+ * \#3478 Criteria objects now have a #none method that will cause the criteria to
345
+ never hit the database and always have zero documents.
346
+
347
+ Band.none
348
+ Band.none.where(name: "Tool") # Always has zero documents.
349
+
350
+ * \#3410 Mongoid now has a query cache that can be used as a middleware in
351
+ Rack applications. (Arthur Neves)
352
+
353
+ For Rails:
354
+
355
+ config.middleware.use(Mongoid::QueryCache::Middleware)
356
+
357
+ * \#3319 Counters can now be reset from a document instance:
358
+
359
+ document.reset_counters(:relation)
360
+
361
+ * \#3310 embedded_in relations now accept a `touch` option to update parents.
362
+
363
+ * \#3302 Aliasing using `alias_attribute` now properly handles aliases in criteria.
364
+
365
+ * \#3155 Range field will persist the exclude_end when provided.
366
+ (Daniel Libanori)
367
+
368
+ * \#3146 Adding :overwrite field option, when it`s true, it wont check duplicates.
369
+ (Daniel Libanori)
370
+
371
+ * \#3002 Reloading the Rails console will also now clear Mongoid's identity map.
372
+
373
+ * \#2938 A configuration option `duplicate_fields_exception` has been added that
374
+ when set to `true` will raise an exception when defining a field that will
375
+ override an existing method. (Arthur Neves)
376
+
377
+ * \#2924 MongoDB 2.4 beta text search now has a DSL provided by Mongoid. Like
378
+ other queries, text searches are lazy evaluated, and available off the class
379
+ or criteria level.
380
+
381
+ Note that any 3rd party gem that provides a `text_search` method will now no
382
+ longer work with Mongoid, and will need to change its syntax. Examples:
383
+
384
+ Band.text_search("mode").project(name: 1).each do |doc|
385
+ # ...
386
+ end
387
+
388
+ Band.limit(10).text_search("phase").language("latin")
389
+ Band.where(:likes.gt => 1000).text_search("lucy")
390
+
391
+ * \#2855 Multiple extensions can now be supplied to relations. (Daniel Libanori)
392
+
393
+ ### Resolved Issues
394
+
395
+ * \#3676 Make pluck work with embedded associations
396
+ (Arthur Neves)
397
+
398
+ * \#2898 Dirty attribute methods now properly handle field aliases.
399
+ (Niels Ganser)
400
+
401
+ * \#3620 Add ActiveModel module instance methods to prohibited_methods list.
402
+ (Arthur Neves)
403
+
404
+ * \#3610 Don't allow atomic operations on read-only attributes
405
+ (Frederico Araujo)
406
+
407
+ * \#3619 Don't validate documents that are flagged for destruction.
408
+ (Christopher J. Bottaro)
409
+
410
+ * \#3617 Don't skip index creation on cyclic documents. (shaiker)
411
+
412
+ * \#3568 Fixed missing attributes error on present localized fields.
413
+
414
+ * \#3514 Fixed query cache to work on first/last calls.
415
+
416
+ * \#3383/\#3495 Fix has_and_belongs_to_many eager load. (Arthur Neves)
417
+
418
+ * \#3492 $rename operations should not mongoize values. (Vladislav Melanitskiy)
419
+
420
+ * \#3490 Allow localized fields to work with boolean `false` values.
421
+
422
+ * \#3487 Map Boolean to Mongoid::Boolean in field definitions. (Arthur Neves)
423
+
424
+ * \#3449 Touch needs to work for create and update. (Greggory Rothmeier)
425
+
426
+ * \#3347 Creating documents off of scopes for embedded relations now properly
427
+ sets the parent document on the created children.
428
+
429
+ * \#3432 Fixed mongoization of DateTime losing precision.
430
+
431
+ * \#3397 Fixed $ne matcher for embedded documents to match server behaviour.
432
+
433
+ * \#3352 Allow named scopes named "open" to work through 1-n relations.
434
+
435
+ * \#3348 Fixing compounded indexes having the same keys with
436
+ different directions. (Arthur Neves)
437
+
438
+ * \#2701 Fixing extra query on belongs_to binding. (Arthur Neves)
439
+
440
+ * \#3089 Allow demongoization of strings to floats (Daniel Libanori)
441
+
442
+ * \#3278 Counter cache should update the document in memory too. (Arthur Neves)
443
+
444
+ * \#3242 Has_many relation must use the inverse foreign_key. (Arthur Neves)
445
+
446
+ * \#3233 Don't double call validation callbacks when cascading children and
447
+ relation validation is turned on.
448
+
449
+ * \#3197 Improvements in the calls to `aggregates` on root and embedded
450
+ collections. (Wojciech Piekutowski)
451
+
452
+ * \#3144/\#3219 Fixing name colission on @_children ivar. (Arthur Neves)
453
+
454
+ * \#3088 Range field can accept a hash, which could be the attribute from the db.
455
+ (Daniel Libanori)
456
+
457
+ * \#3116 Relations instance variables are now all prefixed with `_`.
458
+
459
+ * \#3093 Only flatten 1 level when atomically pushing arrays.
460
+
461
+ * \#3063 `Document#becomes` now properly sets base object on errors.
462
+ (Adam Ross Cohen)
463
+
464
+ * \#3019 Atomic operations will no longer attempt to persist if the document
465
+ is not persisted.
466
+
467
+ * \#2903 Removed unused string `to_a` extension.
468
+
469
+ ## 3.1.7
470
+
471
+ ### Resolved Issues
472
+
473
+ * \#3465 Fixed ambigous relation errors where inverse_of is set to nil.
474
+
475
+ * \#3414 Backkport skip and limit options on aggregation. (Wojciech Piekutowski)
476
+
477
+ * \#3469 Fix RegexpError: failed to allocate memory: /\./ on .hash_dot_syntax? (Dmitry Krasnoukhov)
478
+
6
479
  ## 3.1.6
7
480
 
8
481
  ### Resolved Issues
@@ -91,6 +564,7 @@ For instructions on upgrading to newer versions, visit
91
564
  ### Resolved Issues
92
565
 
93
566
  * Dont duplicate embedded documents when saving after calling becomes method.
567
+ (Arthur Neves)
94
568
 
95
569
  * \#2961 Reloading a mongoid.yml configuration now properly clears previously
96
570
  configured sessions.
@@ -101,11 +575,6 @@ For instructions on upgrading to newer versions, visit
101
575
  * \#2921 Don't use type in identity map selection if inheritance is not
102
576
  in play. (Arthur Neves)
103
577
 
104
- * \#2899 Dirty attribute methods now properly handle field aliases.
105
- (Niels Ganser)
106
-
107
- * \#2895 Allow scopes that return nil to still be chainable. (niedhui)
108
-
109
578
  * \#2893 Removed memoization of collection name and database name so lambdas
110
579
  with `store_in` work properly when changing.
111
580
 
@@ -283,12 +752,14 @@ For instructions on upgrading to newer versions, visit
283
752
  * \#2465 Documents now have an `attribute_before_type_cast` for proper
284
753
  handling of validations. (Gerad Suyderhoud)
285
754
 
286
- * \#2443 `expire_after_seconds` is now a valid index option.
755
+ * \#2443 `expire_after_seconds` is now a valid index option
756
+ (http://docs.mongodb.org/manual/core/indexes/#ttl-indexes,
757
+ http://docs.mongodb.org/manual/tutorial/expire-data/).
287
758
 
288
759
  class Event
289
760
  include Mongoid::Document
290
- field :status, type: Integer
291
- index({ status: 1 }, { expire_after_seconds: 3600 })
761
+ field :created_at, type: DateTime
762
+ index({ created_at: 1 }, { expire_after_seconds: 3600 })
292
763
  end
293
764
 
294
765
  * \#2373 Relations with the `touch: true` option will now be automatically