mongoid 3.1.7 → 4.0.2

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