mongoid 3.1.7 → 4.0.0.alpha1

Sign up to get free protection for your applications and to get access to all the features.
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