mongoid 3.1.6 → 4.0.0

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 (562) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +432 -8
  3. data/README.md +5 -6
  4. data/lib/config/locales/en.yml +32 -18
  5. data/lib/mongoid/atomic/paths/embedded/many.rb +1 -1
  6. data/lib/mongoid/atomic/paths/embedded/one.rb +1 -1
  7. data/lib/mongoid/atomic/paths/embedded.rb +0 -30
  8. data/lib/mongoid/atomic/paths/root.rb +0 -13
  9. data/lib/mongoid/atomic.rb +1 -12
  10. data/lib/mongoid/attributes/dynamic.rb +154 -0
  11. data/lib/mongoid/attributes/nested.rb +82 -0
  12. data/lib/mongoid/attributes/processing.rb +13 -66
  13. data/lib/mongoid/attributes.rb +63 -101
  14. data/lib/mongoid/{dirty.rb → changeable.rb} +32 -2
  15. data/lib/mongoid/composable.rb +105 -0
  16. data/lib/mongoid/config/options.rb +1 -1
  17. data/lib/mongoid/config.rb +3 -9
  18. data/lib/mongoid/contextual/aggregable/mongo.rb +7 -9
  19. data/lib/mongoid/contextual/atomic.rb +53 -53
  20. data/lib/mongoid/contextual/geo_near.rb +1 -1
  21. data/lib/mongoid/contextual/map_reduce.rb +4 -2
  22. data/lib/mongoid/contextual/memory.rb +18 -6
  23. data/lib/mongoid/contextual/mongo.rb +64 -56
  24. data/lib/mongoid/contextual/none.rb +90 -0
  25. data/lib/mongoid/contextual/text_search.rb +178 -0
  26. data/lib/mongoid/contextual.rb +2 -0
  27. data/lib/mongoid/copyable.rb +2 -3
  28. data/lib/mongoid/{criterion → criteria}/findable.rb +7 -47
  29. data/lib/mongoid/{criterion/inspection.rb → criteria/inspectable.rb} +2 -2
  30. data/lib/mongoid/{criterion → criteria}/marshalable.rb +3 -1
  31. data/lib/mongoid/{criterion → criteria}/modifiable.rb +28 -8
  32. data/lib/mongoid/criteria/permission.rb +70 -0
  33. data/lib/mongoid/{criterion/scoping.rb → criteria/scopable.rb} +2 -2
  34. data/lib/mongoid/criteria.rb +39 -34
  35. data/lib/mongoid/document.rb +32 -17
  36. data/lib/mongoid/errors/document_not_destroyed.rb +25 -0
  37. data/lib/mongoid/errors/document_not_found.rb +2 -1
  38. data/lib/mongoid/errors/invalid_storage_options.rb +1 -1
  39. data/lib/mongoid/errors/invalid_storage_parent.rb +26 -0
  40. data/lib/mongoid/errors/invalid_value.rb +16 -0
  41. data/lib/mongoid/errors/mongoid_error.rb +1 -1
  42. data/lib/mongoid/errors/readonly_document.rb +24 -0
  43. data/lib/mongoid/errors.rb +4 -1
  44. data/lib/mongoid/extensions/array.rb +3 -3
  45. data/lib/mongoid/extensions/big_decimal.rb +1 -1
  46. data/lib/mongoid/extensions/boolean.rb +15 -17
  47. data/lib/mongoid/extensions/date.rb +1 -1
  48. data/lib/mongoid/extensions/date_time.rb +3 -3
  49. data/lib/mongoid/extensions/float.rb +2 -1
  50. data/lib/mongoid/extensions/hash.rb +3 -3
  51. data/lib/mongoid/extensions/integer.rb +1 -1
  52. data/lib/mongoid/extensions/object.rb +7 -7
  53. data/lib/mongoid/extensions/object_id.rb +5 -5
  54. data/lib/mongoid/extensions/range.rb +9 -3
  55. data/lib/mongoid/extensions/regexp.rb +1 -1
  56. data/lib/mongoid/extensions/set.rb +1 -1
  57. data/lib/mongoid/extensions/string.rb +6 -18
  58. data/lib/mongoid/extensions/symbol.rb +1 -1
  59. data/lib/mongoid/extensions/time.rb +3 -3
  60. data/lib/mongoid/extensions/time_with_zone.rb +1 -1
  61. data/lib/mongoid/extensions.rb +2 -7
  62. data/lib/mongoid/factory.rb +8 -6
  63. data/lib/mongoid/fields/foreign_key.rb +3 -3
  64. data/lib/mongoid/fields/localized.rb +1 -1
  65. data/lib/mongoid/fields/standard.rb +5 -17
  66. data/lib/mongoid/fields/validators/macro.rb +15 -5
  67. data/lib/mongoid/fields.rb +41 -8
  68. data/lib/mongoid/{finders.rb → findable.rb} +8 -2
  69. data/lib/mongoid/indexable/specification.rb +104 -0
  70. data/lib/mongoid/{indexes → indexable}/validators/options.rb +2 -1
  71. data/lib/mongoid/{indexes.rb → indexable.rb} +50 -55
  72. data/lib/mongoid/{inspection.rb → inspectable.rb} +15 -11
  73. data/lib/mongoid/{callbacks.rb → interceptable.rb} +30 -62
  74. data/lib/mongoid/log_subscriber.rb +55 -0
  75. data/lib/mongoid/{matchers → matchable}/all.rb +1 -1
  76. data/lib/mongoid/{matchers → matchable}/and.rb +2 -2
  77. data/lib/mongoid/{matchers → matchable}/default.rb +1 -1
  78. data/lib/mongoid/{matchers → matchable}/exists.rb +1 -1
  79. data/lib/mongoid/{matchers → matchable}/gt.rb +1 -1
  80. data/lib/mongoid/{matchers → matchable}/gte.rb +1 -1
  81. data/lib/mongoid/{matchers → matchable}/in.rb +2 -2
  82. data/lib/mongoid/{matchers → matchable}/lt.rb +1 -1
  83. data/lib/mongoid/{matchers → matchable}/lte.rb +1 -1
  84. data/lib/mongoid/{matchers → matchable}/ne.rb +2 -2
  85. data/lib/mongoid/{matchers → matchable}/nin.rb +3 -2
  86. data/lib/mongoid/{matchers → matchable}/or.rb +2 -2
  87. data/lib/mongoid/{matchers → matchable}/size.rb +1 -1
  88. data/lib/mongoid/matchable.rb +152 -0
  89. data/lib/mongoid/persistable/creatable.rb +188 -0
  90. data/lib/mongoid/persistable/deletable.rb +149 -0
  91. data/lib/mongoid/persistable/destroyable.rb +60 -0
  92. data/lib/mongoid/persistable/incrementable.rb +36 -0
  93. data/lib/mongoid/persistable/logical.rb +38 -0
  94. data/lib/mongoid/persistable/poppable.rb +39 -0
  95. data/lib/mongoid/persistable/pullable.rb +55 -0
  96. data/lib/mongoid/persistable/pushable.rb +62 -0
  97. data/lib/mongoid/persistable/renamable.rb +35 -0
  98. data/lib/mongoid/persistable/savable.rb +52 -0
  99. data/lib/mongoid/persistable/settable.rb +33 -0
  100. data/lib/mongoid/persistable/unsettable.rb +36 -0
  101. data/lib/mongoid/persistable/updatable.rb +152 -0
  102. data/lib/mongoid/persistable/upsertable.rb +55 -0
  103. data/lib/mongoid/persistable.rb +216 -0
  104. data/lib/mongoid/positional.rb +71 -0
  105. data/lib/mongoid/query_cache.rb +247 -0
  106. data/lib/mongoid/railtie.rb +32 -45
  107. data/lib/mongoid/railties/database.rake +9 -25
  108. data/lib/mongoid/relations/accessors.rb +13 -49
  109. data/lib/mongoid/relations/auto_save.rb +15 -36
  110. data/lib/mongoid/relations/binding.rb +1 -24
  111. data/lib/mongoid/relations/bindings/embedded/in.rb +1 -1
  112. data/lib/mongoid/relations/bindings/embedded/many.rb +1 -3
  113. data/lib/mongoid/relations/bindings/referenced/in.rb +3 -8
  114. data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +3 -1
  115. data/lib/mongoid/relations/builder.rb +1 -1
  116. data/lib/mongoid/relations/builders/nested_attributes/many.rb +10 -13
  117. data/lib/mongoid/relations/builders/nested_attributes/one.rb +4 -5
  118. data/lib/mongoid/relations/builders/referenced/in.rb +1 -1
  119. data/lib/mongoid/relations/builders/referenced/many.rb +1 -2
  120. data/lib/mongoid/relations/builders/referenced/many_to_many.rb +1 -2
  121. data/lib/mongoid/relations/builders/referenced/one.rb +1 -1
  122. data/lib/mongoid/relations/builders.rb +2 -2
  123. data/lib/mongoid/relations/cascading.rb +3 -5
  124. data/lib/mongoid/relations/constraint.rb +1 -1
  125. data/lib/mongoid/relations/conversions.rb +1 -1
  126. data/lib/mongoid/relations/counter_cache.rb +39 -15
  127. data/lib/mongoid/relations/eager/base.rb +149 -0
  128. data/lib/mongoid/relations/eager/belongs_to.rb +31 -0
  129. data/lib/mongoid/relations/eager/has_and_belongs_to_many.rb +47 -0
  130. data/lib/mongoid/relations/eager/has_many.rb +38 -0
  131. data/lib/mongoid/relations/eager/has_one.rb +30 -0
  132. data/lib/mongoid/relations/eager.rb +46 -0
  133. data/lib/mongoid/relations/embedded/batchable.rb +4 -5
  134. data/lib/mongoid/relations/embedded/in.rb +4 -4
  135. data/lib/mongoid/relations/embedded/many.rb +14 -32
  136. data/lib/mongoid/relations/embedded/one.rb +1 -1
  137. data/lib/mongoid/relations/macros.rb +3 -4
  138. data/lib/mongoid/relations/many.rb +30 -31
  139. data/lib/mongoid/relations/marshalable.rb +3 -3
  140. data/lib/mongoid/relations/metadata.rb +14 -79
  141. data/lib/mongoid/relations/nested_builder.rb +2 -2
  142. data/lib/mongoid/relations/options.rb +1 -0
  143. data/lib/mongoid/relations/polymorphic.rb +0 -1
  144. data/lib/mongoid/relations/proxy.rb +21 -41
  145. data/lib/mongoid/relations/referenced/in.rb +4 -20
  146. data/lib/mongoid/relations/referenced/many.rb +19 -32
  147. data/lib/mongoid/relations/referenced/many_to_many.rb +15 -38
  148. data/lib/mongoid/relations/referenced/one.rb +6 -25
  149. data/lib/mongoid/relations/synchronization.rb +3 -3
  150. data/lib/mongoid/relations/touchable.rb +34 -1
  151. data/lib/mongoid/relations.rb +11 -25
  152. data/lib/mongoid/{reloading.rb → reloadable.rb} +6 -4
  153. data/lib/mongoid/{scoping.rb → scopable.rb} +36 -36
  154. data/lib/mongoid/selectable.rb +59 -0
  155. data/lib/mongoid/{serialization.rb → serializable.rb} +11 -2
  156. data/lib/mongoid/sessions/factory.rb +2 -0
  157. data/lib/mongoid/sessions/options.rb +180 -0
  158. data/lib/mongoid/sessions/storage_options.rb +140 -0
  159. data/lib/mongoid/sessions/thread_options.rb +19 -0
  160. data/lib/mongoid/sessions/validators/storage.rb +16 -3
  161. data/lib/mongoid/sessions.rb +37 -345
  162. data/lib/mongoid/{sharding.rb → shardable.rb} +5 -1
  163. data/lib/mongoid/{state.rb → stateful.rb} +13 -1
  164. data/lib/mongoid/support/query_counter.rb +23 -0
  165. data/lib/mongoid/tasks/database.rake +31 -0
  166. data/lib/mongoid/tasks/database.rb +107 -0
  167. data/lib/mongoid/threaded/lifecycle.rb +0 -28
  168. data/lib/mongoid/threaded.rb +0 -157
  169. data/lib/mongoid/timestamps/updated/short.rb +2 -2
  170. data/lib/mongoid/{hierarchy.rb → traversable.rb} +9 -5
  171. data/lib/mongoid/{validations → validatable}/associated.rb +4 -2
  172. data/lib/mongoid/{validations → validatable}/format.rb +1 -1
  173. data/lib/mongoid/{validations → validatable}/length.rb +1 -1
  174. data/lib/mongoid/{validations → validatable}/localizable.rb +1 -1
  175. data/lib/mongoid/{validations → validatable}/macros.rb +4 -3
  176. data/lib/mongoid/{validations → validatable}/presence.rb +1 -1
  177. data/lib/mongoid/{validations → validatable}/queryable.rb +1 -2
  178. data/lib/mongoid/{validations → validatable}/uniqueness.rb +23 -19
  179. data/lib/mongoid/{validations.rb → validatable.rb} +23 -10
  180. data/lib/mongoid/version.rb +1 -1
  181. data/lib/mongoid.rb +10 -76
  182. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +13 -24
  183. data/lib/rails/generators/mongoid/model/model_generator.rb +0 -1
  184. data/lib/rails/generators/mongoid/model/templates/model.rb.tt +0 -3
  185. data/lib/rails/generators/mongoid_generator.rb +3 -40
  186. data/lib/rails/mongoid.rb +0 -122
  187. data/lib/support/ruby_version.rb +1 -1
  188. data/spec/app/models/account.rb +2 -6
  189. data/spec/app/models/acolyte.rb +2 -1
  190. data/spec/app/models/actor.rb +0 -1
  191. data/spec/app/models/address.rb +8 -3
  192. data/spec/app/models/animal.rb +1 -1
  193. data/spec/app/models/appointment.rb +3 -3
  194. data/spec/app/models/article.rb +1 -4
  195. data/spec/app/models/audio.rb +5 -0
  196. data/spec/app/models/author.rb +0 -2
  197. data/spec/app/models/band.rb +3 -2
  198. data/spec/app/models/bar.rb +1 -0
  199. data/spec/app/models/book.rb +1 -0
  200. data/spec/app/models/building.rb +0 -2
  201. data/spec/app/models/building_address.rb +0 -2
  202. data/spec/app/models/bus.rb +1 -1
  203. data/spec/app/models/canvas.rb +1 -1
  204. data/spec/app/models/contractor.rb +0 -2
  205. data/spec/app/models/country_code.rb +1 -1
  206. data/spec/app/models/definition.rb +2 -2
  207. data/spec/app/models/dog.rb +1 -1
  208. data/spec/app/models/draft.rb +9 -0
  209. data/spec/app/models/dragon.rb +4 -0
  210. data/spec/app/models/drug.rb +1 -3
  211. data/spec/app/models/dungeon.rb +4 -0
  212. data/spec/app/models/edit.rb +5 -0
  213. data/spec/app/models/even.rb +7 -0
  214. data/spec/app/models/event.rb +1 -1
  215. data/spec/app/models/filesystem.rb +1 -0
  216. data/spec/app/models/fish.rb +0 -1
  217. data/spec/app/models/fruits.rb +6 -0
  218. data/spec/app/models/game.rb +0 -2
  219. data/spec/app/models/house.rb +1 -3
  220. data/spec/app/models/item.rb +1 -5
  221. data/spec/app/models/jar.rb +1 -1
  222. data/spec/app/models/label.rb +4 -4
  223. data/spec/app/models/line_item.rb +1 -1
  224. data/spec/app/models/login.rb +1 -1
  225. data/spec/app/models/message.rb +8 -0
  226. data/spec/app/models/movie.rb +1 -0
  227. data/spec/app/models/name.rb +3 -3
  228. data/spec/app/models/note.rb +3 -1
  229. data/spec/app/models/odd.rb +7 -0
  230. data/spec/app/models/oscar.rb +1 -1
  231. data/spec/app/models/parent_doc.rb +1 -1
  232. data/spec/app/models/person.rb +16 -10
  233. data/spec/app/models/phone.rb +1 -3
  234. data/spec/app/models/player.rb +3 -3
  235. data/spec/app/models/post.rb +5 -3
  236. data/spec/app/models/preference.rb +1 -1
  237. data/spec/app/models/quiz.rb +0 -3
  238. data/spec/app/models/record.rb +10 -5
  239. data/spec/app/models/registry.rb +1 -1
  240. data/spec/app/models/server.rb +1 -1
  241. data/spec/app/models/service.rb +3 -3
  242. data/spec/app/models/sound.rb +5 -0
  243. data/spec/app/models/symptom.rb +1 -1
  244. data/spec/app/models/template.rb +1 -1
  245. data/spec/app/models/title.rb +0 -1
  246. data/spec/app/models/track.rb +5 -5
  247. data/spec/app/models/tree.rb +3 -3
  248. data/spec/app/models/video.rb +1 -5
  249. data/spec/app/models/wiki_page.rb +2 -5
  250. data/spec/app/models/word.rb +3 -0
  251. data/spec/app/models/word_origin.rb +1 -1
  252. data/spec/config/mongoid.yml +7 -8
  253. data/spec/helpers.rb +18 -0
  254. data/spec/mongoid/atomic/modifiers_spec.rb +22 -22
  255. data/spec/mongoid/atomic/paths/embedded/many_spec.rb +8 -49
  256. data/spec/mongoid/atomic/paths/embedded/one_spec.rb +7 -49
  257. data/spec/mongoid/atomic/paths/root_spec.rb +3 -61
  258. data/spec/mongoid/atomic/paths_spec.rb +19 -19
  259. data/spec/mongoid/atomic_spec.rb +19 -19
  260. data/spec/mongoid/{nested_attributes_spec.rb → attributes/nested_spec.rb} +335 -448
  261. data/spec/mongoid/attributes/readonly_spec.rb +58 -18
  262. data/spec/mongoid/attributes_spec.rb +315 -436
  263. data/spec/mongoid/{dirty_spec.rb → changeable_spec.rb} +203 -153
  264. data/spec/mongoid/{components_spec.rb → composable_spec.rb} +3 -3
  265. data/spec/mongoid/config/environment_spec.rb +3 -3
  266. data/spec/mongoid/config/options_spec.rb +6 -6
  267. data/spec/mongoid/config_spec.rb +24 -48
  268. data/spec/mongoid/contextual/aggregable/memory_spec.rb +12 -12
  269. data/spec/mongoid/contextual/aggregable/mongo_spec.rb +78 -38
  270. data/spec/mongoid/contextual/atomic_spec.rb +68 -58
  271. data/spec/mongoid/contextual/find_and_modify_spec.rb +14 -14
  272. data/spec/mongoid/contextual/geo_near_spec.rb +22 -22
  273. data/spec/mongoid/contextual/map_reduce_spec.rb +27 -27
  274. data/spec/mongoid/contextual/memory_spec.rb +151 -94
  275. data/spec/mongoid/contextual/mongo_spec.rb +238 -150
  276. data/spec/mongoid/contextual/none_spec.rb +127 -0
  277. data/spec/mongoid/contextual/text_search_spec.rb +209 -0
  278. data/spec/mongoid/copyable_spec.rb +56 -68
  279. data/spec/mongoid/criteria/findable_spec.rb +991 -0
  280. data/spec/mongoid/{criterion/inspection_spec.rb → criteria/inspectable_spec.rb} +5 -5
  281. data/spec/mongoid/{criterion → criteria}/marshalable_spec.rb +2 -2
  282. data/spec/mongoid/criteria/modifiable_spec.rb +1255 -0
  283. data/spec/mongoid/{criterion/scoping_spec.rb → criteria/scopable_spec.rb} +37 -37
  284. data/spec/mongoid/criteria_spec.rb +578 -2295
  285. data/spec/mongoid/document_spec.rb +166 -120
  286. data/spec/mongoid/equality_spec.rb +22 -22
  287. data/spec/mongoid/errors/ambiguous_relationship_spec.rb +3 -3
  288. data/spec/mongoid/errors/callback_spec.rb +3 -3
  289. data/spec/mongoid/errors/delete_restriction_spec.rb +3 -3
  290. data/spec/mongoid/errors/document_not_destroyed_spec.rb +33 -0
  291. data/spec/mongoid/errors/document_not_found_spec.rb +11 -11
  292. data/spec/mongoid/errors/eager_load_spec.rb +3 -3
  293. data/spec/mongoid/errors/invalid_collection_spec.rb +3 -3
  294. data/spec/mongoid/errors/invalid_config_option_spec.rb +3 -3
  295. data/spec/mongoid/errors/invalid_field_option_spec.rb +3 -3
  296. data/spec/mongoid/errors/invalid_field_spec.rb +3 -3
  297. data/spec/mongoid/errors/invalid_find_spec.rb +3 -3
  298. data/spec/mongoid/errors/invalid_includes_spec.rb +3 -3
  299. data/spec/mongoid/errors/invalid_index_spec.rb +3 -3
  300. data/spec/mongoid/errors/invalid_options_spec.rb +3 -3
  301. data/spec/mongoid/errors/invalid_path_spec.rb +3 -3
  302. data/spec/mongoid/errors/invalid_scope_spec.rb +5 -5
  303. data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +3 -3
  304. data/spec/mongoid/errors/invalid_storage_options_spec.rb +3 -3
  305. data/spec/mongoid/errors/invalid_time_spec.rb +3 -3
  306. data/spec/mongoid/errors/inverse_not_found_spec.rb +3 -3
  307. data/spec/mongoid/errors/mixed_relations_spec.rb +3 -3
  308. data/spec/mongoid/errors/mixed_session_configuration_spec.rb +3 -3
  309. data/spec/mongoid/errors/mongoid_error_spec.rb +8 -8
  310. data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +3 -3
  311. data/spec/mongoid/errors/no_environment_spec.rb +3 -3
  312. data/spec/mongoid/errors/no_map_reduce_output_spec.rb +3 -3
  313. data/spec/mongoid/errors/no_metadata_spec.rb +3 -3
  314. data/spec/mongoid/errors/no_parent_spec.rb +3 -3
  315. data/spec/mongoid/errors/no_session_config_spec.rb +3 -3
  316. data/spec/mongoid/errors/no_session_database_spec.rb +3 -3
  317. data/spec/mongoid/errors/no_session_hosts_spec.rb +3 -3
  318. data/spec/mongoid/errors/no_sessions_config_spec.rb +3 -3
  319. data/spec/mongoid/errors/readonly_attribute_spec.rb +3 -3
  320. data/spec/mongoid/errors/readonly_document_spec.rb +29 -0
  321. data/spec/mongoid/errors/scope_overwrite_spec.rb +3 -3
  322. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +3 -3
  323. data/spec/mongoid/errors/unknown_attribute_spec.rb +5 -5
  324. data/spec/mongoid/errors/unsaved_document_spec.rb +3 -3
  325. data/spec/mongoid/errors/unsupported_javascript_spec.rb +3 -3
  326. data/spec/mongoid/errors/validations_spec.rb +7 -7
  327. data/spec/mongoid/extensions/array_spec.rb +61 -61
  328. data/spec/mongoid/extensions/big_decimal_spec.rb +11 -11
  329. data/spec/mongoid/extensions/binary_spec.rb +12 -12
  330. data/spec/mongoid/extensions/boolean_spec.rb +18 -18
  331. data/spec/mongoid/extensions/date_spec.rb +13 -13
  332. data/spec/mongoid/extensions/date_time_spec.rb +8 -8
  333. data/spec/mongoid/extensions/false_class_spec.rb +5 -5
  334. data/spec/mongoid/extensions/float_spec.rb +29 -15
  335. data/spec/mongoid/extensions/hash_spec.rb +29 -29
  336. data/spec/mongoid/extensions/integer_spec.rb +15 -15
  337. data/spec/mongoid/extensions/module_spec.rb +2 -2
  338. data/spec/mongoid/extensions/nil_class_spec.rb +1 -1
  339. data/spec/mongoid/extensions/object_id_spec.rb +134 -134
  340. data/spec/mongoid/extensions/object_spec.rb +26 -26
  341. data/spec/mongoid/extensions/range_spec.rb +61 -12
  342. data/spec/mongoid/extensions/regexp_spec.rb +4 -4
  343. data/spec/mongoid/extensions/set_spec.rb +4 -4
  344. data/spec/mongoid/extensions/string_spec.rb +35 -46
  345. data/spec/mongoid/extensions/symbol_spec.rb +9 -9
  346. data/spec/mongoid/extensions/time_spec.rb +49 -49
  347. data/spec/mongoid/extensions/time_with_zone_spec.rb +34 -34
  348. data/spec/mongoid/extensions/true_class_spec.rb +5 -5
  349. data/spec/mongoid/extensions_spec.rb +15 -0
  350. data/spec/mongoid/factory_spec.rb +15 -15
  351. data/spec/mongoid/fields/foreign_key_spec.rb +73 -66
  352. data/spec/mongoid/fields/internal/foreign_keys/array_spec.rb +15 -15
  353. data/spec/mongoid/fields/internal/foreign_keys/object_spec.rb +22 -22
  354. data/spec/mongoid/fields/localized_spec.rb +38 -23
  355. data/spec/mongoid/fields/standard_spec.rb +12 -12
  356. data/spec/mongoid/fields_spec.rb +263 -217
  357. data/spec/mongoid/{finders_spec.rb → findable_spec.rb} +127 -27
  358. data/spec/mongoid/indexable/specification_spec.rb +102 -0
  359. data/spec/mongoid/{indexes_spec.rb → indexable_spec.rb} +171 -51
  360. data/spec/mongoid/{inspection_spec.rb → inspectable_spec.rb} +6 -14
  361. data/spec/mongoid/{callbacks_spec.rb → interceptable_spec.rb} +117 -116
  362. data/spec/mongoid/log_subscriber_spec.rb +75 -0
  363. data/spec/mongoid/loggable_spec.rb +1 -1
  364. data/spec/mongoid/{matchers → matchable}/all_spec.rb +4 -4
  365. data/spec/mongoid/{matchers → matchable}/and_spec.rb +11 -11
  366. data/spec/mongoid/{matchers → matchable}/default_spec.rb +15 -15
  367. data/spec/mongoid/{matchers → matchable}/exists_spec.rb +5 -5
  368. data/spec/mongoid/{matchers → matchable}/gt_spec.rb +9 -8
  369. data/spec/mongoid/{matchers → matchable}/gte_spec.rb +7 -7
  370. data/spec/mongoid/matchable/in_spec.rb +49 -0
  371. data/spec/mongoid/{matchers → matchable}/lt_spec.rb +7 -7
  372. data/spec/mongoid/{matchers → matchable}/lte_spec.rb +7 -7
  373. data/spec/mongoid/matchable/ne_spec.rb +46 -0
  374. data/spec/mongoid/matchable/nin_spec.rb +48 -0
  375. data/spec/mongoid/{matchers → matchable}/or_spec.rb +6 -6
  376. data/spec/mongoid/{matchers → matchable}/size_spec.rb +3 -3
  377. data/spec/mongoid/{matchers_spec.rb → matchable_spec.rb} +41 -41
  378. data/spec/mongoid/persistable/creatable_spec.rb +512 -0
  379. data/spec/mongoid/persistable/deletable_spec.rb +218 -0
  380. data/spec/mongoid/persistable/destroyable_spec.rb +192 -0
  381. data/spec/mongoid/persistable/incrementable_spec.rb +173 -0
  382. data/spec/mongoid/persistable/logical_spec.rb +143 -0
  383. data/spec/mongoid/persistable/poppable_spec.rb +115 -0
  384. data/spec/mongoid/persistable/pullable_spec.rb +228 -0
  385. data/spec/mongoid/persistable/pushable_spec.rb +258 -0
  386. data/spec/mongoid/persistable/renamable_spec.rb +135 -0
  387. data/spec/mongoid/persistable/savable_spec.rb +461 -0
  388. data/spec/mongoid/persistable/settable_spec.rb +139 -0
  389. data/spec/mongoid/persistable/unsettable_spec.rb +155 -0
  390. data/spec/mongoid/persistable/updatable_spec.rb +558 -0
  391. data/spec/mongoid/persistable/upsertable_spec.rb +106 -0
  392. data/spec/mongoid/persistable_spec.rb +206 -0
  393. data/spec/mongoid/{atomic/positionable_spec.rb → positional_spec.rb} +9 -9
  394. data/spec/mongoid/query_cache_spec.rb +231 -0
  395. data/spec/mongoid/railties/document_spec.rb +2 -2
  396. data/spec/mongoid/relations/accessors_spec.rb +53 -145
  397. data/spec/mongoid/relations/auto_save_spec.rb +37 -17
  398. data/spec/mongoid/relations/bindings/embedded/in_spec.rb +12 -12
  399. data/spec/mongoid/relations/bindings/embedded/many_spec.rb +3 -3
  400. data/spec/mongoid/relations/bindings/embedded/one_spec.rb +5 -5
  401. data/spec/mongoid/relations/bindings/referenced/in_spec.rb +26 -26
  402. data/spec/mongoid/relations/bindings/referenced/many_spec.rb +10 -10
  403. data/spec/mongoid/relations/bindings/referenced/many_to_many_spec.rb +19 -19
  404. data/spec/mongoid/relations/bindings/referenced/one_spec.rb +12 -12
  405. data/spec/mongoid/relations/builders/embedded/in_spec.rb +4 -4
  406. data/spec/mongoid/relations/builders/embedded/many_spec.rb +18 -18
  407. data/spec/mongoid/relations/builders/embedded/one_spec.rb +11 -11
  408. data/spec/mongoid/relations/builders/nested_attributes/many_spec.rb +12 -13
  409. data/spec/mongoid/relations/builders/nested_attributes/one_spec.rb +14 -14
  410. data/spec/mongoid/relations/builders/referenced/in_spec.rb +24 -35
  411. data/spec/mongoid/relations/builders/referenced/many_spec.rb +15 -15
  412. data/spec/mongoid/relations/builders/referenced/many_to_many_spec.rb +18 -18
  413. data/spec/mongoid/relations/builders/referenced/one_spec.rb +12 -25
  414. data/spec/mongoid/relations/builders_spec.rb +21 -21
  415. data/spec/mongoid/relations/cascading/delete_spec.rb +9 -9
  416. data/spec/mongoid/relations/cascading/destroy_spec.rb +6 -6
  417. data/spec/mongoid/relations/cascading/nullify_spec.rb +4 -4
  418. data/spec/mongoid/relations/cascading/restrict_spec.rb +7 -7
  419. data/spec/mongoid/relations/cascading_spec.rb +16 -16
  420. data/spec/mongoid/relations/constraint_spec.rb +8 -7
  421. data/spec/mongoid/relations/conversions_spec.rb +16 -14
  422. data/spec/mongoid/relations/counter_cache_spec.rb +85 -0
  423. data/spec/mongoid/relations/cyclic_spec.rb +18 -18
  424. data/spec/mongoid/relations/eager/belongs_to_spec.rb +154 -0
  425. data/spec/mongoid/relations/eager/has_and_belongs_to_many_spec.rb +117 -0
  426. data/spec/mongoid/relations/eager/has_many_spec.rb +207 -0
  427. data/spec/mongoid/relations/eager/has_one_spec.rb +163 -0
  428. data/spec/mongoid/relations/eager_spec.rb +228 -0
  429. data/spec/mongoid/relations/embedded/dirty_spec.rb +8 -8
  430. data/spec/mongoid/relations/embedded/in_spec.rb +56 -57
  431. data/spec/mongoid/relations/embedded/many_spec.rb +393 -372
  432. data/spec/mongoid/relations/embedded/one_spec.rb +108 -141
  433. data/spec/mongoid/relations/macros_spec.rb +108 -102
  434. data/spec/mongoid/relations/metadata_spec.rb +180 -255
  435. data/spec/mongoid/relations/options_spec.rb +1 -1
  436. data/spec/mongoid/relations/polymorphic_spec.rb +13 -17
  437. data/spec/mongoid/relations/proxy_spec.rb +2 -2
  438. data/spec/mongoid/relations/referenced/in_spec.rb +128 -303
  439. data/spec/mongoid/relations/referenced/many_spec.rb +434 -527
  440. data/spec/mongoid/relations/referenced/many_to_many_spec.rb +352 -424
  441. data/spec/mongoid/relations/referenced/one_spec.rb +149 -264
  442. data/spec/mongoid/relations/reflections_spec.rb +6 -6
  443. data/spec/mongoid/relations/synchronization_spec.rb +46 -50
  444. data/spec/mongoid/relations/targets/enumerable_spec.rb +118 -118
  445. data/spec/mongoid/relations/touchable_spec.rb +333 -0
  446. data/spec/mongoid/relations_spec.rb +16 -15
  447. data/spec/mongoid/{reloading_spec.rb → reloadable_spec.rb} +20 -60
  448. data/spec/mongoid/{scoping_spec.rb → scopable_spec.rb} +89 -164
  449. data/spec/mongoid/selectable_spec.rb +134 -0
  450. data/spec/mongoid/{serialization_spec.rb → serializable_spec.rb} +129 -82
  451. data/spec/mongoid/sessions/factory_spec.rb +49 -28
  452. data/spec/mongoid/sessions/mongo_uri_spec.rb +7 -7
  453. data/spec/mongoid/sessions/options_spec.rb +107 -0
  454. data/spec/mongoid/sessions_spec.rb +289 -178
  455. data/spec/mongoid/{sharding_spec.rb → shardable_spec.rb} +8 -8
  456. data/spec/mongoid/{state_spec.rb → stateful_spec.rb} +36 -11
  457. data/spec/mongoid/tasks/database_rake_spec.rb +285 -0
  458. data/spec/mongoid/tasks/database_spec.rb +160 -0
  459. data/spec/mongoid/threaded_spec.rb +17 -70
  460. data/spec/mongoid/timestamps/created/short_spec.rb +6 -6
  461. data/spec/mongoid/timestamps/created_spec.rb +5 -5
  462. data/spec/mongoid/timestamps/timeless_spec.rb +6 -6
  463. data/spec/mongoid/timestamps/updated/short_spec.rb +11 -11
  464. data/spec/mongoid/timestamps/updated_spec.rb +9 -13
  465. data/spec/mongoid/timestamps_spec.rb +9 -13
  466. data/spec/mongoid/{hierarchy_spec.rb → traversable_spec.rb} +19 -19
  467. data/spec/mongoid/{validations → validatable}/associated_spec.rb +45 -22
  468. data/spec/mongoid/{validations → validatable}/format_spec.rb +6 -6
  469. data/spec/mongoid/{validations → validatable}/length_spec.rb +14 -14
  470. data/spec/mongoid/{validations → validatable}/numericality_spec.rb +1 -1
  471. data/spec/mongoid/{validations → validatable}/presence_spec.rb +37 -44
  472. data/spec/mongoid/{validations → validatable}/uniqueness_spec.rb +184 -192
  473. data/spec/mongoid/{validations_spec.rb → validatable_spec.rb} +28 -28
  474. data/spec/mongoid_spec.rb +8 -8
  475. data/spec/rails/mongoid_spec.rb +19 -335
  476. data/spec/spec_helper.rb +29 -13
  477. metadata +296 -283
  478. data/lib/mongoid/atomic/positionable.rb +0 -73
  479. data/lib/mongoid/components.rb +0 -92
  480. data/lib/mongoid/config/inflections.rb +0 -6
  481. data/lib/mongoid/contextual/eager.rb +0 -158
  482. data/lib/mongoid/errors/versioning_not_on_root.rb +0 -23
  483. data/lib/mongoid/identity_map.rb +0 -163
  484. data/lib/mongoid/json.rb +0 -16
  485. data/lib/mongoid/matchers/strategies.rb +0 -97
  486. data/lib/mongoid/matchers.rb +0 -32
  487. data/lib/mongoid/multi_parameter_attributes.rb +0 -105
  488. data/lib/mongoid/nested_attributes.rb +0 -78
  489. data/lib/mongoid/observer.rb +0 -192
  490. data/lib/mongoid/paranoia.rb +0 -136
  491. data/lib/mongoid/persistence/atomic/add_to_set.rb +0 -47
  492. data/lib/mongoid/persistence/atomic/bit.rb +0 -35
  493. data/lib/mongoid/persistence/atomic/inc.rb +0 -45
  494. data/lib/mongoid/persistence/atomic/operation.rb +0 -154
  495. data/lib/mongoid/persistence/atomic/pop.rb +0 -32
  496. data/lib/mongoid/persistence/atomic/pull.rb +0 -32
  497. data/lib/mongoid/persistence/atomic/pull_all.rb +0 -32
  498. data/lib/mongoid/persistence/atomic/push.rb +0 -25
  499. data/lib/mongoid/persistence/atomic/push_all.rb +0 -25
  500. data/lib/mongoid/persistence/atomic/rename.rb +0 -30
  501. data/lib/mongoid/persistence/atomic/sets.rb +0 -28
  502. data/lib/mongoid/persistence/atomic/unset.rb +0 -27
  503. data/lib/mongoid/persistence/atomic.rb +0 -231
  504. data/lib/mongoid/persistence/deletion.rb +0 -31
  505. data/lib/mongoid/persistence/insertion.rb +0 -38
  506. data/lib/mongoid/persistence/modification.rb +0 -35
  507. data/lib/mongoid/persistence/operations/embedded/insert.rb +0 -46
  508. data/lib/mongoid/persistence/operations/embedded/remove.rb +0 -43
  509. data/lib/mongoid/persistence/operations/insert.rb +0 -34
  510. data/lib/mongoid/persistence/operations/remove.rb +0 -33
  511. data/lib/mongoid/persistence/operations/update.rb +0 -59
  512. data/lib/mongoid/persistence/operations/upsert.rb +0 -28
  513. data/lib/mongoid/persistence/operations.rb +0 -214
  514. data/lib/mongoid/persistence/upsertion.rb +0 -31
  515. data/lib/mongoid/persistence.rb +0 -357
  516. data/lib/mongoid/unit_of_work.rb +0 -61
  517. data/lib/mongoid/versioning.rb +0 -217
  518. data/lib/rack/mongoid/middleware/identity_map.rb +0 -39
  519. data/lib/rack/mongoid.rb +0 -2
  520. data/lib/rails/generators/mongoid/observer/observer_generator.rb +0 -17
  521. data/lib/rails/generators/mongoid/observer/templates/observer.rb.tt +0 -4
  522. data/spec/app/models/actor_observer.rb +0 -15
  523. data/spec/app/models/callback_recorder.rb +0 -25
  524. data/spec/app/models/paranoid_phone.rb +0 -25
  525. data/spec/app/models/paranoid_post.rb +0 -36
  526. data/spec/app/models/phone_observer.rb +0 -6
  527. data/spec/mongoid/attributes/processing_spec.rb +0 -149
  528. data/spec/mongoid/criterion/destructive_spec.rb +0 -101
  529. data/spec/mongoid/criterion/modifiable_spec.rb +0 -409
  530. data/spec/mongoid/criterion/modification_spec.rb +0 -402
  531. data/spec/mongoid/errors/versioning_not_on_root_spec.rb +0 -29
  532. data/spec/mongoid/identity_map_spec.rb +0 -564
  533. data/spec/mongoid/json_spec.rb +0 -33
  534. data/spec/mongoid/matchers/in_spec.rb +0 -25
  535. data/spec/mongoid/matchers/ne_spec.rb +0 -25
  536. data/spec/mongoid/matchers/nin_spec.rb +0 -25
  537. data/spec/mongoid/multi_parameter_attributes_spec.rb +0 -128
  538. data/spec/mongoid/observer_spec.rb +0 -290
  539. data/spec/mongoid/paranoia_spec.rb +0 -759
  540. data/spec/mongoid/persistence/atomic/add_to_set_spec.rb +0 -262
  541. data/spec/mongoid/persistence/atomic/bit_spec.rb +0 -88
  542. data/spec/mongoid/persistence/atomic/inc_spec.rb +0 -133
  543. data/spec/mongoid/persistence/atomic/pop_spec.rb +0 -111
  544. data/spec/mongoid/persistence/atomic/pull_all_spec.rb +0 -77
  545. data/spec/mongoid/persistence/atomic/pull_spec.rb +0 -80
  546. data/spec/mongoid/persistence/atomic/push_all_spec.rb +0 -77
  547. data/spec/mongoid/persistence/atomic/push_spec.rb +0 -77
  548. data/spec/mongoid/persistence/atomic/rename_spec.rb +0 -42
  549. data/spec/mongoid/persistence/atomic/sets_spec.rb +0 -154
  550. data/spec/mongoid/persistence/atomic/unset_spec.rb +0 -65
  551. data/spec/mongoid/persistence/atomic_spec.rb +0 -216
  552. data/spec/mongoid/persistence/operations/embedded/insert_spec.rb +0 -191
  553. data/spec/mongoid/persistence/operations/embedded/remove_spec.rb +0 -8
  554. data/spec/mongoid/persistence/operations/insert_spec.rb +0 -149
  555. data/spec/mongoid/persistence/operations/remove_spec.rb +0 -113
  556. data/spec/mongoid/persistence/operations/update_spec.rb +0 -141
  557. data/spec/mongoid/persistence/operations/upsert_spec.rb +0 -59
  558. data/spec/mongoid/persistence/operations_spec.rb +0 -313
  559. data/spec/mongoid/persistence_spec.rb +0 -2279
  560. data/spec/mongoid/unit_of_work_spec.rb +0 -196
  561. data/spec/mongoid/versioning_spec.rb +0 -540
  562. data/spec/rack/mongoid/middleware/identity_map_spec.rb +0 -72
@@ -27,7 +27,7 @@ describe Mongoid::Contextual::Memory do
27
27
  end
28
28
 
29
29
  it "returns false" do
30
- context.send(method).should be_false
30
+ expect(context.send(method)).to be false
31
31
  end
32
32
  end
33
33
 
@@ -44,7 +44,7 @@ describe Mongoid::Contextual::Memory do
44
44
  end
45
45
 
46
46
  it "returns true" do
47
- context.send(method).should be_true
47
+ expect(context.send(method)).to be true
48
48
  end
49
49
  end
50
50
  end
@@ -73,7 +73,7 @@ describe Mongoid::Contextual::Memory do
73
73
  context "context when no arguments are provided" do
74
74
 
75
75
  it "returns the number of matches" do
76
- context.count.should eq(1)
76
+ expect(context.count).to eq(1)
77
77
  end
78
78
  end
79
79
 
@@ -86,7 +86,7 @@ describe Mongoid::Contextual::Memory do
86
86
  end
87
87
 
88
88
  it "returns 1" do
89
- count.should eq(1)
89
+ expect(count).to eq(1)
90
90
  end
91
91
  end
92
92
 
@@ -97,7 +97,7 @@ describe Mongoid::Contextual::Memory do
97
97
  end
98
98
 
99
99
  it "returns 0" do
100
- count.should eq(0)
100
+ expect(count).to eq(0)
101
101
  end
102
102
  end
103
103
  end
@@ -113,7 +113,7 @@ describe Mongoid::Contextual::Memory do
113
113
  end
114
114
 
115
115
  it "returns 1" do
116
- count.should eq(1)
116
+ expect(count).to eq(1)
117
117
  end
118
118
  end
119
119
 
@@ -126,7 +126,7 @@ describe Mongoid::Contextual::Memory do
126
126
  end
127
127
 
128
128
  it "returns 0" do
129
- count.should eq(0)
129
+ expect(count).to eq(0)
130
130
  end
131
131
  end
132
132
  end
@@ -169,31 +169,31 @@ describe Mongoid::Contextual::Memory do
169
169
  end
170
170
 
171
171
  it "deletes the first matching document" do
172
- hobrecht.should be_destroyed
172
+ expect(hobrecht).to be_destroyed
173
173
  end
174
174
 
175
175
  it "deletes the last matching document" do
176
- friedel.should be_destroyed
176
+ expect(friedel).to be_destroyed
177
177
  end
178
178
 
179
179
  it "does not delete non matching docs" do
180
- pfluger.should_not be_destroyed
180
+ expect(pfluger).to_not be_destroyed
181
181
  end
182
182
 
183
183
  it "removes the docs from the relation" do
184
- person.addresses.should eq([ pfluger ])
184
+ expect(person.addresses).to eq([ pfluger ])
185
185
  end
186
186
 
187
187
  it "removes the docs from the context" do
188
- context.entries.should be_empty
188
+ expect(context.entries).to be_empty
189
189
  end
190
190
 
191
191
  it "persists the changes to the database" do
192
- person.reload.addresses.should eq([ pfluger ])
192
+ expect(person.reload.addresses).to eq([ pfluger ])
193
193
  end
194
194
 
195
195
  it "returns the number of deleted documents" do
196
- deleted.should eq(2)
196
+ expect(deleted).to eq(2)
197
197
  end
198
198
  end
199
199
 
@@ -222,27 +222,27 @@ describe Mongoid::Contextual::Memory do
222
222
  end
223
223
 
224
224
  it "deletes the first matching document" do
225
- work.should be_destroyed
225
+ expect(work).to be_destroyed
226
226
  end
227
227
 
228
228
  it "does not delete non matching docs" do
229
- home.should_not be_destroyed
229
+ expect(home).to_not be_destroyed
230
230
  end
231
231
 
232
232
  it "removes the docs from the relation" do
233
- person.addresses.first.locations.should eq([ home ])
233
+ expect(person.addresses.first.locations).to eq([ home ])
234
234
  end
235
235
 
236
236
  it "removes the docs from the context" do
237
- context.entries.should be_empty
237
+ expect(context.entries).to be_empty
238
238
  end
239
239
 
240
240
  it "persists the changes to the database" do
241
- person.reload.addresses.first.locations.should eq([ home ])
241
+ expect(person.reload.addresses.first.locations).to eq([ home ])
242
242
  end
243
243
 
244
244
  it "returns the number of deleted documents" do
245
- deleted.should eq(1)
245
+ expect(deleted).to eq(1)
246
246
  end
247
247
  end
248
248
  end
@@ -283,31 +283,31 @@ describe Mongoid::Contextual::Memory do
283
283
  end
284
284
 
285
285
  it "deletes the first matching document" do
286
- hobrecht.should be_destroyed
286
+ expect(hobrecht).to be_destroyed
287
287
  end
288
288
 
289
289
  it "deletes the last matching document" do
290
- friedel.should be_destroyed
290
+ expect(friedel).to be_destroyed
291
291
  end
292
292
 
293
293
  it "does not delete non matching docs" do
294
- pfluger.should_not be_destroyed
294
+ expect(pfluger).to_not be_destroyed
295
295
  end
296
296
 
297
297
  it "removes the docs from the relation" do
298
- person.addresses.should eq([ pfluger ])
298
+ expect(person.addresses).to eq([ pfluger ])
299
299
  end
300
300
 
301
301
  it "removes the docs from the context" do
302
- context.entries.should be_empty
302
+ expect(context.entries).to be_empty
303
303
  end
304
304
 
305
305
  it "persists the changes to the database" do
306
- person.reload.addresses.should eq([ pfluger ])
306
+ expect(person.reload.addresses).to eq([ pfluger ])
307
307
  end
308
308
 
309
309
  it "returns the number of destroyed documents" do
310
- destroyed.should eq(2)
310
+ expect(destroyed).to eq(2)
311
311
  end
312
312
  end
313
313
  end
@@ -335,7 +335,7 @@ describe Mongoid::Contextual::Memory do
335
335
  end
336
336
 
337
337
  it "returns the distinct field values" do
338
- context.distinct(:street).should eq([ "hobrecht" ])
338
+ expect(context.distinct(:street)).to eq([ "hobrecht" ])
339
339
  end
340
340
  end
341
341
 
@@ -352,7 +352,7 @@ describe Mongoid::Contextual::Memory do
352
352
  end
353
353
 
354
354
  it "returns the distinct field values" do
355
- context.distinct(:street).should eq([ "hobrecht", "friedel" ])
355
+ expect(context.distinct(:street)).to eq([ "hobrecht", "friedel" ])
356
356
  end
357
357
  end
358
358
  end
@@ -384,7 +384,7 @@ describe Mongoid::Contextual::Memory do
384
384
  end
385
385
 
386
386
  it "contains no documents" do
387
- context.map(&:street).should be_empty
387
+ expect(context.map(&:street)).to be_empty
388
388
  end
389
389
 
390
390
  context "when calling next on the enumerator" do
@@ -401,13 +401,13 @@ describe Mongoid::Contextual::Memory do
401
401
 
402
402
  it "yields mongoid documents to the block" do
403
403
  context.each do |doc|
404
- doc.should be_a(Mongoid::Document)
404
+ expect(doc).to be_a(Mongoid::Document)
405
405
  end
406
406
  end
407
407
 
408
408
  it "iterates over the matching documents" do
409
409
  context.each do |doc|
410
- doc.should eq(hobrecht)
410
+ expect(doc).to eq(hobrecht)
411
411
  end
412
412
  end
413
413
  end
@@ -419,7 +419,7 @@ describe Mongoid::Contextual::Memory do
419
419
  end
420
420
 
421
421
  it "returns an enumerator" do
422
- enum.should be_a(Enumerator)
422
+ expect(enum).to be_a(Enumerator)
423
423
  end
424
424
 
425
425
  context "when iterating over the enumerator" do
@@ -428,7 +428,7 @@ describe Mongoid::Contextual::Memory do
428
428
 
429
429
  it "yields mongoid documents to the block" do
430
430
  enum.each do |doc|
431
- doc.should be_a(Mongoid::Document)
431
+ expect(doc).to be_a(Mongoid::Document)
432
432
  end
433
433
  end
434
434
  end
@@ -436,7 +436,7 @@ describe Mongoid::Contextual::Memory do
436
436
  context "when iterating with next" do
437
437
 
438
438
  it "yields mongoid documents" do
439
- enum.next.should be_a(Mongoid::Document)
439
+ expect(enum.next).to be_a(Mongoid::Document)
440
440
  end
441
441
  end
442
442
  end
@@ -466,7 +466,7 @@ describe Mongoid::Contextual::Memory do
466
466
  end
467
467
 
468
468
  it "returns true" do
469
- context.should be_exists
469
+ expect(context).to be_exists
470
470
  end
471
471
  end
472
472
 
@@ -483,7 +483,7 @@ describe Mongoid::Contextual::Memory do
483
483
  end
484
484
 
485
485
  it "returns false" do
486
- context.should_not be_exists
486
+ expect(context).to_not be_exists
487
487
  end
488
488
  end
489
489
  end
@@ -511,7 +511,7 @@ describe Mongoid::Contextual::Memory do
511
511
  end
512
512
 
513
513
  it "returns the first matching document" do
514
- context.send(method).should eq(hobrecht)
514
+ expect(context.send(method)).to eq(hobrecht)
515
515
  end
516
516
  end
517
517
  end
@@ -539,15 +539,15 @@ describe Mongoid::Contextual::Memory do
539
539
  end
540
540
 
541
541
  it "sets the criteria" do
542
- context.criteria.should eq(criteria)
542
+ expect(context.criteria).to eq(criteria)
543
543
  end
544
544
 
545
545
  it "sets the klass" do
546
- context.klass.should eq(Address)
546
+ expect(context.klass).to eq(Address)
547
547
  end
548
548
 
549
549
  it "sets the matching documents" do
550
- context.documents.should eq([ hobrecht ])
550
+ expect(context.documents).to eq([ hobrecht ])
551
551
  end
552
552
  end
553
553
 
@@ -572,7 +572,7 @@ describe Mongoid::Contextual::Memory do
572
572
  end
573
573
 
574
574
  it "limits the matching documents" do
575
- context.should eq([ friedel ])
575
+ expect(context).to eq([ friedel ])
576
576
  end
577
577
  end
578
578
 
@@ -597,7 +597,7 @@ describe Mongoid::Contextual::Memory do
597
597
  end
598
598
 
599
599
  it "limits the matching documents" do
600
- context.should eq([ hobrecht ])
600
+ expect(context).to eq([ hobrecht ])
601
601
  end
602
602
  end
603
603
  end
@@ -623,7 +623,7 @@ describe Mongoid::Contextual::Memory do
623
623
  end
624
624
 
625
625
  it "returns the last matching document" do
626
- context.last.should eq(friedel)
626
+ expect(context.last).to eq(friedel)
627
627
  end
628
628
  end
629
629
 
@@ -652,7 +652,7 @@ describe Mongoid::Contextual::Memory do
652
652
  end
653
653
 
654
654
  it "returns the number of matches" do
655
- context.send(method).should eq(1)
655
+ expect(context.send(method)).to eq(1)
656
656
  end
657
657
  end
658
658
 
@@ -669,7 +669,7 @@ describe Mongoid::Contextual::Memory do
669
669
  end
670
670
 
671
671
  it "returns zero" do
672
- context.send(method).should eq(0)
672
+ expect(context.send(method)).to eq(0)
673
673
  end
674
674
  end
675
675
  end
@@ -704,7 +704,7 @@ describe Mongoid::Contextual::Memory do
704
704
  end
705
705
 
706
706
  it "returns the context" do
707
- limit.should eq(context)
707
+ expect(limit).to eq(context)
708
708
  end
709
709
 
710
710
  context "when asking for all documents" do
@@ -712,7 +712,7 @@ describe Mongoid::Contextual::Memory do
712
712
  context "when only a limit exists" do
713
713
 
714
714
  it "only returns the limited documents" do
715
- context.entries.should eq([ hobrecht, friedel ])
715
+ expect(context.entries).to eq([ hobrecht, friedel ])
716
716
  end
717
717
  end
718
718
 
@@ -723,7 +723,64 @@ describe Mongoid::Contextual::Memory do
723
723
  end
724
724
 
725
725
  it "applies the skip before the limit" do
726
- context.entries.should eq([ friedel, pfluger ])
726
+ expect(context.entries).to eq([ friedel, pfluger ])
727
+ end
728
+ end
729
+ end
730
+ end
731
+
732
+ describe "#pluck" do
733
+
734
+ let(:hobrecht) do
735
+ Address.new(street: "hobrecht")
736
+ end
737
+
738
+ let(:friedel) do
739
+ Address.new(street: "friedel")
740
+ end
741
+
742
+ let(:criteria) do
743
+ Address.all.tap do |crit|
744
+ crit.documents = [ hobrecht, friedel ]
745
+ end
746
+ end
747
+
748
+ let(:context) do
749
+ described_class.new(criteria)
750
+ end
751
+
752
+ context "when plucking" do
753
+
754
+ let!(:plucked) do
755
+ context.pluck(:street)
756
+ end
757
+
758
+ it "returns the values" do
759
+ expect(plucked).to eq([ "hobrecht", "friedel" ])
760
+ end
761
+ end
762
+
763
+ context "when plucking a field that doesnt exist" do
764
+
765
+ context "when pluck one field" do
766
+
767
+ let(:plucked) do
768
+ context.pluck(:foo)
769
+ end
770
+
771
+ it "returns a empty array" do
772
+ expect(plucked).to eq([])
773
+ end
774
+ end
775
+
776
+ context "when pluck multiple fields" do
777
+
778
+ let(:plucked) do
779
+ context.pluck(:foo, :bar)
780
+ end
781
+
782
+ it "returns a empty array" do
783
+ expect(plucked).to eq([[], []])
727
784
  end
728
785
  end
729
786
  end
@@ -758,7 +815,7 @@ describe Mongoid::Contextual::Memory do
758
815
  end
759
816
 
760
817
  it "returns the context" do
761
- skip.should eq(context)
818
+ expect(skip).to eq(context)
762
819
  end
763
820
 
764
821
  context "when asking for all documents" do
@@ -766,7 +823,7 @@ describe Mongoid::Contextual::Memory do
766
823
  context "when only a skip exists" do
767
824
 
768
825
  it "skips the correct number" do
769
- context.entries.should eq([ friedel, pfluger ])
826
+ expect(context.entries).to eq([ friedel, pfluger ])
770
827
  end
771
828
  end
772
829
 
@@ -777,7 +834,7 @@ describe Mongoid::Contextual::Memory do
777
834
  end
778
835
 
779
836
  it "applies the skip before the limit" do
780
- context.entries.should eq([ friedel ])
837
+ expect(context.entries).to eq([ friedel ])
781
838
  end
782
839
  end
783
840
  end
@@ -816,11 +873,11 @@ describe Mongoid::Contextual::Memory do
816
873
  end
817
874
 
818
875
  it "sorts the documents" do
819
- context.entries.should eq([ friedel, hobrecht, pfluger ])
876
+ expect(context.entries).to eq([ friedel, hobrecht, pfluger ])
820
877
  end
821
878
 
822
879
  it "returns the context" do
823
- sorted.should eq(context)
880
+ expect(sorted).to eq(context)
824
881
  end
825
882
  end
826
883
 
@@ -833,11 +890,11 @@ describe Mongoid::Contextual::Memory do
833
890
  end
834
891
 
835
892
  it "sorts the documents" do
836
- context.entries.should eq([ pfluger, hobrecht, friedel ])
893
+ expect(context.entries).to eq([ pfluger, hobrecht, friedel ])
837
894
  end
838
895
 
839
896
  it "returns the context" do
840
- sorted.should eq(context)
897
+ expect(sorted).to eq(context)
841
898
  end
842
899
  end
843
900
 
@@ -853,11 +910,11 @@ describe Mongoid::Contextual::Memory do
853
910
  end
854
911
 
855
912
  it "sorts the documents" do
856
- context.entries.should eq([ friedel, hobrecht, pfluger ])
913
+ expect(context.entries).to eq([ friedel, hobrecht, pfluger ])
857
914
  end
858
915
 
859
916
  it "returns the context" do
860
- sorted.should eq(context)
917
+ expect(sorted).to eq(context)
861
918
  end
862
919
  end
863
920
  end
@@ -880,11 +937,11 @@ describe Mongoid::Contextual::Memory do
880
937
  end
881
938
 
882
939
  it "sorts the documents" do
883
- context.entries.should eq([ friedel, lenau, pfluger, hobrecht ])
940
+ expect(context.entries).to eq([ friedel, lenau, pfluger, hobrecht ])
884
941
  end
885
942
 
886
943
  it "returns the context" do
887
- sorted.should eq(context)
944
+ expect(sorted).to eq(context)
888
945
  end
889
946
  end
890
947
 
@@ -895,11 +952,11 @@ describe Mongoid::Contextual::Memory do
895
952
  end
896
953
 
897
954
  it "sorts the documents" do
898
- context.entries.should eq([ hobrecht, pfluger, lenau, friedel ])
955
+ expect(context.entries).to eq([ hobrecht, pfluger, lenau, friedel ])
899
956
  end
900
957
 
901
958
  it "returns the context" do
902
- sorted.should eq(context)
959
+ expect(sorted).to eq(context)
903
960
  end
904
961
  end
905
962
  end
@@ -911,11 +968,11 @@ describe Mongoid::Contextual::Memory do
911
968
  end
912
969
 
913
970
  it "does not sort the documents" do
914
- context.entries.should eq([ hobrecht, friedel, pfluger ])
971
+ expect(context.entries).to eq([ hobrecht, friedel, pfluger ])
915
972
  end
916
973
 
917
974
  it "returns the context" do
918
- sorted.should eq(context)
975
+ expect(sorted).to eq(context)
919
976
  end
920
977
  end
921
978
 
@@ -926,7 +983,7 @@ describe Mongoid::Contextual::Memory do
926
983
  end
927
984
 
928
985
  it "sorts the documents" do
929
- context.entries.should eq([ friedel, hobrecht, pfluger ])
986
+ expect(context.entries).to eq([ friedel, hobrecht, pfluger ])
930
987
  end
931
988
  end
932
989
  end
@@ -968,29 +1025,29 @@ describe Mongoid::Contextual::Memory do
968
1025
  end
969
1026
 
970
1027
  it "updates the first matching document" do
971
- hobrecht.number.should eq(5)
1028
+ expect(hobrecht.number).to eq(5)
972
1029
  end
973
1030
 
974
1031
  it "does not update the last matching document" do
975
- friedel.number.should be_nil
1032
+ expect(friedel.number).to be_nil
976
1033
  end
977
1034
 
978
1035
  it "does not update non matching docs" do
979
- pfluger.number.should be_nil
1036
+ expect(pfluger.number).to be_nil
980
1037
  end
981
1038
 
982
1039
  context "when reloading the embedded documents" do
983
1040
 
984
1041
  it "updates the first matching document" do
985
- hobrecht.reload.number.should eq(5)
1042
+ expect(hobrecht.reload.number).to eq(5)
986
1043
  end
987
1044
 
988
1045
  it "updates the last matching document" do
989
- friedel.reload.number.should be_nil
1046
+ expect(friedel.reload.number).to be_nil
990
1047
  end
991
1048
 
992
1049
  it "does not update non matching docs" do
993
- pfluger.reload.number.should be_nil
1050
+ expect(pfluger.reload.number).to be_nil
994
1051
  end
995
1052
  end
996
1053
  end
@@ -998,7 +1055,7 @@ describe Mongoid::Contextual::Memory do
998
1055
  context "when no attributes are provided" do
999
1056
 
1000
1057
  it "returns false" do
1001
- context.update.should be_false
1058
+ expect(context.update).to be false
1002
1059
  end
1003
1060
  end
1004
1061
  end
@@ -1030,21 +1087,21 @@ describe Mongoid::Contextual::Memory do
1030
1087
  end
1031
1088
 
1032
1089
  it "updates the first matching document" do
1033
- work.number.should eq(5)
1090
+ expect(work.number).to eq(5)
1034
1091
  end
1035
1092
 
1036
1093
  it "does not update non matching docs" do
1037
- home.number.should be_nil
1094
+ expect(home.number).to be_nil
1038
1095
  end
1039
1096
 
1040
1097
  context "when reloading the embedded documents" do
1041
1098
 
1042
1099
  it "updates the first matching document" do
1043
- work.reload.number.should eq(5)
1100
+ expect(work.reload.number).to eq(5)
1044
1101
  end
1045
1102
 
1046
1103
  it "does not update non matching docs" do
1047
- home.reload.number.should be_nil
1104
+ expect(home.reload.number).to be_nil
1048
1105
  end
1049
1106
  end
1050
1107
  end
@@ -1052,7 +1109,7 @@ describe Mongoid::Contextual::Memory do
1052
1109
  context "when no attributes are provided" do
1053
1110
 
1054
1111
  it "returns false" do
1055
- context.update.should be_false
1112
+ expect(context.update).to be false
1056
1113
  end
1057
1114
  end
1058
1115
  end
@@ -1091,7 +1148,7 @@ describe Mongoid::Contextual::Memory do
1091
1148
  end
1092
1149
 
1093
1150
  it "returns false" do
1094
- context.update_all({}).should be_false
1151
+ expect(context.update_all({})).to be false
1095
1152
  end
1096
1153
  end
1097
1154
 
@@ -1114,15 +1171,15 @@ describe Mongoid::Contextual::Memory do
1114
1171
  end
1115
1172
 
1116
1173
  it "updates the first matching document" do
1117
- hobrecht.suite.should eq("10B")
1174
+ expect(hobrecht.suite).to eq("10B")
1118
1175
  end
1119
1176
 
1120
1177
  it "updates the last matching document" do
1121
- friedel.suite.should eq("10B")
1178
+ expect(friedel.suite).to eq("10B")
1122
1179
  end
1123
1180
 
1124
1181
  it "does not update non matching docs" do
1125
- pfluger.suite.should be_nil
1182
+ expect(pfluger.suite).to be_nil
1126
1183
  end
1127
1184
  end
1128
1185
 
@@ -1133,29 +1190,29 @@ describe Mongoid::Contextual::Memory do
1133
1190
  end
1134
1191
 
1135
1192
  it "updates the first matching document" do
1136
- hobrecht.number.should eq(5)
1193
+ expect(hobrecht.number).to eq(5)
1137
1194
  end
1138
1195
 
1139
1196
  it "updates the last matching document" do
1140
- friedel.number.should eq(5)
1197
+ expect(friedel.number).to eq(5)
1141
1198
  end
1142
1199
 
1143
1200
  it "does not update non matching docs" do
1144
- pfluger.number.should be_nil
1201
+ expect(pfluger.number).to be_nil
1145
1202
  end
1146
1203
 
1147
1204
  context "when reloading the embedded documents" do
1148
1205
 
1149
1206
  it "updates the first matching document" do
1150
- hobrecht.reload.number.should eq(5)
1207
+ expect(hobrecht.reload.number).to eq(5)
1151
1208
  end
1152
1209
 
1153
1210
  it "updates the last matching document" do
1154
- friedel.reload.number.should eq(5)
1211
+ expect(friedel.reload.number).to eq(5)
1155
1212
  end
1156
1213
 
1157
1214
  it "does not update non matching docs" do
1158
- pfluger.reload.number.should be_nil
1215
+ expect(pfluger.reload.number).to be_nil
1159
1216
  end
1160
1217
  end
1161
1218
 
@@ -1166,7 +1223,7 @@ describe Mongoid::Contextual::Memory do
1166
1223
  end
1167
1224
 
1168
1225
  it "does not error on the update" do
1169
- hobrecht.number.should eq(5)
1226
+ expect(hobrecht.number).to eq(5)
1170
1227
  end
1171
1228
  end
1172
1229
  end
@@ -1174,7 +1231,7 @@ describe Mongoid::Contextual::Memory do
1174
1231
  context "when no attributes are provided" do
1175
1232
 
1176
1233
  it "returns false" do
1177
- context.update_all.should be_false
1234
+ expect(context.update_all).to be false
1178
1235
  end
1179
1236
  end
1180
1237
  end
@@ -1206,21 +1263,21 @@ describe Mongoid::Contextual::Memory do
1206
1263
  end
1207
1264
 
1208
1265
  it "updates the first matching document" do
1209
- work.number.should eq(5)
1266
+ expect(work.number).to eq(5)
1210
1267
  end
1211
1268
 
1212
1269
  it "does not update non matching docs" do
1213
- home.number.should be_nil
1270
+ expect(home.number).to be_nil
1214
1271
  end
1215
1272
 
1216
1273
  context "when reloading the embedded documents" do
1217
1274
 
1218
1275
  it "updates the first matching document" do
1219
- work.reload.number.should eq(5)
1276
+ expect(work.reload.number).to eq(5)
1220
1277
  end
1221
1278
 
1222
1279
  it "does not update non matching docs" do
1223
- home.reload.number.should be_nil
1280
+ expect(home.reload.number).to be_nil
1224
1281
  end
1225
1282
  end
1226
1283
  end
@@ -1228,7 +1285,7 @@ describe Mongoid::Contextual::Memory do
1228
1285
  context "when no attributes are provided" do
1229
1286
 
1230
1287
  it "returns false" do
1231
- context.update_all.should be_false
1288
+ expect(context.update_all).to be false
1232
1289
  end
1233
1290
  end
1234
1291
  end