mongoid 3.1.6 → 4.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (571) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +479 -8
  3. data/README.md +10 -7
  4. data/lib/config/locales/en.yml +34 -20
  5. data/lib/mongoid.rb +10 -76
  6. data/lib/mongoid/atomic.rb +3 -14
  7. data/lib/mongoid/atomic/paths/embedded.rb +0 -30
  8. data/lib/mongoid/atomic/paths/embedded/many.rb +1 -1
  9. data/lib/mongoid/atomic/paths/embedded/one.rb +1 -1
  10. data/lib/mongoid/atomic/paths/root.rb +0 -13
  11. data/lib/mongoid/attributes.rb +65 -101
  12. data/lib/mongoid/attributes/dynamic.rb +154 -0
  13. data/lib/mongoid/attributes/nested.rb +82 -0
  14. data/lib/mongoid/attributes/processing.rb +13 -66
  15. data/lib/mongoid/{dirty.rb → changeable.rb} +32 -2
  16. data/lib/mongoid/composable.rb +105 -0
  17. data/lib/mongoid/config.rb +3 -9
  18. data/lib/mongoid/config/options.rb +1 -1
  19. data/lib/mongoid/contextual.rb +2 -0
  20. data/lib/mongoid/contextual/aggregable/memory.rb +2 -2
  21. data/lib/mongoid/contextual/aggregable/mongo.rb +7 -9
  22. data/lib/mongoid/contextual/atomic.rb +53 -53
  23. data/lib/mongoid/contextual/geo_near.rb +1 -1
  24. data/lib/mongoid/contextual/map_reduce.rb +4 -2
  25. data/lib/mongoid/contextual/memory.rb +23 -11
  26. data/lib/mongoid/contextual/mongo.rb +75 -57
  27. data/lib/mongoid/contextual/none.rb +90 -0
  28. data/lib/mongoid/contextual/text_search.rb +178 -0
  29. data/lib/mongoid/copyable.rb +2 -3
  30. data/lib/mongoid/criteria.rb +39 -34
  31. data/lib/mongoid/criteria/#findable.rb# +141 -0
  32. data/lib/mongoid/{criterion → criteria}/findable.rb +7 -47
  33. data/lib/mongoid/{criterion/inspection.rb → criteria/inspectable.rb} +2 -2
  34. data/lib/mongoid/{criterion → criteria}/marshalable.rb +3 -1
  35. data/lib/mongoid/{criterion → criteria}/modifiable.rb +28 -8
  36. data/lib/mongoid/criteria/permission.rb +70 -0
  37. data/lib/mongoid/{criterion/scoping.rb → criteria/scopable.rb} +2 -2
  38. data/lib/mongoid/document.rb +39 -24
  39. data/lib/mongoid/errors.rb +4 -1
  40. data/lib/mongoid/errors/document_not_destroyed.rb +25 -0
  41. data/lib/mongoid/errors/document_not_found.rb +2 -1
  42. data/lib/mongoid/errors/invalid_storage_options.rb +1 -1
  43. data/lib/mongoid/errors/invalid_storage_parent.rb +26 -0
  44. data/lib/mongoid/errors/invalid_value.rb +16 -0
  45. data/lib/mongoid/errors/mongoid_error.rb +1 -1
  46. data/lib/mongoid/errors/readonly_document.rb +24 -0
  47. data/lib/mongoid/extensions.rb +15 -7
  48. data/lib/mongoid/extensions/array.rb +3 -3
  49. data/lib/mongoid/extensions/big_decimal.rb +1 -1
  50. data/lib/mongoid/extensions/boolean.rb +15 -17
  51. data/lib/mongoid/extensions/date.rb +1 -1
  52. data/lib/mongoid/extensions/date_time.rb +3 -3
  53. data/lib/mongoid/extensions/float.rb +2 -1
  54. data/lib/mongoid/extensions/hash.rb +3 -3
  55. data/lib/mongoid/extensions/integer.rb +1 -1
  56. data/lib/mongoid/extensions/object.rb +7 -7
  57. data/lib/mongoid/extensions/object_id.rb +5 -5
  58. data/lib/mongoid/extensions/range.rb +9 -3
  59. data/lib/mongoid/extensions/regexp.rb +1 -1
  60. data/lib/mongoid/extensions/set.rb +1 -1
  61. data/lib/mongoid/extensions/string.rb +6 -18
  62. data/lib/mongoid/extensions/symbol.rb +1 -1
  63. data/lib/mongoid/extensions/time.rb +3 -3
  64. data/lib/mongoid/extensions/time_with_zone.rb +1 -1
  65. data/lib/mongoid/factory.rb +8 -6
  66. data/lib/mongoid/fields.rb +41 -8
  67. data/lib/mongoid/fields/foreign_key.rb +3 -3
  68. data/lib/mongoid/fields/localized.rb +1 -1
  69. data/lib/mongoid/fields/standard.rb +5 -17
  70. data/lib/mongoid/fields/validators/macro.rb +15 -5
  71. data/lib/mongoid/{finders.rb → findable.rb} +35 -7
  72. data/lib/mongoid/{indexes.rb → indexable.rb} +50 -55
  73. data/lib/mongoid/indexable/specification.rb +104 -0
  74. data/lib/mongoid/{indexes → indexable}/validators/options.rb +2 -1
  75. data/lib/mongoid/{inspection.rb → inspectable.rb} +15 -11
  76. data/lib/mongoid/{callbacks.rb → interceptable.rb} +30 -62
  77. data/lib/mongoid/log_subscriber.rb +55 -0
  78. data/lib/mongoid/matchable.rb +152 -0
  79. data/lib/mongoid/{matchers → matchable}/all.rb +1 -1
  80. data/lib/mongoid/{matchers → matchable}/and.rb +2 -2
  81. data/lib/mongoid/{matchers → matchable}/default.rb +1 -1
  82. data/lib/mongoid/{matchers → matchable}/exists.rb +1 -1
  83. data/lib/mongoid/{matchers → matchable}/gt.rb +1 -1
  84. data/lib/mongoid/{matchers → matchable}/gte.rb +1 -1
  85. data/lib/mongoid/{matchers → matchable}/in.rb +2 -2
  86. data/lib/mongoid/{matchers → matchable}/lt.rb +1 -1
  87. data/lib/mongoid/{matchers → matchable}/lte.rb +1 -1
  88. data/lib/mongoid/{matchers → matchable}/ne.rb +2 -2
  89. data/lib/mongoid/{matchers → matchable}/nin.rb +3 -2
  90. data/lib/mongoid/{matchers → matchable}/or.rb +2 -2
  91. data/lib/mongoid/{matchers → matchable}/size.rb +1 -1
  92. data/lib/mongoid/persistable.rb +216 -0
  93. data/lib/mongoid/persistable/creatable.rb +189 -0
  94. data/lib/mongoid/persistable/deletable.rb +149 -0
  95. data/lib/mongoid/persistable/destroyable.rb +60 -0
  96. data/lib/mongoid/persistable/incrementable.rb +36 -0
  97. data/lib/mongoid/persistable/logical.rb +38 -0
  98. data/lib/mongoid/persistable/poppable.rb +39 -0
  99. data/lib/mongoid/persistable/pullable.rb +55 -0
  100. data/lib/mongoid/persistable/pushable.rb +62 -0
  101. data/lib/mongoid/persistable/renamable.rb +35 -0
  102. data/lib/mongoid/persistable/savable.rb +52 -0
  103. data/lib/mongoid/persistable/settable.rb +33 -0
  104. data/lib/mongoid/persistable/unsettable.rb +36 -0
  105. data/lib/mongoid/persistable/updatable.rb +153 -0
  106. data/lib/mongoid/persistable/upsertable.rb +55 -0
  107. data/lib/mongoid/positional.rb +71 -0
  108. data/lib/mongoid/query_cache.rb +255 -0
  109. data/lib/mongoid/railtie.rb +34 -60
  110. data/lib/mongoid/railties/database.rake +9 -25
  111. data/lib/mongoid/relations.rb +11 -25
  112. data/lib/mongoid/relations/accessors.rb +15 -51
  113. data/lib/mongoid/relations/auto_save.rb +15 -36
  114. data/lib/mongoid/relations/binding.rb +2 -25
  115. data/lib/mongoid/relations/bindings/embedded/in.rb +1 -1
  116. data/lib/mongoid/relations/bindings/embedded/many.rb +1 -3
  117. data/lib/mongoid/relations/bindings/referenced/in.rb +3 -8
  118. data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +4 -2
  119. data/lib/mongoid/relations/builder.rb +1 -1
  120. data/lib/mongoid/relations/builders.rb +2 -2
  121. data/lib/mongoid/relations/builders/embedded/one.rb +1 -1
  122. data/lib/mongoid/relations/builders/nested_attributes/many.rb +10 -13
  123. data/lib/mongoid/relations/builders/nested_attributes/one.rb +5 -6
  124. data/lib/mongoid/relations/builders/referenced/in.rb +1 -1
  125. data/lib/mongoid/relations/builders/referenced/many.rb +1 -2
  126. data/lib/mongoid/relations/builders/referenced/many_to_many.rb +1 -2
  127. data/lib/mongoid/relations/builders/referenced/one.rb +1 -1
  128. data/lib/mongoid/relations/cascading.rb +3 -5
  129. data/lib/mongoid/relations/constraint.rb +1 -1
  130. data/lib/mongoid/relations/conversions.rb +1 -1
  131. data/lib/mongoid/relations/counter_cache.rb +39 -15
  132. data/lib/mongoid/relations/eager.rb +46 -0
  133. data/lib/mongoid/relations/eager/base.rb +149 -0
  134. data/lib/mongoid/relations/eager/belongs_to.rb +31 -0
  135. data/lib/mongoid/relations/eager/has_and_belongs_to_many.rb +47 -0
  136. data/lib/mongoid/relations/eager/has_many.rb +38 -0
  137. data/lib/mongoid/relations/eager/has_one.rb +30 -0
  138. data/lib/mongoid/relations/embedded/batchable.rb +4 -5
  139. data/lib/mongoid/relations/embedded/in.rb +4 -4
  140. data/lib/mongoid/relations/embedded/many.rb +14 -32
  141. data/lib/mongoid/relations/embedded/one.rb +1 -1
  142. data/lib/mongoid/relations/macros.rb +3 -4
  143. data/lib/mongoid/relations/many.rb +51 -31
  144. data/lib/mongoid/relations/marshalable.rb +3 -3
  145. data/lib/mongoid/relations/metadata.rb +14 -79
  146. data/lib/mongoid/relations/nested_builder.rb +2 -2
  147. data/lib/mongoid/relations/one.rb +1 -1
  148. data/lib/mongoid/relations/options.rb +1 -0
  149. data/lib/mongoid/relations/polymorphic.rb +0 -1
  150. data/lib/mongoid/relations/proxy.rb +21 -41
  151. data/lib/mongoid/relations/referenced/in.rb +4 -20
  152. data/lib/mongoid/relations/referenced/many.rb +22 -35
  153. data/lib/mongoid/relations/referenced/many_to_many.rb +19 -42
  154. data/lib/mongoid/relations/referenced/one.rb +6 -25
  155. data/lib/mongoid/relations/synchronization.rb +4 -4
  156. data/lib/mongoid/relations/targets/enumerable.rb +10 -10
  157. data/lib/mongoid/relations/touchable.rb +34 -1
  158. data/lib/mongoid/{reloading.rb → reloadable.rb} +7 -5
  159. data/lib/mongoid/{scoping.rb → scopable.rb} +36 -36
  160. data/lib/mongoid/selectable.rb +59 -0
  161. data/lib/mongoid/{serialization.rb → serializable.rb} +11 -2
  162. data/lib/mongoid/sessions.rb +37 -345
  163. data/lib/mongoid/sessions/factory.rb +2 -0
  164. data/lib/mongoid/sessions/options.rb +185 -0
  165. data/lib/mongoid/sessions/storage_options.rb +140 -0
  166. data/lib/mongoid/sessions/thread_options.rb +19 -0
  167. data/lib/mongoid/sessions/validators/storage.rb +16 -3
  168. data/lib/mongoid/{sharding.rb → shardable.rb} +5 -1
  169. data/lib/mongoid/{state.rb → stateful.rb} +13 -1
  170. data/lib/mongoid/support/query_counter.rb +23 -0
  171. data/lib/mongoid/tasks/database.rake +31 -0
  172. data/lib/mongoid/tasks/database.rb +107 -0
  173. data/lib/mongoid/threaded.rb +26 -172
  174. data/lib/mongoid/threaded/lifecycle.rb +0 -28
  175. data/lib/mongoid/timestamps/updated/short.rb +2 -2
  176. data/lib/mongoid/{hierarchy.rb → traversable.rb} +15 -7
  177. data/lib/mongoid/{validations.rb → validatable.rb} +23 -10
  178. data/lib/mongoid/{validations → validatable}/associated.rb +4 -2
  179. data/lib/mongoid/{validations → validatable}/format.rb +1 -1
  180. data/lib/mongoid/{validations → validatable}/length.rb +1 -1
  181. data/lib/mongoid/{validations → validatable}/localizable.rb +1 -1
  182. data/lib/mongoid/{validations → validatable}/macros.rb +4 -3
  183. data/lib/mongoid/{validations → validatable}/presence.rb +1 -1
  184. data/lib/mongoid/{validations → validatable}/queryable.rb +1 -2
  185. data/lib/mongoid/{validations → validatable}/uniqueness.rb +25 -21
  186. data/lib/mongoid/version.rb +1 -1
  187. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +46 -25
  188. data/lib/rails/generators/mongoid/model/model_generator.rb +0 -1
  189. data/lib/rails/generators/mongoid/model/templates/model.rb.tt +0 -3
  190. data/lib/rails/generators/mongoid_generator.rb +3 -40
  191. data/lib/rails/mongoid.rb +0 -122
  192. data/lib/support/ruby_version.rb +1 -1
  193. data/spec/app/models/account.rb +2 -6
  194. data/spec/app/models/acolyte.rb +2 -1
  195. data/spec/app/models/actor.rb +0 -1
  196. data/spec/app/models/address.rb +8 -3
  197. data/spec/app/models/animal.rb +1 -1
  198. data/spec/app/models/appointment.rb +3 -3
  199. data/spec/app/models/article.rb +1 -4
  200. data/spec/app/models/audio.rb +5 -0
  201. data/spec/app/models/author.rb +0 -2
  202. data/spec/app/models/band.rb +3 -2
  203. data/spec/app/models/bar.rb +1 -0
  204. data/spec/app/models/book.rb +1 -0
  205. data/spec/app/models/building.rb +0 -2
  206. data/spec/app/models/building_address.rb +0 -2
  207. data/spec/app/models/bus.rb +1 -1
  208. data/spec/app/models/canvas.rb +1 -1
  209. data/spec/app/models/contextable_item.rb +5 -0
  210. data/spec/app/models/contractor.rb +0 -2
  211. data/spec/app/models/country_code.rb +1 -1
  212. data/spec/app/models/definition.rb +2 -2
  213. data/spec/app/models/dog.rb +1 -1
  214. data/spec/app/models/draft.rb +9 -0
  215. data/spec/app/models/dragon.rb +4 -0
  216. data/spec/app/models/drug.rb +1 -3
  217. data/spec/app/models/dungeon.rb +4 -0
  218. data/spec/app/models/edit.rb +5 -0
  219. data/spec/app/models/even.rb +7 -0
  220. data/spec/app/models/event.rb +1 -1
  221. data/spec/app/models/filesystem.rb +1 -0
  222. data/spec/app/models/fish.rb +0 -1
  223. data/spec/app/models/fruits.rb +6 -0
  224. data/spec/app/models/game.rb +0 -2
  225. data/spec/app/models/house.rb +1 -3
  226. data/spec/app/models/id_key.rb +6 -0
  227. data/spec/app/models/item.rb +1 -5
  228. data/spec/app/models/jar.rb +1 -1
  229. data/spec/app/models/label.rb +4 -4
  230. data/spec/app/models/line_item.rb +1 -1
  231. data/spec/app/models/login.rb +1 -1
  232. data/spec/app/models/message.rb +8 -0
  233. data/spec/app/models/movie.rb +1 -0
  234. data/spec/app/models/name.rb +3 -3
  235. data/spec/app/models/note.rb +3 -1
  236. data/spec/app/models/odd.rb +7 -0
  237. data/spec/app/models/oscar.rb +1 -1
  238. data/spec/app/models/parent_doc.rb +1 -1
  239. data/spec/app/models/person.rb +16 -10
  240. data/spec/app/models/phone.rb +1 -3
  241. data/spec/app/models/player.rb +3 -3
  242. data/spec/app/models/post.rb +5 -3
  243. data/spec/app/models/preference.rb +1 -1
  244. data/spec/app/models/quiz.rb +0 -3
  245. data/spec/app/models/record.rb +10 -5
  246. data/spec/app/models/registry.rb +1 -1
  247. data/spec/app/models/server.rb +1 -1
  248. data/spec/app/models/service.rb +3 -3
  249. data/spec/app/models/sound.rb +5 -0
  250. data/spec/app/models/symptom.rb +1 -1
  251. data/spec/app/models/template.rb +1 -1
  252. data/spec/app/models/title.rb +0 -1
  253. data/spec/app/models/track.rb +5 -5
  254. data/spec/app/models/tree.rb +3 -3
  255. data/spec/app/models/video.rb +1 -5
  256. data/spec/app/models/wiki_page.rb +2 -5
  257. data/spec/app/models/word.rb +3 -0
  258. data/spec/app/models/word_origin.rb +1 -1
  259. data/spec/config/mongoid.yml +7 -8
  260. data/spec/helpers.rb +18 -0
  261. data/spec/mongoid/#atomic_spec.rb# +365 -0
  262. data/spec/mongoid/atomic/modifiers_spec.rb +22 -22
  263. data/spec/mongoid/atomic/paths/embedded/many_spec.rb +8 -49
  264. data/spec/mongoid/atomic/paths/embedded/one_spec.rb +7 -49
  265. data/spec/mongoid/atomic/paths/root_spec.rb +3 -61
  266. data/spec/mongoid/atomic/paths_spec.rb +19 -19
  267. data/spec/mongoid/atomic_spec.rb +19 -19
  268. data/spec/mongoid/{nested_attributes_spec.rb → attributes/nested_spec.rb} +474 -592
  269. data/spec/mongoid/attributes/readonly_spec.rb +58 -18
  270. data/spec/mongoid/attributes_spec.rb +349 -434
  271. data/spec/mongoid/{dirty_spec.rb → changeable_spec.rb} +203 -153
  272. data/spec/mongoid/{components_spec.rb → composable_spec.rb} +3 -3
  273. data/spec/mongoid/config/environment_spec.rb +3 -3
  274. data/spec/mongoid/config/options_spec.rb +6 -6
  275. data/spec/mongoid/config_spec.rb +24 -48
  276. data/spec/mongoid/contextual/aggregable/memory_spec.rb +12 -12
  277. data/spec/mongoid/contextual/aggregable/mongo_spec.rb +78 -38
  278. data/spec/mongoid/contextual/atomic_spec.rb +60 -56
  279. data/spec/mongoid/contextual/find_and_modify_spec.rb +14 -14
  280. data/spec/mongoid/contextual/geo_near_spec.rb +22 -22
  281. data/spec/mongoid/contextual/map_reduce_spec.rb +27 -27
  282. data/spec/mongoid/contextual/memory_spec.rb +156 -94
  283. data/spec/mongoid/contextual/mongo_spec.rb +238 -150
  284. data/spec/mongoid/contextual/none_spec.rb +127 -0
  285. data/spec/mongoid/contextual/text_search_spec.rb +209 -0
  286. data/spec/mongoid/copyable_spec.rb +56 -68
  287. data/spec/mongoid/criteria/findable_spec.rb +991 -0
  288. data/spec/mongoid/{criterion/inspection_spec.rb → criteria/inspectable_spec.rb} +5 -5
  289. data/spec/mongoid/{criterion → criteria}/marshalable_spec.rb +2 -2
  290. data/spec/mongoid/criteria/modifiable_spec.rb +1252 -0
  291. data/spec/mongoid/{criterion/scoping_spec.rb → criteria/scopable_spec.rb} +37 -37
  292. data/spec/mongoid/criteria_spec.rb +715 -2421
  293. data/spec/mongoid/document_spec.rb +171 -121
  294. data/spec/mongoid/equality_spec.rb +22 -22
  295. data/spec/mongoid/errors/ambiguous_relationship_spec.rb +3 -3
  296. data/spec/mongoid/errors/callback_spec.rb +3 -3
  297. data/spec/mongoid/errors/delete_restriction_spec.rb +3 -3
  298. data/spec/mongoid/errors/document_not_destroyed_spec.rb +33 -0
  299. data/spec/mongoid/errors/document_not_found_spec.rb +11 -11
  300. data/spec/mongoid/errors/eager_load_spec.rb +3 -3
  301. data/spec/mongoid/errors/invalid_collection_spec.rb +3 -3
  302. data/spec/mongoid/errors/invalid_config_option_spec.rb +3 -3
  303. data/spec/mongoid/errors/invalid_field_option_spec.rb +3 -3
  304. data/spec/mongoid/errors/invalid_field_spec.rb +3 -3
  305. data/spec/mongoid/errors/invalid_find_spec.rb +3 -3
  306. data/spec/mongoid/errors/invalid_includes_spec.rb +3 -3
  307. data/spec/mongoid/errors/invalid_index_spec.rb +3 -3
  308. data/spec/mongoid/errors/invalid_options_spec.rb +3 -3
  309. data/spec/mongoid/errors/invalid_path_spec.rb +3 -3
  310. data/spec/mongoid/errors/invalid_scope_spec.rb +5 -5
  311. data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +3 -3
  312. data/spec/mongoid/errors/invalid_storage_options_spec.rb +3 -3
  313. data/spec/mongoid/errors/invalid_time_spec.rb +3 -3
  314. data/spec/mongoid/errors/inverse_not_found_spec.rb +3 -3
  315. data/spec/mongoid/errors/mixed_relations_spec.rb +3 -3
  316. data/spec/mongoid/errors/mixed_session_configuration_spec.rb +3 -3
  317. data/spec/mongoid/errors/mongoid_error_spec.rb +8 -8
  318. data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +3 -3
  319. data/spec/mongoid/errors/no_environment_spec.rb +3 -3
  320. data/spec/mongoid/errors/no_map_reduce_output_spec.rb +3 -3
  321. data/spec/mongoid/errors/no_metadata_spec.rb +3 -3
  322. data/spec/mongoid/errors/no_parent_spec.rb +3 -3
  323. data/spec/mongoid/errors/no_session_config_spec.rb +3 -3
  324. data/spec/mongoid/errors/no_session_database_spec.rb +3 -3
  325. data/spec/mongoid/errors/no_session_hosts_spec.rb +3 -3
  326. data/spec/mongoid/errors/no_sessions_config_spec.rb +3 -3
  327. data/spec/mongoid/errors/readonly_attribute_spec.rb +3 -3
  328. data/spec/mongoid/errors/readonly_document_spec.rb +29 -0
  329. data/spec/mongoid/errors/scope_overwrite_spec.rb +3 -3
  330. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +3 -3
  331. data/spec/mongoid/errors/unknown_attribute_spec.rb +5 -5
  332. data/spec/mongoid/errors/unsaved_document_spec.rb +3 -3
  333. data/spec/mongoid/errors/unsupported_javascript_spec.rb +3 -3
  334. data/spec/mongoid/errors/validations_spec.rb +7 -7
  335. data/spec/mongoid/extensions/array_spec.rb +61 -61
  336. data/spec/mongoid/extensions/big_decimal_spec.rb +11 -11
  337. data/spec/mongoid/extensions/binary_spec.rb +12 -12
  338. data/spec/mongoid/extensions/boolean_spec.rb +18 -18
  339. data/spec/mongoid/extensions/date_spec.rb +13 -13
  340. data/spec/mongoid/extensions/date_time_spec.rb +8 -8
  341. data/spec/mongoid/extensions/false_class_spec.rb +5 -5
  342. data/spec/mongoid/extensions/float_spec.rb +29 -15
  343. data/spec/mongoid/extensions/hash_spec.rb +29 -29
  344. data/spec/mongoid/extensions/integer_spec.rb +15 -15
  345. data/spec/mongoid/extensions/module_spec.rb +2 -2
  346. data/spec/mongoid/extensions/nil_class_spec.rb +1 -1
  347. data/spec/mongoid/extensions/object_id_spec.rb +134 -134
  348. data/spec/mongoid/extensions/object_spec.rb +26 -26
  349. data/spec/mongoid/extensions/range_spec.rb +61 -12
  350. data/spec/mongoid/extensions/regexp_spec.rb +4 -4
  351. data/spec/mongoid/extensions/set_spec.rb +4 -4
  352. data/spec/mongoid/extensions/string_spec.rb +35 -46
  353. data/spec/mongoid/extensions/symbol_spec.rb +9 -9
  354. data/spec/mongoid/extensions/time_spec.rb +49 -49
  355. data/spec/mongoid/extensions/time_with_zone_spec.rb +34 -34
  356. data/spec/mongoid/extensions/true_class_spec.rb +5 -5
  357. data/spec/mongoid/extensions_spec.rb +29 -0
  358. data/spec/mongoid/factory_spec.rb +15 -15
  359. data/spec/mongoid/fields/foreign_key_spec.rb +73 -66
  360. data/spec/mongoid/fields/internal/foreign_keys/array_spec.rb +15 -15
  361. data/spec/mongoid/fields/internal/foreign_keys/object_spec.rb +22 -22
  362. data/spec/mongoid/fields/localized_spec.rb +38 -23
  363. data/spec/mongoid/fields/standard_spec.rb +12 -12
  364. data/spec/mongoid/fields_spec.rb +263 -217
  365. data/spec/mongoid/findable_spec.rb +509 -0
  366. data/spec/mongoid/indexable/specification_spec.rb +102 -0
  367. data/spec/mongoid/{indexes_spec.rb → indexable_spec.rb} +171 -51
  368. data/spec/mongoid/{inspection_spec.rb → inspectable_spec.rb} +6 -14
  369. data/spec/mongoid/{callbacks_spec.rb → interceptable_spec.rb} +117 -116
  370. data/spec/mongoid/log_subscriber_spec.rb +75 -0
  371. data/spec/mongoid/loggable_spec.rb +1 -1
  372. data/spec/mongoid/{matchers → matchable}/all_spec.rb +4 -4
  373. data/spec/mongoid/{matchers → matchable}/and_spec.rb +11 -11
  374. data/spec/mongoid/{matchers → matchable}/default_spec.rb +15 -15
  375. data/spec/mongoid/{matchers → matchable}/exists_spec.rb +5 -5
  376. data/spec/mongoid/{matchers → matchable}/gt_spec.rb +9 -8
  377. data/spec/mongoid/{matchers → matchable}/gte_spec.rb +7 -7
  378. data/spec/mongoid/matchable/in_spec.rb +49 -0
  379. data/spec/mongoid/{matchers → matchable}/lt_spec.rb +7 -7
  380. data/spec/mongoid/{matchers → matchable}/lte_spec.rb +7 -7
  381. data/spec/mongoid/matchable/ne_spec.rb +46 -0
  382. data/spec/mongoid/matchable/nin_spec.rb +48 -0
  383. data/spec/mongoid/{matchers → matchable}/or_spec.rb +6 -6
  384. data/spec/mongoid/{matchers → matchable}/size_spec.rb +3 -3
  385. data/spec/mongoid/{matchers_spec.rb → matchable_spec.rb} +41 -41
  386. data/spec/mongoid/persistable/creatable_spec.rb +553 -0
  387. data/spec/mongoid/persistable/deletable_spec.rb +218 -0
  388. data/spec/mongoid/persistable/destroyable_spec.rb +192 -0
  389. data/spec/mongoid/persistable/incrementable_spec.rb +173 -0
  390. data/spec/mongoid/persistable/logical_spec.rb +143 -0
  391. data/spec/mongoid/persistable/poppable_spec.rb +115 -0
  392. data/spec/mongoid/persistable/pullable_spec.rb +228 -0
  393. data/spec/mongoid/persistable/pushable_spec.rb +258 -0
  394. data/spec/mongoid/persistable/renamable_spec.rb +135 -0
  395. data/spec/mongoid/persistable/savable_spec.rb +498 -0
  396. data/spec/mongoid/persistable/settable_spec.rb +162 -0
  397. data/spec/mongoid/persistable/unsettable_spec.rb +155 -0
  398. data/spec/mongoid/persistable/updatable_spec.rb +558 -0
  399. data/spec/mongoid/persistable/upsertable_spec.rb +106 -0
  400. data/spec/mongoid/persistable_spec.rb +206 -0
  401. data/spec/mongoid/{atomic/positionable_spec.rb → positional_spec.rb} +14 -19
  402. data/spec/mongoid/query_cache_spec.rb +263 -0
  403. data/spec/mongoid/railties/document_spec.rb +2 -2
  404. data/spec/mongoid/relations/accessors_spec.rb +53 -145
  405. data/spec/mongoid/relations/auto_save_spec.rb +37 -17
  406. data/spec/mongoid/relations/bindings/embedded/in_spec.rb +12 -12
  407. data/spec/mongoid/relations/bindings/embedded/many_spec.rb +3 -3
  408. data/spec/mongoid/relations/bindings/embedded/one_spec.rb +5 -5
  409. data/spec/mongoid/relations/bindings/referenced/in_spec.rb +26 -26
  410. data/spec/mongoid/relations/bindings/referenced/many_spec.rb +10 -10
  411. data/spec/mongoid/relations/bindings/referenced/many_to_many_spec.rb +19 -19
  412. data/spec/mongoid/relations/bindings/referenced/one_spec.rb +12 -12
  413. data/spec/mongoid/relations/builders/embedded/in_spec.rb +4 -4
  414. data/spec/mongoid/relations/builders/embedded/many_spec.rb +18 -18
  415. data/spec/mongoid/relations/builders/embedded/one_spec.rb +11 -11
  416. data/spec/mongoid/relations/builders/nested_attributes/many_spec.rb +12 -13
  417. data/spec/mongoid/relations/builders/nested_attributes/one_spec.rb +14 -14
  418. data/spec/mongoid/relations/builders/referenced/in_spec.rb +24 -35
  419. data/spec/mongoid/relations/builders/referenced/many_spec.rb +15 -15
  420. data/spec/mongoid/relations/builders/referenced/many_to_many_spec.rb +18 -18
  421. data/spec/mongoid/relations/builders/referenced/one_spec.rb +12 -25
  422. data/spec/mongoid/relations/builders_spec.rb +21 -21
  423. data/spec/mongoid/relations/cascading/delete_spec.rb +9 -9
  424. data/spec/mongoid/relations/cascading/destroy_spec.rb +6 -6
  425. data/spec/mongoid/relations/cascading/nullify_spec.rb +4 -4
  426. data/spec/mongoid/relations/cascading/restrict_spec.rb +7 -7
  427. data/spec/mongoid/relations/cascading_spec.rb +16 -16
  428. data/spec/mongoid/relations/constraint_spec.rb +8 -7
  429. data/spec/mongoid/relations/conversions_spec.rb +16 -14
  430. data/spec/mongoid/relations/counter_cache_spec.rb +85 -0
  431. data/spec/mongoid/relations/cyclic_spec.rb +18 -18
  432. data/spec/mongoid/relations/eager/belongs_to_spec.rb +154 -0
  433. data/spec/mongoid/relations/eager/has_and_belongs_to_many_spec.rb +117 -0
  434. data/spec/mongoid/relations/eager/has_many_spec.rb +207 -0
  435. data/spec/mongoid/relations/eager/has_one_spec.rb +163 -0
  436. data/spec/mongoid/relations/eager_spec.rb +228 -0
  437. data/spec/mongoid/relations/embedded/dirty_spec.rb +8 -8
  438. data/spec/mongoid/relations/embedded/in_spec.rb +56 -57
  439. data/spec/mongoid/relations/embedded/many_spec.rb +467 -372
  440. data/spec/mongoid/relations/embedded/one_spec.rb +108 -141
  441. data/spec/mongoid/relations/macros_spec.rb +108 -102
  442. data/spec/mongoid/relations/metadata_spec.rb +180 -255
  443. data/spec/mongoid/relations/options_spec.rb +1 -1
  444. data/spec/mongoid/relations/polymorphic_spec.rb +13 -17
  445. data/spec/mongoid/relations/proxy_spec.rb +2 -2
  446. data/spec/mongoid/relations/referenced/in_spec.rb +128 -303
  447. data/spec/mongoid/relations/referenced/many_spec.rb +587 -527
  448. data/spec/mongoid/relations/referenced/many_to_many_spec.rb +401 -424
  449. data/spec/mongoid/relations/referenced/one_spec.rb +149 -264
  450. data/spec/mongoid/relations/reflections_spec.rb +6 -6
  451. data/spec/mongoid/relations/synchronization_spec.rb +46 -50
  452. data/spec/mongoid/relations/targets/enumerable_spec.rb +118 -118
  453. data/spec/mongoid/relations/touchable_spec.rb +333 -0
  454. data/spec/mongoid/relations_spec.rb +16 -15
  455. data/spec/mongoid/{reloading_spec.rb → reloadable_spec.rb} +38 -55
  456. data/spec/mongoid/{scoping_spec.rb → scopable_spec.rb} +89 -164
  457. data/spec/mongoid/selectable_spec.rb +134 -0
  458. data/spec/mongoid/{serialization_spec.rb → serializable_spec.rb} +129 -82
  459. data/spec/mongoid/sessions/factory_spec.rb +49 -28
  460. data/spec/mongoid/sessions/mongo_uri_spec.rb +7 -7
  461. data/spec/mongoid/sessions/options_spec.rb +108 -0
  462. data/spec/mongoid/sessions_spec.rb +319 -178
  463. data/spec/mongoid/{sharding_spec.rb → shardable_spec.rb} +8 -8
  464. data/spec/mongoid/{state_spec.rb → stateful_spec.rb} +36 -11
  465. data/spec/mongoid/tasks/database_rake_spec.rb +285 -0
  466. data/spec/mongoid/tasks/database_spec.rb +160 -0
  467. data/spec/mongoid/threaded_spec.rb +17 -70
  468. data/spec/mongoid/timestamps/created/short_spec.rb +6 -6
  469. data/spec/mongoid/timestamps/created_spec.rb +5 -5
  470. data/spec/mongoid/timestamps/timeless_spec.rb +6 -6
  471. data/spec/mongoid/timestamps/updated/short_spec.rb +11 -11
  472. data/spec/mongoid/timestamps/updated_spec.rb +9 -13
  473. data/spec/mongoid/timestamps_spec.rb +9 -13
  474. data/spec/mongoid/{hierarchy_spec.rb → traversable_spec.rb} +19 -19
  475. data/spec/mongoid/{validations → validatable}/associated_spec.rb +45 -22
  476. data/spec/mongoid/{validations → validatable}/format_spec.rb +6 -6
  477. data/spec/mongoid/{validations → validatable}/length_spec.rb +14 -14
  478. data/spec/mongoid/{validations → validatable}/numericality_spec.rb +1 -1
  479. data/spec/mongoid/{validations → validatable}/presence_spec.rb +37 -44
  480. data/spec/mongoid/{validations → validatable}/uniqueness_spec.rb +184 -192
  481. data/spec/mongoid/{validations_spec.rb → validatable_spec.rb} +28 -28
  482. data/spec/mongoid_spec.rb +8 -8
  483. data/spec/rails/mongoid_spec.rb +19 -335
  484. data/spec/spec_helper.rb +31 -13
  485. metadata +303 -283
  486. data/lib/mongoid/atomic/positionable.rb +0 -73
  487. data/lib/mongoid/components.rb +0 -92
  488. data/lib/mongoid/config/inflections.rb +0 -6
  489. data/lib/mongoid/contextual/eager.rb +0 -158
  490. data/lib/mongoid/errors/versioning_not_on_root.rb +0 -23
  491. data/lib/mongoid/identity_map.rb +0 -163
  492. data/lib/mongoid/json.rb +0 -16
  493. data/lib/mongoid/matchers.rb +0 -32
  494. data/lib/mongoid/matchers/strategies.rb +0 -97
  495. data/lib/mongoid/multi_parameter_attributes.rb +0 -105
  496. data/lib/mongoid/nested_attributes.rb +0 -78
  497. data/lib/mongoid/observer.rb +0 -192
  498. data/lib/mongoid/paranoia.rb +0 -136
  499. data/lib/mongoid/persistence.rb +0 -357
  500. data/lib/mongoid/persistence/atomic.rb +0 -231
  501. data/lib/mongoid/persistence/atomic/add_to_set.rb +0 -47
  502. data/lib/mongoid/persistence/atomic/bit.rb +0 -35
  503. data/lib/mongoid/persistence/atomic/inc.rb +0 -45
  504. data/lib/mongoid/persistence/atomic/operation.rb +0 -154
  505. data/lib/mongoid/persistence/atomic/pop.rb +0 -32
  506. data/lib/mongoid/persistence/atomic/pull.rb +0 -32
  507. data/lib/mongoid/persistence/atomic/pull_all.rb +0 -32
  508. data/lib/mongoid/persistence/atomic/push.rb +0 -25
  509. data/lib/mongoid/persistence/atomic/push_all.rb +0 -25
  510. data/lib/mongoid/persistence/atomic/rename.rb +0 -30
  511. data/lib/mongoid/persistence/atomic/sets.rb +0 -28
  512. data/lib/mongoid/persistence/atomic/unset.rb +0 -27
  513. data/lib/mongoid/persistence/deletion.rb +0 -31
  514. data/lib/mongoid/persistence/insertion.rb +0 -38
  515. data/lib/mongoid/persistence/modification.rb +0 -35
  516. data/lib/mongoid/persistence/operations.rb +0 -214
  517. data/lib/mongoid/persistence/operations/embedded/insert.rb +0 -46
  518. data/lib/mongoid/persistence/operations/embedded/remove.rb +0 -43
  519. data/lib/mongoid/persistence/operations/insert.rb +0 -34
  520. data/lib/mongoid/persistence/operations/remove.rb +0 -33
  521. data/lib/mongoid/persistence/operations/update.rb +0 -59
  522. data/lib/mongoid/persistence/operations/upsert.rb +0 -28
  523. data/lib/mongoid/persistence/upsertion.rb +0 -31
  524. data/lib/mongoid/unit_of_work.rb +0 -61
  525. data/lib/mongoid/versioning.rb +0 -217
  526. data/lib/rack/mongoid.rb +0 -2
  527. data/lib/rack/mongoid/middleware/identity_map.rb +0 -39
  528. data/lib/rails/generators/mongoid/observer/observer_generator.rb +0 -17
  529. data/lib/rails/generators/mongoid/observer/templates/observer.rb.tt +0 -4
  530. data/spec/app/models/actor_observer.rb +0 -15
  531. data/spec/app/models/callback_recorder.rb +0 -25
  532. data/spec/app/models/paranoid_phone.rb +0 -25
  533. data/spec/app/models/paranoid_post.rb +0 -36
  534. data/spec/app/models/phone_observer.rb +0 -6
  535. data/spec/mongoid/attributes/processing_spec.rb +0 -149
  536. data/spec/mongoid/criterion/destructive_spec.rb +0 -101
  537. data/spec/mongoid/criterion/modifiable_spec.rb +0 -409
  538. data/spec/mongoid/criterion/modification_spec.rb +0 -402
  539. data/spec/mongoid/errors/versioning_not_on_root_spec.rb +0 -29
  540. data/spec/mongoid/finders_spec.rb +0 -321
  541. data/spec/mongoid/identity_map_spec.rb +0 -564
  542. data/spec/mongoid/json_spec.rb +0 -33
  543. data/spec/mongoid/matchers/in_spec.rb +0 -25
  544. data/spec/mongoid/matchers/ne_spec.rb +0 -25
  545. data/spec/mongoid/matchers/nin_spec.rb +0 -25
  546. data/spec/mongoid/multi_parameter_attributes_spec.rb +0 -128
  547. data/spec/mongoid/observer_spec.rb +0 -290
  548. data/spec/mongoid/paranoia_spec.rb +0 -759
  549. data/spec/mongoid/persistence/atomic/add_to_set_spec.rb +0 -262
  550. data/spec/mongoid/persistence/atomic/bit_spec.rb +0 -88
  551. data/spec/mongoid/persistence/atomic/inc_spec.rb +0 -133
  552. data/spec/mongoid/persistence/atomic/pop_spec.rb +0 -111
  553. data/spec/mongoid/persistence/atomic/pull_all_spec.rb +0 -77
  554. data/spec/mongoid/persistence/atomic/pull_spec.rb +0 -80
  555. data/spec/mongoid/persistence/atomic/push_all_spec.rb +0 -77
  556. data/spec/mongoid/persistence/atomic/push_spec.rb +0 -77
  557. data/spec/mongoid/persistence/atomic/rename_spec.rb +0 -42
  558. data/spec/mongoid/persistence/atomic/sets_spec.rb +0 -154
  559. data/spec/mongoid/persistence/atomic/unset_spec.rb +0 -65
  560. data/spec/mongoid/persistence/atomic_spec.rb +0 -216
  561. data/spec/mongoid/persistence/operations/embedded/insert_spec.rb +0 -191
  562. data/spec/mongoid/persistence/operations/embedded/remove_spec.rb +0 -8
  563. data/spec/mongoid/persistence/operations/insert_spec.rb +0 -149
  564. data/spec/mongoid/persistence/operations/remove_spec.rb +0 -113
  565. data/spec/mongoid/persistence/operations/update_spec.rb +0 -141
  566. data/spec/mongoid/persistence/operations/upsert_spec.rb +0 -59
  567. data/spec/mongoid/persistence/operations_spec.rb +0 -313
  568. data/spec/mongoid/persistence_spec.rb +0 -2279
  569. data/spec/mongoid/unit_of_work_spec.rb +0 -196
  570. data/spec/mongoid/versioning_spec.rb +0 -540
  571. data/spec/rack/mongoid/middleware/identity_map_spec.rb +0 -72
@@ -1,6 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
- describe Mongoid::Dirty do
3
+ describe Mongoid::Changeable do
4
4
 
5
5
  describe "#attribute_change" do
6
6
 
@@ -17,13 +17,13 @@ describe Mongoid::Dirty do
17
17
  end
18
18
 
19
19
  it "returns an array of the old value and new value" do
20
- person.send(:attribute_change, "title").should eq(
20
+ expect(person.send(:attribute_change, "title")).to eq(
21
21
  [ "Grand Poobah", "Captain Obvious" ]
22
22
  )
23
23
  end
24
24
 
25
25
  it "allows access via (attribute)_change" do
26
- person.title_change.should eq(
26
+ expect(person.title_change).to eq(
27
27
  [ "Grand Poobah", "Captain Obvious" ]
28
28
  )
29
29
  end
@@ -39,13 +39,13 @@ describe Mongoid::Dirty do
39
39
  end
40
40
 
41
41
  it "returns an array of the old value and new value" do
42
- person.send(:attribute_change, "test").should eq(
42
+ expect(person.send(:attribute_change, "test")).to eq(
43
43
  [ "Aliased 1", "Aliased 2" ]
44
44
  )
45
45
  end
46
46
 
47
47
  it "allows access via (attribute)_change" do
48
- person.test_change.should eq(
48
+ expect(person.test_change).to eq(
49
49
  [ "Aliased 1", "Aliased 2" ]
50
50
  )
51
51
  end
@@ -63,13 +63,13 @@ describe Mongoid::Dirty do
63
63
  end
64
64
 
65
65
  it "returns an array of the old value and new value" do
66
- person.send(:attribute_change, "title").should eq(
66
+ expect(person.send(:attribute_change, "title")).to eq(
67
67
  [ "Grand Poobah", "Captain Obvious" ]
68
68
  )
69
69
  end
70
70
 
71
71
  it "allows access via (attribute)_change" do
72
- person.title_change.should eq(
72
+ expect(person.title_change).to eq(
73
73
  [ "Grand Poobah", "Captain Obvious" ]
74
74
  )
75
75
  end
@@ -85,11 +85,11 @@ describe Mongoid::Dirty do
85
85
  end
86
86
 
87
87
  it "returns an array of nil and new value" do
88
- person.send(:attribute_change, "pets").should eq([ nil, true ])
88
+ expect(person.send(:attribute_change, "pets")).to eq([ nil, true ])
89
89
  end
90
90
 
91
91
  it "allows access via (attribute)_change" do
92
- person.pets_change.should eq([ nil, true ])
92
+ expect(person.pets_change).to eq([ nil, true ])
93
93
  end
94
94
  end
95
95
 
@@ -106,11 +106,11 @@ describe Mongoid::Dirty do
106
106
  end
107
107
 
108
108
  it "returns an array of nil and new value" do
109
- person.send(:attribute_change, "pets").should eq([ nil, true ])
109
+ expect(person.send(:attribute_change, "pets")).to eq([ nil, true ])
110
110
  end
111
111
 
112
112
  it "allows access via (attribute)_change" do
113
- person.pets_change.should eq([ nil, true ])
113
+ expect(person.pets_change).to eq([ nil, true ])
114
114
  end
115
115
  end
116
116
 
@@ -121,11 +121,11 @@ describe Mongoid::Dirty do
121
121
  end
122
122
 
123
123
  before do
124
- person[:a] = "test"
124
+ person[:t] = "test"
125
125
  end
126
126
 
127
127
  it "returns an array of nil and new value" do
128
- person.send(:attribute_change, "a").should eq([ nil, "test" ])
128
+ expect(person.send(:attribute_change, "t")).to eq([ nil, "test" ])
129
129
  end
130
130
  end
131
131
  end
@@ -143,13 +143,13 @@ describe Mongoid::Dirty do
143
143
  end
144
144
 
145
145
  it "returns an array of the original value and new value" do
146
- person.send(:attribute_change, "title").should eq(
146
+ expect(person.send(:attribute_change, "title")).to eq(
147
147
  [ "Grand Poobah", "Dark Helmet" ]
148
148
  )
149
149
  end
150
150
 
151
151
  it "allows access via (attribute)_change" do
152
- person.title_change.should eq(
152
+ expect(person.title_change).to eq(
153
153
  [ "Grand Poobah", "Dark Helmet" ]
154
154
  )
155
155
  end
@@ -168,13 +168,13 @@ describe Mongoid::Dirty do
168
168
  end
169
169
 
170
170
  it "returns an array of the original value and new value" do
171
- person.send(:attribute_change, "aliases").should eq(
171
+ expect(person.send(:attribute_change, "aliases")).to eq(
172
172
  [[ "Grand Poobah" ], [ "Dark Helmet" ]]
173
173
  )
174
174
  end
175
175
 
176
176
  it "allows access via (attribute)_change" do
177
- person.aliases_change.should eq(
177
+ expect(person.aliases_change).to eq(
178
178
  [[ "Grand Poobah" ], [ "Dark Helmet" ]]
179
179
  )
180
180
  end
@@ -186,7 +186,7 @@ describe Mongoid::Dirty do
186
186
  end
187
187
 
188
188
  it "returns an array of the original value and new value" do
189
- person.send(:attribute_change, "aliases").should eq(
189
+ expect(person.send(:attribute_change, "aliases")).to eq(
190
190
  [[ "Grand Poobah" ], [ "Dark Helmet", "Colonel Sanders" ]]
191
191
  )
192
192
  end
@@ -204,13 +204,13 @@ describe Mongoid::Dirty do
204
204
  end
205
205
 
206
206
  it "returns an array of the original value and new value" do
207
- person.send(:attribute_change, "map").should eq(
207
+ expect(person.send(:attribute_change, "map")).to eq(
208
208
  [{ location: "Home" }, { location: "Work" }]
209
209
  )
210
210
  end
211
211
 
212
212
  it "allows access via (attribute)_change" do
213
- person.map_change.should eq(
213
+ expect(person.map_change).to eq(
214
214
  [{ location: "Home" }, { location: "Work" }]
215
215
  )
216
216
  end
@@ -222,7 +222,7 @@ describe Mongoid::Dirty do
222
222
  end
223
223
 
224
224
  it "returns an array of the original value and new value" do
225
- person.send(:attribute_change, "map").should eq(
225
+ expect(person.send(:attribute_change, "map")).to eq(
226
226
  [{ location: "Home" }, { location: "Work", lat: 20.0 }]
227
227
  )
228
228
  end
@@ -250,7 +250,7 @@ describe Mongoid::Dirty do
250
250
  end
251
251
 
252
252
  it "flags the attribute as changed" do
253
- person.send(:attribute_change, "map").should eq(
253
+ expect(person.send(:attribute_change, "map")).to eq(
254
254
  [
255
255
  {
256
256
  "stack1" => [ 1, 2, 3, 4 ],
@@ -277,7 +277,7 @@ describe Mongoid::Dirty do
277
277
  end
278
278
 
279
279
  it "returns nil" do
280
- person.send(:attribute_change, "title").should be_nil
280
+ expect(person.send(:attribute_change, "title")).to be_nil
281
281
  end
282
282
  end
283
283
 
@@ -290,7 +290,7 @@ describe Mongoid::Dirty do
290
290
  end
291
291
 
292
292
  it "returns the change" do
293
- person.send(:attribute_change, "pets").should eq([ nil, false ])
293
+ expect(person.send(:attribute_change, "pets")).to eq([ nil, false ])
294
294
  end
295
295
  end
296
296
 
@@ -301,7 +301,7 @@ describe Mongoid::Dirty do
301
301
  end
302
302
 
303
303
  it "returns nil" do
304
- person.send(:attribute_change, "pets").should be_nil
304
+ expect(person.send(:attribute_change, "pets")).to be_nil
305
305
  end
306
306
  end
307
307
  end
@@ -317,7 +317,7 @@ describe Mongoid::Dirty do
317
317
  end
318
318
 
319
319
  it "returns an empty array" do
320
- person.send(:attribute_change, "title").should be_nil
320
+ expect(person.send(:attribute_change, "title")).to be_nil
321
321
  end
322
322
  end
323
323
 
@@ -332,7 +332,7 @@ describe Mongoid::Dirty do
332
332
  end
333
333
 
334
334
  it "returns an empty array" do
335
- person.send(:attribute_change, "title").should eq(
335
+ expect(person.send(:attribute_change, "title")).to eq(
336
336
  [ "Grand Poobah", nil ]
337
337
  )
338
338
  end
@@ -352,11 +352,11 @@ describe Mongoid::Dirty do
352
352
  end
353
353
 
354
354
  it "returns true" do
355
- person.send(:attribute_changed?, "title").should be_true
355
+ expect(person.send(:attribute_changed?, "title")).to be true
356
356
  end
357
357
 
358
358
  it "allows access via (attribute)_changed?" do
359
- person.title_changed?.should be_true
359
+ expect(person.title_changed?).to be true
360
360
  end
361
361
 
362
362
  context "when the field is aliased" do
@@ -370,11 +370,11 @@ describe Mongoid::Dirty do
370
370
  end
371
371
 
372
372
  it "returns true" do
373
- person.send(:attribute_changed?, "test").should be_true
373
+ expect(person.send(:attribute_changed?, "test")).to be true
374
374
  end
375
375
 
376
376
  it "allows access via (attribute)_changed?" do
377
- person.test_changed?.should be_true
377
+ expect(person.test_changed?).to be true
378
378
  end
379
379
  end
380
380
  end
@@ -390,11 +390,11 @@ describe Mongoid::Dirty do
390
390
  end
391
391
 
392
392
  it "returns true" do
393
- person.send(:attribute_changed?, "pets").should be_true
393
+ expect(person.send(:attribute_changed?, "pets")).to be true
394
394
  end
395
395
 
396
396
  it "allows access via (attribute)_changed?" do
397
- person.pets_changed?.should be_true
397
+ expect(person.pets_changed?).to be true
398
398
  end
399
399
  end
400
400
 
@@ -405,7 +405,7 @@ describe Mongoid::Dirty do
405
405
  end
406
406
 
407
407
  it "returns false" do
408
- person.send(:attribute_changed?, "title").should be_false
408
+ expect(person.send(:attribute_changed?, "title")).to be false
409
409
  end
410
410
  end
411
411
 
@@ -420,7 +420,7 @@ describe Mongoid::Dirty do
420
420
  end
421
421
 
422
422
  it "returns true" do
423
- person.send(:attribute_changed?, "pets").should be_true
423
+ expect(person.send(:attribute_changed?, "pets")).to be true
424
424
  end
425
425
  end
426
426
 
@@ -431,7 +431,7 @@ describe Mongoid::Dirty do
431
431
  end
432
432
 
433
433
  it "returns false" do
434
- person.send(:attribute_changed?, "pets").should be_false
434
+ expect(person.send(:attribute_changed?, "pets")).to be false
435
435
  end
436
436
  end
437
437
  end
@@ -450,7 +450,7 @@ describe Mongoid::Dirty do
450
450
  end
451
451
 
452
452
  it "returns false" do
453
- person.should_not be_aliases_changed
453
+ expect(person).to_not be_aliases_changed
454
454
  end
455
455
  end
456
456
  end
@@ -469,7 +469,7 @@ describe Mongoid::Dirty do
469
469
  end
470
470
 
471
471
  it "returns false" do
472
- person.should_not be_map_changed
472
+ expect(person).to_not be_map_changed
473
473
  end
474
474
  end
475
475
  end
@@ -485,7 +485,7 @@ describe Mongoid::Dirty do
485
485
  end
486
486
 
487
487
  it "returns true" do
488
- person.should be_age_changed_from_default
488
+ expect(person).to be_age_changed_from_default
489
489
  end
490
490
  end
491
491
 
@@ -496,7 +496,7 @@ describe Mongoid::Dirty do
496
496
  end
497
497
 
498
498
  it "returns false" do
499
- person.should_not be_age_changed_from_default
499
+ expect(person).to_not be_age_changed_from_default
500
500
  end
501
501
  end
502
502
  end
@@ -514,11 +514,11 @@ describe Mongoid::Dirty do
514
514
  end
515
515
 
516
516
  it "returns the old value" do
517
- person.send(:attribute_was, "title").should eq("Grand Poobah")
517
+ expect(person.send(:attribute_was, "title")).to eq("Grand Poobah")
518
518
  end
519
519
 
520
520
  it "allows access via (attribute)_was" do
521
- person.title_was.should eq("Grand Poobah")
521
+ expect(person.title_was).to eq("Grand Poobah")
522
522
  end
523
523
 
524
524
  context "when the field is aliased" do
@@ -532,34 +532,15 @@ describe Mongoid::Dirty do
532
532
  end
533
533
 
534
534
  it "returns the old value" do
535
- person.send(:attribute_was, "test").should eq("Aliased 1")
535
+ expect(person.send(:attribute_was, "test")).to eq("Aliased 1")
536
536
  end
537
537
 
538
538
  it "allows access via (attribute)_was" do
539
- person.test_was.should eq("Aliased 1")
539
+ expect(person.test_was).to eq("Aliased 1")
540
540
  end
541
541
  end
542
542
  end
543
543
 
544
- context "when the attribute has changed from the default value" do
545
-
546
- let(:person) do
547
- Person.new
548
- end
549
-
550
- before do
551
- person.pets = true
552
- end
553
-
554
- it "returns the default value" do
555
- person.send(:attribute_was, "pets").should be_false
556
- end
557
-
558
- it "allows access via (attribute)_was" do
559
- person.pets_was.should be_false
560
- end
561
- end
562
-
563
544
  context "when the attribute has not changed from the persisted value" do
564
545
 
565
546
  let!(:person) do
@@ -567,18 +548,7 @@ describe Mongoid::Dirty do
567
548
  end
568
549
 
569
550
  it "returns the original value" do
570
- person.send(:attribute_was, "title").should eq("Grand Poobah")
571
- end
572
- end
573
-
574
- context "when the attribute has not changed from the default value" do
575
-
576
- let(:person) do
577
- Person.new
578
- end
579
-
580
- it "returns the default value" do
581
- person.send(:attribute_was, "pets").should be_false
551
+ expect(person.send(:attribute_was, "title")).to eq("Grand Poobah")
582
552
  end
583
553
  end
584
554
  end
@@ -608,11 +578,11 @@ describe Mongoid::Dirty do
608
578
  end
609
579
 
610
580
  it "does not return the value in the changes" do
611
- changes.should be_empty
581
+ expect(changes).to be_empty
612
582
  end
613
583
 
614
584
  it "is not flagged as changed" do
615
- person.should_not be_changed
585
+ expect(person).to_not be_changed
616
586
  end
617
587
  end
618
588
 
@@ -628,7 +598,7 @@ describe Mongoid::Dirty do
628
598
  end
629
599
 
630
600
  it "returns the value in the changes" do
631
- changes.should eq({ "aliases" => [[ "007" ], [ "007", "008" ]] })
601
+ expect(changes).to eq({ "aliases" => [[ "007" ], [ "007", "008" ]] })
632
602
  end
633
603
  end
634
604
 
@@ -645,11 +615,11 @@ describe Mongoid::Dirty do
645
615
  end
646
616
 
647
617
  it "clones the value" do
648
- changed["aliases"].should_not equal(aliases)
618
+ expect(changed["aliases"]).to_not equal(aliases)
649
619
  end
650
620
 
651
621
  it "puts the old value in the changes" do
652
- changed["aliases"].should eq(aliases)
622
+ expect(changed["aliases"]).to eq(aliases)
653
623
  end
654
624
  end
655
625
 
@@ -657,7 +627,7 @@ describe Mongoid::Dirty do
657
627
 
658
628
  before do
659
629
  person.changed_attributes["aliases"] = aliases
660
- aliases.should_receive(:clone).never
630
+ expect(aliases).to receive(:clone).never
661
631
  person.aliases_will_change!
662
632
  end
663
633
 
@@ -666,11 +636,11 @@ describe Mongoid::Dirty do
666
636
  end
667
637
 
668
638
  it "does not clone the value" do
669
- changed["aliases"].should equal(aliases)
639
+ expect(changed["aliases"]).to equal(aliases)
670
640
  end
671
641
 
672
642
  it "retains the first value in the changes" do
673
- changed["aliases"].should eq(aliases)
643
+ expect(changed["aliases"]).to eq(aliases)
674
644
  end
675
645
  end
676
646
  end
@@ -689,7 +659,7 @@ describe Mongoid::Dirty do
689
659
  end
690
660
 
691
661
  it "returns an array of changed field names" do
692
- person.changed.should include("title")
662
+ expect(person.changed).to include("title")
693
663
  end
694
664
  end
695
665
 
@@ -700,7 +670,7 @@ describe Mongoid::Dirty do
700
670
  end
701
671
 
702
672
  it "does not include non changed fields" do
703
- person.changed.should_not include("title")
673
+ expect(person.changed).to_not include("title")
704
674
  end
705
675
  end
706
676
 
@@ -721,7 +691,7 @@ describe Mongoid::Dirty do
721
691
  end
722
692
 
723
693
  it "returns true" do
724
- person.name.should be_changed
694
+ expect(person.name).to be_changed
725
695
  end
726
696
  end
727
697
  end
@@ -740,7 +710,7 @@ describe Mongoid::Dirty do
740
710
  end
741
711
 
742
712
  it "returns true" do
743
- person.should be_changed
713
+ expect(person).to be_changed
744
714
  end
745
715
  end
746
716
 
@@ -757,7 +727,7 @@ describe Mongoid::Dirty do
757
727
  end
758
728
 
759
729
  it "returns false" do
760
- person.should_not be_changed
730
+ expect(person).to_not be_changed
761
731
  end
762
732
  end
763
733
 
@@ -772,7 +742,7 @@ describe Mongoid::Dirty do
772
742
  end
773
743
 
774
744
  it "returns true" do
775
- person.should be_changed
745
+ expect(person).to be_changed
776
746
  end
777
747
  end
778
748
 
@@ -783,13 +753,12 @@ describe Mongoid::Dirty do
783
753
  end
784
754
 
785
755
  before do
786
- Mongoid.configure.allow_dynamic_fields = true
787
756
  person.other_name[:full][:first] = 'Name'
788
757
  end
789
758
 
790
759
  it "returns true" do
791
- person.changes.should_not be_empty
792
- person.should be_changed
760
+ expect(person.changes).to_not be_empty
761
+ expect(person).to be_changed
793
762
  end
794
763
  end
795
764
  end
@@ -797,11 +766,11 @@ describe Mongoid::Dirty do
797
766
  context "when the document has not changed" do
798
767
 
799
768
  let(:acolyte) do
800
- Acolyte.instantiate("_id" => Moped::BSON::ObjectId.new)
769
+ Acolyte.instantiate("_id" => BSON::ObjectId.new)
801
770
  end
802
771
 
803
772
  it "returns false" do
804
- acolyte.should_not be_changed
773
+ expect(acolyte).to_not be_changed
805
774
  end
806
775
  end
807
776
 
@@ -820,7 +789,7 @@ describe Mongoid::Dirty do
820
789
  end
821
790
 
822
791
  it "returns true" do
823
- person.should be_changed
792
+ expect(person).to be_changed
824
793
  end
825
794
  end
826
795
 
@@ -843,7 +812,7 @@ describe Mongoid::Dirty do
843
812
  end
844
813
 
845
814
  it "returns true" do
846
- person.should be_changed
815
+ expect(person).to be_changed
847
816
  end
848
817
  end
849
818
 
@@ -858,7 +827,7 @@ describe Mongoid::Dirty do
858
827
  end
859
828
 
860
829
  it "returns true" do
861
- person.should be_changed
830
+ expect(person).to be_changed
862
831
  end
863
832
  end
864
833
 
@@ -877,7 +846,7 @@ describe Mongoid::Dirty do
877
846
  end
878
847
 
879
848
  it "returns true" do
880
- person.should be_changed
849
+ expect(person).to be_changed
881
850
  end
882
851
  end
883
852
  end
@@ -895,13 +864,13 @@ describe Mongoid::Dirty do
895
864
  end
896
865
 
897
866
  it "returns a hash of changes" do
898
- person.changes["title"].should eq(
867
+ expect(person.changes["title"]).to eq(
899
868
  [ nil, "Captain Obvious" ]
900
869
  )
901
870
  end
902
871
 
903
872
  it "returns a hash with indifferent access" do
904
- person.changes["title"].should eq(
873
+ expect(person.changes["title"]).to eq(
905
874
  [ nil, "Captain Obvious" ]
906
875
  )
907
876
  end
@@ -910,11 +879,11 @@ describe Mongoid::Dirty do
910
879
  context "when the document has not changed" do
911
880
 
912
881
  let(:acolyte) do
913
- Acolyte.instantiate("_id" => Moped::BSON::ObjectId.new)
882
+ Acolyte.instantiate("_id" => BSON::ObjectId.new)
914
883
  end
915
884
 
916
885
  it "returns an empty hash" do
917
- acolyte.changes.should be_empty
886
+ expect(acolyte.changes).to be_empty
918
887
  end
919
888
  end
920
889
  end
@@ -943,7 +912,7 @@ describe Mongoid::Dirty do
943
912
  end
944
913
 
945
914
  it "contains array changes in the setters" do
946
- setters.should eq({ "aliases" => [] })
915
+ expect(setters).to eq({ "aliases" => [] })
947
916
  end
948
917
  end
949
918
 
@@ -958,7 +927,7 @@ describe Mongoid::Dirty do
958
927
  end
959
928
 
960
929
  it "contains array changes in the setters" do
961
- setters.should eq({ "aliases" => [ "007", "008" ] })
930
+ expect(setters).to eq({ "aliases" => [ "007", "008" ] })
962
931
  end
963
932
  end
964
933
 
@@ -974,7 +943,7 @@ describe Mongoid::Dirty do
974
943
  end
975
944
 
976
945
  it "does not contain array changes in the setters" do
977
- setters.should eq({ "aliases" => [ "008" ]})
946
+ expect(setters).to eq({ "aliases" => [ "008" ]})
978
947
  end
979
948
  end
980
949
  end
@@ -990,7 +959,7 @@ describe Mongoid::Dirty do
990
959
  end
991
960
 
992
961
  it "returns a hash of field names and new values" do
993
- person.setters["title"].should eq("Captain Obvious")
962
+ expect(person.setters["title"]).to eq("Captain Obvious")
994
963
  end
995
964
  end
996
965
 
@@ -1012,7 +981,7 @@ describe Mongoid::Dirty do
1012
981
  end
1013
982
 
1014
983
  it "returns a hash of field names and new values" do
1015
- address.setters.should eq(
984
+ expect(address.setters).to eq(
1016
985
  { "addresses.0.street" => "Bond St" }
1017
986
  )
1018
987
  end
@@ -1030,7 +999,7 @@ describe Mongoid::Dirty do
1030
999
  end
1031
1000
 
1032
1001
  it "returns the proper hash with locations" do
1033
- location.setters.should eq(
1002
+ expect(location.setters).to eq(
1034
1003
  { "addresses.0.locations.0.name" => "Work" }
1035
1004
  )
1036
1005
  end
@@ -1041,11 +1010,11 @@ describe Mongoid::Dirty do
1041
1010
  context "when the document has not changed" do
1042
1011
 
1043
1012
  let(:acolyte) do
1044
- Acolyte.instantiate("_id" => Moped::BSON::ObjectId.new)
1013
+ Acolyte.instantiate("_id" => BSON::ObjectId.new)
1045
1014
  end
1046
1015
 
1047
1016
  it "returns an empty hash" do
1048
- acolyte.setters.should be_empty
1017
+ expect(acolyte.setters).to be_empty
1049
1018
  end
1050
1019
  end
1051
1020
  end
@@ -1067,7 +1036,7 @@ describe Mongoid::Dirty do
1067
1036
  end
1068
1037
 
1069
1038
  it "returns the changes before the save" do
1070
- person.previous_changes["title"].should eq(
1039
+ expect(person.previous_changes["title"]).to eq(
1071
1040
  [ nil, "Captain Obvious" ]
1072
1041
  )
1073
1042
  end
@@ -1076,7 +1045,7 @@ describe Mongoid::Dirty do
1076
1045
  context "when the document has not been saved" do
1077
1046
 
1078
1047
  it "returns an empty hash" do
1079
- person.previous_changes.should be_empty
1048
+ expect(person.previous_changes).to be_empty
1080
1049
  end
1081
1050
  end
1082
1051
  end
@@ -1095,19 +1064,19 @@ describe Mongoid::Dirty do
1095
1064
  end
1096
1065
 
1097
1066
  it "clears the atomic pulls" do
1098
- person.atomic_pulls.should be_empty
1067
+ expect(person.atomic_pulls).to be_empty
1099
1068
  end
1100
1069
 
1101
1070
  it "clears the atomic unsets" do
1102
- person.atomic_unsets.should be_empty
1071
+ expect(person.atomic_unsets).to be_empty
1103
1072
  end
1104
1073
 
1105
1074
  it "clears the delayed atomic sets" do
1106
- person.delayed_atomic_sets.should be_empty
1075
+ expect(person.delayed_atomic_sets).to be_empty
1107
1076
  end
1108
1077
 
1109
1078
  it "clears the changed attributes" do
1110
- person.changed_attributes.should be_empty
1079
+ expect(person.changed_attributes).to be_empty
1111
1080
  end
1112
1081
  end
1113
1082
 
@@ -1125,15 +1094,15 @@ describe Mongoid::Dirty do
1125
1094
  end
1126
1095
 
1127
1096
  it "resets the value to the original" do
1128
- person.title.should be_nil
1097
+ expect(person.title).to be_nil
1129
1098
  end
1130
1099
 
1131
1100
  it "allows access via reset_(attribute)!" do
1132
- person.title.should be_nil
1101
+ expect(person.title).to be_nil
1133
1102
  end
1134
1103
 
1135
1104
  it "removes the field from the changes" do
1136
- person.changed.should_not include("title")
1105
+ expect(person.changed).to_not include("title")
1137
1106
  end
1138
1107
 
1139
1108
  context "when the field is aliased" do
@@ -1148,11 +1117,11 @@ describe Mongoid::Dirty do
1148
1117
  end
1149
1118
 
1150
1119
  it "resets the value to the original" do
1151
- person.test.should be_nil
1120
+ expect(person.test).to be_nil
1152
1121
  end
1153
1122
 
1154
1123
  it "removes the field from the changes" do
1155
- person.changed.should_not include("test")
1124
+ expect(person.changed).to_not include("test")
1156
1125
  end
1157
1126
  end
1158
1127
  end
@@ -1168,7 +1137,84 @@ describe Mongoid::Dirty do
1168
1137
  end
1169
1138
 
1170
1139
  it "does nothing" do
1171
- person.title.should be_nil
1140
+ expect(person.title).to be_nil
1141
+ end
1142
+ end
1143
+ end
1144
+
1145
+ describe "#reset_attribute_to_default!" do
1146
+
1147
+ context "when a default is defined" do
1148
+
1149
+ context "when the document is new" do
1150
+
1151
+ let(:person) do
1152
+ Person.new(pets: true)
1153
+ end
1154
+
1155
+ before do
1156
+ person.reset_pets_to_default!
1157
+ end
1158
+
1159
+ it "resets to the default value" do
1160
+ expect(person.pets).to eq(false)
1161
+ end
1162
+ end
1163
+
1164
+ context "when the document is persisted" do
1165
+
1166
+ let(:person) do
1167
+ Person.create(pets: true)
1168
+ end
1169
+
1170
+ before do
1171
+ person.reset_pets_to_default!
1172
+ end
1173
+
1174
+ it "resets to the default value" do
1175
+ expect(person.pets).to eq(false)
1176
+ end
1177
+
1178
+ it "flags the document dirty" do
1179
+ expect(person).to be_pets_changed
1180
+ end
1181
+ end
1182
+ end
1183
+
1184
+ context "when a default is not defined" do
1185
+
1186
+ context "when the document is new" do
1187
+
1188
+ let(:person) do
1189
+ Person.new(title: "test")
1190
+ end
1191
+
1192
+ before do
1193
+ person.reset_title_to_default!
1194
+ end
1195
+
1196
+ it "resets to nil" do
1197
+ expect(person.title).to be_nil
1198
+ end
1199
+ end
1200
+
1201
+ context "when the document is persisted" do
1202
+
1203
+ let(:person) do
1204
+ Person.create(title: "test")
1205
+ end
1206
+
1207
+ before do
1208
+ person.reset_title_to_default!
1209
+ end
1210
+
1211
+ it "resets to nil" do
1212
+ expect(person.title).to be_nil
1213
+ end
1214
+
1215
+ it "flags the document dirty" do
1216
+ expect(person).to be_title_changed
1217
+ end
1172
1218
  end
1173
1219
  end
1174
1220
  end
@@ -1180,15 +1226,15 @@ describe Mongoid::Dirty do
1180
1226
  end
1181
1227
 
1182
1228
  it "defines a _change method" do
1183
- document.updated_at_change.should be_nil
1229
+ expect(document.updated_at_change).to be_nil
1184
1230
  end
1185
1231
 
1186
1232
  it "defines a _changed? method" do
1187
- document.updated_at_changed?.should be_false
1233
+ expect(document.updated_at_changed?).to be false
1188
1234
  end
1189
1235
 
1190
1236
  it "defines a _changes method" do
1191
- document.updated_at_was.should be_nil
1237
+ expect(document.updated_at_was).to be_nil
1192
1238
  end
1193
1239
  end
1194
1240
 
@@ -1207,7 +1253,7 @@ describe Mongoid::Dirty do
1207
1253
  end
1208
1254
 
1209
1255
  it "flags the parent as changed" do
1210
- person.should be_changed
1256
+ expect(person).to be_changed
1211
1257
  end
1212
1258
  end
1213
1259
 
@@ -1222,7 +1268,7 @@ describe Mongoid::Dirty do
1222
1268
  end
1223
1269
 
1224
1270
  it "flags the parent as changed" do
1225
- person.should be_changed
1271
+ expect(person).to be_changed
1226
1272
  end
1227
1273
  end
1228
1274
 
@@ -1233,7 +1279,7 @@ describe Mongoid::Dirty do
1233
1279
  end
1234
1280
 
1235
1281
  it "does not flag the parent as changed" do
1236
- person.should_not be_changed
1282
+ expect(person).to_not be_changed
1237
1283
  end
1238
1284
  end
1239
1285
  end
@@ -1247,7 +1293,7 @@ describe Mongoid::Dirty do
1247
1293
  end
1248
1294
 
1249
1295
  it "flags the parent as changed" do
1250
- person.should be_changed
1296
+ expect(person).to be_changed
1251
1297
  end
1252
1298
  end
1253
1299
 
@@ -1262,7 +1308,7 @@ describe Mongoid::Dirty do
1262
1308
  end
1263
1309
 
1264
1310
  it "flags the parent as changed" do
1265
- person.should be_changed
1311
+ expect(person).to be_changed
1266
1312
  end
1267
1313
  end
1268
1314
 
@@ -1273,7 +1319,7 @@ describe Mongoid::Dirty do
1273
1319
  end
1274
1320
 
1275
1321
  it "does not flag the parent as changed" do
1276
- person.should_not be_changed
1322
+ expect(person).to_not be_changed
1277
1323
  end
1278
1324
  end
1279
1325
  end
@@ -1290,7 +1336,7 @@ describe Mongoid::Dirty do
1290
1336
  end
1291
1337
 
1292
1338
  it "records the changes" do
1293
- person.changes.should eq(
1339
+ expect(person.changes).to eq(
1294
1340
  { "map" => [{ "test" => {}}, { "test" => { "value" => 10 }}]}
1295
1341
  )
1296
1342
  end
@@ -1311,7 +1357,7 @@ describe Mongoid::Dirty do
1311
1357
  end
1312
1358
 
1313
1359
  it "records the foreign key dirty changes" do
1314
- person.previous_changes["preference_ids"].should eq(
1360
+ expect(person.previous_changes["preference_ids"]).to eq(
1315
1361
  [nil, [ preference.id ]]
1316
1362
  )
1317
1363
  end
@@ -1334,11 +1380,11 @@ describe Mongoid::Dirty do
1334
1380
  end
1335
1381
 
1336
1382
  it "flags the change" do
1337
- from_db.changes["preference_ids"].should eq([ nil, []])
1383
+ expect(from_db.changes["preference_ids"]).to eq([ nil, []])
1338
1384
  end
1339
1385
 
1340
1386
  it "does not include the changes in the setters" do
1341
- from_db.setters.should be_empty
1387
+ expect(from_db.setters).to be_empty
1342
1388
  end
1343
1389
  end
1344
1390
  end
@@ -1358,7 +1404,7 @@ describe Mongoid::Dirty do
1358
1404
  end
1359
1405
 
1360
1406
  it "clears the changed attributes" do
1361
- from_db.changed_attributes.should be_empty
1407
+ expect(from_db.changed_attributes).to be_empty
1362
1408
  end
1363
1409
  end
1364
1410
 
@@ -1378,11 +1424,11 @@ describe Mongoid::Dirty do
1378
1424
  end
1379
1425
 
1380
1426
  it "marks the document as changed" do
1381
- person.should be_changed
1427
+ expect(person).to be_changed
1382
1428
  end
1383
1429
 
1384
1430
  it "marks field changes" do
1385
- person.changes.should eq({
1431
+ expect(person.changes).to eq({
1386
1432
  "title" => [ "MC", "DJ" ],
1387
1433
  "ssn" => [ nil, "222-22-2222" ],
1388
1434
  "some_dynamic_field" => [ "blah", "bloop" ]
@@ -1390,25 +1436,25 @@ describe Mongoid::Dirty do
1390
1436
  end
1391
1437
 
1392
1438
  it "marks changed fields" do
1393
- person.changed.should =~ [ "title", "ssn", "some_dynamic_field" ]
1439
+ expect(person.changed).to eq([ "title", "ssn", "some_dynamic_field" ])
1394
1440
  end
1395
1441
 
1396
1442
  it "marks the field as changed" do
1397
- person.title_changed?.should be_true
1443
+ expect(person.title_changed?).to be true
1398
1444
  end
1399
1445
 
1400
1446
  it "stores previous field values" do
1401
- person.title_was.should eq("MC")
1447
+ expect(person.title_was).to eq("MC")
1402
1448
  end
1403
1449
 
1404
1450
  it "marks field changes" do
1405
- person.title_change.should eq([ "MC", "DJ" ])
1451
+ expect(person.title_change).to eq([ "MC", "DJ" ])
1406
1452
  end
1407
1453
 
1408
1454
  it "allows reset of field changes" do
1409
1455
  person.reset_title!
1410
- person.title.should eq("MC")
1411
- person.changed.should =~ [ "ssn", "some_dynamic_field" ]
1456
+ expect(person.title).to eq("MC")
1457
+ expect(person.changed).to eq([ "ssn", "some_dynamic_field" ])
1412
1458
  end
1413
1459
 
1414
1460
  context "after a save" do
@@ -1418,12 +1464,12 @@ describe Mongoid::Dirty do
1418
1464
  end
1419
1465
 
1420
1466
  it "clears changes" do
1421
- person.should_not be_changed
1467
+ expect(person).to_not be_changed
1422
1468
  end
1423
1469
 
1424
1470
  it "stores previous changes" do
1425
- person.previous_changes["title"].should eq([ "MC", "DJ" ])
1426
- person.previous_changes["ssn"].should eq([ nil, "222-22-2222" ])
1471
+ expect(person.previous_changes["title"]).to eq([ "MC", "DJ" ])
1472
+ expect(person.previous_changes["ssn"]).to eq([ nil, "222-22-2222" ])
1427
1473
  end
1428
1474
  end
1429
1475
 
@@ -1435,7 +1481,7 @@ describe Mongoid::Dirty do
1435
1481
  end
1436
1482
 
1437
1483
  it "removes the attribute from the document" do
1438
- person.score.should be_nil
1484
+ expect(person.score).to be_nil
1439
1485
  end
1440
1486
  end
1441
1487
  end
@@ -1455,14 +1501,16 @@ describe Mongoid::Dirty do
1455
1501
  end
1456
1502
 
1457
1503
  after do
1458
- Acolyte._save_callbacks.reject! do |callback|
1504
+ Acolyte._save_callbacks.select do |callback|
1459
1505
  callback.kind == :after
1506
+ end.each do |callback|
1507
+ Acolyte._save_callbacks.delete(callback)
1460
1508
  end
1461
1509
  end
1462
1510
 
1463
1511
  it "retains the changes until after all callbacks" do
1464
1512
  acolyte.update_attribute(:status, "testing")
1465
- acolyte.changed_in_callback.should eq({ "status" => [ nil, "testing" ] })
1513
+ expect(acolyte.changed_in_callback).to eq({ "status" => [ nil, "testing" ] })
1466
1514
  end
1467
1515
  end
1468
1516
 
@@ -1479,14 +1527,16 @@ describe Mongoid::Dirty do
1479
1527
  end
1480
1528
 
1481
1529
  after do
1482
- Acolyte._save_callbacks.reject! do |callback|
1530
+ Acolyte._save_callbacks.select do |callback|
1483
1531
  callback.kind == :after
1532
+ end.each do |callback|
1533
+ Acolyte._save_callbacks.delete(callback)
1484
1534
  end
1485
1535
  end
1486
1536
 
1487
1537
  it "retains the changes until after all callbacks" do
1488
1538
  acolyte.save
1489
- acolyte.changed_in_callback["name"].should eq([ nil, "callback-test" ])
1539
+ expect(acolyte.changed_in_callback["name"]).to eq([ nil, "callback-test" ])
1490
1540
  end
1491
1541
  end
1492
1542
  end
@@ -1502,7 +1552,7 @@ describe Mongoid::Dirty do
1502
1552
  end
1503
1553
 
1504
1554
  it "does not set the association to nil when hitting the database" do
1505
- person.setters.should_not eq({ "addresses" => nil })
1555
+ expect(person.setters).to_not eq({ "addresses" => nil })
1506
1556
  end
1507
1557
  end
1508
1558
  end