mongoid 3.1.6 → 4.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (571) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +479 -8
  3. data/README.md +10 -7
  4. data/lib/config/locales/en.yml +34 -20
  5. data/lib/mongoid.rb +10 -76
  6. data/lib/mongoid/atomic.rb +3 -14
  7. data/lib/mongoid/atomic/paths/embedded.rb +0 -30
  8. data/lib/mongoid/atomic/paths/embedded/many.rb +1 -1
  9. data/lib/mongoid/atomic/paths/embedded/one.rb +1 -1
  10. data/lib/mongoid/atomic/paths/root.rb +0 -13
  11. data/lib/mongoid/attributes.rb +65 -101
  12. data/lib/mongoid/attributes/dynamic.rb +154 -0
  13. data/lib/mongoid/attributes/nested.rb +82 -0
  14. data/lib/mongoid/attributes/processing.rb +13 -66
  15. data/lib/mongoid/{dirty.rb → changeable.rb} +32 -2
  16. data/lib/mongoid/composable.rb +105 -0
  17. data/lib/mongoid/config.rb +3 -9
  18. data/lib/mongoid/config/options.rb +1 -1
  19. data/lib/mongoid/contextual.rb +2 -0
  20. data/lib/mongoid/contextual/aggregable/memory.rb +2 -2
  21. data/lib/mongoid/contextual/aggregable/mongo.rb +7 -9
  22. data/lib/mongoid/contextual/atomic.rb +53 -53
  23. data/lib/mongoid/contextual/geo_near.rb +1 -1
  24. data/lib/mongoid/contextual/map_reduce.rb +4 -2
  25. data/lib/mongoid/contextual/memory.rb +23 -11
  26. data/lib/mongoid/contextual/mongo.rb +75 -57
  27. data/lib/mongoid/contextual/none.rb +90 -0
  28. data/lib/mongoid/contextual/text_search.rb +178 -0
  29. data/lib/mongoid/copyable.rb +2 -3
  30. data/lib/mongoid/criteria.rb +39 -34
  31. data/lib/mongoid/criteria/#findable.rb# +141 -0
  32. data/lib/mongoid/{criterion → criteria}/findable.rb +7 -47
  33. data/lib/mongoid/{criterion/inspection.rb → criteria/inspectable.rb} +2 -2
  34. data/lib/mongoid/{criterion → criteria}/marshalable.rb +3 -1
  35. data/lib/mongoid/{criterion → criteria}/modifiable.rb +28 -8
  36. data/lib/mongoid/criteria/permission.rb +70 -0
  37. data/lib/mongoid/{criterion/scoping.rb → criteria/scopable.rb} +2 -2
  38. data/lib/mongoid/document.rb +39 -24
  39. data/lib/mongoid/errors.rb +4 -1
  40. data/lib/mongoid/errors/document_not_destroyed.rb +25 -0
  41. data/lib/mongoid/errors/document_not_found.rb +2 -1
  42. data/lib/mongoid/errors/invalid_storage_options.rb +1 -1
  43. data/lib/mongoid/errors/invalid_storage_parent.rb +26 -0
  44. data/lib/mongoid/errors/invalid_value.rb +16 -0
  45. data/lib/mongoid/errors/mongoid_error.rb +1 -1
  46. data/lib/mongoid/errors/readonly_document.rb +24 -0
  47. data/lib/mongoid/extensions.rb +15 -7
  48. data/lib/mongoid/extensions/array.rb +3 -3
  49. data/lib/mongoid/extensions/big_decimal.rb +1 -1
  50. data/lib/mongoid/extensions/boolean.rb +15 -17
  51. data/lib/mongoid/extensions/date.rb +1 -1
  52. data/lib/mongoid/extensions/date_time.rb +3 -3
  53. data/lib/mongoid/extensions/float.rb +2 -1
  54. data/lib/mongoid/extensions/hash.rb +3 -3
  55. data/lib/mongoid/extensions/integer.rb +1 -1
  56. data/lib/mongoid/extensions/object.rb +7 -7
  57. data/lib/mongoid/extensions/object_id.rb +5 -5
  58. data/lib/mongoid/extensions/range.rb +9 -3
  59. data/lib/mongoid/extensions/regexp.rb +1 -1
  60. data/lib/mongoid/extensions/set.rb +1 -1
  61. data/lib/mongoid/extensions/string.rb +6 -18
  62. data/lib/mongoid/extensions/symbol.rb +1 -1
  63. data/lib/mongoid/extensions/time.rb +3 -3
  64. data/lib/mongoid/extensions/time_with_zone.rb +1 -1
  65. data/lib/mongoid/factory.rb +8 -6
  66. data/lib/mongoid/fields.rb +41 -8
  67. data/lib/mongoid/fields/foreign_key.rb +3 -3
  68. data/lib/mongoid/fields/localized.rb +1 -1
  69. data/lib/mongoid/fields/standard.rb +5 -17
  70. data/lib/mongoid/fields/validators/macro.rb +15 -5
  71. data/lib/mongoid/{finders.rb → findable.rb} +35 -7
  72. data/lib/mongoid/{indexes.rb → indexable.rb} +50 -55
  73. data/lib/mongoid/indexable/specification.rb +104 -0
  74. data/lib/mongoid/{indexes → indexable}/validators/options.rb +2 -1
  75. data/lib/mongoid/{inspection.rb → inspectable.rb} +15 -11
  76. data/lib/mongoid/{callbacks.rb → interceptable.rb} +30 -62
  77. data/lib/mongoid/log_subscriber.rb +55 -0
  78. data/lib/mongoid/matchable.rb +152 -0
  79. data/lib/mongoid/{matchers → matchable}/all.rb +1 -1
  80. data/lib/mongoid/{matchers → matchable}/and.rb +2 -2
  81. data/lib/mongoid/{matchers → matchable}/default.rb +1 -1
  82. data/lib/mongoid/{matchers → matchable}/exists.rb +1 -1
  83. data/lib/mongoid/{matchers → matchable}/gt.rb +1 -1
  84. data/lib/mongoid/{matchers → matchable}/gte.rb +1 -1
  85. data/lib/mongoid/{matchers → matchable}/in.rb +2 -2
  86. data/lib/mongoid/{matchers → matchable}/lt.rb +1 -1
  87. data/lib/mongoid/{matchers → matchable}/lte.rb +1 -1
  88. data/lib/mongoid/{matchers → matchable}/ne.rb +2 -2
  89. data/lib/mongoid/{matchers → matchable}/nin.rb +3 -2
  90. data/lib/mongoid/{matchers → matchable}/or.rb +2 -2
  91. data/lib/mongoid/{matchers → matchable}/size.rb +1 -1
  92. data/lib/mongoid/persistable.rb +216 -0
  93. data/lib/mongoid/persistable/creatable.rb +189 -0
  94. data/lib/mongoid/persistable/deletable.rb +149 -0
  95. data/lib/mongoid/persistable/destroyable.rb +60 -0
  96. data/lib/mongoid/persistable/incrementable.rb +36 -0
  97. data/lib/mongoid/persistable/logical.rb +38 -0
  98. data/lib/mongoid/persistable/poppable.rb +39 -0
  99. data/lib/mongoid/persistable/pullable.rb +55 -0
  100. data/lib/mongoid/persistable/pushable.rb +62 -0
  101. data/lib/mongoid/persistable/renamable.rb +35 -0
  102. data/lib/mongoid/persistable/savable.rb +52 -0
  103. data/lib/mongoid/persistable/settable.rb +33 -0
  104. data/lib/mongoid/persistable/unsettable.rb +36 -0
  105. data/lib/mongoid/persistable/updatable.rb +153 -0
  106. data/lib/mongoid/persistable/upsertable.rb +55 -0
  107. data/lib/mongoid/positional.rb +71 -0
  108. data/lib/mongoid/query_cache.rb +255 -0
  109. data/lib/mongoid/railtie.rb +34 -60
  110. data/lib/mongoid/railties/database.rake +9 -25
  111. data/lib/mongoid/relations.rb +11 -25
  112. data/lib/mongoid/relations/accessors.rb +15 -51
  113. data/lib/mongoid/relations/auto_save.rb +15 -36
  114. data/lib/mongoid/relations/binding.rb +2 -25
  115. data/lib/mongoid/relations/bindings/embedded/in.rb +1 -1
  116. data/lib/mongoid/relations/bindings/embedded/many.rb +1 -3
  117. data/lib/mongoid/relations/bindings/referenced/in.rb +3 -8
  118. data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +4 -2
  119. data/lib/mongoid/relations/builder.rb +1 -1
  120. data/lib/mongoid/relations/builders.rb +2 -2
  121. data/lib/mongoid/relations/builders/embedded/one.rb +1 -1
  122. data/lib/mongoid/relations/builders/nested_attributes/many.rb +10 -13
  123. data/lib/mongoid/relations/builders/nested_attributes/one.rb +5 -6
  124. data/lib/mongoid/relations/builders/referenced/in.rb +1 -1
  125. data/lib/mongoid/relations/builders/referenced/many.rb +1 -2
  126. data/lib/mongoid/relations/builders/referenced/many_to_many.rb +1 -2
  127. data/lib/mongoid/relations/builders/referenced/one.rb +1 -1
  128. data/lib/mongoid/relations/cascading.rb +3 -5
  129. data/lib/mongoid/relations/constraint.rb +1 -1
  130. data/lib/mongoid/relations/conversions.rb +1 -1
  131. data/lib/mongoid/relations/counter_cache.rb +39 -15
  132. data/lib/mongoid/relations/eager.rb +46 -0
  133. data/lib/mongoid/relations/eager/base.rb +149 -0
  134. data/lib/mongoid/relations/eager/belongs_to.rb +31 -0
  135. data/lib/mongoid/relations/eager/has_and_belongs_to_many.rb +47 -0
  136. data/lib/mongoid/relations/eager/has_many.rb +38 -0
  137. data/lib/mongoid/relations/eager/has_one.rb +30 -0
  138. data/lib/mongoid/relations/embedded/batchable.rb +4 -5
  139. data/lib/mongoid/relations/embedded/in.rb +4 -4
  140. data/lib/mongoid/relations/embedded/many.rb +14 -32
  141. data/lib/mongoid/relations/embedded/one.rb +1 -1
  142. data/lib/mongoid/relations/macros.rb +3 -4
  143. data/lib/mongoid/relations/many.rb +51 -31
  144. data/lib/mongoid/relations/marshalable.rb +3 -3
  145. data/lib/mongoid/relations/metadata.rb +14 -79
  146. data/lib/mongoid/relations/nested_builder.rb +2 -2
  147. data/lib/mongoid/relations/one.rb +1 -1
  148. data/lib/mongoid/relations/options.rb +1 -0
  149. data/lib/mongoid/relations/polymorphic.rb +0 -1
  150. data/lib/mongoid/relations/proxy.rb +21 -41
  151. data/lib/mongoid/relations/referenced/in.rb +4 -20
  152. data/lib/mongoid/relations/referenced/many.rb +22 -35
  153. data/lib/mongoid/relations/referenced/many_to_many.rb +19 -42
  154. data/lib/mongoid/relations/referenced/one.rb +6 -25
  155. data/lib/mongoid/relations/synchronization.rb +4 -4
  156. data/lib/mongoid/relations/targets/enumerable.rb +10 -10
  157. data/lib/mongoid/relations/touchable.rb +34 -1
  158. data/lib/mongoid/{reloading.rb → reloadable.rb} +7 -5
  159. data/lib/mongoid/{scoping.rb → scopable.rb} +36 -36
  160. data/lib/mongoid/selectable.rb +59 -0
  161. data/lib/mongoid/{serialization.rb → serializable.rb} +11 -2
  162. data/lib/mongoid/sessions.rb +37 -345
  163. data/lib/mongoid/sessions/factory.rb +2 -0
  164. data/lib/mongoid/sessions/options.rb +185 -0
  165. data/lib/mongoid/sessions/storage_options.rb +140 -0
  166. data/lib/mongoid/sessions/thread_options.rb +19 -0
  167. data/lib/mongoid/sessions/validators/storage.rb +16 -3
  168. data/lib/mongoid/{sharding.rb → shardable.rb} +5 -1
  169. data/lib/mongoid/{state.rb → stateful.rb} +13 -1
  170. data/lib/mongoid/support/query_counter.rb +23 -0
  171. data/lib/mongoid/tasks/database.rake +31 -0
  172. data/lib/mongoid/tasks/database.rb +107 -0
  173. data/lib/mongoid/threaded.rb +26 -172
  174. data/lib/mongoid/threaded/lifecycle.rb +0 -28
  175. data/lib/mongoid/timestamps/updated/short.rb +2 -2
  176. data/lib/mongoid/{hierarchy.rb → traversable.rb} +15 -7
  177. data/lib/mongoid/{validations.rb → validatable.rb} +23 -10
  178. data/lib/mongoid/{validations → validatable}/associated.rb +4 -2
  179. data/lib/mongoid/{validations → validatable}/format.rb +1 -1
  180. data/lib/mongoid/{validations → validatable}/length.rb +1 -1
  181. data/lib/mongoid/{validations → validatable}/localizable.rb +1 -1
  182. data/lib/mongoid/{validations → validatable}/macros.rb +4 -3
  183. data/lib/mongoid/{validations → validatable}/presence.rb +1 -1
  184. data/lib/mongoid/{validations → validatable}/queryable.rb +1 -2
  185. data/lib/mongoid/{validations → validatable}/uniqueness.rb +25 -21
  186. data/lib/mongoid/version.rb +1 -1
  187. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +46 -25
  188. data/lib/rails/generators/mongoid/model/model_generator.rb +0 -1
  189. data/lib/rails/generators/mongoid/model/templates/model.rb.tt +0 -3
  190. data/lib/rails/generators/mongoid_generator.rb +3 -40
  191. data/lib/rails/mongoid.rb +0 -122
  192. data/lib/support/ruby_version.rb +1 -1
  193. data/spec/app/models/account.rb +2 -6
  194. data/spec/app/models/acolyte.rb +2 -1
  195. data/spec/app/models/actor.rb +0 -1
  196. data/spec/app/models/address.rb +8 -3
  197. data/spec/app/models/animal.rb +1 -1
  198. data/spec/app/models/appointment.rb +3 -3
  199. data/spec/app/models/article.rb +1 -4
  200. data/spec/app/models/audio.rb +5 -0
  201. data/spec/app/models/author.rb +0 -2
  202. data/spec/app/models/band.rb +3 -2
  203. data/spec/app/models/bar.rb +1 -0
  204. data/spec/app/models/book.rb +1 -0
  205. data/spec/app/models/building.rb +0 -2
  206. data/spec/app/models/building_address.rb +0 -2
  207. data/spec/app/models/bus.rb +1 -1
  208. data/spec/app/models/canvas.rb +1 -1
  209. data/spec/app/models/contextable_item.rb +5 -0
  210. data/spec/app/models/contractor.rb +0 -2
  211. data/spec/app/models/country_code.rb +1 -1
  212. data/spec/app/models/definition.rb +2 -2
  213. data/spec/app/models/dog.rb +1 -1
  214. data/spec/app/models/draft.rb +9 -0
  215. data/spec/app/models/dragon.rb +4 -0
  216. data/spec/app/models/drug.rb +1 -3
  217. data/spec/app/models/dungeon.rb +4 -0
  218. data/spec/app/models/edit.rb +5 -0
  219. data/spec/app/models/even.rb +7 -0
  220. data/spec/app/models/event.rb +1 -1
  221. data/spec/app/models/filesystem.rb +1 -0
  222. data/spec/app/models/fish.rb +0 -1
  223. data/spec/app/models/fruits.rb +6 -0
  224. data/spec/app/models/game.rb +0 -2
  225. data/spec/app/models/house.rb +1 -3
  226. data/spec/app/models/id_key.rb +6 -0
  227. data/spec/app/models/item.rb +1 -5
  228. data/spec/app/models/jar.rb +1 -1
  229. data/spec/app/models/label.rb +4 -4
  230. data/spec/app/models/line_item.rb +1 -1
  231. data/spec/app/models/login.rb +1 -1
  232. data/spec/app/models/message.rb +8 -0
  233. data/spec/app/models/movie.rb +1 -0
  234. data/spec/app/models/name.rb +3 -3
  235. data/spec/app/models/note.rb +3 -1
  236. data/spec/app/models/odd.rb +7 -0
  237. data/spec/app/models/oscar.rb +1 -1
  238. data/spec/app/models/parent_doc.rb +1 -1
  239. data/spec/app/models/person.rb +16 -10
  240. data/spec/app/models/phone.rb +1 -3
  241. data/spec/app/models/player.rb +3 -3
  242. data/spec/app/models/post.rb +5 -3
  243. data/spec/app/models/preference.rb +1 -1
  244. data/spec/app/models/quiz.rb +0 -3
  245. data/spec/app/models/record.rb +10 -5
  246. data/spec/app/models/registry.rb +1 -1
  247. data/spec/app/models/server.rb +1 -1
  248. data/spec/app/models/service.rb +3 -3
  249. data/spec/app/models/sound.rb +5 -0
  250. data/spec/app/models/symptom.rb +1 -1
  251. data/spec/app/models/template.rb +1 -1
  252. data/spec/app/models/title.rb +0 -1
  253. data/spec/app/models/track.rb +5 -5
  254. data/spec/app/models/tree.rb +3 -3
  255. data/spec/app/models/video.rb +1 -5
  256. data/spec/app/models/wiki_page.rb +2 -5
  257. data/spec/app/models/word.rb +3 -0
  258. data/spec/app/models/word_origin.rb +1 -1
  259. data/spec/config/mongoid.yml +7 -8
  260. data/spec/helpers.rb +18 -0
  261. data/spec/mongoid/#atomic_spec.rb# +365 -0
  262. data/spec/mongoid/atomic/modifiers_spec.rb +22 -22
  263. data/spec/mongoid/atomic/paths/embedded/many_spec.rb +8 -49
  264. data/spec/mongoid/atomic/paths/embedded/one_spec.rb +7 -49
  265. data/spec/mongoid/atomic/paths/root_spec.rb +3 -61
  266. data/spec/mongoid/atomic/paths_spec.rb +19 -19
  267. data/spec/mongoid/atomic_spec.rb +19 -19
  268. data/spec/mongoid/{nested_attributes_spec.rb → attributes/nested_spec.rb} +474 -592
  269. data/spec/mongoid/attributes/readonly_spec.rb +58 -18
  270. data/spec/mongoid/attributes_spec.rb +349 -434
  271. data/spec/mongoid/{dirty_spec.rb → changeable_spec.rb} +203 -153
  272. data/spec/mongoid/{components_spec.rb → composable_spec.rb} +3 -3
  273. data/spec/mongoid/config/environment_spec.rb +3 -3
  274. data/spec/mongoid/config/options_spec.rb +6 -6
  275. data/spec/mongoid/config_spec.rb +24 -48
  276. data/spec/mongoid/contextual/aggregable/memory_spec.rb +12 -12
  277. data/spec/mongoid/contextual/aggregable/mongo_spec.rb +78 -38
  278. data/spec/mongoid/contextual/atomic_spec.rb +60 -56
  279. data/spec/mongoid/contextual/find_and_modify_spec.rb +14 -14
  280. data/spec/mongoid/contextual/geo_near_spec.rb +22 -22
  281. data/spec/mongoid/contextual/map_reduce_spec.rb +27 -27
  282. data/spec/mongoid/contextual/memory_spec.rb +156 -94
  283. data/spec/mongoid/contextual/mongo_spec.rb +238 -150
  284. data/spec/mongoid/contextual/none_spec.rb +127 -0
  285. data/spec/mongoid/contextual/text_search_spec.rb +209 -0
  286. data/spec/mongoid/copyable_spec.rb +56 -68
  287. data/spec/mongoid/criteria/findable_spec.rb +991 -0
  288. data/spec/mongoid/{criterion/inspection_spec.rb → criteria/inspectable_spec.rb} +5 -5
  289. data/spec/mongoid/{criterion → criteria}/marshalable_spec.rb +2 -2
  290. data/spec/mongoid/criteria/modifiable_spec.rb +1252 -0
  291. data/spec/mongoid/{criterion/scoping_spec.rb → criteria/scopable_spec.rb} +37 -37
  292. data/spec/mongoid/criteria_spec.rb +715 -2421
  293. data/spec/mongoid/document_spec.rb +171 -121
  294. data/spec/mongoid/equality_spec.rb +22 -22
  295. data/spec/mongoid/errors/ambiguous_relationship_spec.rb +3 -3
  296. data/spec/mongoid/errors/callback_spec.rb +3 -3
  297. data/spec/mongoid/errors/delete_restriction_spec.rb +3 -3
  298. data/spec/mongoid/errors/document_not_destroyed_spec.rb +33 -0
  299. data/spec/mongoid/errors/document_not_found_spec.rb +11 -11
  300. data/spec/mongoid/errors/eager_load_spec.rb +3 -3
  301. data/spec/mongoid/errors/invalid_collection_spec.rb +3 -3
  302. data/spec/mongoid/errors/invalid_config_option_spec.rb +3 -3
  303. data/spec/mongoid/errors/invalid_field_option_spec.rb +3 -3
  304. data/spec/mongoid/errors/invalid_field_spec.rb +3 -3
  305. data/spec/mongoid/errors/invalid_find_spec.rb +3 -3
  306. data/spec/mongoid/errors/invalid_includes_spec.rb +3 -3
  307. data/spec/mongoid/errors/invalid_index_spec.rb +3 -3
  308. data/spec/mongoid/errors/invalid_options_spec.rb +3 -3
  309. data/spec/mongoid/errors/invalid_path_spec.rb +3 -3
  310. data/spec/mongoid/errors/invalid_scope_spec.rb +5 -5
  311. data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +3 -3
  312. data/spec/mongoid/errors/invalid_storage_options_spec.rb +3 -3
  313. data/spec/mongoid/errors/invalid_time_spec.rb +3 -3
  314. data/spec/mongoid/errors/inverse_not_found_spec.rb +3 -3
  315. data/spec/mongoid/errors/mixed_relations_spec.rb +3 -3
  316. data/spec/mongoid/errors/mixed_session_configuration_spec.rb +3 -3
  317. data/spec/mongoid/errors/mongoid_error_spec.rb +8 -8
  318. data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +3 -3
  319. data/spec/mongoid/errors/no_environment_spec.rb +3 -3
  320. data/spec/mongoid/errors/no_map_reduce_output_spec.rb +3 -3
  321. data/spec/mongoid/errors/no_metadata_spec.rb +3 -3
  322. data/spec/mongoid/errors/no_parent_spec.rb +3 -3
  323. data/spec/mongoid/errors/no_session_config_spec.rb +3 -3
  324. data/spec/mongoid/errors/no_session_database_spec.rb +3 -3
  325. data/spec/mongoid/errors/no_session_hosts_spec.rb +3 -3
  326. data/spec/mongoid/errors/no_sessions_config_spec.rb +3 -3
  327. data/spec/mongoid/errors/readonly_attribute_spec.rb +3 -3
  328. data/spec/mongoid/errors/readonly_document_spec.rb +29 -0
  329. data/spec/mongoid/errors/scope_overwrite_spec.rb +3 -3
  330. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +3 -3
  331. data/spec/mongoid/errors/unknown_attribute_spec.rb +5 -5
  332. data/spec/mongoid/errors/unsaved_document_spec.rb +3 -3
  333. data/spec/mongoid/errors/unsupported_javascript_spec.rb +3 -3
  334. data/spec/mongoid/errors/validations_spec.rb +7 -7
  335. data/spec/mongoid/extensions/array_spec.rb +61 -61
  336. data/spec/mongoid/extensions/big_decimal_spec.rb +11 -11
  337. data/spec/mongoid/extensions/binary_spec.rb +12 -12
  338. data/spec/mongoid/extensions/boolean_spec.rb +18 -18
  339. data/spec/mongoid/extensions/date_spec.rb +13 -13
  340. data/spec/mongoid/extensions/date_time_spec.rb +8 -8
  341. data/spec/mongoid/extensions/false_class_spec.rb +5 -5
  342. data/spec/mongoid/extensions/float_spec.rb +29 -15
  343. data/spec/mongoid/extensions/hash_spec.rb +29 -29
  344. data/spec/mongoid/extensions/integer_spec.rb +15 -15
  345. data/spec/mongoid/extensions/module_spec.rb +2 -2
  346. data/spec/mongoid/extensions/nil_class_spec.rb +1 -1
  347. data/spec/mongoid/extensions/object_id_spec.rb +134 -134
  348. data/spec/mongoid/extensions/object_spec.rb +26 -26
  349. data/spec/mongoid/extensions/range_spec.rb +61 -12
  350. data/spec/mongoid/extensions/regexp_spec.rb +4 -4
  351. data/spec/mongoid/extensions/set_spec.rb +4 -4
  352. data/spec/mongoid/extensions/string_spec.rb +35 -46
  353. data/spec/mongoid/extensions/symbol_spec.rb +9 -9
  354. data/spec/mongoid/extensions/time_spec.rb +49 -49
  355. data/spec/mongoid/extensions/time_with_zone_spec.rb +34 -34
  356. data/spec/mongoid/extensions/true_class_spec.rb +5 -5
  357. data/spec/mongoid/extensions_spec.rb +29 -0
  358. data/spec/mongoid/factory_spec.rb +15 -15
  359. data/spec/mongoid/fields/foreign_key_spec.rb +73 -66
  360. data/spec/mongoid/fields/internal/foreign_keys/array_spec.rb +15 -15
  361. data/spec/mongoid/fields/internal/foreign_keys/object_spec.rb +22 -22
  362. data/spec/mongoid/fields/localized_spec.rb +38 -23
  363. data/spec/mongoid/fields/standard_spec.rb +12 -12
  364. data/spec/mongoid/fields_spec.rb +263 -217
  365. data/spec/mongoid/findable_spec.rb +509 -0
  366. data/spec/mongoid/indexable/specification_spec.rb +102 -0
  367. data/spec/mongoid/{indexes_spec.rb → indexable_spec.rb} +171 -51
  368. data/spec/mongoid/{inspection_spec.rb → inspectable_spec.rb} +6 -14
  369. data/spec/mongoid/{callbacks_spec.rb → interceptable_spec.rb} +117 -116
  370. data/spec/mongoid/log_subscriber_spec.rb +75 -0
  371. data/spec/mongoid/loggable_spec.rb +1 -1
  372. data/spec/mongoid/{matchers → matchable}/all_spec.rb +4 -4
  373. data/spec/mongoid/{matchers → matchable}/and_spec.rb +11 -11
  374. data/spec/mongoid/{matchers → matchable}/default_spec.rb +15 -15
  375. data/spec/mongoid/{matchers → matchable}/exists_spec.rb +5 -5
  376. data/spec/mongoid/{matchers → matchable}/gt_spec.rb +9 -8
  377. data/spec/mongoid/{matchers → matchable}/gte_spec.rb +7 -7
  378. data/spec/mongoid/matchable/in_spec.rb +49 -0
  379. data/spec/mongoid/{matchers → matchable}/lt_spec.rb +7 -7
  380. data/spec/mongoid/{matchers → matchable}/lte_spec.rb +7 -7
  381. data/spec/mongoid/matchable/ne_spec.rb +46 -0
  382. data/spec/mongoid/matchable/nin_spec.rb +48 -0
  383. data/spec/mongoid/{matchers → matchable}/or_spec.rb +6 -6
  384. data/spec/mongoid/{matchers → matchable}/size_spec.rb +3 -3
  385. data/spec/mongoid/{matchers_spec.rb → matchable_spec.rb} +41 -41
  386. data/spec/mongoid/persistable/creatable_spec.rb +553 -0
  387. data/spec/mongoid/persistable/deletable_spec.rb +218 -0
  388. data/spec/mongoid/persistable/destroyable_spec.rb +192 -0
  389. data/spec/mongoid/persistable/incrementable_spec.rb +173 -0
  390. data/spec/mongoid/persistable/logical_spec.rb +143 -0
  391. data/spec/mongoid/persistable/poppable_spec.rb +115 -0
  392. data/spec/mongoid/persistable/pullable_spec.rb +228 -0
  393. data/spec/mongoid/persistable/pushable_spec.rb +258 -0
  394. data/spec/mongoid/persistable/renamable_spec.rb +135 -0
  395. data/spec/mongoid/persistable/savable_spec.rb +498 -0
  396. data/spec/mongoid/persistable/settable_spec.rb +162 -0
  397. data/spec/mongoid/persistable/unsettable_spec.rb +155 -0
  398. data/spec/mongoid/persistable/updatable_spec.rb +558 -0
  399. data/spec/mongoid/persistable/upsertable_spec.rb +106 -0
  400. data/spec/mongoid/persistable_spec.rb +206 -0
  401. data/spec/mongoid/{atomic/positionable_spec.rb → positional_spec.rb} +14 -19
  402. data/spec/mongoid/query_cache_spec.rb +263 -0
  403. data/spec/mongoid/railties/document_spec.rb +2 -2
  404. data/spec/mongoid/relations/accessors_spec.rb +53 -145
  405. data/spec/mongoid/relations/auto_save_spec.rb +37 -17
  406. data/spec/mongoid/relations/bindings/embedded/in_spec.rb +12 -12
  407. data/spec/mongoid/relations/bindings/embedded/many_spec.rb +3 -3
  408. data/spec/mongoid/relations/bindings/embedded/one_spec.rb +5 -5
  409. data/spec/mongoid/relations/bindings/referenced/in_spec.rb +26 -26
  410. data/spec/mongoid/relations/bindings/referenced/many_spec.rb +10 -10
  411. data/spec/mongoid/relations/bindings/referenced/many_to_many_spec.rb +19 -19
  412. data/spec/mongoid/relations/bindings/referenced/one_spec.rb +12 -12
  413. data/spec/mongoid/relations/builders/embedded/in_spec.rb +4 -4
  414. data/spec/mongoid/relations/builders/embedded/many_spec.rb +18 -18
  415. data/spec/mongoid/relations/builders/embedded/one_spec.rb +11 -11
  416. data/spec/mongoid/relations/builders/nested_attributes/many_spec.rb +12 -13
  417. data/spec/mongoid/relations/builders/nested_attributes/one_spec.rb +14 -14
  418. data/spec/mongoid/relations/builders/referenced/in_spec.rb +24 -35
  419. data/spec/mongoid/relations/builders/referenced/many_spec.rb +15 -15
  420. data/spec/mongoid/relations/builders/referenced/many_to_many_spec.rb +18 -18
  421. data/spec/mongoid/relations/builders/referenced/one_spec.rb +12 -25
  422. data/spec/mongoid/relations/builders_spec.rb +21 -21
  423. data/spec/mongoid/relations/cascading/delete_spec.rb +9 -9
  424. data/spec/mongoid/relations/cascading/destroy_spec.rb +6 -6
  425. data/spec/mongoid/relations/cascading/nullify_spec.rb +4 -4
  426. data/spec/mongoid/relations/cascading/restrict_spec.rb +7 -7
  427. data/spec/mongoid/relations/cascading_spec.rb +16 -16
  428. data/spec/mongoid/relations/constraint_spec.rb +8 -7
  429. data/spec/mongoid/relations/conversions_spec.rb +16 -14
  430. data/spec/mongoid/relations/counter_cache_spec.rb +85 -0
  431. data/spec/mongoid/relations/cyclic_spec.rb +18 -18
  432. data/spec/mongoid/relations/eager/belongs_to_spec.rb +154 -0
  433. data/spec/mongoid/relations/eager/has_and_belongs_to_many_spec.rb +117 -0
  434. data/spec/mongoid/relations/eager/has_many_spec.rb +207 -0
  435. data/spec/mongoid/relations/eager/has_one_spec.rb +163 -0
  436. data/spec/mongoid/relations/eager_spec.rb +228 -0
  437. data/spec/mongoid/relations/embedded/dirty_spec.rb +8 -8
  438. data/spec/mongoid/relations/embedded/in_spec.rb +56 -57
  439. data/spec/mongoid/relations/embedded/many_spec.rb +467 -372
  440. data/spec/mongoid/relations/embedded/one_spec.rb +108 -141
  441. data/spec/mongoid/relations/macros_spec.rb +108 -102
  442. data/spec/mongoid/relations/metadata_spec.rb +180 -255
  443. data/spec/mongoid/relations/options_spec.rb +1 -1
  444. data/spec/mongoid/relations/polymorphic_spec.rb +13 -17
  445. data/spec/mongoid/relations/proxy_spec.rb +2 -2
  446. data/spec/mongoid/relations/referenced/in_spec.rb +128 -303
  447. data/spec/mongoid/relations/referenced/many_spec.rb +587 -527
  448. data/spec/mongoid/relations/referenced/many_to_many_spec.rb +401 -424
  449. data/spec/mongoid/relations/referenced/one_spec.rb +149 -264
  450. data/spec/mongoid/relations/reflections_spec.rb +6 -6
  451. data/spec/mongoid/relations/synchronization_spec.rb +46 -50
  452. data/spec/mongoid/relations/targets/enumerable_spec.rb +118 -118
  453. data/spec/mongoid/relations/touchable_spec.rb +333 -0
  454. data/spec/mongoid/relations_spec.rb +16 -15
  455. data/spec/mongoid/{reloading_spec.rb → reloadable_spec.rb} +38 -55
  456. data/spec/mongoid/{scoping_spec.rb → scopable_spec.rb} +89 -164
  457. data/spec/mongoid/selectable_spec.rb +134 -0
  458. data/spec/mongoid/{serialization_spec.rb → serializable_spec.rb} +129 -82
  459. data/spec/mongoid/sessions/factory_spec.rb +49 -28
  460. data/spec/mongoid/sessions/mongo_uri_spec.rb +7 -7
  461. data/spec/mongoid/sessions/options_spec.rb +108 -0
  462. data/spec/mongoid/sessions_spec.rb +319 -178
  463. data/spec/mongoid/{sharding_spec.rb → shardable_spec.rb} +8 -8
  464. data/spec/mongoid/{state_spec.rb → stateful_spec.rb} +36 -11
  465. data/spec/mongoid/tasks/database_rake_spec.rb +285 -0
  466. data/spec/mongoid/tasks/database_spec.rb +160 -0
  467. data/spec/mongoid/threaded_spec.rb +17 -70
  468. data/spec/mongoid/timestamps/created/short_spec.rb +6 -6
  469. data/spec/mongoid/timestamps/created_spec.rb +5 -5
  470. data/spec/mongoid/timestamps/timeless_spec.rb +6 -6
  471. data/spec/mongoid/timestamps/updated/short_spec.rb +11 -11
  472. data/spec/mongoid/timestamps/updated_spec.rb +9 -13
  473. data/spec/mongoid/timestamps_spec.rb +9 -13
  474. data/spec/mongoid/{hierarchy_spec.rb → traversable_spec.rb} +19 -19
  475. data/spec/mongoid/{validations → validatable}/associated_spec.rb +45 -22
  476. data/spec/mongoid/{validations → validatable}/format_spec.rb +6 -6
  477. data/spec/mongoid/{validations → validatable}/length_spec.rb +14 -14
  478. data/spec/mongoid/{validations → validatable}/numericality_spec.rb +1 -1
  479. data/spec/mongoid/{validations → validatable}/presence_spec.rb +37 -44
  480. data/spec/mongoid/{validations → validatable}/uniqueness_spec.rb +184 -192
  481. data/spec/mongoid/{validations_spec.rb → validatable_spec.rb} +28 -28
  482. data/spec/mongoid_spec.rb +8 -8
  483. data/spec/rails/mongoid_spec.rb +19 -335
  484. data/spec/spec_helper.rb +31 -13
  485. metadata +303 -283
  486. data/lib/mongoid/atomic/positionable.rb +0 -73
  487. data/lib/mongoid/components.rb +0 -92
  488. data/lib/mongoid/config/inflections.rb +0 -6
  489. data/lib/mongoid/contextual/eager.rb +0 -158
  490. data/lib/mongoid/errors/versioning_not_on_root.rb +0 -23
  491. data/lib/mongoid/identity_map.rb +0 -163
  492. data/lib/mongoid/json.rb +0 -16
  493. data/lib/mongoid/matchers.rb +0 -32
  494. data/lib/mongoid/matchers/strategies.rb +0 -97
  495. data/lib/mongoid/multi_parameter_attributes.rb +0 -105
  496. data/lib/mongoid/nested_attributes.rb +0 -78
  497. data/lib/mongoid/observer.rb +0 -192
  498. data/lib/mongoid/paranoia.rb +0 -136
  499. data/lib/mongoid/persistence.rb +0 -357
  500. data/lib/mongoid/persistence/atomic.rb +0 -231
  501. data/lib/mongoid/persistence/atomic/add_to_set.rb +0 -47
  502. data/lib/mongoid/persistence/atomic/bit.rb +0 -35
  503. data/lib/mongoid/persistence/atomic/inc.rb +0 -45
  504. data/lib/mongoid/persistence/atomic/operation.rb +0 -154
  505. data/lib/mongoid/persistence/atomic/pop.rb +0 -32
  506. data/lib/mongoid/persistence/atomic/pull.rb +0 -32
  507. data/lib/mongoid/persistence/atomic/pull_all.rb +0 -32
  508. data/lib/mongoid/persistence/atomic/push.rb +0 -25
  509. data/lib/mongoid/persistence/atomic/push_all.rb +0 -25
  510. data/lib/mongoid/persistence/atomic/rename.rb +0 -30
  511. data/lib/mongoid/persistence/atomic/sets.rb +0 -28
  512. data/lib/mongoid/persistence/atomic/unset.rb +0 -27
  513. data/lib/mongoid/persistence/deletion.rb +0 -31
  514. data/lib/mongoid/persistence/insertion.rb +0 -38
  515. data/lib/mongoid/persistence/modification.rb +0 -35
  516. data/lib/mongoid/persistence/operations.rb +0 -214
  517. data/lib/mongoid/persistence/operations/embedded/insert.rb +0 -46
  518. data/lib/mongoid/persistence/operations/embedded/remove.rb +0 -43
  519. data/lib/mongoid/persistence/operations/insert.rb +0 -34
  520. data/lib/mongoid/persistence/operations/remove.rb +0 -33
  521. data/lib/mongoid/persistence/operations/update.rb +0 -59
  522. data/lib/mongoid/persistence/operations/upsert.rb +0 -28
  523. data/lib/mongoid/persistence/upsertion.rb +0 -31
  524. data/lib/mongoid/unit_of_work.rb +0 -61
  525. data/lib/mongoid/versioning.rb +0 -217
  526. data/lib/rack/mongoid.rb +0 -2
  527. data/lib/rack/mongoid/middleware/identity_map.rb +0 -39
  528. data/lib/rails/generators/mongoid/observer/observer_generator.rb +0 -17
  529. data/lib/rails/generators/mongoid/observer/templates/observer.rb.tt +0 -4
  530. data/spec/app/models/actor_observer.rb +0 -15
  531. data/spec/app/models/callback_recorder.rb +0 -25
  532. data/spec/app/models/paranoid_phone.rb +0 -25
  533. data/spec/app/models/paranoid_post.rb +0 -36
  534. data/spec/app/models/phone_observer.rb +0 -6
  535. data/spec/mongoid/attributes/processing_spec.rb +0 -149
  536. data/spec/mongoid/criterion/destructive_spec.rb +0 -101
  537. data/spec/mongoid/criterion/modifiable_spec.rb +0 -409
  538. data/spec/mongoid/criterion/modification_spec.rb +0 -402
  539. data/spec/mongoid/errors/versioning_not_on_root_spec.rb +0 -29
  540. data/spec/mongoid/finders_spec.rb +0 -321
  541. data/spec/mongoid/identity_map_spec.rb +0 -564
  542. data/spec/mongoid/json_spec.rb +0 -33
  543. data/spec/mongoid/matchers/in_spec.rb +0 -25
  544. data/spec/mongoid/matchers/ne_spec.rb +0 -25
  545. data/spec/mongoid/matchers/nin_spec.rb +0 -25
  546. data/spec/mongoid/multi_parameter_attributes_spec.rb +0 -128
  547. data/spec/mongoid/observer_spec.rb +0 -290
  548. data/spec/mongoid/paranoia_spec.rb +0 -759
  549. data/spec/mongoid/persistence/atomic/add_to_set_spec.rb +0 -262
  550. data/spec/mongoid/persistence/atomic/bit_spec.rb +0 -88
  551. data/spec/mongoid/persistence/atomic/inc_spec.rb +0 -133
  552. data/spec/mongoid/persistence/atomic/pop_spec.rb +0 -111
  553. data/spec/mongoid/persistence/atomic/pull_all_spec.rb +0 -77
  554. data/spec/mongoid/persistence/atomic/pull_spec.rb +0 -80
  555. data/spec/mongoid/persistence/atomic/push_all_spec.rb +0 -77
  556. data/spec/mongoid/persistence/atomic/push_spec.rb +0 -77
  557. data/spec/mongoid/persistence/atomic/rename_spec.rb +0 -42
  558. data/spec/mongoid/persistence/atomic/sets_spec.rb +0 -154
  559. data/spec/mongoid/persistence/atomic/unset_spec.rb +0 -65
  560. data/spec/mongoid/persistence/atomic_spec.rb +0 -216
  561. data/spec/mongoid/persistence/operations/embedded/insert_spec.rb +0 -191
  562. data/spec/mongoid/persistence/operations/embedded/remove_spec.rb +0 -8
  563. data/spec/mongoid/persistence/operations/insert_spec.rb +0 -149
  564. data/spec/mongoid/persistence/operations/remove_spec.rb +0 -113
  565. data/spec/mongoid/persistence/operations/update_spec.rb +0 -141
  566. data/spec/mongoid/persistence/operations/upsert_spec.rb +0 -59
  567. data/spec/mongoid/persistence/operations_spec.rb +0 -313
  568. data/spec/mongoid/persistence_spec.rb +0 -2279
  569. data/spec/mongoid/unit_of_work_spec.rb +0 -196
  570. data/spec/mongoid/versioning_spec.rb +0 -540
  571. data/spec/rack/mongoid/middleware/identity_map_spec.rb +0 -72
@@ -1,6 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
- describe Mongoid::Reloading do
3
+ describe Mongoid::Reloadable do
4
4
 
5
5
  describe "#reload" do
6
6
 
@@ -19,11 +19,11 @@ describe Mongoid::Reloading do
19
19
 
20
20
  it "reloads the object attributes from the db" do
21
21
  person.reload
22
- person.age.should eq(35)
22
+ expect(person.age).to eq(35)
23
23
  end
24
24
 
25
25
  it "reload should return self" do
26
- person.reload.should eq(from_db)
26
+ expect(person.reload).to eq(from_db)
27
27
  end
28
28
  end
29
29
 
@@ -42,11 +42,11 @@ describe Mongoid::Reloading do
42
42
 
43
43
  it "reloads the object attributes from the db" do
44
44
  account.reload
45
- account.number.should eq("1001")
45
+ expect(account.number).to eq("1001")
46
46
  end
47
47
 
48
48
  it "reload should return self" do
49
- account.reload.should eq(from_db)
49
+ expect(account.reload).to eq(from_db)
50
50
  end
51
51
  end
52
52
 
@@ -62,7 +62,7 @@ describe Mongoid::Reloading do
62
62
  end
63
63
 
64
64
  it "runs the callback" do
65
- book.chapters.should eq(5)
65
+ expect(book.chapters).to eq(5)
66
66
  end
67
67
  end
68
68
 
@@ -78,11 +78,11 @@ describe Mongoid::Reloading do
78
78
  end
79
79
 
80
80
  it "resets the dirty modifications" do
81
- person.changes.should be_empty
81
+ expect(person.changes).to be_empty
82
82
  end
83
83
 
84
84
  it "resets attributes_before_type_cast" do
85
- person.attributes_before_type_cast.should be_empty
85
+ expect(person.attributes_before_type_cast).to be_empty
86
86
  end
87
87
  end
88
88
 
@@ -123,15 +123,15 @@ describe Mongoid::Reloading do
123
123
  end
124
124
 
125
125
  it "reloads the embedded document attributes" do
126
- reloaded.number.should eq(3)
126
+ expect(reloaded.number).to eq(3)
127
127
  end
128
128
 
129
129
  it "reloads the reference on the parent" do
130
- person.addresses.first.should eq(reloaded)
130
+ expect(person.addresses.first).to eq(reloaded)
131
131
  end
132
132
 
133
133
  it "retains the relation to the parent" do
134
- reloaded.addressable.should eq(person)
134
+ expect(reloaded.addressable).to eq(person)
135
135
  end
136
136
  end
137
137
 
@@ -151,15 +151,15 @@ describe Mongoid::Reloading do
151
151
  end
152
152
 
153
153
  it "reloads the embedded document attributes" do
154
- reloaded.last_name.should eq("Vicious")
154
+ expect(reloaded.last_name).to eq("Vicious")
155
155
  end
156
156
 
157
157
  it "reloads the reference on the parent" do
158
- person.name.should eq(reloaded)
158
+ expect(person.name).to eq(reloaded)
159
159
  end
160
160
 
161
161
  it "retains the relation to the parent" do
162
- reloaded.namable.should eq(person)
162
+ expect(reloaded.namable).to eq(person)
163
163
  end
164
164
  end
165
165
  end
@@ -184,15 +184,15 @@ describe Mongoid::Reloading do
184
184
  end
185
185
 
186
186
  it "reloads the embedded document attributes" do
187
- reloaded.name.should eq("work")
187
+ expect(reloaded.name).to eq("work")
188
188
  end
189
189
 
190
190
  it "reloads the reference on the parent" do
191
- address.locations.first.should eq(reloaded)
191
+ expect(address.locations.first).to eq(reloaded)
192
192
  end
193
193
 
194
194
  it "reloads the reference on the root" do
195
- person.addresses.first.locations.first.should eq(reloaded)
195
+ expect(person.addresses.first.locations.first).to eq(reloaded)
196
196
  end
197
197
  end
198
198
  end
@@ -214,7 +214,7 @@ describe Mongoid::Reloading do
214
214
  end
215
215
 
216
216
  it "reloads the association" do
217
- person.addresses.should be_empty
217
+ expect(person.addresses).to be_empty
218
218
  end
219
219
  end
220
220
 
@@ -237,7 +237,7 @@ describe Mongoid::Reloading do
237
237
  end
238
238
 
239
239
  it "reloads the association" do
240
- person.game.score.should eq(75)
240
+ expect(person.game.score).to eq(75)
241
241
  end
242
242
  end
243
243
 
@@ -256,49 +256,32 @@ describe Mongoid::Reloading do
256
256
  end
257
257
 
258
258
  it "reloads the association" do
259
- game.person.title.should eq("Mam")
259
+ expect(game.person.title).to eq("Mam")
260
260
  end
261
261
  end
262
+ end
263
+ end
262
264
 
263
- context "when the identity map is enabled" do
264
-
265
- before do
266
- Mongoid.identity_map_enabled = true
267
- end
268
-
269
- after do
270
- Mongoid.identity_map_enabled = false
271
- end
272
-
273
- context "when the relation type changes" do
274
-
275
- let!(:doctor) do
276
- Doctor.create
277
- end
278
-
279
- let!(:game) do
280
- Game.create(:person => doctor)
281
- end
282
-
283
- before do
284
- doctor.becomes(Doktor)
285
- end
265
+ context "when overriding #id alias" do
286
266
 
287
- context "when reloading the base" do
267
+ let!(:object) do
268
+ IdKey.create(key: 'foo')
269
+ end
288
270
 
289
- it "reloads the correct type of document" do
290
- game.reload.person.should be_a(Doktor)
291
- end
292
- end
271
+ let!(:from_db) do
272
+ IdKey.find(object._id).tap do |object|
273
+ object.key = 'bar'
274
+ object.save
275
+ end
276
+ end
293
277
 
294
- context "when reloading the association" do
278
+ it "reloads the object attributes from the db" do
279
+ object.reload
280
+ expect(object.key).to eq('bar')
281
+ end
295
282
 
296
- it "reloads the correct type of document" do
297
- game.person(true).should be_a(Doktor)
298
- end
299
- end
300
- end
301
- end
283
+ it "reload should return self" do
284
+ expect(object.reload).to eq(from_db)
302
285
  end
303
286
  end
304
287
  end
@@ -1,32 +1,9 @@
1
1
  require "spec_helper"
2
2
 
3
- describe Mongoid::Scoping do
3
+ describe Mongoid::Scopable do
4
4
 
5
5
  describe ".default_scope" do
6
6
 
7
- context "when provided a criteria" do
8
-
9
- let(:criteria) do
10
- Band.where(name: "Depeche Mode")
11
- end
12
-
13
- before do
14
- Band.default_scope criteria
15
- end
16
-
17
- after do
18
- Band.default_scoping = nil
19
- end
20
-
21
- it "adds the default scope to the class" do
22
- Band.default_scoping.call.should eq(criteria)
23
- end
24
-
25
- it "flags as being default scoped" do
26
- Band.should be_default_scoping
27
- end
28
- end
29
-
30
7
  context "when provided a proc" do
31
8
 
32
9
  let(:criteria) do
@@ -42,15 +19,15 @@ describe Mongoid::Scoping do
42
19
  end
43
20
 
44
21
  it "adds the default scope to the class" do
45
- Band.default_scoping.call.should eq(criteria)
22
+ expect(Band.default_scoping.call).to eq(criteria)
46
23
  end
47
24
 
48
25
  it "flags as being default scoped" do
49
- Band.should be_default_scoping
26
+ expect(Band).to be_default_scoping
50
27
  end
51
28
  end
52
29
 
53
- context "when provided a non proc or criteria" do
30
+ context "when provided a non proc" do
54
31
 
55
32
  it "raises an error" do
56
33
  expect {
@@ -62,11 +39,11 @@ describe Mongoid::Scoping do
62
39
  context "when there is more then one default_scope" do
63
40
 
64
41
  let(:criteria) do
65
- Band.where(name: "Depeche Mode")
42
+ ->{ Band.where(name: "Depeche Mode") }
66
43
  end
67
44
 
68
45
  let(:additional_criteria) do
69
- Band.where(origin: "England")
46
+ ->{ Band.where(origin: "England") }
70
47
  end
71
48
 
72
49
  let(:proc_criteria) do
@@ -89,23 +66,23 @@ describe Mongoid::Scoping do
89
66
  end
90
67
 
91
68
  it "adds the first default scope" do
92
- Band.default_scoping.call.selector["name"].should eq("Depeche Mode")
69
+ expect(Band.default_scoping.call.selector["name"]).to eq("Depeche Mode")
93
70
  end
94
71
 
95
72
  it "adds the additional default scope" do
96
- Band.default_scoping.call.selector["origin"].should eq("England")
73
+ expect(Band.default_scoping.call.selector["origin"]).to eq("England")
97
74
  end
98
75
 
99
76
  it "adds the proc default scope" do
100
- Band.default_scoping.call.selector["active"].should be_true
77
+ expect(Band.default_scoping.call.selector["active"]).to be true
101
78
  end
102
79
 
103
80
  it "delays execution of the merge until called" do
104
- Band.all.selector["likes"].should_not eq(Band.all.selector["likes"])
81
+ expect(Band.all.selector["likes"]).to_not eq(Band.all.selector["likes"])
105
82
  end
106
83
 
107
84
  it "flags as being default scoped" do
108
- Band.should be_default_scoping
85
+ expect(Band).to be_default_scoping
109
86
  end
110
87
  end
111
88
  end
@@ -129,7 +106,7 @@ describe Mongoid::Scoping do
129
106
  context "when not in an unscoped block" do
130
107
 
131
108
  it "returns true" do
132
- Band.should be_default_scopable
109
+ expect(Band).to be_default_scopable
133
110
  end
134
111
  end
135
112
 
@@ -137,7 +114,7 @@ describe Mongoid::Scoping do
137
114
 
138
115
  it "returns false" do
139
116
  Band.unscoped do
140
- Band.should_not be_default_scopable
117
+ expect(Band).to_not be_default_scopable
141
118
  end
142
119
  end
143
120
  end
@@ -146,7 +123,7 @@ describe Mongoid::Scoping do
146
123
  context "when a default scope does not exist" do
147
124
 
148
125
  it "returns false" do
149
- Band.should_not be_default_scopable
126
+ expect(Band).to_not be_default_scopable
150
127
  end
151
128
  end
152
129
  end
@@ -156,7 +133,7 @@ describe Mongoid::Scoping do
156
133
  context "when no criteria exists on the stack" do
157
134
 
158
135
  it "returns an empty criteria" do
159
- Band.queryable.selector.should be_empty
136
+ expect(Band.queryable.selector).to be_empty
160
137
  end
161
138
  end
162
139
 
@@ -175,7 +152,7 @@ describe Mongoid::Scoping do
175
152
  end
176
153
 
177
154
  it "returns the criteria on the stack" do
178
- Band.queryable.should eq(criteria)
155
+ expect(Band.queryable).to eq(criteria)
179
156
  end
180
157
  end
181
158
  end
@@ -187,7 +164,7 @@ describe Mongoid::Scoping do
187
164
  context "when a block is provided" do
188
165
 
189
166
  before do
190
- Band.scope(:active, Band.where(active: true)) do
167
+ Band.scope(:active, ->{ Band.where(active: true) }) do
191
168
  def add_origin
192
169
  tap { |c| c.selector[:origin] = "Deutschland" }
193
170
  end
@@ -206,7 +183,7 @@ describe Mongoid::Scoping do
206
183
  end
207
184
 
208
185
  it "adds the extension to the scope" do
209
- scope.selector.should eq({ "active" => true, "origin" => "Deutschland" })
186
+ expect(scope.selector).to eq({ "active" => true, "origin" => "Deutschland" })
210
187
  end
211
188
  end
212
189
 
@@ -215,7 +192,7 @@ describe Mongoid::Scoping do
215
192
  before do
216
193
  Record.scope(
217
194
  :tool,
218
- Record.where(:name.in => [ "undertow", "aenima", "lateralus" ])
195
+ ->{ Record.where(:name.in => [ "undertow", "aenima", "lateralus" ]) }
219
196
  )
220
197
  end
221
198
 
@@ -241,7 +218,7 @@ describe Mongoid::Scoping do
241
218
  end
242
219
 
243
220
  it "returns the correct documents" do
244
- scoped.should eq([ undertow ])
221
+ expect(scoped).to eq([ undertow ])
245
222
  end
246
223
  end
247
224
  end
@@ -249,7 +226,7 @@ describe Mongoid::Scoping do
249
226
  context "when no block is provided" do
250
227
 
251
228
  before do
252
- Band.scope(:active, Band.where(active: true).skip(10))
229
+ Band.scope(:active, ->{ Band.where(active: true).skip(10) })
253
230
  end
254
231
 
255
232
  after do
@@ -260,7 +237,7 @@ describe Mongoid::Scoping do
260
237
  end
261
238
 
262
239
  it "adds a method for the scope" do
263
- Band.should respond_to(:active)
240
+ expect(Band).to respond_to(:active)
264
241
  end
265
242
 
266
243
  context "when calling the scope" do
@@ -272,22 +249,22 @@ describe Mongoid::Scoping do
272
249
  end
273
250
 
274
251
  it "returns a criteria" do
275
- scope.should be_a(Mongoid::Criteria)
252
+ expect(scope).to be_a(Mongoid::Criteria)
276
253
  end
277
254
 
278
255
  it "contains the proper selector" do
279
- scope.selector.should eq({ "active" => true })
256
+ expect(scope.selector).to eq({ "active" => true })
280
257
  end
281
258
 
282
259
  it "contains the proper options" do
283
- scope.options.should eq({ skip: 10 })
260
+ expect(scope.options).to eq({ skip: 10 })
284
261
  end
285
262
  end
286
263
 
287
264
  context "when chained to another scope" do
288
265
 
289
266
  before do
290
- Band.scope(:english, Band.where(origin: "England"))
267
+ Band.scope(:english, ->{ Band.where(origin: "England") })
291
268
  end
292
269
 
293
270
  after do
@@ -302,19 +279,19 @@ describe Mongoid::Scoping do
302
279
  end
303
280
 
304
281
  it "returns a criteria" do
305
- scope.should be_a(Mongoid::Criteria)
282
+ expect(scope).to be_a(Mongoid::Criteria)
306
283
  end
307
284
 
308
285
  it "contains the proper selector" do
309
- scope.selector.should eq({ "active" => true, "origin" => "England" })
286
+ expect(scope.selector).to eq({ "active" => true, "origin" => "England" })
310
287
  end
311
288
 
312
289
  it "contains the proper options" do
313
- scope.options.should eq({ skip: 10 })
290
+ expect(scope.options).to eq({ skip: 10 })
314
291
  end
315
292
 
316
293
  it "does not modify the original scope" do
317
- Band.active.selector.should eq({ "active" => true })
294
+ expect(Band.active.selector).to eq({ "active" => true })
318
295
  end
319
296
  end
320
297
 
@@ -329,23 +306,23 @@ describe Mongoid::Scoping do
329
306
  end
330
307
 
331
308
  it "returns a criteria" do
332
- scope.should be_a(Mongoid::Criteria)
309
+ expect(scope).to be_a(Mongoid::Criteria)
333
310
  end
334
311
 
335
312
  it "contains the proper selector" do
336
- scope.selector.should eq({ "origin" => "England", "active" => true })
313
+ expect(scope.selector).to eq({ "origin" => "England", "active" => true })
337
314
  end
338
315
 
339
316
  it "contains the proper options" do
340
- scope.options.should eq({ skip: 10 })
317
+ expect(scope.options).to eq({ skip: 10 })
341
318
  end
342
319
 
343
320
  it "does not modify the original scope" do
344
- Band.active.selector.should eq({ "active" => true })
321
+ expect(Band.active.selector).to eq({ "active" => true })
345
322
  end
346
323
 
347
324
  it "does not modify the original criteria" do
348
- criteria.selector.should eq({ "origin" => "England" })
325
+ expect(criteria.selector).to eq({ "origin" => "England" })
349
326
  end
350
327
  end
351
328
  end
@@ -369,8 +346,8 @@ describe Mongoid::Scoping do
369
346
 
370
347
  it "raises an exception" do
371
348
  expect {
372
- Band.scope(:active, Band.where(active: true))
373
- Band.scope(:active, Band.where(active: true))
349
+ Band.scope(:active, ->{ Band.where(active: true) })
350
+ Band.scope(:active, ->{ Band.where(active: true) })
374
351
  }.to raise_error(Mongoid::Errors::ScopeOverwrite)
375
352
  end
376
353
  end
@@ -386,8 +363,8 @@ describe Mongoid::Scoping do
386
363
  end
387
364
 
388
365
  it "raises no exception" do
389
- Band.scope(:active, Band.where(active: true))
390
- Band.scope(:active, Band.where(active: true))
366
+ Band.scope(:active, ->{ Band.where(active: true) })
367
+ Band.scope(:active, ->{ Band.where(active: true) })
391
368
  end
392
369
  end
393
370
  end
@@ -417,7 +394,7 @@ describe Mongoid::Scoping do
417
394
  end
418
395
 
419
396
  it "adds the extension to the scope" do
420
- scope.selector.should eq({ "active" => true, "origin" => "Deutschland" })
397
+ expect(scope.selector).to eq({ "active" => true, "origin" => "Deutschland" })
421
398
  end
422
399
  end
423
400
 
@@ -425,30 +402,29 @@ describe Mongoid::Scoping do
425
402
 
426
403
  before do
427
404
  Band.scope(:active, ->{ Band.where(active: true).skip(10) })
405
+ Band.scope(:named_by, ->(name) { Band.where(name: name) if name })
428
406
  end
429
407
 
430
408
  after do
431
409
  class << Band
432
410
  undef_method :active
411
+ undef_method :named_by
433
412
  end
434
413
  Band._declared_scopes.clear
435
414
  end
436
415
 
437
416
  it "adds a method for the scope" do
438
- Band.should respond_to(:active)
417
+ expect(Band).to respond_to(:active)
439
418
  end
440
419
 
441
- context "when proc return nil" do
442
- before do
443
- Band.scope(:named_by, ->(name) { Band.where(name: name) if name})
444
- end
420
+ context "when calling the scope" do
445
421
 
446
- it "return a all criteral" do
447
- Band.named_by(nil).should be_a(Mongoid::Criteria)
448
- end
449
- end
422
+ context "when the scope would return nil" do
450
423
 
451
- context "when calling the scope" do
424
+ it "returns a chainable empty scope" do
425
+ expect(Band.named_by(nil)).to be_a(Mongoid::Criteria)
426
+ end
427
+ end
452
428
 
453
429
  context "when calling from the class" do
454
430
 
@@ -457,15 +433,15 @@ describe Mongoid::Scoping do
457
433
  end
458
434
 
459
435
  it "returns a criteria" do
460
- scope.should be_a(Mongoid::Criteria)
436
+ expect(scope).to be_a(Mongoid::Criteria)
461
437
  end
462
438
 
463
439
  it "contains the proper selector" do
464
- scope.selector.should eq({ "active" => true })
440
+ expect(scope.selector).to eq({ "active" => true })
465
441
  end
466
442
 
467
443
  it "contains the proper options" do
468
- scope.options.should eq({ skip: 10 })
444
+ expect(scope.options).to eq({ skip: 10 })
469
445
  end
470
446
  end
471
447
 
@@ -487,19 +463,19 @@ describe Mongoid::Scoping do
487
463
  end
488
464
 
489
465
  it "returns a criteria" do
490
- scope.should be_a(Mongoid::Criteria)
466
+ expect(scope).to be_a(Mongoid::Criteria)
491
467
  end
492
468
 
493
469
  it "contains the proper selector" do
494
- scope.selector.should eq({ "active" => true, "origin" => "England" })
470
+ expect(scope.selector).to eq({ "active" => true, "origin" => "England" })
495
471
  end
496
472
 
497
473
  it "contains the proper options" do
498
- scope.options.should eq({ skip: 10 })
474
+ expect(scope.options).to eq({ skip: 10 })
499
475
  end
500
476
 
501
477
  it "does not modify the original scope" do
502
- Band.active.selector.should eq({ "active" => true })
478
+ expect(Band.active.selector).to eq({ "active" => true })
503
479
  end
504
480
  end
505
481
 
@@ -514,23 +490,23 @@ describe Mongoid::Scoping do
514
490
  end
515
491
 
516
492
  it "returns a criteria" do
517
- scope.should be_a(Mongoid::Criteria)
493
+ expect(scope).to be_a(Mongoid::Criteria)
518
494
  end
519
495
 
520
496
  it "contains the proper selector" do
521
- scope.selector.should eq({ "origin" => "England", "active" => true })
497
+ expect(scope.selector).to eq({ "origin" => "England", "active" => true })
522
498
  end
523
499
 
524
500
  it "contains the proper options" do
525
- scope.options.should eq({ skip: 10 })
501
+ expect(scope.options).to eq({ skip: 10 })
526
502
  end
527
503
 
528
504
  it "does not modify the original scope" do
529
- Band.active.selector.should eq({ "active" => true })
505
+ expect(Band.active.selector).to eq({ "active" => true })
530
506
  end
531
507
 
532
508
  it "does not modify the original criteria" do
533
- criteria.selector.should eq({ "origin" => "England" })
509
+ expect(criteria.selector).to eq({ "origin" => "England" })
534
510
  end
535
511
  end
536
512
  end
@@ -587,7 +563,7 @@ describe Mongoid::Scoping do
587
563
  end
588
564
  end
589
565
 
590
- context "when chaining a non proc with a proc" do
566
+ context "when chaining a proc with a proc" do
591
567
 
592
568
  context "when both scopes are or queries" do
593
569
 
@@ -596,7 +572,7 @@ describe Mongoid::Scoping do
596
572
  end
597
573
 
598
574
  before do
599
- Band.scope(:xxx, Band.any_of({ :aaa.gt => 0 }, { :bbb.gt => 0 }))
575
+ Band.scope(:xxx, ->{ Band.any_of({ :aaa.gt => 0 }, { :bbb.gt => 0 }) })
600
576
  Band.scope(:yyy, ->{ Band.any_of({ :ccc => nil }, { :ccc.gt => time }) })
601
577
  end
602
578
 
@@ -613,7 +589,7 @@ describe Mongoid::Scoping do
613
589
  end
614
590
 
615
591
  it "properly chains the $or queries together" do
616
- criteria.selector.should eq({
592
+ expect(criteria.selector).to eq({
617
593
  "$or" => [
618
594
  { "ccc" => nil },
619
595
  { "ccc" => { "$gt" => time }},
@@ -675,7 +651,7 @@ describe Mongoid::Scoping do
675
651
  context "when the scope stack has not been accessed" do
676
652
 
677
653
  it "returns an empty array" do
678
- Band.scope_stack.should eq([])
654
+ expect(Band.scope_stack).to eq([])
679
655
  end
680
656
  end
681
657
 
@@ -694,7 +670,7 @@ describe Mongoid::Scoping do
694
670
  end
695
671
 
696
672
  it "returns the criteria in the array" do
697
- Band.scope_stack.should eq([ criteria ])
673
+ expect(Band.scope_stack).to eq([ criteria ])
698
674
  end
699
675
  end
700
676
  end
@@ -708,15 +684,15 @@ describe Mongoid::Scoping do
708
684
  end
709
685
 
710
686
  it "returns a criteria" do
711
- scoped.should be_a(Mongoid::Criteria)
687
+ expect(scoped).to be_a(Mongoid::Criteria)
712
688
  end
713
689
 
714
690
  it "contains an empty selector" do
715
- scoped.selector.should be_empty
691
+ expect(scoped.selector).to be_empty
716
692
  end
717
693
 
718
694
  it "contains empty options" do
719
- scoped.options.should be_empty
695
+ expect(scoped.options).to be_empty
720
696
  end
721
697
  end
722
698
 
@@ -727,15 +703,15 @@ describe Mongoid::Scoping do
727
703
  end
728
704
 
729
705
  it "returns a criteria" do
730
- scoped.should be_a(Mongoid::Criteria)
706
+ expect(scoped).to be_a(Mongoid::Criteria)
731
707
  end
732
708
 
733
709
  it "contains an empty selector" do
734
- scoped.selector.should be_empty
710
+ expect(scoped.selector).to be_empty
735
711
  end
736
712
 
737
713
  it "contains the options" do
738
- scoped.options.should eq({ skip: 10, limit: 10 })
714
+ expect(scoped.options).to eq({ skip: 10, limit: 10 })
739
715
  end
740
716
  end
741
717
 
@@ -746,7 +722,7 @@ describe Mongoid::Scoping do
746
722
  end
747
723
 
748
724
  before do
749
- Band.default_scope criteria
725
+ Band.default_scope ->{ criteria }
750
726
  end
751
727
 
752
728
  after do
@@ -758,7 +734,7 @@ describe Mongoid::Scoping do
758
734
  end
759
735
 
760
736
  it "allows the default scope to be added" do
761
- scoped.selector.should eq({ "name" => "Depeche Mode" })
737
+ expect(scoped.selector).to eq({ "name" => "Depeche Mode" })
762
738
  end
763
739
 
764
740
  context "when chained after an unscoped criteria" do
@@ -768,7 +744,7 @@ describe Mongoid::Scoping do
768
744
  end
769
745
 
770
746
  it "reapplies the default scope" do
771
- scoped.selector.should eq({ "name" => "Depeche Mode" })
747
+ expect(scoped.selector).to eq({ "name" => "Depeche Mode" })
772
748
  end
773
749
  end
774
750
  end
@@ -781,7 +757,7 @@ describe Mongoid::Scoping do
781
757
  end
782
758
 
783
759
  before do
784
- Band.default_scope criteria
760
+ Band.default_scope ->{ criteria }
785
761
  end
786
762
 
787
763
  after do
@@ -795,7 +771,7 @@ describe Mongoid::Scoping do
795
771
  end
796
772
 
797
773
  it "removes the default scope from the criteria" do
798
- unscoped.selector.should be_empty
774
+ expect(unscoped.selector).to be_empty
799
775
  end
800
776
 
801
777
  context "when chained after a scoped criteria" do
@@ -805,7 +781,7 @@ describe Mongoid::Scoping do
805
781
  end
806
782
 
807
783
  it "removes all scoping" do
808
- unscoped.selector.should be_empty
784
+ expect(unscoped.selector).to be_empty
809
785
  end
810
786
  end
811
787
  end
@@ -816,7 +792,7 @@ describe Mongoid::Scoping do
816
792
 
817
793
  it "does not allow default scoping to be added in the block" do
818
794
  Band.unscoped do
819
- Band.skip(10).selector.should be_empty
795
+ expect(Band.skip(10).selector).to be_empty
820
796
  end
821
797
  end
822
798
  end
@@ -825,7 +801,7 @@ describe Mongoid::Scoping do
825
801
 
826
802
  it "does not allow default scoping to be added in the block" do
827
803
  Band.unscoped do
828
- Band.scoped.selector.should be_empty
804
+ expect(Band.scoped.selector).to be_empty
829
805
  end
830
806
  end
831
807
  end
@@ -833,7 +809,7 @@ describe Mongoid::Scoping do
833
809
  context "when a named scope is called in the block" do
834
810
 
835
811
  before do
836
- Band.scope(:skipped, Band.skip(10))
812
+ Band.scope(:skipped, ->{ Band.skip(10) })
837
813
  end
838
814
 
839
815
  after do
@@ -845,7 +821,7 @@ describe Mongoid::Scoping do
845
821
 
846
822
  it "does not allow the default scope to be applied" do
847
823
  Band.unscoped do
848
- Band.skipped.selector.should be_empty
824
+ expect(Band.skipped.selector).to be_empty
849
825
  end
850
826
  end
851
827
  end
@@ -859,7 +835,7 @@ describe Mongoid::Scoping do
859
835
  end
860
836
 
861
837
  before do
862
- Band.default_scope criteria
838
+ Band.default_scope ->{ criteria }
863
839
  end
864
840
 
865
841
  after do
@@ -870,7 +846,7 @@ describe Mongoid::Scoping do
870
846
 
871
847
  it "returns an empty criteria" do
872
848
  Band.unscoped do
873
- Band.with_default_scope.selector.should be_empty
849
+ expect(Band.with_default_scope.selector).to be_empty
874
850
  end
875
851
  end
876
852
  end
@@ -882,7 +858,7 @@ describe Mongoid::Scoping do
882
858
  end
883
859
 
884
860
  it "returns an empty criteria" do
885
- scoped.selector.should be_empty
861
+ expect(scoped.selector).to be_empty
886
862
  end
887
863
  end
888
864
 
@@ -893,7 +869,7 @@ describe Mongoid::Scoping do
893
869
  end
894
870
 
895
871
  it "returns a scoped criteria" do
896
- scoped.selector.should eq({ "name" => "Depeche Mode" })
872
+ expect(scoped.selector).to eq({ "name" => "Depeche Mode" })
897
873
  end
898
874
  end
899
875
  end
@@ -906,13 +882,13 @@ describe Mongoid::Scoping do
906
882
 
907
883
  it "yields to the criteria" do
908
884
  Band.with_scope(criteria) do |crit|
909
- crit.selector.should eq({ "active" => true })
885
+ expect(crit.selector).to eq({ "active" => true })
910
886
  end
911
887
  end
912
888
 
913
889
  it "pops the criteria off the stack" do
914
890
  Band.with_scope(criteria) {}
915
- Band.scope_stack.should be_empty
891
+ expect(Band.scope_stack).to be_empty
916
892
  end
917
893
  end
918
894
 
@@ -920,58 +896,7 @@ describe Mongoid::Scoping do
920
896
 
921
897
  it "sets the threading options" do
922
898
  Band.without_default_scope do
923
- Mongoid::Threaded.should be_executing(:without_default_scope)
924
- end
925
- end
926
- end
927
-
928
- context "when the document is paranoid" do
929
-
930
- context "when calling a class method" do
931
-
932
- let(:criteria) do
933
- Fish.fresh
934
- end
935
-
936
- it "includes the deleted_at criteria in the selector" do
937
- criteria.selector.should eq({
938
- "deleted_at" => nil, "fresh" => true
939
- })
940
- end
941
- end
942
-
943
- context "when chaining a class method to unscoped" do
944
-
945
- let(:criteria) do
946
- Fish.unscoped.fresh
947
- end
948
-
949
- it "does not include the deleted_at in the selector" do
950
- criteria.selector.should eq({ "fresh" => true })
951
- end
952
- end
953
-
954
- context "when chaining a class method to deleted" do
955
-
956
- let(:criteria) do
957
- Fish.deleted.fresh
958
- end
959
-
960
- it "includes the deleted_at $ne criteria in the selector" do
961
- criteria.selector.should eq({
962
- "deleted_at" => { "$ne" => nil }, "fresh" => true
963
- })
964
- end
965
- end
966
-
967
- context "when chaining a where to unscoped" do
968
-
969
- let(:criteria) do
970
- Fish.unscoped.where(fresh: true)
971
- end
972
-
973
- it "includes no default scoping information in the selector" do
974
- criteria.selector.should eq({ "fresh" => true })
899
+ expect(Mongoid::Threaded).to be_executing(:without_default_scope)
975
900
  end
976
901
  end
977
902
  end