mongoid 3.1.7 → 4.0.2

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