mongoid 3.1.7 → 4.0.0.alpha1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (521) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +317 -11
  3. data/README.md +4 -5
  4. data/lib/config/locales/en.yml +9 -12
  5. data/lib/mongoid.rb +6 -75
  6. data/lib/mongoid/atomic.rb +0 -11
  7. data/lib/mongoid/atomic/paths/embedded.rb +0 -30
  8. data/lib/mongoid/atomic/paths/root.rb +0 -13
  9. data/lib/mongoid/attributes.rb +30 -108
  10. data/lib/mongoid/attributes/dynamic.rb +154 -0
  11. data/lib/mongoid/attributes/nested.rb +82 -0
  12. data/lib/mongoid/attributes/processing.rb +13 -66
  13. data/lib/mongoid/{dirty.rb → changeable.rb} +5 -2
  14. data/lib/mongoid/composable.rb +104 -0
  15. data/lib/mongoid/config.rb +3 -9
  16. data/lib/mongoid/config/options.rb +1 -1
  17. data/lib/mongoid/contextual/aggregable/mongo.rb +5 -9
  18. data/lib/mongoid/contextual/atomic.rb +53 -53
  19. data/lib/mongoid/contextual/command.rb +26 -0
  20. data/lib/mongoid/contextual/map_reduce.rb +1 -1
  21. data/lib/mongoid/contextual/memory.rb +6 -5
  22. data/lib/mongoid/contextual/mongo.rb +59 -28
  23. data/lib/mongoid/contextual/text_search.rb +180 -0
  24. data/lib/mongoid/copyable.rb +2 -3
  25. data/lib/mongoid/criteria.rb +13 -33
  26. data/lib/mongoid/criteria/{#findable.rb# → findable.rb} +0 -2
  27. data/lib/mongoid/{criterion/inspection.rb → criteria/inspectable.rb} +2 -2
  28. data/lib/mongoid/{criterion → criteria}/marshalable.rb +3 -1
  29. data/lib/mongoid/{criterion → criteria}/modifiable.rb +1 -1
  30. data/lib/mongoid/{criterion/scoping.rb → criteria/scopable.rb} +2 -2
  31. data/lib/mongoid/document.rb +28 -12
  32. data/lib/mongoid/errors.rb +1 -1
  33. data/lib/mongoid/errors/document_not_found.rb +2 -1
  34. data/lib/mongoid/errors/invalid_value.rb +16 -0
  35. data/lib/mongoid/errors/mongoid_error.rb +1 -1
  36. data/lib/mongoid/extensions.rb +2 -7
  37. data/lib/mongoid/extensions/array.rb +2 -2
  38. data/lib/mongoid/extensions/boolean.rb +14 -17
  39. data/lib/mongoid/extensions/float.rb +1 -0
  40. data/lib/mongoid/extensions/hash.rb +1 -1
  41. data/lib/mongoid/extensions/object.rb +4 -4
  42. data/lib/mongoid/extensions/object_id.rb +5 -5
  43. data/lib/mongoid/extensions/range.rb +8 -2
  44. data/lib/mongoid/extensions/string.rb +5 -17
  45. data/lib/mongoid/extensions/time.rb +2 -2
  46. data/lib/mongoid/factory.rb +3 -3
  47. data/lib/mongoid/fields.rb +9 -8
  48. data/lib/mongoid/fields/foreign_key.rb +3 -3
  49. data/lib/mongoid/fields/standard.rb +4 -16
  50. data/lib/mongoid/fields/validators/macro.rb +11 -3
  51. data/lib/mongoid/{finders.rb → findable.rb} +6 -2
  52. data/lib/mongoid/{indexes.rb → indexable.rb} +50 -55
  53. data/lib/mongoid/indexable/specification.rb +104 -0
  54. data/lib/mongoid/{indexes → indexable}/validators/options.rb +2 -1
  55. data/lib/mongoid/{inspection.rb → inspectable.rb} +15 -11
  56. data/lib/mongoid/{callbacks.rb → interceptable.rb} +3 -52
  57. data/lib/mongoid/log_subscriber.rb +22 -0
  58. data/lib/mongoid/matchable.rb +152 -0
  59. data/lib/mongoid/{matchers → matchable}/all.rb +1 -1
  60. data/lib/mongoid/{matchers → matchable}/and.rb +2 -2
  61. data/lib/mongoid/{matchers → matchable}/default.rb +1 -1
  62. data/lib/mongoid/{matchers → matchable}/exists.rb +1 -1
  63. data/lib/mongoid/{matchers → matchable}/gt.rb +1 -1
  64. data/lib/mongoid/{matchers → matchable}/gte.rb +1 -1
  65. data/lib/mongoid/{matchers → matchable}/in.rb +2 -2
  66. data/lib/mongoid/{matchers → matchable}/lt.rb +1 -1
  67. data/lib/mongoid/{matchers → matchable}/lte.rb +1 -1
  68. data/lib/mongoid/{matchers → matchable}/ne.rb +1 -1
  69. data/lib/mongoid/{matchers → matchable}/nin.rb +3 -2
  70. data/lib/mongoid/{matchers → matchable}/or.rb +2 -2
  71. data/lib/mongoid/{matchers → matchable}/size.rb +1 -1
  72. data/lib/mongoid/persistable.rb +212 -0
  73. data/lib/mongoid/persistable/creatable.rb +188 -0
  74. data/lib/mongoid/persistable/deletable.rb +148 -0
  75. data/lib/mongoid/persistable/destroyable.rb +55 -0
  76. data/lib/mongoid/persistable/incrementable.rb +36 -0
  77. data/lib/mongoid/persistable/logical.rb +38 -0
  78. data/lib/mongoid/persistable/poppable.rb +39 -0
  79. data/lib/mongoid/persistable/pullable.rb +55 -0
  80. data/lib/mongoid/persistable/pushable.rb +62 -0
  81. data/lib/mongoid/persistable/renamable.rb +35 -0
  82. data/lib/mongoid/persistable/savable.rb +52 -0
  83. data/lib/mongoid/persistable/settable.rb +33 -0
  84. data/lib/mongoid/persistable/unsettable.rb +36 -0
  85. data/lib/mongoid/persistable/updatable.rb +151 -0
  86. data/lib/mongoid/persistable/upsertable.rb +55 -0
  87. data/lib/mongoid/positional.rb +71 -0
  88. data/lib/mongoid/railtie.rb +32 -45
  89. data/lib/mongoid/railties/database.rake +12 -6
  90. data/lib/mongoid/relations.rb +3 -3
  91. data/lib/mongoid/relations/accessors.rb +13 -46
  92. data/lib/mongoid/relations/auto_save.rb +15 -36
  93. data/lib/mongoid/relations/binding.rb +0 -23
  94. data/lib/mongoid/relations/bindings/embedded/many.rb +1 -3
  95. data/lib/mongoid/relations/bindings/referenced/in.rb +3 -8
  96. data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +3 -1
  97. data/lib/mongoid/relations/builder.rb +1 -1
  98. data/lib/mongoid/relations/builders.rb +2 -2
  99. data/lib/mongoid/relations/builders/nested_attributes/many.rb +10 -13
  100. data/lib/mongoid/relations/builders/nested_attributes/one.rb +4 -5
  101. data/lib/mongoid/relations/builders/referenced/in.rb +1 -1
  102. data/lib/mongoid/relations/builders/referenced/many.rb +1 -2
  103. data/lib/mongoid/relations/builders/referenced/many_to_many.rb +1 -2
  104. data/lib/mongoid/relations/builders/referenced/one.rb +1 -1
  105. data/lib/mongoid/relations/cascading.rb +3 -5
  106. data/lib/mongoid/relations/constraint.rb +1 -1
  107. data/lib/mongoid/relations/conversions.rb +1 -1
  108. data/lib/mongoid/relations/counter_cache.rb +39 -15
  109. data/lib/mongoid/relations/eager.rb +47 -0
  110. data/lib/mongoid/relations/eager/base.rb +57 -0
  111. data/lib/mongoid/relations/eager/belongs_to.rb +30 -0
  112. data/lib/mongoid/relations/eager/has_and_belongs_to_many.rb +40 -0
  113. data/lib/mongoid/relations/eager/has_many.rb +37 -0
  114. data/lib/mongoid/relations/eager/has_one.rb +29 -0
  115. data/lib/mongoid/relations/embedded/batchable.rb +3 -4
  116. data/lib/mongoid/relations/embedded/many.rb +7 -27
  117. data/lib/mongoid/relations/macros.rb +2 -4
  118. data/lib/mongoid/relations/many.rb +30 -31
  119. data/lib/mongoid/relations/metadata.rb +6 -75
  120. data/lib/mongoid/relations/nested_builder.rb +2 -2
  121. data/lib/mongoid/relations/options.rb +1 -0
  122. data/lib/mongoid/relations/polymorphic.rb +0 -1
  123. data/lib/mongoid/relations/proxy.rb +10 -32
  124. data/lib/mongoid/relations/referenced/in.rb +2 -18
  125. data/lib/mongoid/relations/referenced/many.rb +9 -22
  126. data/lib/mongoid/relations/referenced/many_to_many.rb +10 -33
  127. data/lib/mongoid/relations/referenced/one.rb +2 -21
  128. data/lib/mongoid/relations/synchronization.rb +3 -3
  129. data/lib/mongoid/relations/touchable.rb +33 -0
  130. data/lib/mongoid/{reloading.rb → reloadable.rb} +6 -4
  131. data/lib/mongoid/{scoping.rb → scopable.rb} +26 -3
  132. data/lib/mongoid/selectable.rb +59 -0
  133. data/lib/mongoid/{serialization.rb → serializable.rb} +10 -1
  134. data/lib/mongoid/sessions.rb +37 -345
  135. data/lib/mongoid/sessions/factory.rb +2 -0
  136. data/lib/mongoid/sessions/options.rb +176 -0
  137. data/lib/mongoid/sessions/storage_options.rb +140 -0
  138. data/lib/mongoid/sessions/thread_options.rb +19 -0
  139. data/lib/mongoid/sessions/validators/storage.rb +15 -1
  140. data/lib/mongoid/{sharding.rb → shardable.rb} +5 -1
  141. data/lib/mongoid/support/query_counter.rb +23 -0
  142. data/lib/mongoid/threaded.rb +0 -110
  143. data/lib/mongoid/threaded/lifecycle.rb +0 -28
  144. data/lib/mongoid/timestamps/updated/short.rb +2 -2
  145. data/lib/mongoid/{hierarchy.rb → traversable.rb} +9 -5
  146. data/lib/mongoid/{validations.rb → validatable.rb} +23 -9
  147. data/lib/mongoid/{validations → validatable}/associated.rb +3 -1
  148. data/lib/mongoid/{validations → validatable}/format.rb +1 -1
  149. data/lib/mongoid/{validations → validatable}/length.rb +1 -1
  150. data/lib/mongoid/{validations → validatable}/localizable.rb +1 -1
  151. data/lib/mongoid/{validations → validatable}/macros.rb +4 -3
  152. data/lib/mongoid/{validations → validatable}/presence.rb +1 -1
  153. data/lib/mongoid/{validations → validatable}/queryable.rb +1 -2
  154. data/lib/mongoid/{validations → validatable}/uniqueness.rb +3 -3
  155. data/lib/mongoid/version.rb +1 -1
  156. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +9 -13
  157. data/lib/rails/generators/mongoid/model/model_generator.rb +0 -1
  158. data/lib/rails/generators/mongoid/model/templates/model.rb.tt +0 -3
  159. data/lib/rails/generators/mongoid_generator.rb +3 -40
  160. data/lib/rails/mongoid.rb +59 -57
  161. data/lib/support/ruby_version.rb +1 -1
  162. data/spec/app/models/account.rb +2 -6
  163. data/spec/app/models/acolyte.rb +1 -0
  164. data/spec/app/models/actor.rb +0 -1
  165. data/spec/app/models/address.rb +6 -1
  166. data/spec/app/models/animal.rb +1 -1
  167. data/spec/app/models/appointment.rb +2 -2
  168. data/spec/app/models/article.rb +1 -4
  169. data/spec/app/models/audio.rb +5 -0
  170. data/spec/app/models/author.rb +0 -2
  171. data/spec/app/models/band.rb +3 -2
  172. data/spec/app/models/bar.rb +1 -0
  173. data/spec/app/models/book.rb +1 -0
  174. data/spec/app/models/building.rb +0 -2
  175. data/spec/app/models/building_address.rb +0 -2
  176. data/spec/app/models/bus.rb +1 -1
  177. data/spec/app/models/canvas.rb +1 -1
  178. data/spec/app/models/contractor.rb +0 -2
  179. data/spec/app/models/country_code.rb +1 -1
  180. data/spec/app/models/definition.rb +2 -2
  181. data/spec/app/models/dragon.rb +4 -0
  182. data/spec/app/models/drug.rb +1 -3
  183. data/spec/app/models/dungeon.rb +4 -0
  184. data/spec/app/models/filesystem.rb +1 -0
  185. data/spec/app/models/fish.rb +0 -1
  186. data/spec/app/models/fruits.rb +6 -0
  187. data/spec/app/models/game.rb +0 -2
  188. data/spec/app/models/house.rb +0 -2
  189. data/spec/app/models/item.rb +1 -5
  190. data/spec/app/models/jar.rb +1 -1
  191. data/spec/app/models/label.rb +4 -4
  192. data/spec/app/models/login.rb +1 -1
  193. data/spec/app/models/movie.rb +1 -0
  194. data/spec/app/models/name.rb +3 -3
  195. data/spec/app/models/note.rb +1 -1
  196. data/spec/app/models/oscar.rb +1 -1
  197. data/spec/app/models/parent_doc.rb +1 -1
  198. data/spec/app/models/person.rb +13 -8
  199. data/spec/app/models/phone.rb +1 -3
  200. data/spec/app/models/player.rb +1 -1
  201. data/spec/app/models/post.rb +2 -1
  202. data/spec/app/models/quiz.rb +0 -3
  203. data/spec/app/models/record.rb +5 -5
  204. data/spec/app/models/registry.rb +1 -1
  205. data/spec/app/models/server.rb +1 -1
  206. data/spec/app/models/service.rb +3 -3
  207. data/spec/app/models/sound.rb +5 -0
  208. data/spec/app/models/template.rb +1 -1
  209. data/spec/app/models/title.rb +0 -1
  210. data/spec/app/models/track.rb +5 -5
  211. data/spec/app/models/tree.rb +1 -1
  212. data/spec/app/models/video.rb +0 -4
  213. data/spec/app/models/wiki_page.rb +1 -4
  214. data/spec/app/models/word.rb +3 -0
  215. data/spec/app/models/word_origin.rb +1 -1
  216. data/spec/config/mongoid.yml +7 -8
  217. data/spec/helpers.rb +18 -0
  218. data/spec/mongoid/atomic/modifiers_spec.rb +22 -22
  219. data/spec/mongoid/atomic/paths/embedded/many_spec.rb +8 -49
  220. data/spec/mongoid/atomic/paths/embedded/one_spec.rb +7 -49
  221. data/spec/mongoid/atomic/paths/root_spec.rb +3 -61
  222. data/spec/mongoid/atomic/paths_spec.rb +19 -19
  223. data/spec/mongoid/atomic_spec.rb +19 -19
  224. data/spec/mongoid/{nested_attributes_spec.rb → attributes/nested_spec.rb} +335 -448
  225. data/spec/mongoid/attributes/readonly_spec.rb +16 -16
  226. data/spec/mongoid/attributes_spec.rb +188 -434
  227. data/spec/mongoid/{dirty_spec.rb → changeable_spec.rb} +117 -148
  228. data/spec/mongoid/{components_spec.rb → composable_spec.rb} +3 -3
  229. data/spec/mongoid/config/environment_spec.rb +3 -3
  230. data/spec/mongoid/config/options_spec.rb +6 -6
  231. data/spec/mongoid/config_spec.rb +24 -48
  232. data/spec/mongoid/contextual/aggregable/memory_spec.rb +12 -12
  233. data/spec/mongoid/contextual/aggregable/mongo_spec.rb +46 -38
  234. data/spec/mongoid/contextual/atomic_spec.rb +60 -56
  235. data/spec/mongoid/contextual/find_and_modify_spec.rb +14 -14
  236. data/spec/mongoid/contextual/geo_near_spec.rb +22 -22
  237. data/spec/mongoid/contextual/map_reduce_spec.rb +27 -27
  238. data/spec/mongoid/contextual/memory_spec.rb +94 -94
  239. data/spec/mongoid/contextual/mongo_spec.rb +225 -139
  240. data/spec/mongoid/contextual/text_search_spec.rb +207 -0
  241. data/spec/mongoid/copyable_spec.rb +56 -68
  242. data/spec/mongoid/criteria/findable_spec.rb +991 -0
  243. data/spec/mongoid/{criterion/inspection_spec.rb → criteria/inspectable_spec.rb} +5 -5
  244. data/spec/mongoid/{criterion → criteria}/marshalable_spec.rb +2 -2
  245. data/spec/mongoid/criteria/modifiable_spec.rb +1063 -0
  246. data/spec/mongoid/{criterion/scoping_spec.rb → criteria/scopable_spec.rb} +31 -31
  247. data/spec/mongoid/criteria_spec.rb +530 -2207
  248. data/spec/mongoid/document_spec.rb +166 -120
  249. data/spec/mongoid/equality_spec.rb +22 -22
  250. data/spec/mongoid/errors/ambiguous_relationship_spec.rb +3 -3
  251. data/spec/mongoid/errors/callback_spec.rb +3 -3
  252. data/spec/mongoid/errors/delete_restriction_spec.rb +3 -3
  253. data/spec/mongoid/errors/document_not_found_spec.rb +11 -11
  254. data/spec/mongoid/errors/eager_load_spec.rb +3 -3
  255. data/spec/mongoid/errors/invalid_collection_spec.rb +3 -3
  256. data/spec/mongoid/errors/invalid_config_option_spec.rb +3 -3
  257. data/spec/mongoid/errors/invalid_field_option_spec.rb +3 -3
  258. data/spec/mongoid/errors/invalid_field_spec.rb +3 -3
  259. data/spec/mongoid/errors/invalid_find_spec.rb +3 -3
  260. data/spec/mongoid/errors/invalid_includes_spec.rb +3 -3
  261. data/spec/mongoid/errors/invalid_index_spec.rb +3 -3
  262. data/spec/mongoid/errors/invalid_options_spec.rb +3 -3
  263. data/spec/mongoid/errors/invalid_path_spec.rb +3 -3
  264. data/spec/mongoid/errors/invalid_scope_spec.rb +3 -3
  265. data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +3 -3
  266. data/spec/mongoid/errors/invalid_storage_options_spec.rb +3 -3
  267. data/spec/mongoid/errors/invalid_time_spec.rb +3 -3
  268. data/spec/mongoid/errors/inverse_not_found_spec.rb +3 -3
  269. data/spec/mongoid/errors/mixed_relations_spec.rb +3 -3
  270. data/spec/mongoid/errors/mixed_session_configuration_spec.rb +3 -3
  271. data/spec/mongoid/errors/mongoid_error_spec.rb +7 -7
  272. data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +3 -3
  273. data/spec/mongoid/errors/no_environment_spec.rb +3 -3
  274. data/spec/mongoid/errors/no_map_reduce_output_spec.rb +3 -3
  275. data/spec/mongoid/errors/no_metadata_spec.rb +3 -3
  276. data/spec/mongoid/errors/no_parent_spec.rb +3 -3
  277. data/spec/mongoid/errors/no_session_config_spec.rb +3 -3
  278. data/spec/mongoid/errors/no_session_database_spec.rb +3 -3
  279. data/spec/mongoid/errors/no_session_hosts_spec.rb +3 -3
  280. data/spec/mongoid/errors/no_sessions_config_spec.rb +3 -3
  281. data/spec/mongoid/errors/readonly_attribute_spec.rb +3 -3
  282. data/spec/mongoid/errors/scope_overwrite_spec.rb +3 -3
  283. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +3 -3
  284. data/spec/mongoid/errors/unknown_attribute_spec.rb +5 -5
  285. data/spec/mongoid/errors/unsaved_document_spec.rb +3 -3
  286. data/spec/mongoid/errors/unsupported_javascript_spec.rb +3 -3
  287. data/spec/mongoid/errors/validations_spec.rb +7 -7
  288. data/spec/mongoid/extensions/array_spec.rb +61 -61
  289. data/spec/mongoid/extensions/big_decimal_spec.rb +11 -11
  290. data/spec/mongoid/extensions/binary_spec.rb +12 -12
  291. data/spec/mongoid/extensions/boolean_spec.rb +18 -18
  292. data/spec/mongoid/extensions/date_spec.rb +13 -13
  293. data/spec/mongoid/extensions/date_time_spec.rb +9 -9
  294. data/spec/mongoid/extensions/false_class_spec.rb +5 -5
  295. data/spec/mongoid/extensions/float_spec.rb +29 -15
  296. data/spec/mongoid/extensions/hash_spec.rb +29 -29
  297. data/spec/mongoid/extensions/integer_spec.rb +15 -15
  298. data/spec/mongoid/extensions/module_spec.rb +2 -2
  299. data/spec/mongoid/extensions/nil_class_spec.rb +1 -1
  300. data/spec/mongoid/extensions/object_id_spec.rb +134 -134
  301. data/spec/mongoid/extensions/object_spec.rb +26 -26
  302. data/spec/mongoid/extensions/range_spec.rb +61 -12
  303. data/spec/mongoid/extensions/regexp_spec.rb +4 -4
  304. data/spec/mongoid/extensions/set_spec.rb +4 -4
  305. data/spec/mongoid/extensions/string_spec.rb +35 -46
  306. data/spec/mongoid/extensions/symbol_spec.rb +9 -9
  307. data/spec/mongoid/extensions/time_spec.rb +49 -49
  308. data/spec/mongoid/extensions/time_with_zone_spec.rb +34 -34
  309. data/spec/mongoid/extensions/true_class_spec.rb +5 -5
  310. data/spec/mongoid/extensions_spec.rb +15 -0
  311. data/spec/mongoid/factory_spec.rb +15 -15
  312. data/spec/mongoid/fields/foreign_key_spec.rb +73 -66
  313. data/spec/mongoid/fields/internal/foreign_keys/array_spec.rb +15 -15
  314. data/spec/mongoid/fields/internal/foreign_keys/object_spec.rb +22 -22
  315. data/spec/mongoid/fields/localized_spec.rb +23 -23
  316. data/spec/mongoid/fields/standard_spec.rb +12 -12
  317. data/spec/mongoid/fields_spec.rb +168 -209
  318. data/spec/mongoid/{finders_spec.rb → findable_spec.rb} +62 -27
  319. data/spec/mongoid/indexable/specification_spec.rb +102 -0
  320. data/spec/mongoid/{indexes_spec.rb → indexable_spec.rb} +171 -51
  321. data/spec/mongoid/{inspection_spec.rb → inspectable_spec.rb} +6 -14
  322. data/spec/mongoid/{callbacks_spec.rb → interceptable_spec.rb} +105 -105
  323. data/spec/mongoid/log_subscriber_spec.rb +74 -0
  324. data/spec/mongoid/loggable_spec.rb +1 -1
  325. data/spec/mongoid/{matchers → matchable}/all_spec.rb +4 -4
  326. data/spec/mongoid/{matchers → matchable}/and_spec.rb +11 -11
  327. data/spec/mongoid/{matchers → matchable}/default_spec.rb +15 -15
  328. data/spec/mongoid/{matchers → matchable}/exists_spec.rb +5 -5
  329. data/spec/mongoid/{matchers → matchable}/gt_spec.rb +9 -8
  330. data/spec/mongoid/{matchers → matchable}/gte_spec.rb +7 -7
  331. data/spec/mongoid/matchable/in_spec.rb +49 -0
  332. data/spec/mongoid/{matchers → matchable}/lt_spec.rb +7 -7
  333. data/spec/mongoid/{matchers → matchable}/lte_spec.rb +7 -7
  334. data/spec/mongoid/{matchers → matchable}/ne_spec.rb +3 -3
  335. data/spec/mongoid/matchable/nin_spec.rb +48 -0
  336. data/spec/mongoid/{matchers → matchable}/or_spec.rb +6 -6
  337. data/spec/mongoid/{matchers → matchable}/size_spec.rb +3 -3
  338. data/spec/mongoid/{matchers_spec.rb → matchable_spec.rb} +41 -41
  339. data/spec/mongoid/persistable/creatable_spec.rb +512 -0
  340. data/spec/mongoid/persistable/deletable_spec.rb +205 -0
  341. data/spec/mongoid/persistable/destroyable_spec.rb +148 -0
  342. data/spec/mongoid/persistable/incrementable_spec.rb +173 -0
  343. data/spec/mongoid/persistable/logical_spec.rb +143 -0
  344. data/spec/mongoid/persistable/poppable_spec.rb +115 -0
  345. data/spec/mongoid/persistable/pullable_spec.rb +228 -0
  346. data/spec/mongoid/persistable/pushable_spec.rb +258 -0
  347. data/spec/mongoid/persistable/renamable_spec.rb +135 -0
  348. data/spec/mongoid/persistable/savable_spec.rb +432 -0
  349. data/spec/mongoid/persistable/settable_spec.rb +139 -0
  350. data/spec/mongoid/persistable/unsettable_spec.rb +155 -0
  351. data/spec/mongoid/persistable/updatable_spec.rb +558 -0
  352. data/spec/mongoid/persistable/upsertable_spec.rb +106 -0
  353. data/spec/mongoid/persistable_spec.rb +206 -0
  354. data/spec/mongoid/{atomic/positionable_spec.rb → positional_spec.rb} +19 -14
  355. data/spec/mongoid/railties/document_spec.rb +2 -2
  356. data/spec/mongoid/relations/accessors_spec.rb +53 -145
  357. data/spec/mongoid/relations/auto_save_spec.rb +36 -16
  358. data/spec/mongoid/relations/bindings/embedded/in_spec.rb +6 -6
  359. data/spec/mongoid/relations/bindings/embedded/many_spec.rb +2 -2
  360. data/spec/mongoid/relations/bindings/embedded/one_spec.rb +3 -3
  361. data/spec/mongoid/relations/bindings/referenced/in_spec.rb +12 -12
  362. data/spec/mongoid/relations/bindings/referenced/many_spec.rb +6 -6
  363. data/spec/mongoid/relations/bindings/referenced/many_to_many_spec.rb +9 -9
  364. data/spec/mongoid/relations/bindings/referenced/one_spec.rb +6 -6
  365. data/spec/mongoid/relations/builders/embedded/in_spec.rb +4 -4
  366. data/spec/mongoid/relations/builders/embedded/many_spec.rb +18 -18
  367. data/spec/mongoid/relations/builders/embedded/one_spec.rb +11 -11
  368. data/spec/mongoid/relations/builders/nested_attributes/many_spec.rb +12 -13
  369. data/spec/mongoid/relations/builders/nested_attributes/one_spec.rb +14 -14
  370. data/spec/mongoid/relations/builders/referenced/in_spec.rb +22 -33
  371. data/spec/mongoid/relations/builders/referenced/many_spec.rb +15 -15
  372. data/spec/mongoid/relations/builders/referenced/many_to_many_spec.rb +18 -18
  373. data/spec/mongoid/relations/builders/referenced/one_spec.rb +11 -24
  374. data/spec/mongoid/relations/builders_spec.rb +21 -21
  375. data/spec/mongoid/relations/cascading/delete_spec.rb +7 -7
  376. data/spec/mongoid/relations/cascading/destroy_spec.rb +2 -2
  377. data/spec/mongoid/relations/cascading/nullify_spec.rb +2 -2
  378. data/spec/mongoid/relations/cascading/restrict_spec.rb +3 -3
  379. data/spec/mongoid/relations/cascading_spec.rb +16 -16
  380. data/spec/mongoid/relations/constraint_spec.rb +8 -7
  381. data/spec/mongoid/relations/conversions_spec.rb +16 -14
  382. data/spec/mongoid/relations/counter_cache_spec.rb +85 -0
  383. data/spec/mongoid/relations/cyclic_spec.rb +18 -18
  384. data/spec/mongoid/relations/eager/belongs_to_spec.rb +154 -0
  385. data/spec/mongoid/relations/eager/has_and_belongs_to_many_spec.rb +143 -0
  386. data/spec/mongoid/relations/eager/has_many_spec.rb +207 -0
  387. data/spec/mongoid/relations/eager/has_one_spec.rb +163 -0
  388. data/spec/mongoid/relations/eager_spec.rb +228 -0
  389. data/spec/mongoid/relations/embedded/dirty_spec.rb +8 -8
  390. data/spec/mongoid/relations/embedded/in_spec.rb +55 -56
  391. data/spec/mongoid/relations/embedded/many_spec.rb +357 -367
  392. data/spec/mongoid/relations/embedded/one_spec.rb +98 -139
  393. data/spec/mongoid/relations/macros_spec.rb +108 -102
  394. data/spec/mongoid/relations/metadata_spec.rb +147 -241
  395. data/spec/mongoid/relations/options_spec.rb +1 -1
  396. data/spec/mongoid/relations/polymorphic_spec.rb +13 -17
  397. data/spec/mongoid/relations/proxy_spec.rb +2 -2
  398. data/spec/mongoid/relations/referenced/in_spec.rb +128 -303
  399. data/spec/mongoid/relations/referenced/many_spec.rb +379 -522
  400. data/spec/mongoid/relations/referenced/many_to_many_spec.rb +345 -417
  401. data/spec/mongoid/relations/referenced/one_spec.rb +148 -263
  402. data/spec/mongoid/relations/reflections_spec.rb +6 -6
  403. data/spec/mongoid/relations/synchronization_spec.rb +46 -50
  404. data/spec/mongoid/relations/targets/enumerable_spec.rb +116 -116
  405. data/spec/mongoid/relations/touchable_spec.rb +296 -0
  406. data/spec/mongoid/relations_spec.rb +16 -15
  407. data/spec/mongoid/{reloading_spec.rb → reloadable_spec.rb} +20 -60
  408. data/spec/mongoid/{scoping_spec.rb → scopable_spec.rb} +74 -126
  409. data/spec/mongoid/selectable_spec.rb +134 -0
  410. data/spec/mongoid/{serialization_spec.rb → serializable_spec.rb} +111 -82
  411. data/spec/mongoid/sessions/factory_spec.rb +49 -28
  412. data/spec/mongoid/sessions/mongo_uri_spec.rb +7 -7
  413. data/spec/mongoid/sessions/options_spec.rb +92 -0
  414. data/spec/mongoid/sessions_spec.rb +288 -177
  415. data/spec/mongoid/{sharding_spec.rb → shardable_spec.rb} +8 -8
  416. data/spec/mongoid/state_spec.rb +10 -10
  417. data/spec/mongoid/threaded_spec.rb +17 -70
  418. data/spec/mongoid/timestamps/created/short_spec.rb +6 -6
  419. data/spec/mongoid/timestamps/created_spec.rb +5 -5
  420. data/spec/mongoid/timestamps/updated/short_spec.rb +10 -10
  421. data/spec/mongoid/timestamps/updated_spec.rb +8 -12
  422. data/spec/mongoid/timestamps_spec.rb +7 -11
  423. data/spec/mongoid/{hierarchy_spec.rb → traversable_spec.rb} +19 -19
  424. data/spec/mongoid/{validations → validatable}/associated_spec.rb +18 -18
  425. data/spec/mongoid/{validations → validatable}/format_spec.rb +6 -6
  426. data/spec/mongoid/{validations → validatable}/length_spec.rb +7 -7
  427. data/spec/mongoid/{validations → validatable}/numericality_spec.rb +1 -1
  428. data/spec/mongoid/{validations → validatable}/presence_spec.rb +31 -38
  429. data/spec/mongoid/{validations → validatable}/uniqueness_spec.rb +126 -183
  430. data/spec/mongoid/{validations_spec.rb → validatable_spec.rb} +28 -28
  431. data/spec/mongoid_spec.rb +8 -8
  432. data/spec/rails/mongoid_spec.rb +72 -87
  433. data/spec/spec_helper.rb +19 -17
  434. metadata +261 -283
  435. data/lib/mongoid/atomic/positionable.rb +0 -73
  436. data/lib/mongoid/components.rb +0 -92
  437. data/lib/mongoid/config/inflections.rb +0 -6
  438. data/lib/mongoid/contextual/eager.rb +0 -158
  439. data/lib/mongoid/criterion/findable.rb +0 -179
  440. data/lib/mongoid/errors/versioning_not_on_root.rb +0 -23
  441. data/lib/mongoid/identity_map.rb +0 -163
  442. data/lib/mongoid/json.rb +0 -16
  443. data/lib/mongoid/matchers.rb +0 -32
  444. data/lib/mongoid/matchers/strategies.rb +0 -97
  445. data/lib/mongoid/multi_parameter_attributes.rb +0 -105
  446. data/lib/mongoid/nested_attributes.rb +0 -78
  447. data/lib/mongoid/observer.rb +0 -192
  448. data/lib/mongoid/paranoia.rb +0 -136
  449. data/lib/mongoid/persistence.rb +0 -357
  450. data/lib/mongoid/persistence/atomic.rb +0 -231
  451. data/lib/mongoid/persistence/atomic/add_to_set.rb +0 -47
  452. data/lib/mongoid/persistence/atomic/bit.rb +0 -35
  453. data/lib/mongoid/persistence/atomic/inc.rb +0 -45
  454. data/lib/mongoid/persistence/atomic/operation.rb +0 -154
  455. data/lib/mongoid/persistence/atomic/pop.rb +0 -32
  456. data/lib/mongoid/persistence/atomic/pull.rb +0 -32
  457. data/lib/mongoid/persistence/atomic/pull_all.rb +0 -32
  458. data/lib/mongoid/persistence/atomic/push.rb +0 -25
  459. data/lib/mongoid/persistence/atomic/push_all.rb +0 -25
  460. data/lib/mongoid/persistence/atomic/rename.rb +0 -30
  461. data/lib/mongoid/persistence/atomic/sets.rb +0 -28
  462. data/lib/mongoid/persistence/atomic/unset.rb +0 -27
  463. data/lib/mongoid/persistence/deletion.rb +0 -31
  464. data/lib/mongoid/persistence/insertion.rb +0 -38
  465. data/lib/mongoid/persistence/modification.rb +0 -35
  466. data/lib/mongoid/persistence/operations.rb +0 -214
  467. data/lib/mongoid/persistence/operations/embedded/insert.rb +0 -46
  468. data/lib/mongoid/persistence/operations/embedded/remove.rb +0 -43
  469. data/lib/mongoid/persistence/operations/insert.rb +0 -34
  470. data/lib/mongoid/persistence/operations/remove.rb +0 -33
  471. data/lib/mongoid/persistence/operations/update.rb +0 -59
  472. data/lib/mongoid/persistence/operations/upsert.rb +0 -28
  473. data/lib/mongoid/persistence/upsertion.rb +0 -31
  474. data/lib/mongoid/unit_of_work.rb +0 -61
  475. data/lib/mongoid/versioning.rb +0 -217
  476. data/lib/rack/mongoid.rb +0 -2
  477. data/lib/rack/mongoid/middleware/identity_map.rb +0 -39
  478. data/lib/rails/generators/mongoid/observer/observer_generator.rb +0 -17
  479. data/lib/rails/generators/mongoid/observer/templates/observer.rb.tt +0 -4
  480. data/spec/app/models/actor_observer.rb +0 -15
  481. data/spec/app/models/callback_recorder.rb +0 -25
  482. data/spec/app/models/draft.rb +0 -9
  483. data/spec/app/models/paranoid_phone.rb +0 -25
  484. data/spec/app/models/paranoid_post.rb +0 -36
  485. data/spec/app/models/phone_observer.rb +0 -6
  486. data/spec/mongoid/#atomic_spec.rb# +0 -365
  487. data/spec/mongoid/attributes/processing_spec.rb +0 -149
  488. data/spec/mongoid/criterion/destructive_spec.rb +0 -101
  489. data/spec/mongoid/criterion/modifiable_spec.rb +0 -409
  490. data/spec/mongoid/criterion/modification_spec.rb +0 -402
  491. data/spec/mongoid/errors/versioning_not_on_root_spec.rb +0 -29
  492. data/spec/mongoid/identity_map_spec.rb +0 -564
  493. data/spec/mongoid/json_spec.rb +0 -33
  494. data/spec/mongoid/matchers/in_spec.rb +0 -25
  495. data/spec/mongoid/matchers/nin_spec.rb +0 -25
  496. data/spec/mongoid/multi_parameter_attributes_spec.rb +0 -128
  497. data/spec/mongoid/observer_spec.rb +0 -290
  498. data/spec/mongoid/paranoia_spec.rb +0 -759
  499. data/spec/mongoid/persistence/atomic/add_to_set_spec.rb +0 -262
  500. data/spec/mongoid/persistence/atomic/bit_spec.rb +0 -88
  501. data/spec/mongoid/persistence/atomic/inc_spec.rb +0 -133
  502. data/spec/mongoid/persistence/atomic/pop_spec.rb +0 -111
  503. data/spec/mongoid/persistence/atomic/pull_all_spec.rb +0 -77
  504. data/spec/mongoid/persistence/atomic/pull_spec.rb +0 -80
  505. data/spec/mongoid/persistence/atomic/push_all_spec.rb +0 -77
  506. data/spec/mongoid/persistence/atomic/push_spec.rb +0 -77
  507. data/spec/mongoid/persistence/atomic/rename_spec.rb +0 -42
  508. data/spec/mongoid/persistence/atomic/sets_spec.rb +0 -154
  509. data/spec/mongoid/persistence/atomic/unset_spec.rb +0 -65
  510. data/spec/mongoid/persistence/atomic_spec.rb +0 -216
  511. data/spec/mongoid/persistence/operations/embedded/insert_spec.rb +0 -191
  512. data/spec/mongoid/persistence/operations/embedded/remove_spec.rb +0 -8
  513. data/spec/mongoid/persistence/operations/insert_spec.rb +0 -149
  514. data/spec/mongoid/persistence/operations/remove_spec.rb +0 -113
  515. data/spec/mongoid/persistence/operations/update_spec.rb +0 -141
  516. data/spec/mongoid/persistence/operations/upsert_spec.rb +0 -59
  517. data/spec/mongoid/persistence/operations_spec.rb +0 -313
  518. data/spec/mongoid/persistence_spec.rb +0 -2279
  519. data/spec/mongoid/unit_of_work_spec.rb +0 -196
  520. data/spec/mongoid/versioning_spec.rb +0 -540
  521. data/spec/rack/mongoid/middleware/identity_map_spec.rb +0 -72
@@ -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
 
@@ -148,7 +148,7 @@ describe Mongoid::Document do
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!
177
171
  end
178
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(:number)
186
+ end
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,31 @@ 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.instantiate("_id" => BSON::ObjectId.new)
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 ])
512
537
  end
513
538
  end
514
539
 
515
540
  context "when the document is destroyed" do
516
541
 
517
542
  let(:person) do
518
- Person.instantiate("_id" => Moped::BSON::ObjectId.new).tap do |peep|
543
+ Person.instantiate("_id" => BSON::ObjectId.new).tap do |peep|
519
544
  peep.destroyed = true
520
545
  end
521
546
  end
522
547
 
523
548
  it "returns the id in an array" do
524
- person.to_key.should eq([ person.id ])
549
+ expect(person.to_key).to eq([ person.id ])
525
550
  end
526
551
  end
527
552
  end
@@ -535,18 +560,18 @@ describe Mongoid::Document do
535
560
  end
536
561
 
537
562
  it "returns nil" do
538
- person.to_param.should be_nil
563
+ expect(person.to_param).to be_nil
539
564
  end
540
565
  end
541
566
 
542
567
  context "when the document is not new" do
543
568
 
544
569
  let(:person) do
545
- Person.instantiate("_id" => Moped::BSON::ObjectId.new)
570
+ Person.instantiate("_id" => BSON::ObjectId.new)
546
571
  end
547
572
 
548
573
  it "returns the id as a string" do
549
- person.to_param.should eq(person.id.to_s)
574
+ expect(person.to_param).to eq(person.id.to_s)
550
575
  end
551
576
  end
552
577
  end
@@ -560,7 +585,7 @@ describe Mongoid::Document do
560
585
  context "when attributes are not frozen" do
561
586
 
562
587
  it "return false" do
563
- person.should_not be_frozen
588
+ expect(person).to_not be_frozen
564
589
  expect {
565
590
  person.title = "something"
566
591
  }.to_not raise_error
@@ -573,7 +598,7 @@ describe Mongoid::Document do
573
598
  end
574
599
 
575
600
  it "return true" do
576
- person.should be_frozen
601
+ expect(person).to be_frozen
577
602
  end
578
603
  end
579
604
  end
@@ -587,7 +612,7 @@ describe Mongoid::Document do
587
612
  context "when not frozen" do
588
613
 
589
614
  it "freezes attributes" do
590
- person.freeze.should eq(person)
615
+ expect(person.freeze).to eq(person)
591
616
  expect { person.title = "something" }.to raise_error
592
617
  end
593
618
  end
@@ -610,7 +635,7 @@ describe Mongoid::Document do
610
635
  describe ".logger" do
611
636
 
612
637
  it "returns the mongoid logger" do
613
- Person.logger.should eq(Mongoid.logger)
638
+ expect(Person.logger).to eq(Mongoid.logger)
614
639
  end
615
640
  end
616
641
 
@@ -621,7 +646,7 @@ describe Mongoid::Document do
621
646
  end
622
647
 
623
648
  it "returns the mongoid logger" do
624
- person.send(:logger).should eq(Mongoid.logger)
649
+ expect(person.send(:logger)).to eq(Mongoid.logger)
625
650
  end
626
651
  end
627
652
 
@@ -632,7 +657,7 @@ describe Mongoid::Document do
632
657
  end
633
658
 
634
659
  it "resets to the global scope" do
635
- movie.global_set.should be_a(::Set)
660
+ expect(movie.global_set).to be_a(::Set)
636
661
  end
637
662
  end
638
663
  context "when a model name conflicts with a mongoid internal" do
@@ -642,7 +667,7 @@ describe Mongoid::Document do
642
667
  end
643
668
 
644
669
  it "allows the model name" do
645
- scheduler.strategy.should be_a(Strategy)
670
+ expect(scheduler.strategy).to be_a(Strategy)
646
671
  end
647
672
  end
648
673
 
@@ -652,16 +677,16 @@ describe Mongoid::Document do
652
677
 
653
678
  it "sets the defaults before yielding" do
654
679
  Person.new do |person|
655
- person.age.should eq(100)
680
+ expect(person.age).to eq(100)
656
681
  end
657
682
  end
658
683
  end
659
684
  end
660
685
 
661
- context "defining a Moped::BSON::ObjectId as a field" do
686
+ context "defining a BSON::ObjectId as a field" do
662
687
 
663
688
  let(:bson_id) do
664
- Moped::BSON::ObjectId.new
689
+ BSON::ObjectId.new
665
690
  end
666
691
 
667
692
  let(:person) do
@@ -673,11 +698,11 @@ describe Mongoid::Document do
673
698
  end
674
699
 
675
700
  it "persists the correct type" do
676
- person.reload.bson_id.should be_a(Moped::BSON::ObjectId)
701
+ expect(person.reload.bson_id).to be_a(BSON::ObjectId)
677
702
  end
678
703
 
679
704
  it "has the correct value" do
680
- person.bson_id.should eq(bson_id)
705
+ expect(person.bson_id).to eq(bson_id)
681
706
  end
682
707
  end
683
708
 
@@ -692,7 +717,7 @@ describe Mongoid::Document do
692
717
  end
693
718
 
694
719
  it "converts them to nil" do
695
- post.person_id.should be_nil
720
+ expect(post.person_id).to be_nil
696
721
  end
697
722
  end
698
723
 
@@ -742,15 +767,15 @@ describe Mongoid::Document do
742
767
  end
743
768
 
744
769
  it "copies attributes" do
745
- person.title.should eq('Sir')
770
+ expect(person.title).to eq('Sir')
746
771
  end
747
772
 
748
773
  it "keeps the same object id" do
749
- person.id.should eq(manager.id)
774
+ expect(person.id).to eq(manager.id)
750
775
  end
751
776
 
752
777
  it "sets the class type" do
753
- person._type.should eq("Person")
778
+ expect(person._type).to eq("Person")
754
779
  end
755
780
 
756
781
  it "raises an error when inappropriate class is provided" do
@@ -773,11 +798,11 @@ describe Mongoid::Document do
773
798
  end
774
799
 
775
800
  it "copies the embedded documents" do
776
- person.appointments.first.should eq(appointment)
801
+ expect(person.appointments.first).to eq(appointment)
777
802
  end
778
803
 
779
804
  it "returns new instances" do
780
- person.appointments.first.should_not equal(appointment)
805
+ expect(person.appointments.first).to_not equal(appointment)
781
806
  end
782
807
  end
783
808
 
@@ -794,11 +819,11 @@ describe Mongoid::Document do
794
819
  end
795
820
 
796
821
  it "copies the embedded documents" do
797
- person.addresses.first.should eq(address)
822
+ expect(person.addresses.first).to eq(address)
798
823
  end
799
824
 
800
825
  it "returns new instances" do
801
- person.addresses.first.should_not equal(address)
826
+ expect(person.addresses.first).to_not equal(address)
802
827
  end
803
828
  end
804
829
 
@@ -821,11 +846,11 @@ describe Mongoid::Document do
821
846
  end
822
847
 
823
848
  it "copies the embedded documents" do
824
- person.addresses.first.should eq(address)
849
+ expect(person.addresses.first).to eq(address)
825
850
  end
826
851
 
827
852
  it "copies the embedded documents only once" do
828
- person.reload.addresses.length.should eq(1)
853
+ expect(person.reload.addresses.length).to eq(1)
829
854
  end
830
855
  end
831
856
  end
@@ -842,7 +867,7 @@ describe Mongoid::Document do
842
867
  end
843
868
 
844
869
  it "copies the localize attribute" do
845
- person.desc.should eq("description")
870
+ expect(person.desc).to eq("description")
846
871
  end
847
872
  end
848
873
 
@@ -853,7 +878,7 @@ describe Mongoid::Document do
853
878
  end
854
879
 
855
880
  it "copies the state" do
856
- person.should be_a_new_record
881
+ expect(person).to be_a_new_record
857
882
  end
858
883
  end
859
884
 
@@ -868,7 +893,7 @@ describe Mongoid::Document do
868
893
  end
869
894
 
870
895
  it "copies the state" do
871
- person.should be_persisted
896
+ expect(person).to be_persisted
872
897
  end
873
898
  end
874
899
 
@@ -883,7 +908,7 @@ describe Mongoid::Document do
883
908
  end
884
909
 
885
910
  it "copies the state" do
886
- person.should be_destroyed
911
+ expect(person).to be_destroyed
887
912
  end
888
913
  end
889
914
 
@@ -899,11 +924,11 @@ describe Mongoid::Document do
899
924
  end
900
925
 
901
926
  it "copies over the dirty changes" do
902
- person.changes["ssn"].should eq([ nil, "123-22-1234" ])
927
+ expect(person.changes["ssn"]).to eq([ nil, "123-22-1234" ])
903
928
  end
904
929
 
905
930
  it "adds the _type change" do
906
- person.changes["_type"].should eq([ "Manager", "Person" ])
931
+ expect(person.changes["_type"]).to eq([ "Manager", "Person" ])
907
932
  end
908
933
  end
909
934
 
@@ -919,7 +944,7 @@ describe Mongoid::Document do
919
944
  end
920
945
 
921
946
  it "copies the errors" do
922
- person.errors.should include(:ssn)
947
+ expect(person.errors).to include(:ssn)
923
948
  end
924
949
  end
925
950
  end
@@ -937,15 +962,15 @@ describe Mongoid::Document do
937
962
  end
938
963
 
939
964
  it "copies attributes" do
940
- manager.title.should eq('Sir')
965
+ expect(manager.title).to eq('Sir')
941
966
  end
942
967
 
943
968
  it "keeps the same object id" do
944
- manager.id.should eq(person.id)
969
+ expect(manager.id).to eq(person.id)
945
970
  end
946
971
 
947
972
  it "sets the class type" do
948
- manager._type.should eq("Manager")
973
+ expect(manager._type).to eq("Manager")
949
974
  end
950
975
 
951
976
  it "raises an error when inappropriate class is provided" do
@@ -966,11 +991,11 @@ describe Mongoid::Document do
966
991
  end
967
992
 
968
993
  it "copies the embedded documents" do
969
- manager.addresses.first.should eq(address)
994
+ expect(manager.addresses.first).to eq(address)
970
995
  end
971
996
 
972
997
  it "returns new instances" do
973
- manager.addresses.first.should_not equal(address)
998
+ expect(manager.addresses.first).to_not equal(address)
974
999
  end
975
1000
  end
976
1001
 
@@ -981,7 +1006,7 @@ describe Mongoid::Document do
981
1006
  end
982
1007
 
983
1008
  it "copies the state" do
984
- manager.should be_a_new_record
1009
+ expect(manager).to be_a_new_record
985
1010
  end
986
1011
  end
987
1012
 
@@ -996,7 +1021,7 @@ describe Mongoid::Document do
996
1021
  end
997
1022
 
998
1023
  it "copies the state" do
999
- manager.should be_persisted
1024
+ expect(manager).to be_persisted
1000
1025
  end
1001
1026
 
1002
1027
  context "when downcasted document is saved" do
@@ -1006,15 +1031,19 @@ describe Mongoid::Document do
1006
1031
  end
1007
1032
 
1008
1033
  it "keeps the type" do
1009
- manager.should be_an_instance_of(Manager)
1034
+ expect(manager).to be_an_instance_of(Manager)
1035
+ end
1036
+
1037
+ it "copies over the dirty changes" do
1038
+ expect(manager.changes["ssn"]).to eq(person.changes["ssn"])
1010
1039
  end
1011
1040
 
1012
1041
  it "can by queried by the parent class" do
1013
- Person.find(manager.id).should be_an_instance_of(Manager)
1042
+ expect(Person.find(manager.id)).to be_an_instance_of(Manager)
1014
1043
  end
1015
1044
 
1016
1045
  it "can by queried by the main class" do
1017
- Manager.find(manager.id).should be_an_instance_of(Manager)
1046
+ expect(Manager.find(manager.id)).to be_an_instance_of(Manager)
1018
1047
  end
1019
1048
  end
1020
1049
  end
@@ -1030,7 +1059,7 @@ describe Mongoid::Document do
1030
1059
  end
1031
1060
 
1032
1061
  it "copies the state" do
1033
- manager.should be_destroyed
1062
+ expect(manager).to be_destroyed
1034
1063
  end
1035
1064
  end
1036
1065
 
@@ -1046,11 +1075,11 @@ describe Mongoid::Document do
1046
1075
  end
1047
1076
 
1048
1077
  it "copies over the dirty changes" do
1049
- manager.changes["ssn"].should eq([ nil, "123-22-1234" ])
1078
+ expect(manager.changes["ssn"]).to eq([ nil, "123-22-1234" ])
1050
1079
  end
1051
1080
 
1052
1081
  it "adds the _type change" do
1053
- manager.changes["_type"].should eq([ "Person", "Manager" ])
1082
+ expect(manager.changes["_type"]).to eq([ "Person", "Manager" ])
1054
1083
  end
1055
1084
  end
1056
1085
 
@@ -1066,7 +1095,24 @@ describe Mongoid::Document do
1066
1095
  end
1067
1096
 
1068
1097
  it "copies the errors" do
1069
- manager.errors.should include(:ssn)
1098
+ expect(manager.errors).to include(:ssn)
1099
+ end
1100
+
1101
+ end
1102
+
1103
+ context "when the subclass validates attributes not present on the parent class" do
1104
+
1105
+ before do
1106
+ Manager.validates_inclusion_of(:level, in: [1, 2])
1107
+ end
1108
+
1109
+ let(:manager) do
1110
+ person.becomes(Manager)
1111
+ end
1112
+
1113
+ it "validates the instance of the subclass" do
1114
+ manager.level = 3
1115
+ expect(manager.valid?).to be false
1070
1116
  end
1071
1117
  end
1072
1118
 
@@ -1077,7 +1123,7 @@ describe Mongoid::Document do
1077
1123
  end
1078
1124
 
1079
1125
  it "applies default attributes" do
1080
- manager.level.should eq(1)
1126
+ expect(manager.level).to eq(1)
1081
1127
  end
1082
1128
  end
1083
1129
  end
@@ -1132,13 +1178,13 @@ describe Mongoid::Document do
1132
1178
  end
1133
1179
 
1134
1180
  it "stores the parent object" do
1135
- cache.fetch("key") { person }.should eq(person)
1136
- cache.fetch("key").should eq(person)
1181
+ expect(cache.fetch("key") { person }).to eq(person)
1182
+ expect(cache.fetch("key")).to eq(person)
1137
1183
  end
1138
1184
 
1139
1185
  it "stores the embedded object" do
1140
- cache.fetch("key") { account }.should eq(account)
1141
- cache.fetch("key").should eq(account)
1186
+ expect(cache.fetch("key") { account }).to eq(account)
1187
+ expect(cache.fetch("key")).to eq(account)
1142
1188
  end
1143
1189
  end
1144
1190
  end