mongoid 3.1.7 → 4.0.2

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