mongoid 3.1.6 → 4.0.2

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -21,7 +21,7 @@ describe Mongoid::Contextual::Mongo do
21
21
  end
22
22
 
23
23
  it "returns true" do
24
- context.send(method).should be_true
24
+ expect(context.send(method)).to be true
25
25
  end
26
26
  end
27
27
 
@@ -36,7 +36,7 @@ describe Mongoid::Contextual::Mongo do
36
36
  end
37
37
 
38
38
  it "returns false" do
39
- context.send(method).should be_false
39
+ expect(context.send(method)).to be false
40
40
  end
41
41
  end
42
42
  end
@@ -55,7 +55,7 @@ describe Mongoid::Contextual::Mongo do
55
55
  end
56
56
 
57
57
  it "returns true" do
58
- context.should be_cached
58
+ expect(context).to be_cached
59
59
  end
60
60
  end
61
61
 
@@ -70,7 +70,7 @@ describe Mongoid::Contextual::Mongo do
70
70
  end
71
71
 
72
72
  it "returns false" do
73
- context.should_not be_cached
73
+ expect(context).to_not be_cached
74
74
  end
75
75
  end
76
76
  end
@@ -96,7 +96,7 @@ describe Mongoid::Contextual::Mongo do
96
96
  end
97
97
 
98
98
  it "returns the number of documents that match" do
99
- context.count.should eq(1)
99
+ expect(context.count).to eq(1)
100
100
  end
101
101
  end
102
102
 
@@ -107,11 +107,11 @@ describe Mongoid::Contextual::Mongo do
107
107
  end
108
108
 
109
109
  before do
110
- context.query.should_receive(:count).once.and_return(1)
110
+ expect(context.query).to receive(:count).once.and_return(1)
111
111
  end
112
112
 
113
113
  it "returns the count cached value after first call" do
114
- 2.times { context.count.should eq(1) }
114
+ 2.times { expect(context.count).to eq(1) }
115
115
  end
116
116
  end
117
117
 
@@ -126,7 +126,7 @@ describe Mongoid::Contextual::Mongo do
126
126
  end
127
127
 
128
128
  it "returns the number of documents that match" do
129
- count.should eq(1)
129
+ expect(count).to eq(1)
130
130
  end
131
131
  end
132
132
 
@@ -143,7 +143,7 @@ describe Mongoid::Contextual::Mongo do
143
143
  end
144
144
 
145
145
  it "returns the number of documents that match" do
146
- count.should eq(1)
146
+ expect(count).to eq(1)
147
147
  end
148
148
 
149
149
  context "and a limit true" do
@@ -159,7 +159,7 @@ describe Mongoid::Contextual::Mongo do
159
159
  end
160
160
 
161
161
  it "returns the number of documents that match" do
162
- count.should eq(1)
162
+ expect(count).to eq(1)
163
163
  end
164
164
  end
165
165
  end
@@ -179,7 +179,7 @@ describe Mongoid::Contextual::Mongo do
179
179
  end
180
180
 
181
181
  it "returns the number of documents that match" do
182
- count.should eq(2)
182
+ expect(count).to eq(2)
183
183
  end
184
184
  end
185
185
  end
@@ -211,15 +211,15 @@ describe Mongoid::Contextual::Mongo do
211
211
  end
212
212
 
213
213
  it "deletes the matching documents" do
214
- Band.find(new_order.id).should eq(new_order)
214
+ expect(Band.find(new_order.id)).to eq(new_order)
215
215
  end
216
216
 
217
217
  it "deletes the correct number of documents" do
218
- Band.count.should eq(1)
218
+ expect(Band.count).to eq(1)
219
219
  end
220
220
 
221
221
  it "returns the number of documents deleted" do
222
- deleted.should eq(1)
222
+ expect(deleted).to eq(1)
223
223
  end
224
224
  end
225
225
 
@@ -238,7 +238,7 @@ describe Mongoid::Contextual::Mongo do
238
238
  end
239
239
 
240
240
  it "deletes all the documents" do
241
- Band.count.should eq(0)
241
+ expect(Band.count).to eq(0)
242
242
  end
243
243
  end
244
244
  end
@@ -271,15 +271,15 @@ describe Mongoid::Contextual::Mongo do
271
271
  end
272
272
 
273
273
  it "destroys the matching documents" do
274
- Band.find(new_order.id).should eq(new_order)
274
+ expect(Band.find(new_order.id)).to eq(new_order)
275
275
  end
276
276
 
277
277
  it "destroys the correct number of documents" do
278
- Band.count.should eq(1)
278
+ expect(Band.count).to eq(1)
279
279
  end
280
280
 
281
281
  it "returns the number of documents destroyed" do
282
- destroyed.should eq(1)
282
+ expect(destroyed).to eq(1)
283
283
  end
284
284
  end
285
285
 
@@ -298,7 +298,7 @@ describe Mongoid::Contextual::Mongo do
298
298
  end
299
299
 
300
300
  it "destroys all the documents" do
301
- Band.count.should eq(0)
301
+ expect(Band.count).to eq(0)
302
302
  end
303
303
  end
304
304
  end
@@ -322,7 +322,7 @@ describe Mongoid::Contextual::Mongo do
322
322
  end
323
323
 
324
324
  it "returns the distinct matching fields" do
325
- context.distinct(:name).should eq([ "Depeche Mode" ])
325
+ expect(context.distinct(:name)).to eq([ "Depeche Mode" ])
326
326
  end
327
327
  end
328
328
 
@@ -337,7 +337,7 @@ describe Mongoid::Contextual::Mongo do
337
337
  end
338
338
 
339
339
  it "returns the distinct field values" do
340
- context.distinct(:name).should eq([ "Depeche Mode", "New Order" ])
340
+ expect(context.distinct(:name)).to eq([ "Depeche Mode", "New Order" ])
341
341
  end
342
342
  end
343
343
 
@@ -352,7 +352,7 @@ describe Mongoid::Contextual::Mongo do
352
352
  end
353
353
 
354
354
  it "returns the distinct field values" do
355
- context.distinct(:years).should eq([ 30, 25 ])
355
+ expect(context.distinct(:years)).to eq([ 30, 25 ])
356
356
  end
357
357
  end
358
358
  end
@@ -375,18 +375,18 @@ describe Mongoid::Contextual::Mongo do
375
375
 
376
376
  it "yields mongoid documents to the block" do
377
377
  context.each do |doc|
378
- doc.should be_a(Mongoid::Document)
378
+ expect(doc).to be_a(Mongoid::Document)
379
379
  end
380
380
  end
381
381
 
382
382
  it "iterates over the matching documents" do
383
383
  context.each do |doc|
384
- doc.name.should eq("Depeche Mode")
384
+ expect(doc.name).to eq("Depeche Mode")
385
385
  end
386
386
  end
387
387
 
388
388
  it "returns self" do
389
- context.each{}.should be(context)
389
+ expect(context.each{}).to be(context)
390
390
  end
391
391
  end
392
392
 
@@ -397,7 +397,7 @@ describe Mongoid::Contextual::Mongo do
397
397
  end
398
398
 
399
399
  it "returns an enumerator" do
400
- enum.should be_a(Enumerator)
400
+ expect(enum).to be_a(Enumerator)
401
401
  end
402
402
 
403
403
  context "when iterating over the enumerator" do
@@ -406,7 +406,7 @@ describe Mongoid::Contextual::Mongo do
406
406
 
407
407
  it "yields mongoid documents to the block" do
408
408
  enum.each do |doc|
409
- doc.should be_a(Mongoid::Document)
409
+ expect(doc).to be_a(Mongoid::Document)
410
410
  end
411
411
  end
412
412
  end
@@ -414,7 +414,7 @@ describe Mongoid::Contextual::Mongo do
414
414
  context "when iterating with next" do
415
415
 
416
416
  it "yields mongoid documents" do
417
- enum.next.should be_a(Mongoid::Document)
417
+ expect(enum.next).to be_a(Mongoid::Document)
418
418
  end
419
419
  end
420
420
  end
@@ -438,7 +438,7 @@ describe Mongoid::Contextual::Mongo do
438
438
  end
439
439
 
440
440
  it "does not make any additional database queries" do
441
- game_metadata.should_receive(:eager_load).never
441
+ expect(game_metadata).to receive(:eager_load).never
442
442
  context.send(:eager_load, [])
443
443
  end
444
444
  end
@@ -461,7 +461,7 @@ describe Mongoid::Contextual::Mongo do
461
461
  end
462
462
 
463
463
  it "returns false" do
464
- context.should_not be_exists
464
+ expect(context).to_not be_exists
465
465
  end
466
466
  end
467
467
 
@@ -476,7 +476,30 @@ describe Mongoid::Contextual::Mongo do
476
476
  end
477
477
 
478
478
  it "returns true" do
479
- context.should be_exists
479
+ expect(context).to be_exists
480
+ end
481
+ end
482
+
483
+ context "when caching is not enabled" do
484
+
485
+ let(:criteria) do
486
+ Band.where(name: "Depeche Mode")
487
+ end
488
+
489
+ let(:context) do
490
+ described_class.new(criteria)
491
+ end
492
+
493
+ context "when exists? already called" do
494
+
495
+ before do
496
+ context.exists?
497
+ end
498
+
499
+ it "hits the database again" do
500
+ expect(context).to receive(:query).once.and_call_original
501
+ expect(context).to be_exists
502
+ end
480
503
  end
481
504
  end
482
505
 
@@ -497,8 +520,8 @@ describe Mongoid::Contextual::Mongo do
497
520
  end
498
521
 
499
522
  it "does not hit the database" do
500
- context.should_receive(:query).never
501
- context.should be_exists
523
+ expect(context).to receive(:query).never
524
+ expect(context).to be_exists
502
525
  end
503
526
  end
504
527
 
@@ -511,8 +534,8 @@ describe Mongoid::Contextual::Mongo do
511
534
  end
512
535
 
513
536
  it "does not hit the database" do
514
- context.should_receive(:query).never
515
- context.should be_exists
537
+ expect(context).to receive(:query).never
538
+ expect(context).to be_exists
516
539
  end
517
540
  end
518
541
  end
@@ -530,7 +553,7 @@ describe Mongoid::Contextual::Mongo do
530
553
  end
531
554
 
532
555
  it "returns the criteria explain path" do
533
- context.explain["cursor"].should eq("BasicCursor")
556
+ expect(context.explain["cursor"]).to eq("BasicCursor")
534
557
  end
535
558
  end
536
559
 
@@ -561,11 +584,11 @@ describe Mongoid::Contextual::Mongo do
561
584
  end
562
585
 
563
586
  it "returns the first matching document" do
564
- result.should eq(depeche)
587
+ expect(result).to eq(depeche)
565
588
  end
566
589
 
567
590
  it "updates the document in the database" do
568
- depeche.reload.likes.should eq(1)
591
+ expect(depeche.reload.likes).to eq(1)
569
592
  end
570
593
  end
571
594
 
@@ -584,11 +607,11 @@ describe Mongoid::Contextual::Mongo do
584
607
  end
585
608
 
586
609
  it "returns the first matching document" do
587
- result.should eq(tool)
610
+ expect(result).to eq(tool)
588
611
  end
589
612
 
590
613
  it "updates the document in the database" do
591
- tool.reload.likes.should eq(1)
614
+ expect(tool.reload.likes).to eq(1)
592
615
  end
593
616
  end
594
617
 
@@ -607,15 +630,15 @@ describe Mongoid::Contextual::Mongo do
607
630
  end
608
631
 
609
632
  it "returns the first matching document" do
610
- result.should eq(depeche)
633
+ expect(result).to eq(depeche)
611
634
  end
612
635
 
613
636
  it "limits the returned fields" do
614
- result.name.should be_nil
637
+ expect(result.name).to be_nil
615
638
  end
616
639
 
617
640
  it "updates the document in the database" do
618
- depeche.reload.likes.should eq(1)
641
+ expect(depeche.reload.likes).to eq(1)
619
642
  end
620
643
  end
621
644
 
@@ -634,11 +657,11 @@ describe Mongoid::Contextual::Mongo do
634
657
  end
635
658
 
636
659
  it "returns the first matching document" do
637
- result.should eq(depeche)
660
+ expect(result).to eq(depeche)
638
661
  end
639
662
 
640
663
  it "returns the updated document" do
641
- result.likes.should eq(1)
664
+ expect(result.likes).to eq(1)
642
665
  end
643
666
  end
644
667
 
@@ -657,7 +680,7 @@ describe Mongoid::Contextual::Mongo do
657
680
  end
658
681
 
659
682
  it "returns the first matching document" do
660
- result.should eq(depeche)
683
+ expect(result).to eq(depeche)
661
684
  end
662
685
 
663
686
  it "deletes the document from the database" do
@@ -683,7 +706,7 @@ describe Mongoid::Contextual::Mongo do
683
706
  end
684
707
 
685
708
  it "returns nil" do
686
- result.should be_nil
709
+ expect(result).to be_nil
687
710
  end
688
711
  end
689
712
  end
@@ -711,7 +734,7 @@ describe Mongoid::Contextual::Mongo do
711
734
  end
712
735
 
713
736
  it "returns the first matching document" do
714
- context.send(method).should eq(depeche_mode)
737
+ expect(context.send(method)).to eq(depeche_mode)
715
738
  end
716
739
  end
717
740
 
@@ -728,15 +751,15 @@ describe Mongoid::Contextual::Mongo do
728
751
  context "when there is sort on the context" do
729
752
 
730
753
  it "follows the main sort" do
731
- context.send(method).should eq(new_order)
754
+ expect(context.send(method)).to eq(new_order)
732
755
  end
733
756
  end
734
757
 
735
758
  context "when subsequently calling #last" do
736
759
 
737
760
  it "returns the correnct document" do
738
- context.send(method).should eq(new_order)
739
- context.last.should eq(depeche_mode)
761
+ expect(context.send(method)).to eq(new_order)
762
+ expect(context.last).to eq(depeche_mode)
740
763
  end
741
764
  end
742
765
  end
@@ -754,15 +777,15 @@ describe Mongoid::Contextual::Mongo do
754
777
  context "when there is sort on the context" do
755
778
 
756
779
  it "follows the main sort" do
757
- context.send(method).should eq(new_order)
780
+ expect(context.send(method)).to eq(new_order)
758
781
  end
759
782
  end
760
783
 
761
784
  context "when subsequently calling #last" do
762
785
 
763
786
  it "returns the correnct document" do
764
- context.send(method).should eq(new_order)
765
- context.last.should eq(depeche_mode)
787
+ expect(context.send(method)).to eq(new_order)
788
+ expect(context.last).to eq(depeche_mode)
766
789
  end
767
790
  end
768
791
  end
@@ -784,8 +807,20 @@ describe Mongoid::Contextual::Mongo do
784
807
  end
785
808
 
786
809
  it "returns the first document without touching the database" do
787
- context.should_receive(:query).never
788
- context.send(method).should eq(depeche_mode)
810
+ expect(context).to receive(:query).never
811
+ expect(context.send(method)).to eq(depeche_mode)
812
+ end
813
+ end
814
+
815
+ context "when first method was called before" do
816
+
817
+ before do
818
+ context.first
819
+ end
820
+
821
+ it "returns the first document without touching the database" do
822
+ expect(context).to receive(:query).never
823
+ expect(context.send(method)).to eq(depeche_mode)
789
824
  end
790
825
  end
791
826
  end
@@ -803,23 +838,23 @@ describe Mongoid::Contextual::Mongo do
803
838
  end
804
839
 
805
840
  it "sets the criteria" do
806
- context.criteria.should eq(criteria)
841
+ expect(context.criteria).to eq(criteria)
807
842
  end
808
843
 
809
844
  it "sets the klass" do
810
- context.klass.should eq(Band)
845
+ expect(context.klass).to eq(Band)
811
846
  end
812
847
 
813
848
  it "sets the query" do
814
- context.query.should be_a(Moped::Query)
849
+ expect(context.query).to be_a(Moped::Query)
815
850
  end
816
851
 
817
852
  it "sets the query selector" do
818
- context.query.selector.should eq({ "name" => "Depeche Mode" })
853
+ expect(context.query.selector).to eq({ "name" => "Depeche Mode" })
819
854
  end
820
855
 
821
856
  it "sets timeout options" do
822
- context.query.operation.flags.should eq([ :no_cursor_timeout ])
857
+ expect(context.query.operation.flags).to eq([ :no_cursor_timeout ])
823
858
  end
824
859
  end
825
860
 
@@ -844,7 +879,7 @@ describe Mongoid::Contextual::Mongo do
844
879
  end
845
880
 
846
881
  it "returns the last matching document" do
847
- context.last.should eq(new_order)
882
+ expect(context.last).to eq(new_order)
848
883
  end
849
884
  end
850
885
 
@@ -867,7 +902,7 @@ describe Mongoid::Contextual::Mongo do
867
902
  end
868
903
 
869
904
  it "respects default scope" do
870
- context.last.should eq(palm)
905
+ expect(context.last).to eq(palm)
871
906
  end
872
907
  end
873
908
 
@@ -890,8 +925,8 @@ describe Mongoid::Contextual::Mongo do
890
925
  end
891
926
 
892
927
  it "returns the correnct document" do
893
- context.last.should eq(new_order)
894
- context.first.should eq(depeche_mode)
928
+ expect(context.last).to eq(new_order)
929
+ expect(context.first).to eq(depeche_mode)
895
930
  end
896
931
  end
897
932
  end
@@ -916,17 +951,17 @@ describe Mongoid::Contextual::Mongo do
916
951
  end
917
952
 
918
953
  it "returns the number of documents that match" do
919
- context.send(method).should eq(2)
954
+ expect(context.send(method)).to eq(2)
920
955
  end
921
956
 
922
957
  context "when calling more than once" do
923
958
 
924
959
  before do
925
- context.query.should_receive(:count).once.and_return(2)
960
+ expect(context.query).to receive(:count).once.and_return(2)
926
961
  end
927
962
 
928
963
  it "returns the cached value for subsequent calls" do
929
- 2.times { context.send(method).should eq(2) }
964
+ 2.times { expect(context.send(method)).to eq(2) }
930
965
  end
931
966
  end
932
967
 
@@ -934,11 +969,11 @@ describe Mongoid::Contextual::Mongo do
934
969
 
935
970
  before do
936
971
  context.entries
937
- context.query.should_receive(:count).once.and_return(2)
972
+ expect(context.query).to receive(:count).once.and_return(2)
938
973
  end
939
974
 
940
975
  it "returns the cached value for all calls" do
941
- context.send(method).should eq(2)
976
+ expect(context.send(method)).to eq(2)
942
977
  end
943
978
 
944
979
  context "when the results have been iterated over multiple times" do
@@ -948,7 +983,7 @@ describe Mongoid::Contextual::Mongo do
948
983
  end
949
984
 
950
985
  it "resets the length on each full iteration" do
951
- context.should have(2).items
986
+ expect(context.size).to eq(2)
952
987
  end
953
988
  end
954
989
  end
@@ -965,17 +1000,17 @@ describe Mongoid::Contextual::Mongo do
965
1000
  end
966
1001
 
967
1002
  it "returns the number of documents that match" do
968
- context.send(method).should eq(1)
1003
+ expect(context.send(method)).to eq(1)
969
1004
  end
970
1005
 
971
1006
  context "when calling more than once" do
972
1007
 
973
1008
  before do
974
- context.query.should_receive(:count).once.and_return(1)
1009
+ expect(context.query).to receive(:count).once.and_return(1)
975
1010
  end
976
1011
 
977
1012
  it "returns the cached value for subsequent calls" do
978
- 2.times { context.send(method).should eq(1) }
1013
+ 2.times { expect(context.send(method)).to eq(1) }
979
1014
  end
980
1015
  end
981
1016
 
@@ -983,11 +1018,11 @@ describe Mongoid::Contextual::Mongo do
983
1018
 
984
1019
  before do
985
1020
  context.entries
986
- context.query.should_receive(:count).once.and_return(1)
1021
+ expect(context.query).to receive(:count).once.and_return(1)
987
1022
  end
988
1023
 
989
1024
  it "returns the cached value for all calls" do
990
- context.send(method).should eq(1)
1025
+ expect(context.send(method)).to eq(1)
991
1026
  end
992
1027
 
993
1028
  context "when the results have been iterated over multiple times" do
@@ -997,7 +1032,7 @@ describe Mongoid::Contextual::Mongo do
997
1032
  end
998
1033
 
999
1034
  it "resets the length on each full iteration" do
1000
- context.should have(1).item
1035
+ expect(context.size).to eq(1)
1001
1036
  end
1002
1037
  end
1003
1038
  end
@@ -1024,7 +1059,7 @@ describe Mongoid::Contextual::Mongo do
1024
1059
  end
1025
1060
 
1026
1061
  it "limits the results" do
1027
- context.limit(1).entries.should eq([ depeche_mode ])
1062
+ expect(context.limit(1).entries).to eq([ depeche_mode ])
1028
1063
  end
1029
1064
  end
1030
1065
 
@@ -1046,19 +1081,19 @@ describe Mongoid::Contextual::Mongo do
1046
1081
  context "when passed the symbol field name" do
1047
1082
 
1048
1083
  it "limits query to that field" do
1049
- criteria.should_receive(:only).with(:name).and_call_original
1084
+ expect(criteria).to receive(:only).with(:name).and_call_original
1050
1085
  context.map(:name)
1051
1086
  end
1052
1087
 
1053
1088
  it "performs mapping" do
1054
- context.map(:name).should eq ["Depeche Mode", "New Order"]
1089
+ expect(context.map(:name)).to eq ["Depeche Mode", "New Order"]
1055
1090
  end
1056
1091
  end
1057
1092
 
1058
1093
  context "when passed a block" do
1059
1094
 
1060
1095
  it "performs mapping" do
1061
- context.map(&:name).should eq ["Depeche Mode", "New Order"]
1096
+ expect(context.map(&:name)).to eq ["Depeche Mode", "New Order"]
1062
1097
  end
1063
1098
  end
1064
1099
  end
@@ -1106,52 +1141,52 @@ describe Mongoid::Contextual::Mongo do
1106
1141
  end
1107
1142
 
1108
1143
  it "returns the first aggregate result" do
1109
- results.should include(
1144
+ expect(results).to include(
1110
1145
  { "_id" => "Depeche Mode", "value" => { "likes" => 200 }}
1111
1146
  )
1112
1147
  end
1113
1148
 
1114
1149
  it "returns the second aggregate result" do
1115
- results.should include(
1150
+ expect(results).to include(
1116
1151
  { "_id" => "Tool", "value" => { "likes" => 100 }}
1117
1152
  )
1118
1153
  end
1119
1154
 
1120
1155
  it "returns the correct number of documents" do
1121
- results.count.should eq(2)
1156
+ expect(results.count).to eq(2)
1122
1157
  end
1123
1158
 
1124
1159
  it "contains the entire raw results" do
1125
- results["results"].should eq([
1160
+ expect(results["results"]).to eq([
1126
1161
  { "_id" => "Depeche Mode", "value" => { "likes" => 200 }},
1127
1162
  { "_id" => "Tool", "value" => { "likes" => 100 }}
1128
1163
  ])
1129
1164
  end
1130
1165
 
1131
1166
  it "contains the execution time" do
1132
- results.time.should_not be_nil
1167
+ expect(results.time).to_not be_nil
1133
1168
  end
1134
1169
 
1135
1170
  it "contains the count statistics" do
1136
- results["counts"].should eq({
1171
+ expect(results["counts"]).to eq({
1137
1172
  "input" => 2, "emit" => 2, "reduce" => 0, "output" => 2
1138
1173
  })
1139
1174
  end
1140
1175
 
1141
1176
  it "contains the input count" do
1142
- results.input.should eq(2)
1177
+ expect(results.input).to eq(2)
1143
1178
  end
1144
1179
 
1145
1180
  it "contains the emitted count" do
1146
- results.emitted.should eq(2)
1181
+ expect(results.emitted).to eq(2)
1147
1182
  end
1148
1183
 
1149
1184
  it "contains the reduced count" do
1150
- results.reduced.should eq(0)
1185
+ expect(results.reduced).to eq(0)
1151
1186
  end
1152
1187
 
1153
1188
  it "contains the output count" do
1154
- results.output.should eq(2)
1189
+ expect(results.output).to eq(2)
1155
1190
  end
1156
1191
  end
1157
1192
 
@@ -1170,45 +1205,45 @@ describe Mongoid::Contextual::Mongo do
1170
1205
  end
1171
1206
 
1172
1207
  it "includes the aggregate result" do
1173
- results.should include(
1208
+ expect(results).to include(
1174
1209
  { "_id" => "Depeche Mode", "value" => { "likes" => 200 }}
1175
1210
  )
1176
1211
  end
1177
1212
 
1178
1213
  it "returns the correct number of documents" do
1179
- results.count.should eq(1)
1214
+ expect(results.count).to eq(1)
1180
1215
  end
1181
1216
 
1182
1217
  it "contains the entire raw results" do
1183
- results["results"].should eq([
1218
+ expect(results["results"]).to eq([
1184
1219
  { "_id" => "Depeche Mode", "value" => { "likes" => 200 }}
1185
1220
  ])
1186
1221
  end
1187
1222
 
1188
1223
  it "contains the execution time" do
1189
- results.time.should_not be_nil
1224
+ expect(results.time).to_not be_nil
1190
1225
  end
1191
1226
 
1192
1227
  it "contains the count statistics" do
1193
- results["counts"].should eq({
1228
+ expect(results["counts"]).to eq({
1194
1229
  "input" => 1, "emit" => 1, "reduce" => 0, "output" => 1
1195
1230
  })
1196
1231
  end
1197
1232
 
1198
1233
  it "contains the input count" do
1199
- results.input.should eq(1)
1234
+ expect(results.input).to eq(1)
1200
1235
  end
1201
1236
 
1202
1237
  it "contains the emitted count" do
1203
- results.emitted.should eq(1)
1238
+ expect(results.emitted).to eq(1)
1204
1239
  end
1205
1240
 
1206
1241
  it "contains the reduced count" do
1207
- results.reduced.should eq(0)
1242
+ expect(results.reduced).to eq(0)
1208
1243
  end
1209
1244
 
1210
1245
  it "contains the output count" do
1211
- results.output.should eq(1)
1246
+ expect(results.output).to eq(1)
1212
1247
  end
1213
1248
  end
1214
1249
 
@@ -1232,23 +1267,23 @@ describe Mongoid::Contextual::Mongo do
1232
1267
  end
1233
1268
 
1234
1269
  it "returns the first aggregate result" do
1235
- results.should include(
1270
+ expect(results).to include(
1236
1271
  { "_id" => "Tool", "value" => { "likes" => 100 }}
1237
1272
  )
1238
1273
  end
1239
1274
 
1240
1275
  it "returns the second aggregate result" do
1241
- results.should include(
1276
+ expect(results).to include(
1242
1277
  { "_id" => "Depeche Mode", "value" => { "likes" => 200 }}
1243
1278
  )
1244
1279
  end
1245
1280
 
1246
1281
  it "returns the correct number of documents" do
1247
- results.count.should eq(2)
1282
+ expect(results.count).to eq(2)
1248
1283
  end
1249
1284
 
1250
1285
  it "contains the entire raw results" do
1251
- results["results"].should eq([
1286
+ expect(results["results"]).to eq([
1252
1287
  { "_id" => "Depeche Mode", "value" => { "likes" => 200 }},
1253
1288
  { "_id" => "Tool", "value" => { "likes" => 100 }}
1254
1289
  ])
@@ -1270,17 +1305,17 @@ describe Mongoid::Contextual::Mongo do
1270
1305
  end
1271
1306
 
1272
1307
  it "returns the first aggregate result" do
1273
- results.should include(
1308
+ expect(results).to include(
1274
1309
  { "_id" => "Depeche Mode", "value" => { "likes" => 200 }}
1275
1310
  )
1276
1311
  end
1277
1312
 
1278
1313
  it "returns the correct number of documents" do
1279
- results.count.should eq(1)
1314
+ expect(results.count).to eq(1)
1280
1315
  end
1281
1316
 
1282
1317
  it "contains the entire raw results" do
1283
- results["results"].should eq([
1318
+ expect(results["results"]).to eq([
1284
1319
  { "_id" => "Depeche Mode", "value" => { "likes" => 200 }}
1285
1320
  ])
1286
1321
  end
@@ -1301,11 +1336,11 @@ describe Mongoid::Contextual::Mongo do
1301
1336
  end
1302
1337
 
1303
1338
  it "returns the correct number of documents" do
1304
- results.count.should eq(1)
1339
+ expect(results.count).to eq(1)
1305
1340
  end
1306
1341
 
1307
1342
  it "contains the entire results" do
1308
- results.should eq([
1343
+ expect(results).to eq([
1309
1344
  { "_id" => "Depeche Mode", "value" => { "likes" => 200 }}
1310
1345
  ])
1311
1346
  end
@@ -1326,11 +1361,11 @@ describe Mongoid::Contextual::Mongo do
1326
1361
  end
1327
1362
 
1328
1363
  it "returns the correct number of documents" do
1329
- results.count.should eq(1)
1364
+ expect(results.count).to eq(1)
1330
1365
  end
1331
1366
 
1332
1367
  it "contains the entire results" do
1333
- results.should eq([
1368
+ expect(results).to eq([
1334
1369
  { "_id" => "Depeche Mode", "value" => { "likes" => 200 }}
1335
1370
  ])
1336
1371
  end
@@ -1351,11 +1386,11 @@ describe Mongoid::Contextual::Mongo do
1351
1386
  end
1352
1387
 
1353
1388
  it "returns the correct number of documents" do
1354
- results.count.should eq(1)
1389
+ expect(results.count).to eq(1)
1355
1390
  end
1356
1391
 
1357
1392
  it "contains the entire results" do
1358
- results.should eq([
1393
+ expect(results).to eq([
1359
1394
  { "_id" => "Depeche Mode", "value" => { "likes" => 200 }}
1360
1395
  ])
1361
1396
  end
@@ -1405,11 +1440,11 @@ describe Mongoid::Contextual::Mongo do
1405
1440
  end
1406
1441
 
1407
1442
  it "returns the correct number of documents" do
1408
- results.count.should eq(1)
1443
+ expect(results.count).to eq(1)
1409
1444
  end
1410
1445
 
1411
1446
  it "contains the entire results" do
1412
- results.should eq([
1447
+ expect(results).to eq([
1413
1448
  { "_id" => "Depeche Mode", "value" => { "likes" => 200, "extra" => true }}
1414
1449
  ])
1415
1450
  end
@@ -1435,7 +1470,7 @@ describe Mongoid::Contextual::Mongo do
1435
1470
  end
1436
1471
 
1437
1472
  it "limits the results" do
1438
- context.skip(1).entries.should eq([ new_order ])
1473
+ expect(context.skip(1).entries).to eq([ new_order ])
1439
1474
  end
1440
1475
  end
1441
1476
 
@@ -1460,11 +1495,11 @@ describe Mongoid::Contextual::Mongo do
1460
1495
  context "when providing a spec" do
1461
1496
 
1462
1497
  it "sorts the results" do
1463
- context.sort(name: -1).entries.should eq([ new_order, depeche_mode ])
1498
+ expect(context.sort(name: -1).entries).to eq([ new_order, depeche_mode ])
1464
1499
  end
1465
1500
 
1466
1501
  it "returns the context" do
1467
- context.sort(name: 1).should eq(context)
1502
+ expect(context.sort(name: 1)).to eq(context)
1468
1503
  end
1469
1504
  end
1470
1505
 
@@ -1477,7 +1512,60 @@ describe Mongoid::Contextual::Mongo do
1477
1512
  end
1478
1513
 
1479
1514
  it "sorts the results in memory" do
1480
- sorted.should eq([ new_order, depeche_mode ])
1515
+ expect(sorted).to eq([ new_order, depeche_mode ])
1516
+ end
1517
+ end
1518
+ end
1519
+
1520
+ describe "#text_search" do
1521
+
1522
+ let(:criteria) do
1523
+ Word.all
1524
+ end
1525
+
1526
+ let(:context) do
1527
+ described_class.new(criteria)
1528
+ end
1529
+
1530
+ before do
1531
+ Word.with(database: "admin").mongo_session.command(setParameter: 1, textSearchEnabled: true)
1532
+ Word.create_indexes
1533
+ Word.create!(name: "phase", origin: "latin")
1534
+ end
1535
+
1536
+ after(:all) do
1537
+ Word.remove_indexes
1538
+ end
1539
+
1540
+ context "when the search is projecting" do
1541
+
1542
+ let(:search) do
1543
+ context.text_search("phase").project(name: 1)
1544
+ end
1545
+
1546
+ let(:documents) do
1547
+ search.entries
1548
+ end
1549
+
1550
+ it "limits the fields to the projection" do
1551
+ expect {
1552
+ documents.first.origin
1553
+ }.to raise_error(ActiveModel::MissingAttributeError)
1554
+ end
1555
+ end
1556
+
1557
+ context "when the search is not projecting" do
1558
+
1559
+ let(:search) do
1560
+ context.text_search("phase")
1561
+ end
1562
+
1563
+ let(:documents) do
1564
+ search.entries
1565
+ end
1566
+
1567
+ it "returns all fields" do
1568
+ expect(documents.first.origin).to eq("latin")
1481
1569
  end
1482
1570
  end
1483
1571
  end
@@ -1529,11 +1617,11 @@ describe Mongoid::Contextual::Mongo do
1529
1617
  end
1530
1618
 
1531
1619
  it "updates only the first matching document" do
1532
- depeche_mode.reload.name.should eq("Smiths")
1620
+ expect(depeche_mode.reload.name).to eq("Smiths")
1533
1621
  end
1534
1622
 
1535
1623
  it "does not update the last matching document" do
1536
- new_order.reload.name.should eq("New Order")
1624
+ expect(new_order.reload.name).to eq("New Order")
1537
1625
  end
1538
1626
  end
1539
1627
 
@@ -1546,11 +1634,11 @@ describe Mongoid::Contextual::Mongo do
1546
1634
  end
1547
1635
 
1548
1636
  it "updates the first matching document" do
1549
- depeche_mode.reload.member_count.should eq(1)
1637
+ expect(depeche_mode.reload.member_count).to eq(1)
1550
1638
  end
1551
1639
 
1552
1640
  it "does not update the last matching document" do
1553
- new_order.reload.member_count.should be_nil
1641
+ expect(new_order.reload.member_count).to be_nil
1554
1642
  end
1555
1643
  end
1556
1644
 
@@ -1561,11 +1649,11 @@ describe Mongoid::Contextual::Mongo do
1561
1649
  end
1562
1650
 
1563
1651
  it "updates the first matching document" do
1564
- depeche_mode.reload.founded.should eq(Date.new(1979, 1, 1))
1652
+ expect(depeche_mode.reload.founded).to eq(Date.new(1979, 1, 1))
1565
1653
  end
1566
1654
 
1567
1655
  it "does not update the last matching document" do
1568
- new_order.reload.founded.should be_nil
1656
+ expect(new_order.reload.founded).to be_nil
1569
1657
  end
1570
1658
  end
1571
1659
  end
@@ -1582,11 +1670,11 @@ describe Mongoid::Contextual::Mongo do
1582
1670
  end
1583
1671
 
1584
1672
  it "updates the first matching document" do
1585
- depeche_mode.reload.name.should eq("Smiths")
1673
+ expect(depeche_mode.reload.name).to eq("Smiths")
1586
1674
  end
1587
1675
 
1588
1676
  it "does not update the last matching document" do
1589
- new_order.reload.name.should eq("New Order")
1677
+ expect(new_order.reload.name).to eq("New Order")
1590
1678
  end
1591
1679
  end
1592
1680
 
@@ -1597,11 +1685,11 @@ describe Mongoid::Contextual::Mongo do
1597
1685
  end
1598
1686
 
1599
1687
  it "updates the first matching document" do
1600
- depeche_mode.reload.member_count.should eq(1)
1688
+ expect(depeche_mode.reload.member_count).to eq(1)
1601
1689
  end
1602
1690
 
1603
1691
  it "does not update the last matching document" do
1604
- new_order.reload.member_count.should be_nil
1692
+ expect(new_order.reload.member_count).to be_nil
1605
1693
  end
1606
1694
  end
1607
1695
  end
@@ -1613,19 +1701,19 @@ describe Mongoid::Contextual::Mongo do
1613
1701
  end
1614
1702
 
1615
1703
  it "updates the first matching document's set" do
1616
- depeche_mode.reload.name.should eq("Smiths")
1704
+ expect(depeche_mode.reload.name).to eq("Smiths")
1617
1705
  end
1618
1706
 
1619
1707
  it "updates the first matching document's updates" do
1620
- depeche_mode.reload.likes.should eq(100)
1708
+ expect(depeche_mode.reload.likes).to eq(100)
1621
1709
  end
1622
1710
 
1623
1711
  it "does not update the last matching document's set" do
1624
- new_order.reload.name.should eq("New Order")
1712
+ expect(new_order.reload.name).to eq("New Order")
1625
1713
  end
1626
1714
 
1627
1715
  it "does not update the last matching document's updates" do
1628
- new_order.reload.likes.should be_nil
1716
+ expect(new_order.reload.likes).to be_nil
1629
1717
  end
1630
1718
  end
1631
1719
  end
@@ -1633,7 +1721,7 @@ describe Mongoid::Contextual::Mongo do
1633
1721
  context "when providing no attributes" do
1634
1722
 
1635
1723
  it "returns false" do
1636
- context.update.should be_false
1724
+ expect(context.update).to be false
1637
1725
  end
1638
1726
  end
1639
1727
  end
@@ -1665,15 +1753,15 @@ describe Mongoid::Contextual::Mongo do
1665
1753
  end
1666
1754
 
1667
1755
  it "updates the first matching document" do
1668
- depeche_mode.reload.name.should eq("Smiths")
1756
+ expect(depeche_mode.reload.name).to eq("Smiths")
1669
1757
  end
1670
1758
 
1671
1759
  it "does not clear out other attributes" do
1672
- depeche_mode.reload.origin.should eq("Essex")
1760
+ expect(depeche_mode.reload.origin).to eq("Essex")
1673
1761
  end
1674
1762
 
1675
1763
  it "updates the last matching document" do
1676
- new_order.reload.name.should eq("Smiths")
1764
+ expect(new_order.reload.name).to eq("Smiths")
1677
1765
  end
1678
1766
  end
1679
1767
 
@@ -1684,11 +1772,11 @@ describe Mongoid::Contextual::Mongo do
1684
1772
  end
1685
1773
 
1686
1774
  it "updates the first matching document" do
1687
- depeche_mode.reload.member_count.should eq(1)
1775
+ expect(depeche_mode.reload.member_count).to eq(1)
1688
1776
  end
1689
1777
 
1690
1778
  it "updates the last matching document" do
1691
- new_order.reload.member_count.should eq(1)
1779
+ expect(new_order.reload.member_count).to eq(1)
1692
1780
  end
1693
1781
  end
1694
1782
 
@@ -1699,11 +1787,11 @@ describe Mongoid::Contextual::Mongo do
1699
1787
  end
1700
1788
 
1701
1789
  it "updates the first matching document" do
1702
- depeche_mode.reload.years.should eq(100)
1790
+ expect(depeche_mode.reload.years).to eq(100)
1703
1791
  end
1704
1792
 
1705
1793
  it "updates the last matching document" do
1706
- new_order.reload.years.should eq(100)
1794
+ expect(new_order.reload.years).to eq(100)
1707
1795
  end
1708
1796
  end
1709
1797
  end
@@ -1719,11 +1807,11 @@ describe Mongoid::Contextual::Mongo do
1719
1807
  end
1720
1808
 
1721
1809
  it "updates the first matching document" do
1722
- depeche_mode.reload.name.should eq("Smiths")
1810
+ expect(depeche_mode.reload.name).to eq("Smiths")
1723
1811
  end
1724
1812
 
1725
1813
  it "updates the last matching document" do
1726
- new_order.reload.name.should eq("Smiths")
1814
+ expect(new_order.reload.name).to eq("Smiths")
1727
1815
  end
1728
1816
  end
1729
1817
 
@@ -1734,11 +1822,11 @@ describe Mongoid::Contextual::Mongo do
1734
1822
  end
1735
1823
 
1736
1824
  it "updates the first matching document" do
1737
- depeche_mode.reload.member_count.should eq(1)
1825
+ expect(depeche_mode.reload.member_count).to eq(1)
1738
1826
  end
1739
1827
 
1740
1828
  it "updates the last matching document" do
1741
- new_order.reload.member_count.should eq(1)
1829
+ expect(new_order.reload.member_count).to eq(1)
1742
1830
  end
1743
1831
  end
1744
1832
  end
@@ -1750,19 +1838,19 @@ describe Mongoid::Contextual::Mongo do
1750
1838
  end
1751
1839
 
1752
1840
  it "updates the first matching document's set" do
1753
- depeche_mode.reload.name.should eq("Smiths")
1841
+ expect(depeche_mode.reload.name).to eq("Smiths")
1754
1842
  end
1755
1843
 
1756
1844
  it "updates the first matching document's updates" do
1757
- depeche_mode.reload.likes.should eq(100)
1845
+ expect(depeche_mode.reload.likes).to eq(100)
1758
1846
  end
1759
1847
 
1760
1848
  it "updates the last matching document's set" do
1761
- new_order.reload.name.should eq("Smiths")
1849
+ expect(new_order.reload.name).to eq("Smiths")
1762
1850
  end
1763
1851
 
1764
1852
  it "updates the last matching document's updates" do
1765
- new_order.reload.likes.should eq(100)
1853
+ expect(new_order.reload.likes).to eq(100)
1766
1854
  end
1767
1855
  end
1768
1856
  end
@@ -1770,7 +1858,7 @@ describe Mongoid::Contextual::Mongo do
1770
1858
  context "when providing no attributes" do
1771
1859
 
1772
1860
  it "returns false" do
1773
- context.update_all.should be_false
1861
+ expect(context.update_all).to be false
1774
1862
  end
1775
1863
  end
1776
1864
  end