mongoid 3.1.6 → 4.0.2

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