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
@@ -11,7 +11,7 @@ describe Mongoid::Document do
11
11
  end
12
12
 
13
13
  it "does not respond to _destroy" do
14
- person.should_not respond_to(:_destroy)
14
+ expect(person).to_not respond_to(:_destroy)
15
15
  end
16
16
 
17
17
  describe ".included" do
@@ -44,25 +44,25 @@ describe Mongoid::Document do
44
44
 
45
45
  context "when Document has been included in a model" do
46
46
  it ".models should include that model" do
47
- models.should include(klass)
47
+ expect(models).to include(klass)
48
48
  end
49
49
  end
50
50
 
51
51
  context "before Document has been included" do
52
52
  it ".models should *not* include that model" do
53
- models.should_not include(new_klass)
53
+ expect(models).to_not include(new_klass)
54
54
  end
55
55
  end
56
56
 
57
57
  context "after Document has been included" do
58
58
  it ".models should include that model" do
59
- models.should include(new_model)
59
+ expect(models).to include(new_model)
60
60
  end
61
61
  end
62
62
 
63
63
  context "after Document has been included multiple times" do
64
64
  it ".models should include that model just once" do
65
- models.count(twice_a_new_model).should be_eql(1)
65
+ expect(models.count(twice_a_new_model)).to be_eql(1)
66
66
  end
67
67
  end
68
68
  end
@@ -76,11 +76,11 @@ describe Mongoid::Document do
76
76
  end
77
77
 
78
78
  it "includes the root" do
79
- types.should include("Person")
79
+ expect(types).to include("Person")
80
80
  end
81
81
 
82
82
  it "includes the subclasses" do
83
- types.should include("Doctor")
83
+ expect(types).to include("Doctor")
84
84
  end
85
85
  end
86
86
 
@@ -91,7 +91,7 @@ describe Mongoid::Document do
91
91
  end
92
92
 
93
93
  it "returns the document" do
94
- types.should eq([ "Address" ])
94
+ expect(types).to eq([ "Address" ])
95
95
  end
96
96
  end
97
97
 
@@ -106,7 +106,7 @@ describe Mongoid::Document do
106
106
  end
107
107
 
108
108
  it "should clear descendants' cache" do
109
- Person._types.should include(descendant.to_s)
109
+ expect(Person._types).to include(descendant.to_s)
110
110
  end
111
111
  end
112
112
  end
@@ -118,7 +118,7 @@ describe Mongoid::Document do
118
118
  end
119
119
 
120
120
  it "returns the attributes with indifferent access" do
121
- person[:title].should eq("Sir")
121
+ expect(person[:title]).to eq("Sir")
122
122
  end
123
123
  end
124
124
 
@@ -131,7 +131,7 @@ describe Mongoid::Document do
131
131
  context "when the document is new" do
132
132
 
133
133
  it "has a new key name" do
134
- document.cache_key.should eq("dokuments/new")
134
+ expect(document.cache_key).to eq("dokuments/new")
135
135
  end
136
136
  end
137
137
 
@@ -144,11 +144,11 @@ describe Mongoid::Document do
144
144
  context "with updated_at" do
145
145
 
146
146
  let!(:updated_at) do
147
- document.updated_at.utc.to_s(:number)
147
+ document.updated_at.utc.to_s(:nsec)
148
148
  end
149
149
 
150
150
  it "has the id and updated_at key name" do
151
- document.cache_key.should eq("dokuments/#{document.id}-#{updated_at}")
151
+ expect(document.cache_key).to eq("dokuments/#{document.id}-#{updated_at}")
152
152
  end
153
153
  end
154
154
 
@@ -159,23 +159,35 @@ describe Mongoid::Document do
159
159
  end
160
160
 
161
161
  it "has the id key name" do
162
- document.cache_key.should eq("dokuments/#{document.id}")
162
+ expect(document.cache_key).to eq("dokuments/#{document.id}")
163
163
  end
164
164
  end
165
+ end
165
166
 
166
- context "without updated_at, without Timestamps" do
167
- let(:artist) do
168
- Artist.new
169
- end
170
- before do
171
- artist.save
172
- end
167
+ context "when model dont have Timestamps" do
173
168
 
174
- it "should have the id key name" do
175
- artist.cache_key.should eq("artists/#{artist.id}")
176
- end
169
+ let(:artist) do
170
+ Artist.create!
171
+ end
172
+
173
+ it "should have the id key name" do
174
+ expect(artist.cache_key).to eq("artists/#{artist.id}")
175
+ end
176
+ end
177
+
178
+ context "when model has Short Timestamps" do
179
+
180
+ let(:agent) do
181
+ ShortAgent.create!
182
+ end
183
+
184
+ let!(:updated_at) do
185
+ agent.updated_at.utc.to_s(:nsec)
177
186
  end
178
187
 
188
+ it "has the id and updated_at key name" do
189
+ expect(agent.cache_key).to eq("short_agents/#{agent.id}-#{updated_at}")
190
+ end
179
191
  end
180
192
  end
181
193
 
@@ -186,7 +198,7 @@ describe Mongoid::Document do
186
198
  end
187
199
 
188
200
  it "returns a [doc.class, doc.id] array" do
189
- person.identity.should eq([person.class, person.id])
201
+ expect(person.identity).to eq([person.class, person.id])
190
202
  end
191
203
  end
192
204
 
@@ -197,7 +209,7 @@ describe Mongoid::Document do
197
209
  end
198
210
 
199
211
  it "returns the identity hash" do
200
- person.hash.should eq(person.identity.hash)
212
+ expect(person.hash).to eq(person.identity.hash)
201
213
  end
202
214
  end
203
215
 
@@ -208,15 +220,40 @@ describe Mongoid::Document do
208
220
  end
209
221
 
210
222
  it "sets persisted to false" do
211
- person.should_not be_persisted
223
+ expect(person).to_not be_persisted
212
224
  end
213
225
 
214
226
  it "creates an id for the document" do
215
- person.id.should be_a(Moped::BSON::ObjectId)
227
+ expect(person.id).to be_a(BSON::ObjectId)
216
228
  end
217
229
 
218
230
  it "sets the attributes" do
219
- person.title.should eq("Sir")
231
+ expect(person.title).to eq("Sir")
232
+ end
233
+
234
+ context "when the model has a default scope" do
235
+
236
+ context "when the default scope is settable" do
237
+
238
+ let(:sound) do
239
+ Sound.new
240
+ end
241
+
242
+ it "sets the default scoping on the model" do
243
+ expect(sound).to be_active
244
+ end
245
+ end
246
+
247
+ context "when the default scope is not settable" do
248
+
249
+ let(:audio) do
250
+ Audio.new
251
+ end
252
+
253
+ it "does not set the default scoping" do
254
+ expect(audio.likes).to be_nil
255
+ end
256
+ end
220
257
  end
221
258
 
222
259
  context "when accessing a relation from an overridden setter" do
@@ -226,11 +263,11 @@ describe Mongoid::Document do
226
263
  end
227
264
 
228
265
  it "allows access to the relation" do
229
- doctor.users.first.should be_a(User)
266
+ expect(doctor.users.first).to be_a(User)
230
267
  end
231
268
 
232
269
  it "properly allows super calls" do
233
- doctor.specialty.should eq("surgery")
270
+ expect(doctor.specialty).to eq("surgery")
234
271
  end
235
272
  end
236
273
 
@@ -249,7 +286,7 @@ describe Mongoid::Document do
249
286
  end
250
287
 
251
288
  it "runs the callbacks" do
252
- person.title.should eq("Madam")
289
+ expect(person.title).to eq("Madam")
253
290
  end
254
291
  end
255
292
 
@@ -270,14 +307,14 @@ describe Mongoid::Document do
270
307
  end
271
308
 
272
309
  it "runs the callbacks" do
273
- person.game.name.should eq("Ms. Pacman")
310
+ expect(person.game.name).to eq("Ms. Pacman")
274
311
  end
275
312
  end
276
313
 
277
314
  context "when instantiating model" do
278
315
 
279
316
  let(:person) do
280
- Person.instantiate("_id" => Moped::BSON::ObjectId.new, "title" => "Sir")
317
+ Person.instantiate("_id" => BSON::ObjectId.new, "title" => "Sir")
281
318
  end
282
319
 
283
320
  before do
@@ -291,7 +328,7 @@ describe Mongoid::Document do
291
328
  end
292
329
 
293
330
  it "runs the callbacks" do
294
- person.title.should eq("Madam")
331
+ expect(person.title).to eq("Madam")
295
332
  end
296
333
  end
297
334
  end
@@ -299,7 +336,7 @@ describe Mongoid::Document do
299
336
  context "when defaults are defined" do
300
337
 
301
338
  it "sets the default values" do
302
- person.age.should eq(100)
339
+ expect(person.age).to eq(100)
303
340
  end
304
341
  end
305
342
 
@@ -312,7 +349,7 @@ describe Mongoid::Document do
312
349
  end
313
350
 
314
351
  it "yields to the block" do
315
- person.title.should eq("King")
352
+ expect(person.title).to eq("King")
316
353
  end
317
354
  end
318
355
  end
@@ -322,7 +359,7 @@ describe Mongoid::Document do
322
359
  context "when passing a block" do
323
360
 
324
361
  let(:id) do
325
- Moped::BSON::ObjectId.new
362
+ BSON::ObjectId.new
326
363
  end
327
364
 
328
365
  let(:document) do
@@ -332,22 +369,14 @@ describe Mongoid::Document do
332
369
  end
333
370
 
334
371
  it "yields to the block" do
335
- document.likes.should eq(1000)
372
+ expect(document.likes).to eq(1000)
336
373
  end
337
374
  end
338
375
 
339
376
  context "when an id exists" do
340
377
 
341
- before do
342
- Mongoid.identity_map_enabled = true
343
- end
344
-
345
- after do
346
- Mongoid.identity_map_enabled = false
347
- end
348
-
349
378
  let(:id) do
350
- Moped::BSON::ObjectId.new
379
+ BSON::ObjectId.new
351
380
  end
352
381
 
353
382
  let!(:person) do
@@ -355,15 +384,11 @@ describe Mongoid::Document do
355
384
  end
356
385
 
357
386
  it "sets the attributes" do
358
- person.title.should eq("Sir")
387
+ expect(person.title).to eq("Sir")
359
388
  end
360
389
 
361
390
  it "sets persisted to true" do
362
- person.should be_persisted
363
- end
364
-
365
- it "puts the document in the identity map" do
366
- Mongoid::IdentityMap.get(Person, id).should eq(person)
391
+ expect(person).to be_persisted
367
392
  end
368
393
  end
369
394
 
@@ -374,7 +399,7 @@ describe Mongoid::Document do
374
399
  end
375
400
 
376
401
  it "creates a new document" do
377
- person.should be_a(Person)
402
+ expect(person).to be_a(Person)
378
403
  end
379
404
  end
380
405
  end
@@ -386,7 +411,7 @@ describe Mongoid::Document do
386
411
  end
387
412
 
388
413
  it "returns the class model name" do
389
- person.model_name.should eq("Person")
414
+ expect(person.model_name).to eq("Person")
390
415
  end
391
416
  end
392
417
 
@@ -397,7 +422,7 @@ describe Mongoid::Document do
397
422
  end
398
423
 
399
424
  it "returns the internal attributes" do
400
- person.raw_attributes["title"].should eq("Sir")
425
+ expect(person.raw_attributes["title"]).to eq("Sir")
401
426
  end
402
427
  end
403
428
 
@@ -412,7 +437,7 @@ describe Mongoid::Document do
412
437
  end
413
438
 
414
439
  it "returns the document in an array" do
415
- people.should eq([ person ])
440
+ expect(people).to eq([ person ])
416
441
  end
417
442
  end
418
443
 
@@ -435,15 +460,15 @@ describe Mongoid::Document do
435
460
  end
436
461
 
437
462
  it "includes embeds one attributes" do
438
- person.as_document.should have_key("name")
463
+ expect(person.as_document).to have_key("name")
439
464
  end
440
465
 
441
466
  it "includes embeds many attributes" do
442
- person.as_document.should have_key("addresses")
467
+ expect(person.as_document).to have_key("addresses")
443
468
  end
444
469
 
445
470
  it "includes second level embeds many attributes" do
446
- person.as_document["addresses"].first.should have_key("locations")
471
+ expect(person.as_document["addresses"].first).to have_key("locations")
447
472
  end
448
473
 
449
474
  context "with relation define store_as option in embeded_many" do
@@ -453,11 +478,11 @@ describe Mongoid::Document do
453
478
  end
454
479
 
455
480
  it 'includes the store_as key association' do
456
- person.as_document.should have_key("mobile_phones")
481
+ expect(person.as_document).to have_key("mobile_phones")
457
482
  end
458
483
 
459
484
  it 'should not include the key of association' do
460
- person.as_document.should_not have_key("phones")
485
+ expect(person.as_document).to_not have_key("phones")
461
486
  end
462
487
  end
463
488
 
@@ -469,7 +494,7 @@ describe Mongoid::Document do
469
494
  end
470
495
 
471
496
  it "does not include the document in the hash" do
472
- person.as_document["addresses"].should be_empty
497
+ expect(person.as_document["addresses"]).to be_empty
473
498
  end
474
499
  end
475
500
 
@@ -483,7 +508,7 @@ describe Mongoid::Document do
483
508
  end
484
509
 
485
510
  it "does not include the document in the hash" do
486
- person.as_document.should_not have_key("name")
511
+ expect(person.as_document).to_not have_key("name")
487
512
  end
488
513
  end
489
514
  end
@@ -497,31 +522,35 @@ describe Mongoid::Document do
497
522
  end
498
523
 
499
524
  it "returns nil" do
500
- person.to_key.should be_nil
525
+ expect(person.to_key).to be_nil
501
526
  end
502
527
  end
503
528
 
504
529
  context "when the document is not new" do
505
530
 
506
531
  let(:person) do
507
- Person.instantiate("_id" => Moped::BSON::ObjectId.new)
532
+ Person.create!
508
533
  end
509
534
 
510
535
  it "returns the id in an array" do
511
- person.to_key.should eq([ person.id ])
536
+ expect(person.to_key).to eq([ person.id.to_s ])
537
+ end
538
+
539
+ it "can query using the key" do
540
+ expect(person.id).to eq Person.find(person.to_key).first.id
512
541
  end
513
542
  end
514
543
 
515
544
  context "when the document is destroyed" do
516
545
 
517
546
  let(:person) do
518
- Person.instantiate("_id" => Moped::BSON::ObjectId.new).tap do |peep|
547
+ Person.instantiate("_id" => BSON::ObjectId.new).tap do |peep|
519
548
  peep.destroyed = true
520
549
  end
521
550
  end
522
551
 
523
552
  it "returns the id in an array" do
524
- person.to_key.should eq([ person.id ])
553
+ expect(person.to_key).to eq([ person.id.to_s ])
525
554
  end
526
555
  end
527
556
  end
@@ -535,18 +564,18 @@ describe Mongoid::Document do
535
564
  end
536
565
 
537
566
  it "returns nil" do
538
- person.to_param.should be_nil
567
+ expect(person.to_param).to be_nil
539
568
  end
540
569
  end
541
570
 
542
571
  context "when the document is not new" do
543
572
 
544
573
  let(:person) do
545
- Person.instantiate("_id" => Moped::BSON::ObjectId.new)
574
+ Person.instantiate("_id" => BSON::ObjectId.new)
546
575
  end
547
576
 
548
577
  it "returns the id as a string" do
549
- person.to_param.should eq(person.id.to_s)
578
+ expect(person.to_param).to eq(person.id.to_s)
550
579
  end
551
580
  end
552
581
  end
@@ -560,7 +589,7 @@ describe Mongoid::Document do
560
589
  context "when attributes are not frozen" do
561
590
 
562
591
  it "return false" do
563
- person.should_not be_frozen
592
+ expect(person).to_not be_frozen
564
593
  expect {
565
594
  person.title = "something"
566
595
  }.to_not raise_error
@@ -573,7 +602,7 @@ describe Mongoid::Document do
573
602
  end
574
603
 
575
604
  it "return true" do
576
- person.should be_frozen
605
+ expect(person).to be_frozen
577
606
  end
578
607
  end
579
608
  end
@@ -587,7 +616,7 @@ describe Mongoid::Document do
587
616
  context "when not frozen" do
588
617
 
589
618
  it "freezes attributes" do
590
- person.freeze.should eq(person)
619
+ expect(person.freeze).to eq(person)
591
620
  expect { person.title = "something" }.to raise_error
592
621
  end
593
622
  end
@@ -610,7 +639,7 @@ describe Mongoid::Document do
610
639
  describe ".logger" do
611
640
 
612
641
  it "returns the mongoid logger" do
613
- Person.logger.should eq(Mongoid.logger)
642
+ expect(Person.logger).to eq(Mongoid.logger)
614
643
  end
615
644
  end
616
645
 
@@ -621,7 +650,7 @@ describe Mongoid::Document do
621
650
  end
622
651
 
623
652
  it "returns the mongoid logger" do
624
- person.send(:logger).should eq(Mongoid.logger)
653
+ expect(person.send(:logger)).to eq(Mongoid.logger)
625
654
  end
626
655
  end
627
656
 
@@ -632,7 +661,7 @@ describe Mongoid::Document do
632
661
  end
633
662
 
634
663
  it "resets to the global scope" do
635
- movie.global_set.should be_a(::Set)
664
+ expect(movie.global_set).to be_a(::Set)
636
665
  end
637
666
  end
638
667
  context "when a model name conflicts with a mongoid internal" do
@@ -642,7 +671,7 @@ describe Mongoid::Document do
642
671
  end
643
672
 
644
673
  it "allows the model name" do
645
- scheduler.strategy.should be_a(Strategy)
674
+ expect(scheduler.strategy).to be_a(Strategy)
646
675
  end
647
676
  end
648
677
 
@@ -652,16 +681,16 @@ describe Mongoid::Document do
652
681
 
653
682
  it "sets the defaults before yielding" do
654
683
  Person.new do |person|
655
- person.age.should eq(100)
684
+ expect(person.age).to eq(100)
656
685
  end
657
686
  end
658
687
  end
659
688
  end
660
689
 
661
- context "defining a Moped::BSON::ObjectId as a field" do
690
+ context "defining a BSON::ObjectId as a field" do
662
691
 
663
692
  let(:bson_id) do
664
- Moped::BSON::ObjectId.new
693
+ BSON::ObjectId.new
665
694
  end
666
695
 
667
696
  let(:person) do
@@ -673,11 +702,11 @@ describe Mongoid::Document do
673
702
  end
674
703
 
675
704
  it "persists the correct type" do
676
- person.reload.bson_id.should be_a(Moped::BSON::ObjectId)
705
+ expect(person.reload.bson_id).to be_a(BSON::ObjectId)
677
706
  end
678
707
 
679
708
  it "has the correct value" do
680
- person.bson_id.should eq(bson_id)
709
+ expect(person.bson_id).to eq(bson_id)
681
710
  end
682
711
  end
683
712
 
@@ -692,7 +721,7 @@ describe Mongoid::Document do
692
721
  end
693
722
 
694
723
  it "converts them to nil" do
695
- post.person_id.should be_nil
724
+ expect(post.person_id).to be_nil
696
725
  end
697
726
  end
698
727
 
@@ -742,15 +771,15 @@ describe Mongoid::Document do
742
771
  end
743
772
 
744
773
  it "copies attributes" do
745
- person.title.should eq('Sir')
774
+ expect(person.title).to eq('Sir')
746
775
  end
747
776
 
748
777
  it "keeps the same object id" do
749
- person.id.should eq(manager.id)
778
+ expect(person.id).to eq(manager.id)
750
779
  end
751
780
 
752
781
  it "sets the class type" do
753
- person._type.should eq("Person")
782
+ expect(person._type).to eq("Person")
754
783
  end
755
784
 
756
785
  it "raises an error when inappropriate class is provided" do
@@ -773,11 +802,11 @@ describe Mongoid::Document do
773
802
  end
774
803
 
775
804
  it "copies the embedded documents" do
776
- person.appointments.first.should eq(appointment)
805
+ expect(person.appointments.first).to eq(appointment)
777
806
  end
778
807
 
779
808
  it "returns new instances" do
780
- person.appointments.first.should_not equal(appointment)
809
+ expect(person.appointments.first).to_not equal(appointment)
781
810
  end
782
811
  end
783
812
 
@@ -794,11 +823,11 @@ describe Mongoid::Document do
794
823
  end
795
824
 
796
825
  it "copies the embedded documents" do
797
- person.addresses.first.should eq(address)
826
+ expect(person.addresses.first).to eq(address)
798
827
  end
799
828
 
800
829
  it "returns new instances" do
801
- person.addresses.first.should_not equal(address)
830
+ expect(person.addresses.first).to_not equal(address)
802
831
  end
803
832
  end
804
833
 
@@ -821,11 +850,11 @@ describe Mongoid::Document do
821
850
  end
822
851
 
823
852
  it "copies the embedded documents" do
824
- person.addresses.first.should eq(address)
853
+ expect(person.addresses.first).to eq(address)
825
854
  end
826
855
 
827
856
  it "copies the embedded documents only once" do
828
- person.reload.addresses.length.should eq(1)
857
+ expect(person.reload.addresses.length).to eq(1)
829
858
  end
830
859
  end
831
860
  end
@@ -842,7 +871,7 @@ describe Mongoid::Document do
842
871
  end
843
872
 
844
873
  it "copies the localize attribute" do
845
- person.desc.should eq("description")
874
+ expect(person.desc).to eq("description")
846
875
  end
847
876
  end
848
877
 
@@ -853,7 +882,7 @@ describe Mongoid::Document do
853
882
  end
854
883
 
855
884
  it "copies the state" do
856
- person.should be_a_new_record
885
+ expect(person).to be_a_new_record
857
886
  end
858
887
  end
859
888
 
@@ -868,7 +897,7 @@ describe Mongoid::Document do
868
897
  end
869
898
 
870
899
  it "copies the state" do
871
- person.should be_persisted
900
+ expect(person).to be_persisted
872
901
  end
873
902
  end
874
903
 
@@ -883,7 +912,7 @@ describe Mongoid::Document do
883
912
  end
884
913
 
885
914
  it "copies the state" do
886
- person.should be_destroyed
915
+ expect(person).to be_destroyed
887
916
  end
888
917
  end
889
918
 
@@ -899,11 +928,11 @@ describe Mongoid::Document do
899
928
  end
900
929
 
901
930
  it "copies over the dirty changes" do
902
- person.changes["ssn"].should eq([ nil, "123-22-1234" ])
931
+ expect(person.changes["ssn"]).to eq([ nil, "123-22-1234" ])
903
932
  end
904
933
 
905
934
  it "adds the _type change" do
906
- person.changes["_type"].should eq([ "Manager", "Person" ])
935
+ expect(person.changes["_type"]).to eq([ "Manager", "Person" ])
907
936
  end
908
937
  end
909
938
 
@@ -919,7 +948,7 @@ describe Mongoid::Document do
919
948
  end
920
949
 
921
950
  it "copies the errors" do
922
- person.errors.should include(:ssn)
951
+ expect(person.errors).to include(:ssn)
923
952
  end
924
953
  end
925
954
  end
@@ -937,15 +966,15 @@ describe Mongoid::Document do
937
966
  end
938
967
 
939
968
  it "copies attributes" do
940
- manager.title.should eq('Sir')
969
+ expect(manager.title).to eq('Sir')
941
970
  end
942
971
 
943
972
  it "keeps the same object id" do
944
- manager.id.should eq(person.id)
973
+ expect(manager.id).to eq(person.id)
945
974
  end
946
975
 
947
976
  it "sets the class type" do
948
- manager._type.should eq("Manager")
977
+ expect(manager._type).to eq("Manager")
949
978
  end
950
979
 
951
980
  it "raises an error when inappropriate class is provided" do
@@ -966,11 +995,11 @@ describe Mongoid::Document do
966
995
  end
967
996
 
968
997
  it "copies the embedded documents" do
969
- manager.addresses.first.should eq(address)
998
+ expect(manager.addresses.first).to eq(address)
970
999
  end
971
1000
 
972
1001
  it "returns new instances" do
973
- manager.addresses.first.should_not equal(address)
1002
+ expect(manager.addresses.first).to_not equal(address)
974
1003
  end
975
1004
  end
976
1005
 
@@ -981,7 +1010,7 @@ describe Mongoid::Document do
981
1010
  end
982
1011
 
983
1012
  it "copies the state" do
984
- manager.should be_a_new_record
1013
+ expect(manager).to be_a_new_record
985
1014
  end
986
1015
  end
987
1016
 
@@ -996,7 +1025,7 @@ describe Mongoid::Document do
996
1025
  end
997
1026
 
998
1027
  it "copies the state" do
999
- manager.should be_persisted
1028
+ expect(manager).to be_persisted
1000
1029
  end
1001
1030
 
1002
1031
  context "when downcasted document is saved" do
@@ -1006,15 +1035,19 @@ describe Mongoid::Document do
1006
1035
  end
1007
1036
 
1008
1037
  it "keeps the type" do
1009
- manager.should be_an_instance_of(Manager)
1038
+ expect(manager).to be_an_instance_of(Manager)
1039
+ end
1040
+
1041
+ it "copies over the dirty changes" do
1042
+ expect(manager.changes["ssn"]).to eq(person.changes["ssn"])
1010
1043
  end
1011
1044
 
1012
1045
  it "can by queried by the parent class" do
1013
- Person.find(manager.id).should be_an_instance_of(Manager)
1046
+ expect(Person.find(manager.id)).to be_an_instance_of(Manager)
1014
1047
  end
1015
1048
 
1016
1049
  it "can by queried by the main class" do
1017
- Manager.find(manager.id).should be_an_instance_of(Manager)
1050
+ expect(Manager.find(manager.id)).to be_an_instance_of(Manager)
1018
1051
  end
1019
1052
  end
1020
1053
  end
@@ -1030,7 +1063,7 @@ describe Mongoid::Document do
1030
1063
  end
1031
1064
 
1032
1065
  it "copies the state" do
1033
- manager.should be_destroyed
1066
+ expect(manager).to be_destroyed
1034
1067
  end
1035
1068
  end
1036
1069
 
@@ -1046,11 +1079,11 @@ describe Mongoid::Document do
1046
1079
  end
1047
1080
 
1048
1081
  it "copies over the dirty changes" do
1049
- manager.changes["ssn"].should eq([ nil, "123-22-1234" ])
1082
+ expect(manager.changes["ssn"]).to eq([ nil, "123-22-1234" ])
1050
1083
  end
1051
1084
 
1052
1085
  it "adds the _type change" do
1053
- manager.changes["_type"].should eq([ "Person", "Manager" ])
1086
+ expect(manager.changes["_type"]).to eq([ "Person", "Manager" ])
1054
1087
  end
1055
1088
  end
1056
1089
 
@@ -1066,7 +1099,24 @@ describe Mongoid::Document do
1066
1099
  end
1067
1100
 
1068
1101
  it "copies the errors" do
1069
- manager.errors.should include(:ssn)
1102
+ expect(manager.errors).to include(:ssn)
1103
+ end
1104
+
1105
+ end
1106
+
1107
+ context "when the subclass validates attributes not present on the parent class" do
1108
+
1109
+ before do
1110
+ Manager.validates_inclusion_of(:level, in: [1, 2])
1111
+ end
1112
+
1113
+ let(:manager) do
1114
+ person.becomes(Manager)
1115
+ end
1116
+
1117
+ it "validates the instance of the subclass" do
1118
+ manager.level = 3
1119
+ expect(manager.valid?).to be false
1070
1120
  end
1071
1121
  end
1072
1122
 
@@ -1077,7 +1127,7 @@ describe Mongoid::Document do
1077
1127
  end
1078
1128
 
1079
1129
  it "applies default attributes" do
1080
- manager.level.should eq(1)
1130
+ expect(manager.level).to eq(1)
1081
1131
  end
1082
1132
  end
1083
1133
  end
@@ -1132,13 +1182,13 @@ describe Mongoid::Document do
1132
1182
  end
1133
1183
 
1134
1184
  it "stores the parent object" do
1135
- cache.fetch("key") { person }.should eq(person)
1136
- cache.fetch("key").should eq(person)
1185
+ expect(cache.fetch("key") { person }).to eq(person)
1186
+ expect(cache.fetch("key")).to eq(person)
1137
1187
  end
1138
1188
 
1139
1189
  it "stores the embedded object" do
1140
- cache.fetch("key") { account }.should eq(account)
1141
- cache.fetch("key").should eq(account)
1190
+ expect(cache.fetch("key") { account }).to eq(account)
1191
+ expect(cache.fetch("key")).to eq(account)
1142
1192
  end
1143
1193
  end
1144
1194
  end