mongoid 3.1.7 → 4.0.0.alpha1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (521) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +317 -11
  3. data/README.md +4 -5
  4. data/lib/config/locales/en.yml +9 -12
  5. data/lib/mongoid.rb +6 -75
  6. data/lib/mongoid/atomic.rb +0 -11
  7. data/lib/mongoid/atomic/paths/embedded.rb +0 -30
  8. data/lib/mongoid/atomic/paths/root.rb +0 -13
  9. data/lib/mongoid/attributes.rb +30 -108
  10. data/lib/mongoid/attributes/dynamic.rb +154 -0
  11. data/lib/mongoid/attributes/nested.rb +82 -0
  12. data/lib/mongoid/attributes/processing.rb +13 -66
  13. data/lib/mongoid/{dirty.rb → changeable.rb} +5 -2
  14. data/lib/mongoid/composable.rb +104 -0
  15. data/lib/mongoid/config.rb +3 -9
  16. data/lib/mongoid/config/options.rb +1 -1
  17. data/lib/mongoid/contextual/aggregable/mongo.rb +5 -9
  18. data/lib/mongoid/contextual/atomic.rb +53 -53
  19. data/lib/mongoid/contextual/command.rb +26 -0
  20. data/lib/mongoid/contextual/map_reduce.rb +1 -1
  21. data/lib/mongoid/contextual/memory.rb +6 -5
  22. data/lib/mongoid/contextual/mongo.rb +59 -28
  23. data/lib/mongoid/contextual/text_search.rb +180 -0
  24. data/lib/mongoid/copyable.rb +2 -3
  25. data/lib/mongoid/criteria.rb +13 -33
  26. data/lib/mongoid/criteria/{#findable.rb# → findable.rb} +0 -2
  27. data/lib/mongoid/{criterion/inspection.rb → criteria/inspectable.rb} +2 -2
  28. data/lib/mongoid/{criterion → criteria}/marshalable.rb +3 -1
  29. data/lib/mongoid/{criterion → criteria}/modifiable.rb +1 -1
  30. data/lib/mongoid/{criterion/scoping.rb → criteria/scopable.rb} +2 -2
  31. data/lib/mongoid/document.rb +28 -12
  32. data/lib/mongoid/errors.rb +1 -1
  33. data/lib/mongoid/errors/document_not_found.rb +2 -1
  34. data/lib/mongoid/errors/invalid_value.rb +16 -0
  35. data/lib/mongoid/errors/mongoid_error.rb +1 -1
  36. data/lib/mongoid/extensions.rb +2 -7
  37. data/lib/mongoid/extensions/array.rb +2 -2
  38. data/lib/mongoid/extensions/boolean.rb +14 -17
  39. data/lib/mongoid/extensions/float.rb +1 -0
  40. data/lib/mongoid/extensions/hash.rb +1 -1
  41. data/lib/mongoid/extensions/object.rb +4 -4
  42. data/lib/mongoid/extensions/object_id.rb +5 -5
  43. data/lib/mongoid/extensions/range.rb +8 -2
  44. data/lib/mongoid/extensions/string.rb +5 -17
  45. data/lib/mongoid/extensions/time.rb +2 -2
  46. data/lib/mongoid/factory.rb +3 -3
  47. data/lib/mongoid/fields.rb +9 -8
  48. data/lib/mongoid/fields/foreign_key.rb +3 -3
  49. data/lib/mongoid/fields/standard.rb +4 -16
  50. data/lib/mongoid/fields/validators/macro.rb +11 -3
  51. data/lib/mongoid/{finders.rb → findable.rb} +6 -2
  52. data/lib/mongoid/{indexes.rb → indexable.rb} +50 -55
  53. data/lib/mongoid/indexable/specification.rb +104 -0
  54. data/lib/mongoid/{indexes → indexable}/validators/options.rb +2 -1
  55. data/lib/mongoid/{inspection.rb → inspectable.rb} +15 -11
  56. data/lib/mongoid/{callbacks.rb → interceptable.rb} +3 -52
  57. data/lib/mongoid/log_subscriber.rb +22 -0
  58. data/lib/mongoid/matchable.rb +152 -0
  59. data/lib/mongoid/{matchers → matchable}/all.rb +1 -1
  60. data/lib/mongoid/{matchers → matchable}/and.rb +2 -2
  61. data/lib/mongoid/{matchers → matchable}/default.rb +1 -1
  62. data/lib/mongoid/{matchers → matchable}/exists.rb +1 -1
  63. data/lib/mongoid/{matchers → matchable}/gt.rb +1 -1
  64. data/lib/mongoid/{matchers → matchable}/gte.rb +1 -1
  65. data/lib/mongoid/{matchers → matchable}/in.rb +2 -2
  66. data/lib/mongoid/{matchers → matchable}/lt.rb +1 -1
  67. data/lib/mongoid/{matchers → matchable}/lte.rb +1 -1
  68. data/lib/mongoid/{matchers → matchable}/ne.rb +1 -1
  69. data/lib/mongoid/{matchers → matchable}/nin.rb +3 -2
  70. data/lib/mongoid/{matchers → matchable}/or.rb +2 -2
  71. data/lib/mongoid/{matchers → matchable}/size.rb +1 -1
  72. data/lib/mongoid/persistable.rb +212 -0
  73. data/lib/mongoid/persistable/creatable.rb +188 -0
  74. data/lib/mongoid/persistable/deletable.rb +148 -0
  75. data/lib/mongoid/persistable/destroyable.rb +55 -0
  76. data/lib/mongoid/persistable/incrementable.rb +36 -0
  77. data/lib/mongoid/persistable/logical.rb +38 -0
  78. data/lib/mongoid/persistable/poppable.rb +39 -0
  79. data/lib/mongoid/persistable/pullable.rb +55 -0
  80. data/lib/mongoid/persistable/pushable.rb +62 -0
  81. data/lib/mongoid/persistable/renamable.rb +35 -0
  82. data/lib/mongoid/persistable/savable.rb +52 -0
  83. data/lib/mongoid/persistable/settable.rb +33 -0
  84. data/lib/mongoid/persistable/unsettable.rb +36 -0
  85. data/lib/mongoid/persistable/updatable.rb +151 -0
  86. data/lib/mongoid/persistable/upsertable.rb +55 -0
  87. data/lib/mongoid/positional.rb +71 -0
  88. data/lib/mongoid/railtie.rb +32 -45
  89. data/lib/mongoid/railties/database.rake +12 -6
  90. data/lib/mongoid/relations.rb +3 -3
  91. data/lib/mongoid/relations/accessors.rb +13 -46
  92. data/lib/mongoid/relations/auto_save.rb +15 -36
  93. data/lib/mongoid/relations/binding.rb +0 -23
  94. data/lib/mongoid/relations/bindings/embedded/many.rb +1 -3
  95. data/lib/mongoid/relations/bindings/referenced/in.rb +3 -8
  96. data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +3 -1
  97. data/lib/mongoid/relations/builder.rb +1 -1
  98. data/lib/mongoid/relations/builders.rb +2 -2
  99. data/lib/mongoid/relations/builders/nested_attributes/many.rb +10 -13
  100. data/lib/mongoid/relations/builders/nested_attributes/one.rb +4 -5
  101. data/lib/mongoid/relations/builders/referenced/in.rb +1 -1
  102. data/lib/mongoid/relations/builders/referenced/many.rb +1 -2
  103. data/lib/mongoid/relations/builders/referenced/many_to_many.rb +1 -2
  104. data/lib/mongoid/relations/builders/referenced/one.rb +1 -1
  105. data/lib/mongoid/relations/cascading.rb +3 -5
  106. data/lib/mongoid/relations/constraint.rb +1 -1
  107. data/lib/mongoid/relations/conversions.rb +1 -1
  108. data/lib/mongoid/relations/counter_cache.rb +39 -15
  109. data/lib/mongoid/relations/eager.rb +47 -0
  110. data/lib/mongoid/relations/eager/base.rb +57 -0
  111. data/lib/mongoid/relations/eager/belongs_to.rb +30 -0
  112. data/lib/mongoid/relations/eager/has_and_belongs_to_many.rb +40 -0
  113. data/lib/mongoid/relations/eager/has_many.rb +37 -0
  114. data/lib/mongoid/relations/eager/has_one.rb +29 -0
  115. data/lib/mongoid/relations/embedded/batchable.rb +3 -4
  116. data/lib/mongoid/relations/embedded/many.rb +7 -27
  117. data/lib/mongoid/relations/macros.rb +2 -4
  118. data/lib/mongoid/relations/many.rb +30 -31
  119. data/lib/mongoid/relations/metadata.rb +6 -75
  120. data/lib/mongoid/relations/nested_builder.rb +2 -2
  121. data/lib/mongoid/relations/options.rb +1 -0
  122. data/lib/mongoid/relations/polymorphic.rb +0 -1
  123. data/lib/mongoid/relations/proxy.rb +10 -32
  124. data/lib/mongoid/relations/referenced/in.rb +2 -18
  125. data/lib/mongoid/relations/referenced/many.rb +9 -22
  126. data/lib/mongoid/relations/referenced/many_to_many.rb +10 -33
  127. data/lib/mongoid/relations/referenced/one.rb +2 -21
  128. data/lib/mongoid/relations/synchronization.rb +3 -3
  129. data/lib/mongoid/relations/touchable.rb +33 -0
  130. data/lib/mongoid/{reloading.rb → reloadable.rb} +6 -4
  131. data/lib/mongoid/{scoping.rb → scopable.rb} +26 -3
  132. data/lib/mongoid/selectable.rb +59 -0
  133. data/lib/mongoid/{serialization.rb → serializable.rb} +10 -1
  134. data/lib/mongoid/sessions.rb +37 -345
  135. data/lib/mongoid/sessions/factory.rb +2 -0
  136. data/lib/mongoid/sessions/options.rb +176 -0
  137. data/lib/mongoid/sessions/storage_options.rb +140 -0
  138. data/lib/mongoid/sessions/thread_options.rb +19 -0
  139. data/lib/mongoid/sessions/validators/storage.rb +15 -1
  140. data/lib/mongoid/{sharding.rb → shardable.rb} +5 -1
  141. data/lib/mongoid/support/query_counter.rb +23 -0
  142. data/lib/mongoid/threaded.rb +0 -110
  143. data/lib/mongoid/threaded/lifecycle.rb +0 -28
  144. data/lib/mongoid/timestamps/updated/short.rb +2 -2
  145. data/lib/mongoid/{hierarchy.rb → traversable.rb} +9 -5
  146. data/lib/mongoid/{validations.rb → validatable.rb} +23 -9
  147. data/lib/mongoid/{validations → validatable}/associated.rb +3 -1
  148. data/lib/mongoid/{validations → validatable}/format.rb +1 -1
  149. data/lib/mongoid/{validations → validatable}/length.rb +1 -1
  150. data/lib/mongoid/{validations → validatable}/localizable.rb +1 -1
  151. data/lib/mongoid/{validations → validatable}/macros.rb +4 -3
  152. data/lib/mongoid/{validations → validatable}/presence.rb +1 -1
  153. data/lib/mongoid/{validations → validatable}/queryable.rb +1 -2
  154. data/lib/mongoid/{validations → validatable}/uniqueness.rb +3 -3
  155. data/lib/mongoid/version.rb +1 -1
  156. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +9 -13
  157. data/lib/rails/generators/mongoid/model/model_generator.rb +0 -1
  158. data/lib/rails/generators/mongoid/model/templates/model.rb.tt +0 -3
  159. data/lib/rails/generators/mongoid_generator.rb +3 -40
  160. data/lib/rails/mongoid.rb +59 -57
  161. data/lib/support/ruby_version.rb +1 -1
  162. data/spec/app/models/account.rb +2 -6
  163. data/spec/app/models/acolyte.rb +1 -0
  164. data/spec/app/models/actor.rb +0 -1
  165. data/spec/app/models/address.rb +6 -1
  166. data/spec/app/models/animal.rb +1 -1
  167. data/spec/app/models/appointment.rb +2 -2
  168. data/spec/app/models/article.rb +1 -4
  169. data/spec/app/models/audio.rb +5 -0
  170. data/spec/app/models/author.rb +0 -2
  171. data/spec/app/models/band.rb +3 -2
  172. data/spec/app/models/bar.rb +1 -0
  173. data/spec/app/models/book.rb +1 -0
  174. data/spec/app/models/building.rb +0 -2
  175. data/spec/app/models/building_address.rb +0 -2
  176. data/spec/app/models/bus.rb +1 -1
  177. data/spec/app/models/canvas.rb +1 -1
  178. data/spec/app/models/contractor.rb +0 -2
  179. data/spec/app/models/country_code.rb +1 -1
  180. data/spec/app/models/definition.rb +2 -2
  181. data/spec/app/models/dragon.rb +4 -0
  182. data/spec/app/models/drug.rb +1 -3
  183. data/spec/app/models/dungeon.rb +4 -0
  184. data/spec/app/models/filesystem.rb +1 -0
  185. data/spec/app/models/fish.rb +0 -1
  186. data/spec/app/models/fruits.rb +6 -0
  187. data/spec/app/models/game.rb +0 -2
  188. data/spec/app/models/house.rb +0 -2
  189. data/spec/app/models/item.rb +1 -5
  190. data/spec/app/models/jar.rb +1 -1
  191. data/spec/app/models/label.rb +4 -4
  192. data/spec/app/models/login.rb +1 -1
  193. data/spec/app/models/movie.rb +1 -0
  194. data/spec/app/models/name.rb +3 -3
  195. data/spec/app/models/note.rb +1 -1
  196. data/spec/app/models/oscar.rb +1 -1
  197. data/spec/app/models/parent_doc.rb +1 -1
  198. data/spec/app/models/person.rb +13 -8
  199. data/spec/app/models/phone.rb +1 -3
  200. data/spec/app/models/player.rb +1 -1
  201. data/spec/app/models/post.rb +2 -1
  202. data/spec/app/models/quiz.rb +0 -3
  203. data/spec/app/models/record.rb +5 -5
  204. data/spec/app/models/registry.rb +1 -1
  205. data/spec/app/models/server.rb +1 -1
  206. data/spec/app/models/service.rb +3 -3
  207. data/spec/app/models/sound.rb +5 -0
  208. data/spec/app/models/template.rb +1 -1
  209. data/spec/app/models/title.rb +0 -1
  210. data/spec/app/models/track.rb +5 -5
  211. data/spec/app/models/tree.rb +1 -1
  212. data/spec/app/models/video.rb +0 -4
  213. data/spec/app/models/wiki_page.rb +1 -4
  214. data/spec/app/models/word.rb +3 -0
  215. data/spec/app/models/word_origin.rb +1 -1
  216. data/spec/config/mongoid.yml +7 -8
  217. data/spec/helpers.rb +18 -0
  218. data/spec/mongoid/atomic/modifiers_spec.rb +22 -22
  219. data/spec/mongoid/atomic/paths/embedded/many_spec.rb +8 -49
  220. data/spec/mongoid/atomic/paths/embedded/one_spec.rb +7 -49
  221. data/spec/mongoid/atomic/paths/root_spec.rb +3 -61
  222. data/spec/mongoid/atomic/paths_spec.rb +19 -19
  223. data/spec/mongoid/atomic_spec.rb +19 -19
  224. data/spec/mongoid/{nested_attributes_spec.rb → attributes/nested_spec.rb} +335 -448
  225. data/spec/mongoid/attributes/readonly_spec.rb +16 -16
  226. data/spec/mongoid/attributes_spec.rb +188 -434
  227. data/spec/mongoid/{dirty_spec.rb → changeable_spec.rb} +117 -148
  228. data/spec/mongoid/{components_spec.rb → composable_spec.rb} +3 -3
  229. data/spec/mongoid/config/environment_spec.rb +3 -3
  230. data/spec/mongoid/config/options_spec.rb +6 -6
  231. data/spec/mongoid/config_spec.rb +24 -48
  232. data/spec/mongoid/contextual/aggregable/memory_spec.rb +12 -12
  233. data/spec/mongoid/contextual/aggregable/mongo_spec.rb +46 -38
  234. data/spec/mongoid/contextual/atomic_spec.rb +60 -56
  235. data/spec/mongoid/contextual/find_and_modify_spec.rb +14 -14
  236. data/spec/mongoid/contextual/geo_near_spec.rb +22 -22
  237. data/spec/mongoid/contextual/map_reduce_spec.rb +27 -27
  238. data/spec/mongoid/contextual/memory_spec.rb +94 -94
  239. data/spec/mongoid/contextual/mongo_spec.rb +225 -139
  240. data/spec/mongoid/contextual/text_search_spec.rb +207 -0
  241. data/spec/mongoid/copyable_spec.rb +56 -68
  242. data/spec/mongoid/criteria/findable_spec.rb +991 -0
  243. data/spec/mongoid/{criterion/inspection_spec.rb → criteria/inspectable_spec.rb} +5 -5
  244. data/spec/mongoid/{criterion → criteria}/marshalable_spec.rb +2 -2
  245. data/spec/mongoid/criteria/modifiable_spec.rb +1063 -0
  246. data/spec/mongoid/{criterion/scoping_spec.rb → criteria/scopable_spec.rb} +31 -31
  247. data/spec/mongoid/criteria_spec.rb +530 -2207
  248. data/spec/mongoid/document_spec.rb +166 -120
  249. data/spec/mongoid/equality_spec.rb +22 -22
  250. data/spec/mongoid/errors/ambiguous_relationship_spec.rb +3 -3
  251. data/spec/mongoid/errors/callback_spec.rb +3 -3
  252. data/spec/mongoid/errors/delete_restriction_spec.rb +3 -3
  253. data/spec/mongoid/errors/document_not_found_spec.rb +11 -11
  254. data/spec/mongoid/errors/eager_load_spec.rb +3 -3
  255. data/spec/mongoid/errors/invalid_collection_spec.rb +3 -3
  256. data/spec/mongoid/errors/invalid_config_option_spec.rb +3 -3
  257. data/spec/mongoid/errors/invalid_field_option_spec.rb +3 -3
  258. data/spec/mongoid/errors/invalid_field_spec.rb +3 -3
  259. data/spec/mongoid/errors/invalid_find_spec.rb +3 -3
  260. data/spec/mongoid/errors/invalid_includes_spec.rb +3 -3
  261. data/spec/mongoid/errors/invalid_index_spec.rb +3 -3
  262. data/spec/mongoid/errors/invalid_options_spec.rb +3 -3
  263. data/spec/mongoid/errors/invalid_path_spec.rb +3 -3
  264. data/spec/mongoid/errors/invalid_scope_spec.rb +3 -3
  265. data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +3 -3
  266. data/spec/mongoid/errors/invalid_storage_options_spec.rb +3 -3
  267. data/spec/mongoid/errors/invalid_time_spec.rb +3 -3
  268. data/spec/mongoid/errors/inverse_not_found_spec.rb +3 -3
  269. data/spec/mongoid/errors/mixed_relations_spec.rb +3 -3
  270. data/spec/mongoid/errors/mixed_session_configuration_spec.rb +3 -3
  271. data/spec/mongoid/errors/mongoid_error_spec.rb +7 -7
  272. data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +3 -3
  273. data/spec/mongoid/errors/no_environment_spec.rb +3 -3
  274. data/spec/mongoid/errors/no_map_reduce_output_spec.rb +3 -3
  275. data/spec/mongoid/errors/no_metadata_spec.rb +3 -3
  276. data/spec/mongoid/errors/no_parent_spec.rb +3 -3
  277. data/spec/mongoid/errors/no_session_config_spec.rb +3 -3
  278. data/spec/mongoid/errors/no_session_database_spec.rb +3 -3
  279. data/spec/mongoid/errors/no_session_hosts_spec.rb +3 -3
  280. data/spec/mongoid/errors/no_sessions_config_spec.rb +3 -3
  281. data/spec/mongoid/errors/readonly_attribute_spec.rb +3 -3
  282. data/spec/mongoid/errors/scope_overwrite_spec.rb +3 -3
  283. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +3 -3
  284. data/spec/mongoid/errors/unknown_attribute_spec.rb +5 -5
  285. data/spec/mongoid/errors/unsaved_document_spec.rb +3 -3
  286. data/spec/mongoid/errors/unsupported_javascript_spec.rb +3 -3
  287. data/spec/mongoid/errors/validations_spec.rb +7 -7
  288. data/spec/mongoid/extensions/array_spec.rb +61 -61
  289. data/spec/mongoid/extensions/big_decimal_spec.rb +11 -11
  290. data/spec/mongoid/extensions/binary_spec.rb +12 -12
  291. data/spec/mongoid/extensions/boolean_spec.rb +18 -18
  292. data/spec/mongoid/extensions/date_spec.rb +13 -13
  293. data/spec/mongoid/extensions/date_time_spec.rb +9 -9
  294. data/spec/mongoid/extensions/false_class_spec.rb +5 -5
  295. data/spec/mongoid/extensions/float_spec.rb +29 -15
  296. data/spec/mongoid/extensions/hash_spec.rb +29 -29
  297. data/spec/mongoid/extensions/integer_spec.rb +15 -15
  298. data/spec/mongoid/extensions/module_spec.rb +2 -2
  299. data/spec/mongoid/extensions/nil_class_spec.rb +1 -1
  300. data/spec/mongoid/extensions/object_id_spec.rb +134 -134
  301. data/spec/mongoid/extensions/object_spec.rb +26 -26
  302. data/spec/mongoid/extensions/range_spec.rb +61 -12
  303. data/spec/mongoid/extensions/regexp_spec.rb +4 -4
  304. data/spec/mongoid/extensions/set_spec.rb +4 -4
  305. data/spec/mongoid/extensions/string_spec.rb +35 -46
  306. data/spec/mongoid/extensions/symbol_spec.rb +9 -9
  307. data/spec/mongoid/extensions/time_spec.rb +49 -49
  308. data/spec/mongoid/extensions/time_with_zone_spec.rb +34 -34
  309. data/spec/mongoid/extensions/true_class_spec.rb +5 -5
  310. data/spec/mongoid/extensions_spec.rb +15 -0
  311. data/spec/mongoid/factory_spec.rb +15 -15
  312. data/spec/mongoid/fields/foreign_key_spec.rb +73 -66
  313. data/spec/mongoid/fields/internal/foreign_keys/array_spec.rb +15 -15
  314. data/spec/mongoid/fields/internal/foreign_keys/object_spec.rb +22 -22
  315. data/spec/mongoid/fields/localized_spec.rb +23 -23
  316. data/spec/mongoid/fields/standard_spec.rb +12 -12
  317. data/spec/mongoid/fields_spec.rb +168 -209
  318. data/spec/mongoid/{finders_spec.rb → findable_spec.rb} +62 -27
  319. data/spec/mongoid/indexable/specification_spec.rb +102 -0
  320. data/spec/mongoid/{indexes_spec.rb → indexable_spec.rb} +171 -51
  321. data/spec/mongoid/{inspection_spec.rb → inspectable_spec.rb} +6 -14
  322. data/spec/mongoid/{callbacks_spec.rb → interceptable_spec.rb} +105 -105
  323. data/spec/mongoid/log_subscriber_spec.rb +74 -0
  324. data/spec/mongoid/loggable_spec.rb +1 -1
  325. data/spec/mongoid/{matchers → matchable}/all_spec.rb +4 -4
  326. data/spec/mongoid/{matchers → matchable}/and_spec.rb +11 -11
  327. data/spec/mongoid/{matchers → matchable}/default_spec.rb +15 -15
  328. data/spec/mongoid/{matchers → matchable}/exists_spec.rb +5 -5
  329. data/spec/mongoid/{matchers → matchable}/gt_spec.rb +9 -8
  330. data/spec/mongoid/{matchers → matchable}/gte_spec.rb +7 -7
  331. data/spec/mongoid/matchable/in_spec.rb +49 -0
  332. data/spec/mongoid/{matchers → matchable}/lt_spec.rb +7 -7
  333. data/spec/mongoid/{matchers → matchable}/lte_spec.rb +7 -7
  334. data/spec/mongoid/{matchers → matchable}/ne_spec.rb +3 -3
  335. data/spec/mongoid/matchable/nin_spec.rb +48 -0
  336. data/spec/mongoid/{matchers → matchable}/or_spec.rb +6 -6
  337. data/spec/mongoid/{matchers → matchable}/size_spec.rb +3 -3
  338. data/spec/mongoid/{matchers_spec.rb → matchable_spec.rb} +41 -41
  339. data/spec/mongoid/persistable/creatable_spec.rb +512 -0
  340. data/spec/mongoid/persistable/deletable_spec.rb +205 -0
  341. data/spec/mongoid/persistable/destroyable_spec.rb +148 -0
  342. data/spec/mongoid/persistable/incrementable_spec.rb +173 -0
  343. data/spec/mongoid/persistable/logical_spec.rb +143 -0
  344. data/spec/mongoid/persistable/poppable_spec.rb +115 -0
  345. data/spec/mongoid/persistable/pullable_spec.rb +228 -0
  346. data/spec/mongoid/persistable/pushable_spec.rb +258 -0
  347. data/spec/mongoid/persistable/renamable_spec.rb +135 -0
  348. data/spec/mongoid/persistable/savable_spec.rb +432 -0
  349. data/spec/mongoid/persistable/settable_spec.rb +139 -0
  350. data/spec/mongoid/persistable/unsettable_spec.rb +155 -0
  351. data/spec/mongoid/persistable/updatable_spec.rb +558 -0
  352. data/spec/mongoid/persistable/upsertable_spec.rb +106 -0
  353. data/spec/mongoid/persistable_spec.rb +206 -0
  354. data/spec/mongoid/{atomic/positionable_spec.rb → positional_spec.rb} +19 -14
  355. data/spec/mongoid/railties/document_spec.rb +2 -2
  356. data/spec/mongoid/relations/accessors_spec.rb +53 -145
  357. data/spec/mongoid/relations/auto_save_spec.rb +36 -16
  358. data/spec/mongoid/relations/bindings/embedded/in_spec.rb +6 -6
  359. data/spec/mongoid/relations/bindings/embedded/many_spec.rb +2 -2
  360. data/spec/mongoid/relations/bindings/embedded/one_spec.rb +3 -3
  361. data/spec/mongoid/relations/bindings/referenced/in_spec.rb +12 -12
  362. data/spec/mongoid/relations/bindings/referenced/many_spec.rb +6 -6
  363. data/spec/mongoid/relations/bindings/referenced/many_to_many_spec.rb +9 -9
  364. data/spec/mongoid/relations/bindings/referenced/one_spec.rb +6 -6
  365. data/spec/mongoid/relations/builders/embedded/in_spec.rb +4 -4
  366. data/spec/mongoid/relations/builders/embedded/many_spec.rb +18 -18
  367. data/spec/mongoid/relations/builders/embedded/one_spec.rb +11 -11
  368. data/spec/mongoid/relations/builders/nested_attributes/many_spec.rb +12 -13
  369. data/spec/mongoid/relations/builders/nested_attributes/one_spec.rb +14 -14
  370. data/spec/mongoid/relations/builders/referenced/in_spec.rb +22 -33
  371. data/spec/mongoid/relations/builders/referenced/many_spec.rb +15 -15
  372. data/spec/mongoid/relations/builders/referenced/many_to_many_spec.rb +18 -18
  373. data/spec/mongoid/relations/builders/referenced/one_spec.rb +11 -24
  374. data/spec/mongoid/relations/builders_spec.rb +21 -21
  375. data/spec/mongoid/relations/cascading/delete_spec.rb +7 -7
  376. data/spec/mongoid/relations/cascading/destroy_spec.rb +2 -2
  377. data/spec/mongoid/relations/cascading/nullify_spec.rb +2 -2
  378. data/spec/mongoid/relations/cascading/restrict_spec.rb +3 -3
  379. data/spec/mongoid/relations/cascading_spec.rb +16 -16
  380. data/spec/mongoid/relations/constraint_spec.rb +8 -7
  381. data/spec/mongoid/relations/conversions_spec.rb +16 -14
  382. data/spec/mongoid/relations/counter_cache_spec.rb +85 -0
  383. data/spec/mongoid/relations/cyclic_spec.rb +18 -18
  384. data/spec/mongoid/relations/eager/belongs_to_spec.rb +154 -0
  385. data/spec/mongoid/relations/eager/has_and_belongs_to_many_spec.rb +143 -0
  386. data/spec/mongoid/relations/eager/has_many_spec.rb +207 -0
  387. data/spec/mongoid/relations/eager/has_one_spec.rb +163 -0
  388. data/spec/mongoid/relations/eager_spec.rb +228 -0
  389. data/spec/mongoid/relations/embedded/dirty_spec.rb +8 -8
  390. data/spec/mongoid/relations/embedded/in_spec.rb +55 -56
  391. data/spec/mongoid/relations/embedded/many_spec.rb +357 -367
  392. data/spec/mongoid/relations/embedded/one_spec.rb +98 -139
  393. data/spec/mongoid/relations/macros_spec.rb +108 -102
  394. data/spec/mongoid/relations/metadata_spec.rb +147 -241
  395. data/spec/mongoid/relations/options_spec.rb +1 -1
  396. data/spec/mongoid/relations/polymorphic_spec.rb +13 -17
  397. data/spec/mongoid/relations/proxy_spec.rb +2 -2
  398. data/spec/mongoid/relations/referenced/in_spec.rb +128 -303
  399. data/spec/mongoid/relations/referenced/many_spec.rb +379 -522
  400. data/spec/mongoid/relations/referenced/many_to_many_spec.rb +345 -417
  401. data/spec/mongoid/relations/referenced/one_spec.rb +148 -263
  402. data/spec/mongoid/relations/reflections_spec.rb +6 -6
  403. data/spec/mongoid/relations/synchronization_spec.rb +46 -50
  404. data/spec/mongoid/relations/targets/enumerable_spec.rb +116 -116
  405. data/spec/mongoid/relations/touchable_spec.rb +296 -0
  406. data/spec/mongoid/relations_spec.rb +16 -15
  407. data/spec/mongoid/{reloading_spec.rb → reloadable_spec.rb} +20 -60
  408. data/spec/mongoid/{scoping_spec.rb → scopable_spec.rb} +74 -126
  409. data/spec/mongoid/selectable_spec.rb +134 -0
  410. data/spec/mongoid/{serialization_spec.rb → serializable_spec.rb} +111 -82
  411. data/spec/mongoid/sessions/factory_spec.rb +49 -28
  412. data/spec/mongoid/sessions/mongo_uri_spec.rb +7 -7
  413. data/spec/mongoid/sessions/options_spec.rb +92 -0
  414. data/spec/mongoid/sessions_spec.rb +288 -177
  415. data/spec/mongoid/{sharding_spec.rb → shardable_spec.rb} +8 -8
  416. data/spec/mongoid/state_spec.rb +10 -10
  417. data/spec/mongoid/threaded_spec.rb +17 -70
  418. data/spec/mongoid/timestamps/created/short_spec.rb +6 -6
  419. data/spec/mongoid/timestamps/created_spec.rb +5 -5
  420. data/spec/mongoid/timestamps/updated/short_spec.rb +10 -10
  421. data/spec/mongoid/timestamps/updated_spec.rb +8 -12
  422. data/spec/mongoid/timestamps_spec.rb +7 -11
  423. data/spec/mongoid/{hierarchy_spec.rb → traversable_spec.rb} +19 -19
  424. data/spec/mongoid/{validations → validatable}/associated_spec.rb +18 -18
  425. data/spec/mongoid/{validations → validatable}/format_spec.rb +6 -6
  426. data/spec/mongoid/{validations → validatable}/length_spec.rb +7 -7
  427. data/spec/mongoid/{validations → validatable}/numericality_spec.rb +1 -1
  428. data/spec/mongoid/{validations → validatable}/presence_spec.rb +31 -38
  429. data/spec/mongoid/{validations → validatable}/uniqueness_spec.rb +126 -183
  430. data/spec/mongoid/{validations_spec.rb → validatable_spec.rb} +28 -28
  431. data/spec/mongoid_spec.rb +8 -8
  432. data/spec/rails/mongoid_spec.rb +72 -87
  433. data/spec/spec_helper.rb +19 -17
  434. metadata +261 -283
  435. data/lib/mongoid/atomic/positionable.rb +0 -73
  436. data/lib/mongoid/components.rb +0 -92
  437. data/lib/mongoid/config/inflections.rb +0 -6
  438. data/lib/mongoid/contextual/eager.rb +0 -158
  439. data/lib/mongoid/criterion/findable.rb +0 -179
  440. data/lib/mongoid/errors/versioning_not_on_root.rb +0 -23
  441. data/lib/mongoid/identity_map.rb +0 -163
  442. data/lib/mongoid/json.rb +0 -16
  443. data/lib/mongoid/matchers.rb +0 -32
  444. data/lib/mongoid/matchers/strategies.rb +0 -97
  445. data/lib/mongoid/multi_parameter_attributes.rb +0 -105
  446. data/lib/mongoid/nested_attributes.rb +0 -78
  447. data/lib/mongoid/observer.rb +0 -192
  448. data/lib/mongoid/paranoia.rb +0 -136
  449. data/lib/mongoid/persistence.rb +0 -357
  450. data/lib/mongoid/persistence/atomic.rb +0 -231
  451. data/lib/mongoid/persistence/atomic/add_to_set.rb +0 -47
  452. data/lib/mongoid/persistence/atomic/bit.rb +0 -35
  453. data/lib/mongoid/persistence/atomic/inc.rb +0 -45
  454. data/lib/mongoid/persistence/atomic/operation.rb +0 -154
  455. data/lib/mongoid/persistence/atomic/pop.rb +0 -32
  456. data/lib/mongoid/persistence/atomic/pull.rb +0 -32
  457. data/lib/mongoid/persistence/atomic/pull_all.rb +0 -32
  458. data/lib/mongoid/persistence/atomic/push.rb +0 -25
  459. data/lib/mongoid/persistence/atomic/push_all.rb +0 -25
  460. data/lib/mongoid/persistence/atomic/rename.rb +0 -30
  461. data/lib/mongoid/persistence/atomic/sets.rb +0 -28
  462. data/lib/mongoid/persistence/atomic/unset.rb +0 -27
  463. data/lib/mongoid/persistence/deletion.rb +0 -31
  464. data/lib/mongoid/persistence/insertion.rb +0 -38
  465. data/lib/mongoid/persistence/modification.rb +0 -35
  466. data/lib/mongoid/persistence/operations.rb +0 -214
  467. data/lib/mongoid/persistence/operations/embedded/insert.rb +0 -46
  468. data/lib/mongoid/persistence/operations/embedded/remove.rb +0 -43
  469. data/lib/mongoid/persistence/operations/insert.rb +0 -34
  470. data/lib/mongoid/persistence/operations/remove.rb +0 -33
  471. data/lib/mongoid/persistence/operations/update.rb +0 -59
  472. data/lib/mongoid/persistence/operations/upsert.rb +0 -28
  473. data/lib/mongoid/persistence/upsertion.rb +0 -31
  474. data/lib/mongoid/unit_of_work.rb +0 -61
  475. data/lib/mongoid/versioning.rb +0 -217
  476. data/lib/rack/mongoid.rb +0 -2
  477. data/lib/rack/mongoid/middleware/identity_map.rb +0 -39
  478. data/lib/rails/generators/mongoid/observer/observer_generator.rb +0 -17
  479. data/lib/rails/generators/mongoid/observer/templates/observer.rb.tt +0 -4
  480. data/spec/app/models/actor_observer.rb +0 -15
  481. data/spec/app/models/callback_recorder.rb +0 -25
  482. data/spec/app/models/draft.rb +0 -9
  483. data/spec/app/models/paranoid_phone.rb +0 -25
  484. data/spec/app/models/paranoid_post.rb +0 -36
  485. data/spec/app/models/phone_observer.rb +0 -6
  486. data/spec/mongoid/#atomic_spec.rb# +0 -365
  487. data/spec/mongoid/attributes/processing_spec.rb +0 -149
  488. data/spec/mongoid/criterion/destructive_spec.rb +0 -101
  489. data/spec/mongoid/criterion/modifiable_spec.rb +0 -409
  490. data/spec/mongoid/criterion/modification_spec.rb +0 -402
  491. data/spec/mongoid/errors/versioning_not_on_root_spec.rb +0 -29
  492. data/spec/mongoid/identity_map_spec.rb +0 -564
  493. data/spec/mongoid/json_spec.rb +0 -33
  494. data/spec/mongoid/matchers/in_spec.rb +0 -25
  495. data/spec/mongoid/matchers/nin_spec.rb +0 -25
  496. data/spec/mongoid/multi_parameter_attributes_spec.rb +0 -128
  497. data/spec/mongoid/observer_spec.rb +0 -290
  498. data/spec/mongoid/paranoia_spec.rb +0 -759
  499. data/spec/mongoid/persistence/atomic/add_to_set_spec.rb +0 -262
  500. data/spec/mongoid/persistence/atomic/bit_spec.rb +0 -88
  501. data/spec/mongoid/persistence/atomic/inc_spec.rb +0 -133
  502. data/spec/mongoid/persistence/atomic/pop_spec.rb +0 -111
  503. data/spec/mongoid/persistence/atomic/pull_all_spec.rb +0 -77
  504. data/spec/mongoid/persistence/atomic/pull_spec.rb +0 -80
  505. data/spec/mongoid/persistence/atomic/push_all_spec.rb +0 -77
  506. data/spec/mongoid/persistence/atomic/push_spec.rb +0 -77
  507. data/spec/mongoid/persistence/atomic/rename_spec.rb +0 -42
  508. data/spec/mongoid/persistence/atomic/sets_spec.rb +0 -154
  509. data/spec/mongoid/persistence/atomic/unset_spec.rb +0 -65
  510. data/spec/mongoid/persistence/atomic_spec.rb +0 -216
  511. data/spec/mongoid/persistence/operations/embedded/insert_spec.rb +0 -191
  512. data/spec/mongoid/persistence/operations/embedded/remove_spec.rb +0 -8
  513. data/spec/mongoid/persistence/operations/insert_spec.rb +0 -149
  514. data/spec/mongoid/persistence/operations/remove_spec.rb +0 -113
  515. data/spec/mongoid/persistence/operations/update_spec.rb +0 -141
  516. data/spec/mongoid/persistence/operations/upsert_spec.rb +0 -59
  517. data/spec/mongoid/persistence/operations_spec.rb +0 -313
  518. data/spec/mongoid/persistence_spec.rb +0 -2279
  519. data/spec/mongoid/unit_of_work_spec.rb +0 -196
  520. data/spec/mongoid/versioning_spec.rb +0 -540
  521. data/spec/rack/mongoid/middleware/identity_map_spec.rb +0 -72
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 49f91c3bfdee011f4254db9a310c1ee705534a6f
4
- data.tar.gz: 17e51120acb04dc04419144c4f8c67731e58198e
3
+ metadata.gz: 0e868be748277deddf1b1ef5bc060551904de8ed
4
+ data.tar.gz: a285380f00b0d3f7dcb9d06f1d669e6b4262a980
5
5
  SHA512:
6
- metadata.gz: fa78c03c62ff52aeeb68a5f5bb1092df93321143a5c4b25e8661d5e5dca0ec46f57820f20b14a104905bb419aa925dba7767eec8bd97c252b5b9d07abea4ce00
7
- data.tar.gz: 098d1c1762169ad463118552c61417156e8fd6a96964dd7d84c08fa31e6479f6ec4cedd9011f24cd20e9debaba84cae8c9abe310723937f28225fd0885f90e16
6
+ metadata.gz: c7f1bc5844c340f5a8335e7c74d80a78082402de62e75d025cf510409f14842a785bb70644655f93ccf38e33e0859dfb1c4237ef961d377a3838586c92c15878
7
+ data.tar.gz: 52d507c0df35681fd4f7afb28f3d23ea5b6ff1c455e96bde67c44ef3ae4039a6c195aa957453ff95d437bb8de67f583d6422cf1fe84648a984e8787e95fcba60
@@ -3,15 +3,323 @@
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
- ## 3.1.7
6
+ ## 4.0.0
7
+
8
+ ### Major Changes (Backwards Incompatible)
9
+
10
+ * IdentityMap removed. (Arthur Neves)
11
+
12
+ * Eager load rework. Eager load now doesnt need the identity map to load
13
+ related documents. A set of preloaders can eager load the associations
14
+ passed to .includes method. (Arthur Neves)
15
+
16
+ * Mongoid now supports the new read preferences that the core drivers
17
+ provide. These include:
18
+
19
+ - `:primary`: Will always read from a primary node. (default)
20
+ - `:primary_preferred`: Attempt a primary first, then secondary if none available.
21
+ - `:secondary`: Will always read from a secondary node.
22
+ - `:secondary_preferred`: Attempt a secondary first, then primary if none available.
23
+ - `:nearest`: Attempt to read from the node with the lowest latency.
24
+
25
+ Sample syntax:
26
+
27
+ Person.with(read: :secondary).first
28
+
29
+ The `:consistency` option is no longer valid, use the `:read` option now.
30
+
31
+ * Mongoid now defaults all writes to propagate (formerly "safe mode") and now
32
+ has different propagate semantics:
33
+
34
+ - `{ w: -1 }`: Don't verify writes and raise no network errors.
35
+ - `{ w: 0 }`: Don't verify writes and raise network errors.
36
+ - `{ w: 1 }`: Verify writes on the primary node. (default)
37
+ - `{ w: n }`: Verify writes on n number of nodes.
38
+ - `{ w: "majority" }`: Verify writes on a majority of nodes.
39
+
40
+ Sample syntax:
41
+
42
+ Person.with(write: {w: :majority}).create!(name: "John")
43
+
44
+ The `:safe` option is no longer valid use the `:write` option now.
45
+
46
+ * \#3230 Array and Hash fields now validate that the correct types are
47
+ getting set, instead of allowing any value. (Rodrigo Saito)
48
+
49
+ * \#3043/\#2949 Rework on the internals of persistence options. (Arthur Neves)
50
+
51
+ * Mongoid now requires Active Model 4 or higher.
52
+
53
+ * `Document#set` now accepts multiple attributes in the form of a hash,
54
+ instead of the previous `(field, value)` args. Field aliases and typecasting
55
+ are also now supported in this operation.
56
+
57
+ document.set(name: "Photek", likes: 10000)
58
+
59
+ * `Document#rename` now accepts multiple attributes in the form of a hash,
60
+ instead of the previous `(field, value)` args. Field aliases are supported.
61
+
62
+ document.rename(first_name: "fn", last_name: "ln")
63
+
64
+ * `Document#inc` now accepts multiple attributes in the form of a hash, instead
65
+ of previously only being able to increment one value at a time. Aliases and
66
+ serialization is supported.
67
+
68
+ document.inc(score: 10, place: -1, lives: -10)
69
+
70
+ * `Document#pop` now accepts multiple attributes in the form of a hash, instead
71
+ of previously only being able to pop one value at a time. Aliases and
72
+ serialization is supported.
73
+
74
+ document.pop(names: 1, aliases: -1)
75
+
76
+ * `Document#bit` now accepts multiple attributes in the form of a hash, instead
77
+ of previously only being able to apply one set of operations at a time.
78
+ Aliases and serialization are supported.
79
+
80
+ document.bit(age: { and: 13 }, score: { or: 13 })
81
+
82
+ * `Document#pull` now accepts multiple attributes in the form of a hash, instead
83
+ of previously only being able to pull one value at a time. Aliases and
84
+ serialization is supported.
85
+
86
+ document.pull(names: "James", aliases: "007")
87
+
88
+ * `Document#pull_all` now accepts multiple attributes in the form of a hash,
89
+ instead of previously only being able to pull one value at a time. Aliases and
90
+ serialization is supported.
91
+
92
+ document.pull_all(names: ["James", "Bond"], aliases: ["007"])
93
+
94
+ * `Document#push_all` has been removed since it was deprecated in MongoDB 2.4.
95
+ Use `Document.push` instead.
96
+
97
+ * `Document#push` now accepts multiple attributes in the form of a hash, and
98
+ can handle the pushing of single values or multiple values to the field via
99
+ $push with $each. Aliases and serialization is supported.
100
+
101
+ document.push(names: "James", aliases: [ "007", "Jim" ])
102
+
103
+ * `Document#add_to_set` now accepts multiple attributes in the form of a hash,
104
+ and now aliases and serialization are supported.
105
+
106
+ document.add_to_set(names: "James", aliases: "007")
107
+
108
+ * Criteria atomic operations API is now changed to match the changes in the
109
+ single document atomic API, for example:
110
+
111
+ Band.where(name: "Depeche Mode").inc(likes: 10, followers: 20)
112
+
113
+ * \#3399 #create and #create! on relations can now take an array of attributes as
114
+ the first parameter to create multiple documents at once.
115
+
116
+ person.addresses.create([{ street: "Bond" }, { street: "Upper" }])
117
+ person.addresses.create!([{ street: "Bond" }, { street: "Upper" }])
118
+
119
+ * \#3141 `rake db:test:prepare` now sets up all defined indexes if Mongoid is the
120
+ only ODM/ORM in the environment.
121
+
122
+ * \#3138 `update_attributes` can now be accessed simply by calling `update`.
123
+
124
+ * \#3083 A new rake task: `rake mongoid:remove_undefined_indexes` has been added to
125
+ remove indexes from the database that are not explicitly defined in the models.
126
+ (Aidan Feldman)
127
+
128
+ * \#3029 The `relation_field` field that is added for a single use case with polymorphic
129
+ relations has been removed. So where the following would work before:
130
+
131
+ class Eye
132
+ include Mongoid::Document
133
+ belongs_to :eyeable, polymorphic: true
134
+ end
135
+
136
+ class Face
137
+ include Mongoid::Document
138
+ has_one :left_eye, class_name: "Eye", as: :eyeable
139
+ has_one :right_eye, class_name: "Eye", as: :eyeable
140
+ end
141
+
142
+ This would now need to be modeled as (with the appropriate migration):
143
+
144
+ class Eye
145
+ include Mongoid::Document
146
+ belongs_to :left_socket, class_name: "Face", inverse_of: :left_eye
147
+ belongs_to :right_socket, class_name: "Face", inverse_of: :right_eye
148
+ end
149
+
150
+ class Face
151
+ include Mongoid::Document
152
+ has_one :left_eye, class_name: "Eye", inverse_of: :left_socket
153
+ has_one :right_eye, class_name: "Eye", inverse_of: :right_socket
154
+ end
155
+
156
+ * \#3075 `update_attribute` now properly calls the setter method instead of
157
+ using `write_attribute`.
158
+
159
+ * \#3060 Allow atomically blocks to allow multiple calls of the same type.
160
+ (Brian Norton)
161
+
162
+ * \#3037 Model indexes are no longer stored in an `index_options` hash on the
163
+ model class. Instead, an array named `index_specifications` now exists on the
164
+ class which contains a list of `Indexable::Specification` objects. This is so
165
+ we could properly handle the case of indexes with the same keys but different
166
+ order.
167
+
168
+ * \#2956 Caching on queries now only happens when `cache` is specifically
169
+ called. (Arthur Neves)
170
+
171
+ * \#2898 Dirty attribute methods now properly handle field aliases.
172
+ (Niels Ganser)
173
+
174
+ * \#2659 `Mongoid::Railtie` now properly uses only one initializer and
175
+ the name has changed to `mongoid.load-config`.
176
+
177
+ * \#2656 `rake db:reseed` is now `rake db:reset` (Arthur Neves)
178
+
179
+ * \#2648 `Boolean` becomes `Mongoid::Boolean` to avoid polluting the global
180
+ namespace with a commonly used class by other libraries.
181
+
182
+ * \#2603 Return values from setters are now always the set value, regardless
183
+ of calling the setter or using send.
184
+
185
+ * \#2597 `Mongoid::Observer` was removed in line with Rails 4.
186
+
187
+ * \#2563 The `allow_dynamic_fields` configuration option has been removed as
188
+ dynamic fields are now allowed on a per-model level. In order to allow a
189
+ model to use dynamic fields, simply include the module in each.
190
+ (Josh Martin)
191
+
192
+ class Band
193
+ include Mongoid::Document
194
+ include Mongoid::Attributes::Dynamic
195
+ end
196
+
197
+ * \#2497 Calling `to_json` no longer tampers with the return value from the
198
+ driver, and proper returns `{ "$oid" : object_id.to_s }` instead of just
199
+ the string representation previously.
200
+
201
+ * \#2433 `Mongoid::Paranoia` has been removed.
202
+
203
+ * \#2432 `Mongoid::Versioning` has been removed.
204
+
205
+ * \#2218 Creating or instantiating documents that have default scopes will now
206
+ apply the default scope to the document, if the scope is not complex.
207
+
208
+ * \#2200 Mass assignment security now mirrors Rails 4's behavior.
209
+
210
+ * `delete_all` and `destroy_all` no longer take a `:conditions` hash but
211
+ just the raw attributes.
212
+
213
+ * \#1344 Atomic updates can now be executed in an `atomically` block, which will
214
+ delay any atomic updates on the document the block was called on until the
215
+ block is complete.
216
+
217
+ Update calls can be executed as normal in the block:
218
+
219
+ document.atomically do
220
+ document.inc(likes: 10)
221
+ document.bit(members: { and: 10 })
222
+ document.set(name: "Photek")
223
+ end
224
+
225
+ The document is also yielded to the block:
226
+
227
+ document.atomically do |doc|
228
+ doc.inc(likes: 10)
229
+ doc.bit(members: { and: 10 })
230
+ doc.set(name: "Photek")
231
+ end
232
+
233
+ The atomic commands are have a fluid interface:
234
+
235
+ document.atomically do |doc|
236
+ doc.inc(likes: 10).bit(members: { and: 10 }).set(name: "Photek")
237
+ end
238
+
239
+ If the fluid interface is leveraged without the `atomically` block, the
240
+ operations will persist in individual calls. For example, the following
241
+ would hit the database 3 times without the block provided:
242
+
243
+ doc.inc(likes: 10).bit(members: { and: 10 }).set(name: "Photek")
244
+
245
+ The block is only good for 1 document at a time, so embedded and root
246
+ document updates cannot be mixed at this time.
247
+
248
+ ### New Features
249
+
250
+ * Mongoid now uses ActiveSupport::LogSubscriber to subscribe logs, and
251
+ ActiveSupport::Notifications to send operation logs. (Arthur Neves)
252
+ Example of log subscription:
253
+
254
+ ActiveSupport::Notifications.subscribe('query.moped') do |event|
255
+ ..
256
+ end
257
+
258
+ * \#3319 Counters can now be reset from a document instance:
259
+
260
+ document.reset_counters(:relation)
261
+
262
+ * \#3302 Aliasing using `alias_attribute` now properly handles aliases in criteria.
263
+
264
+ * \#3155 Range field will persist the exclude_end when provided.
265
+ (Daniel Libanori)
266
+
267
+ * \#3146 Adding :overwrite field option, when it`s true, it wont check duplicates.
268
+ (Daniel Libanori)
269
+
270
+ * \#3002 Reloading the Rails console will also now clear Mongoid's identity map.
271
+
272
+ * \#2938 A configuration option `duplicate_fields_exception` has been added that
273
+ when set to `true` will raise an exception when defining a field that will
274
+ override an existing method. (Arthur Neves)
275
+
276
+ * \#2924 MongoDB 2.4 beta text search now has a DSL provided by Mongoid. Like
277
+ other queries, text searches are lazy evaluated, and available off the class
278
+ or criteria level.
279
+
280
+ Note that any 3rd party gem that provides a `text_search` method will now no
281
+ longer work with Mongoid, and will need to change its syntax. Examples:
282
+
283
+ Band.text_search("mode").project(name: 1).each do |doc|
284
+ # ...
285
+ end
286
+
287
+ Band.limit(10).text_search("phase").language("latin")
288
+ Band.where(:likes.gt => 1000).text_search("lucy")
289
+
290
+ * \#2855 Multiple extensions can now be supplied to relations. (Daniel Libanori)
7
291
 
8
292
  ### Resolved Issues
9
293
 
10
294
  * \#3397 Fixed $ne matcher for embedded documents to match server behaviour.
11
295
 
12
- * \#3414 Backkport skip and limit options on aggregation. (Wojciech Piekutowski)
296
+ * \#3348 Fixing compounded indexes having the same keys with
297
+ different directions. (Arthur Neves)
298
+
299
+ * \#2701 Fixing extra query on belongs_to binding. (Arthur Neves)
300
+
301
+ * \#3089 Allow demongoization of strings to floats (Daniel Libanori)
302
+
303
+ * \#3278 Counter cache should update the document in memory too. (Arthur Neves)
304
+
305
+ * \#3242 Has_many relation must use the inverse foreign_key. (Arthur Neves)
306
+
307
+ * \#3197 Improvements in the calls to `aggregates` on root and embedded
308
+ collections. (Wojciech Piekutowski)
309
+
310
+ * \#3144/\#3219 Fixing name colission on @_children ivar. (Arthur Neves)
311
+
312
+ * \#3088 Range field can accept a hash, which could be the attribute from the db.
313
+ (Daniel Libanori)
13
314
 
14
- * \#3469 Fix RegexpError: failed to allocate memory: /\./ on .hash_dot_syntax? (Dmitry Krasnoukhov)
315
+ * \#3116 Relations instance variables are now all prefixed with `_`.
316
+
317
+ * \#3093 Only flatten 1 level when atomically pushing arrays.
318
+
319
+ * \#3063 `Document#becomes` now properly sets base object on errors.
320
+ (Adam Ross Cohen)
321
+
322
+ * \#2903 Removed unused string `to_a` extension.
15
323
 
16
324
  ## 3.1.6
17
325
 
@@ -101,6 +409,7 @@ For instructions on upgrading to newer versions, visit
101
409
  ### Resolved Issues
102
410
 
103
411
  * Dont duplicate embedded documents when saving after calling becomes method.
412
+ (Arthur Neves)
104
413
 
105
414
  * \#2961 Reloading a mongoid.yml configuration now properly clears previously
106
415
  configured sessions.
@@ -111,11 +420,6 @@ For instructions on upgrading to newer versions, visit
111
420
  * \#2921 Don't use type in identity map selection if inheritance is not
112
421
  in play. (Arthur Neves)
113
422
 
114
- * \#2899 Dirty attribute methods now properly handle field aliases.
115
- (Niels Ganser)
116
-
117
- * \#2895 Allow scopes that return nil to still be chainable. (niedhui)
118
-
119
423
  * \#2893 Removed memoization of collection name and database name so lambdas
120
424
  with `store_in` work properly when changing.
121
425
 
@@ -293,12 +597,14 @@ For instructions on upgrading to newer versions, visit
293
597
  * \#2465 Documents now have an `attribute_before_type_cast` for proper
294
598
  handling of validations. (Gerad Suyderhoud)
295
599
 
296
- * \#2443 `expire_after_seconds` is now a valid index option.
600
+ * \#2443 `expire_after_seconds` is now a valid index option
601
+ (http://docs.mongodb.org/manual/core/indexes/#ttl-indexes,
602
+ http://docs.mongodb.org/manual/tutorial/expire-data/).
297
603
 
298
604
  class Event
299
605
  include Mongoid::Document
300
- field :status, type: Integer
301
- index({ status: 1 }, { expire_after_seconds: 3600 })
606
+ field :created_at, type: DateTime
607
+ index({ created_at: 1 }, { expire_after_seconds: 3600 })
302
608
  end
303
609
 
304
610
  * \#2373 Relations with the `touch: true` option will now be automatically
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- Mongoid [![Build Status](https://secure.travis-ci.org/mongoid/mongoid.png?branch=master&.png)](http://travis-ci.org/mongoid/mongoid)
1
+ Mongoid [![Build Status](https://secure.travis-ci.org/mongoid/mongoid.png?branch=master)](http://travis-ci.org/mongoid/mongoid) [![Code Climate](https://codeclimate.com/github/mongoid/mongoid.png)](https://codeclimate.com/github/mongoid/mongoid) [![Coverage Status](https://coveralls.io/repos/mongoid/mongoid/badge.png?branch=master)](https://coveralls.io/r/mongoid/mongoid?branch=master)
2
2
  ========
3
3
 
4
4
  Mongoid is an ODM (Object-Document-Mapper) framework for MongoDB in Ruby.
@@ -6,9 +6,10 @@ Mongoid is an ODM (Object-Document-Mapper) framework for MongoDB in Ruby.
6
6
  Project Tracking
7
7
  ----------------
8
8
 
9
- * [Mongoid Google Group](http://groups.google.com/group/mongoid)
10
9
  * [Mongoid Website and Documentation](http://mongoid.org)
11
- * [Mongoid Code Climate](https://codeclimate.com/github/mongoid/mongoid)
10
+ * [Mongoid Google Group](http://groups.google.com/group/mongoid)
11
+ * [Stackoverflow](http://stackoverflow.com/questions/tagged/mongoid)
12
+ * #mongoid on freenode IRC
12
13
 
13
14
  Compatibility
14
15
  -------------
@@ -24,8 +25,6 @@ Please see the new Mongoid website for up-to-date documentation:
24
25
  Donating
25
26
  --------
26
27
 
27
- [Support Mongoid at Wepay](https://www.wepay.com/donations/mongoid)
28
-
29
28
  [Support Mongoid at Pledgie](http://www.pledgie.com/campaigns/7757)
30
29
 
31
30
  <a href='http://www.pledgie.com/campaigns/7757'>
@@ -222,6 +222,10 @@ en:
222
222
  from the child side which relation to go in."
223
223
  resolution: "Set the values from the parent, or redefine the relation
224
224
  with only a single definition in the parent."
225
+ invalid_value:
226
+ message: "Value of type %{value_class} cannot be written to a field of type %{field_class}"
227
+ summary: "Tried to set a value of type %{value_class} to a field of type %{field_class}"
228
+ resolution: "Verify if the value to be set correspond to field definition"
225
229
  mixed_relations:
226
230
  message: "Referencing a(n) %{embedded} document from the %{root}
227
231
  document via a relational association is not allowed since the
@@ -411,12 +415,12 @@ en:
411
415
  unknown_attribute:
412
416
  message: "Attempted to set a value for '%{name}' which is not
413
417
  allowed on the model %{klass}."
414
- summary: "When setting Mongoid.allow_dynamic_fields to false and the
415
- attribute does not already exist in the attributes hash, attempting
416
- to call %{klass}#%{name}= for it is not allowed. This is also
417
- triggered by passing the attribute to any method that accepts an
418
+ summary: "Without including Mongoid::Attributes::Dynamic in your model
419
+ and the attribute does not already exist in the attributes hash,
420
+ attempting to call %{klass}#%{name}= for it is not allowed. This is
421
+ also triggered by passing the attribute to any method that accepts an
418
422
  attributes hash, and is raised instead of getting a NoMethodError."
419
- resolution: "You can set Mongoid.allow_dynamic_fields to true if you
423
+ resolution: "You can include Mongoid::Attributes::Dynamic if you
420
424
  expect to be writing values for undefined fields often."
421
425
  unsaved_document:
422
426
  message: "Attempted to save %{document} before the parent %{base}."
@@ -439,13 +443,6 @@ en:
439
443
  summary: "The following errors were found: %{errors}"
440
444
  resolution: "Try persisting the document with valid data or remove
441
445
  the validations."
442
- versioning_not_on_root:
443
- message: "Versioning not allowed on embedded document: %{klass}."
444
- summary: "Mongoid::Versioning behaviour is only allowed on documents
445
- that are the root document in the hierarchy."
446
- resolution: "Remove the versioning from the embedded %{klass} or
447
- consider moving it to a root location in the hierarchy if
448
- versioning is needed."
449
446
  delete_restriction:
450
447
  message: "Cannot delete %{document} because of dependent '%{relation}'."
451
448
  summary: "When defining '%{relation}' with a :dependent => :restrict,
@@ -1,34 +1,12 @@
1
1
  # encoding: utf-8
2
-
3
- # Copyright (c) 2009 - 2011 Durran Jordan and friends.
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining
6
- # a copy of this software and associated documentation files (the
7
- # "Software"), to deal in the Software without restriction, including
8
- # without limitation the rights to use, copy, modify, merge, publish,
9
- # distribute, sublicense, and/or sell copies of the Software, and to
10
- # permit persons to whom the Software is furnished to do so, subject to
11
- # the following conditions:
12
- #
13
- # The above copyright notice and this permission notice shall be
14
- # included in all copies or substantial portions of the Software.
15
- #
16
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
- # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
- # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
- # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
- # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
- # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
- # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
-
24
- require 'support/ruby_version'
2
+ require "support/ruby_version"
25
3
 
26
4
  require "delegate"
27
5
  require "time"
28
6
  require "set"
29
7
 
30
8
  require "active_support/core_ext"
31
- require 'active_support/json'
9
+ require "active_support/json"
32
10
  require "active_support/inflector"
33
11
  require "active_support/time_with_zone"
34
12
  require "active_model"
@@ -36,49 +14,12 @@ require "active_model"
36
14
  require "origin"
37
15
  require "moped"
38
16
 
39
- require "mongoid/atomic/positionable"
40
- require "mongoid/evolvable"
41
- require "mongoid/extensions"
42
- require "mongoid/errors"
43
- require "mongoid/threaded"
44
- require "mongoid/relations"
45
- require "mongoid/atomic"
46
- require "mongoid/attributes"
47
- require "mongoid/callbacks"
17
+ require "mongoid/version"
48
18
  require "mongoid/config"
49
- require "mongoid/contextual"
50
- require "mongoid/copyable"
51
- require "mongoid/equality"
52
- require "mongoid/criteria"
53
- require "mongoid/dirty"
54
- require "mongoid/factory"
55
- require "mongoid/fields"
56
- require "mongoid/finders"
57
- require "mongoid/hierarchy"
58
- require "mongoid/identity_map"
59
- require "mongoid/indexes"
60
- require "mongoid/inspection"
61
- require "mongoid/json"
62
19
  require "mongoid/loggable"
63
- require "mongoid/matchers"
64
- require "mongoid/multi_parameter_attributes"
65
- require "mongoid/nested_attributes"
66
- require "mongoid/observer"
67
- require "mongoid/persistence"
68
- require "mongoid/reloading"
69
- require "mongoid/scoping"
70
- require "mongoid/serialization"
71
20
  require "mongoid/sessions"
72
- require "mongoid/sharding"
73
- require "mongoid/state"
74
- require "mongoid/timestamps"
75
- require "mongoid/unit_of_work"
76
- require "mongoid/validations"
77
- require "mongoid/version"
78
- require "mongoid/versioning"
79
- require "mongoid/components"
80
- require "mongoid/paranoia"
81
21
  require "mongoid/document"
22
+ require "mongoid/log_subscriber"
82
23
 
83
24
  # If we are using Rails then we will include the Mongoid railtie. This has all
84
25
  # the nifty initializers that Mongoid needs.
@@ -86,27 +27,19 @@ if defined?(Rails)
86
27
  require "mongoid/railtie"
87
28
  end
88
29
 
89
- # If we are using any Rack based application then we need the Mongoid rack
90
- # middleware to ensure our app is running properly.
91
- if defined?(Rack)
92
- require "rack/mongoid"
93
- end
94
-
95
30
  # add english load path by default
96
31
  I18n.load_path << File.join(File.dirname(__FILE__), "config", "locales", "en.yml")
97
32
 
98
33
  module Mongoid
99
34
  extend Loggable
100
- extend UnitOfWork
101
35
  extend self
102
36
 
103
- MONGODB_VERSION = "2.0.0"
37
+ MONGODB_VERSION = "2.2.0"
104
38
 
105
39
  # Sets the Mongoid configuration options. Best used by passing a block.
106
40
  #
107
41
  # @example Set up configuration options.
108
42
  # Mongoid.configure do |config|
109
- # config.allow_dynamic_fields = false
110
43
  # config.use(name: "mongoid_test", host: "localhost", port: 27017)
111
44
  # end
112
45
  #
@@ -160,7 +93,5 @@ module Mongoid
160
93
  # Mongoid.database = Mongo::Connection.new.db("test")
161
94
  #
162
95
  # @since 1.0.0
163
- delegate(*(Config.public_instance_methods(false) +
164
- ActiveModel::Observing::ClassMethods.public_instance_methods(false) - [:logger=, :logger] <<
165
- { to: Config }))
96
+ delegate(*(Config.public_instance_methods(false) - [ :logger=, :logger ] << { to: Config }))
166
97
  end