mongoid 3.1.6 → 4.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (571) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +479 -8
  3. data/README.md +10 -7
  4. data/lib/config/locales/en.yml +34 -20
  5. data/lib/mongoid.rb +10 -76
  6. data/lib/mongoid/atomic.rb +3 -14
  7. data/lib/mongoid/atomic/paths/embedded.rb +0 -30
  8. data/lib/mongoid/atomic/paths/embedded/many.rb +1 -1
  9. data/lib/mongoid/atomic/paths/embedded/one.rb +1 -1
  10. data/lib/mongoid/atomic/paths/root.rb +0 -13
  11. data/lib/mongoid/attributes.rb +65 -101
  12. data/lib/mongoid/attributes/dynamic.rb +154 -0
  13. data/lib/mongoid/attributes/nested.rb +82 -0
  14. data/lib/mongoid/attributes/processing.rb +13 -66
  15. data/lib/mongoid/{dirty.rb → changeable.rb} +32 -2
  16. data/lib/mongoid/composable.rb +105 -0
  17. data/lib/mongoid/config.rb +3 -9
  18. data/lib/mongoid/config/options.rb +1 -1
  19. data/lib/mongoid/contextual.rb +2 -0
  20. data/lib/mongoid/contextual/aggregable/memory.rb +2 -2
  21. data/lib/mongoid/contextual/aggregable/mongo.rb +7 -9
  22. data/lib/mongoid/contextual/atomic.rb +53 -53
  23. data/lib/mongoid/contextual/geo_near.rb +1 -1
  24. data/lib/mongoid/contextual/map_reduce.rb +4 -2
  25. data/lib/mongoid/contextual/memory.rb +23 -11
  26. data/lib/mongoid/contextual/mongo.rb +75 -57
  27. data/lib/mongoid/contextual/none.rb +90 -0
  28. data/lib/mongoid/contextual/text_search.rb +178 -0
  29. data/lib/mongoid/copyable.rb +2 -3
  30. data/lib/mongoid/criteria.rb +39 -34
  31. data/lib/mongoid/criteria/#findable.rb# +141 -0
  32. data/lib/mongoid/{criterion → criteria}/findable.rb +7 -47
  33. data/lib/mongoid/{criterion/inspection.rb → criteria/inspectable.rb} +2 -2
  34. data/lib/mongoid/{criterion → criteria}/marshalable.rb +3 -1
  35. data/lib/mongoid/{criterion → criteria}/modifiable.rb +28 -8
  36. data/lib/mongoid/criteria/permission.rb +70 -0
  37. data/lib/mongoid/{criterion/scoping.rb → criteria/scopable.rb} +2 -2
  38. data/lib/mongoid/document.rb +39 -24
  39. data/lib/mongoid/errors.rb +4 -1
  40. data/lib/mongoid/errors/document_not_destroyed.rb +25 -0
  41. data/lib/mongoid/errors/document_not_found.rb +2 -1
  42. data/lib/mongoid/errors/invalid_storage_options.rb +1 -1
  43. data/lib/mongoid/errors/invalid_storage_parent.rb +26 -0
  44. data/lib/mongoid/errors/invalid_value.rb +16 -0
  45. data/lib/mongoid/errors/mongoid_error.rb +1 -1
  46. data/lib/mongoid/errors/readonly_document.rb +24 -0
  47. data/lib/mongoid/extensions.rb +15 -7
  48. data/lib/mongoid/extensions/array.rb +3 -3
  49. data/lib/mongoid/extensions/big_decimal.rb +1 -1
  50. data/lib/mongoid/extensions/boolean.rb +15 -17
  51. data/lib/mongoid/extensions/date.rb +1 -1
  52. data/lib/mongoid/extensions/date_time.rb +3 -3
  53. data/lib/mongoid/extensions/float.rb +2 -1
  54. data/lib/mongoid/extensions/hash.rb +3 -3
  55. data/lib/mongoid/extensions/integer.rb +1 -1
  56. data/lib/mongoid/extensions/object.rb +7 -7
  57. data/lib/mongoid/extensions/object_id.rb +5 -5
  58. data/lib/mongoid/extensions/range.rb +9 -3
  59. data/lib/mongoid/extensions/regexp.rb +1 -1
  60. data/lib/mongoid/extensions/set.rb +1 -1
  61. data/lib/mongoid/extensions/string.rb +6 -18
  62. data/lib/mongoid/extensions/symbol.rb +1 -1
  63. data/lib/mongoid/extensions/time.rb +3 -3
  64. data/lib/mongoid/extensions/time_with_zone.rb +1 -1
  65. data/lib/mongoid/factory.rb +8 -6
  66. data/lib/mongoid/fields.rb +41 -8
  67. data/lib/mongoid/fields/foreign_key.rb +3 -3
  68. data/lib/mongoid/fields/localized.rb +1 -1
  69. data/lib/mongoid/fields/standard.rb +5 -17
  70. data/lib/mongoid/fields/validators/macro.rb +15 -5
  71. data/lib/mongoid/{finders.rb → findable.rb} +35 -7
  72. data/lib/mongoid/{indexes.rb → indexable.rb} +50 -55
  73. data/lib/mongoid/indexable/specification.rb +104 -0
  74. data/lib/mongoid/{indexes → indexable}/validators/options.rb +2 -1
  75. data/lib/mongoid/{inspection.rb → inspectable.rb} +15 -11
  76. data/lib/mongoid/{callbacks.rb → interceptable.rb} +30 -62
  77. data/lib/mongoid/log_subscriber.rb +55 -0
  78. data/lib/mongoid/matchable.rb +152 -0
  79. data/lib/mongoid/{matchers → matchable}/all.rb +1 -1
  80. data/lib/mongoid/{matchers → matchable}/and.rb +2 -2
  81. data/lib/mongoid/{matchers → matchable}/default.rb +1 -1
  82. data/lib/mongoid/{matchers → matchable}/exists.rb +1 -1
  83. data/lib/mongoid/{matchers → matchable}/gt.rb +1 -1
  84. data/lib/mongoid/{matchers → matchable}/gte.rb +1 -1
  85. data/lib/mongoid/{matchers → matchable}/in.rb +2 -2
  86. data/lib/mongoid/{matchers → matchable}/lt.rb +1 -1
  87. data/lib/mongoid/{matchers → matchable}/lte.rb +1 -1
  88. data/lib/mongoid/{matchers → matchable}/ne.rb +2 -2
  89. data/lib/mongoid/{matchers → matchable}/nin.rb +3 -2
  90. data/lib/mongoid/{matchers → matchable}/or.rb +2 -2
  91. data/lib/mongoid/{matchers → matchable}/size.rb +1 -1
  92. data/lib/mongoid/persistable.rb +216 -0
  93. data/lib/mongoid/persistable/creatable.rb +189 -0
  94. data/lib/mongoid/persistable/deletable.rb +149 -0
  95. data/lib/mongoid/persistable/destroyable.rb +60 -0
  96. data/lib/mongoid/persistable/incrementable.rb +36 -0
  97. data/lib/mongoid/persistable/logical.rb +38 -0
  98. data/lib/mongoid/persistable/poppable.rb +39 -0
  99. data/lib/mongoid/persistable/pullable.rb +55 -0
  100. data/lib/mongoid/persistable/pushable.rb +62 -0
  101. data/lib/mongoid/persistable/renamable.rb +35 -0
  102. data/lib/mongoid/persistable/savable.rb +52 -0
  103. data/lib/mongoid/persistable/settable.rb +33 -0
  104. data/lib/mongoid/persistable/unsettable.rb +36 -0
  105. data/lib/mongoid/persistable/updatable.rb +153 -0
  106. data/lib/mongoid/persistable/upsertable.rb +55 -0
  107. data/lib/mongoid/positional.rb +71 -0
  108. data/lib/mongoid/query_cache.rb +255 -0
  109. data/lib/mongoid/railtie.rb +34 -60
  110. data/lib/mongoid/railties/database.rake +9 -25
  111. data/lib/mongoid/relations.rb +11 -25
  112. data/lib/mongoid/relations/accessors.rb +15 -51
  113. data/lib/mongoid/relations/auto_save.rb +15 -36
  114. data/lib/mongoid/relations/binding.rb +2 -25
  115. data/lib/mongoid/relations/bindings/embedded/in.rb +1 -1
  116. data/lib/mongoid/relations/bindings/embedded/many.rb +1 -3
  117. data/lib/mongoid/relations/bindings/referenced/in.rb +3 -8
  118. data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +4 -2
  119. data/lib/mongoid/relations/builder.rb +1 -1
  120. data/lib/mongoid/relations/builders.rb +2 -2
  121. data/lib/mongoid/relations/builders/embedded/one.rb +1 -1
  122. data/lib/mongoid/relations/builders/nested_attributes/many.rb +10 -13
  123. data/lib/mongoid/relations/builders/nested_attributes/one.rb +5 -6
  124. data/lib/mongoid/relations/builders/referenced/in.rb +1 -1
  125. data/lib/mongoid/relations/builders/referenced/many.rb +1 -2
  126. data/lib/mongoid/relations/builders/referenced/many_to_many.rb +1 -2
  127. data/lib/mongoid/relations/builders/referenced/one.rb +1 -1
  128. data/lib/mongoid/relations/cascading.rb +3 -5
  129. data/lib/mongoid/relations/constraint.rb +1 -1
  130. data/lib/mongoid/relations/conversions.rb +1 -1
  131. data/lib/mongoid/relations/counter_cache.rb +39 -15
  132. data/lib/mongoid/relations/eager.rb +46 -0
  133. data/lib/mongoid/relations/eager/base.rb +149 -0
  134. data/lib/mongoid/relations/eager/belongs_to.rb +31 -0
  135. data/lib/mongoid/relations/eager/has_and_belongs_to_many.rb +47 -0
  136. data/lib/mongoid/relations/eager/has_many.rb +38 -0
  137. data/lib/mongoid/relations/eager/has_one.rb +30 -0
  138. data/lib/mongoid/relations/embedded/batchable.rb +4 -5
  139. data/lib/mongoid/relations/embedded/in.rb +4 -4
  140. data/lib/mongoid/relations/embedded/many.rb +14 -32
  141. data/lib/mongoid/relations/embedded/one.rb +1 -1
  142. data/lib/mongoid/relations/macros.rb +3 -4
  143. data/lib/mongoid/relations/many.rb +51 -31
  144. data/lib/mongoid/relations/marshalable.rb +3 -3
  145. data/lib/mongoid/relations/metadata.rb +14 -79
  146. data/lib/mongoid/relations/nested_builder.rb +2 -2
  147. data/lib/mongoid/relations/one.rb +1 -1
  148. data/lib/mongoid/relations/options.rb +1 -0
  149. data/lib/mongoid/relations/polymorphic.rb +0 -1
  150. data/lib/mongoid/relations/proxy.rb +21 -41
  151. data/lib/mongoid/relations/referenced/in.rb +4 -20
  152. data/lib/mongoid/relations/referenced/many.rb +22 -35
  153. data/lib/mongoid/relations/referenced/many_to_many.rb +19 -42
  154. data/lib/mongoid/relations/referenced/one.rb +6 -25
  155. data/lib/mongoid/relations/synchronization.rb +4 -4
  156. data/lib/mongoid/relations/targets/enumerable.rb +10 -10
  157. data/lib/mongoid/relations/touchable.rb +34 -1
  158. data/lib/mongoid/{reloading.rb → reloadable.rb} +7 -5
  159. data/lib/mongoid/{scoping.rb → scopable.rb} +36 -36
  160. data/lib/mongoid/selectable.rb +59 -0
  161. data/lib/mongoid/{serialization.rb → serializable.rb} +11 -2
  162. data/lib/mongoid/sessions.rb +37 -345
  163. data/lib/mongoid/sessions/factory.rb +2 -0
  164. data/lib/mongoid/sessions/options.rb +185 -0
  165. data/lib/mongoid/sessions/storage_options.rb +140 -0
  166. data/lib/mongoid/sessions/thread_options.rb +19 -0
  167. data/lib/mongoid/sessions/validators/storage.rb +16 -3
  168. data/lib/mongoid/{sharding.rb → shardable.rb} +5 -1
  169. data/lib/mongoid/{state.rb → stateful.rb} +13 -1
  170. data/lib/mongoid/support/query_counter.rb +23 -0
  171. data/lib/mongoid/tasks/database.rake +31 -0
  172. data/lib/mongoid/tasks/database.rb +107 -0
  173. data/lib/mongoid/threaded.rb +26 -172
  174. data/lib/mongoid/threaded/lifecycle.rb +0 -28
  175. data/lib/mongoid/timestamps/updated/short.rb +2 -2
  176. data/lib/mongoid/{hierarchy.rb → traversable.rb} +15 -7
  177. data/lib/mongoid/{validations.rb → validatable.rb} +23 -10
  178. data/lib/mongoid/{validations → validatable}/associated.rb +4 -2
  179. data/lib/mongoid/{validations → validatable}/format.rb +1 -1
  180. data/lib/mongoid/{validations → validatable}/length.rb +1 -1
  181. data/lib/mongoid/{validations → validatable}/localizable.rb +1 -1
  182. data/lib/mongoid/{validations → validatable}/macros.rb +4 -3
  183. data/lib/mongoid/{validations → validatable}/presence.rb +1 -1
  184. data/lib/mongoid/{validations → validatable}/queryable.rb +1 -2
  185. data/lib/mongoid/{validations → validatable}/uniqueness.rb +25 -21
  186. data/lib/mongoid/version.rb +1 -1
  187. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +46 -25
  188. data/lib/rails/generators/mongoid/model/model_generator.rb +0 -1
  189. data/lib/rails/generators/mongoid/model/templates/model.rb.tt +0 -3
  190. data/lib/rails/generators/mongoid_generator.rb +3 -40
  191. data/lib/rails/mongoid.rb +0 -122
  192. data/lib/support/ruby_version.rb +1 -1
  193. data/spec/app/models/account.rb +2 -6
  194. data/spec/app/models/acolyte.rb +2 -1
  195. data/spec/app/models/actor.rb +0 -1
  196. data/spec/app/models/address.rb +8 -3
  197. data/spec/app/models/animal.rb +1 -1
  198. data/spec/app/models/appointment.rb +3 -3
  199. data/spec/app/models/article.rb +1 -4
  200. data/spec/app/models/audio.rb +5 -0
  201. data/spec/app/models/author.rb +0 -2
  202. data/spec/app/models/band.rb +3 -2
  203. data/spec/app/models/bar.rb +1 -0
  204. data/spec/app/models/book.rb +1 -0
  205. data/spec/app/models/building.rb +0 -2
  206. data/spec/app/models/building_address.rb +0 -2
  207. data/spec/app/models/bus.rb +1 -1
  208. data/spec/app/models/canvas.rb +1 -1
  209. data/spec/app/models/contextable_item.rb +5 -0
  210. data/spec/app/models/contractor.rb +0 -2
  211. data/spec/app/models/country_code.rb +1 -1
  212. data/spec/app/models/definition.rb +2 -2
  213. data/spec/app/models/dog.rb +1 -1
  214. data/spec/app/models/draft.rb +9 -0
  215. data/spec/app/models/dragon.rb +4 -0
  216. data/spec/app/models/drug.rb +1 -3
  217. data/spec/app/models/dungeon.rb +4 -0
  218. data/spec/app/models/edit.rb +5 -0
  219. data/spec/app/models/even.rb +7 -0
  220. data/spec/app/models/event.rb +1 -1
  221. data/spec/app/models/filesystem.rb +1 -0
  222. data/spec/app/models/fish.rb +0 -1
  223. data/spec/app/models/fruits.rb +6 -0
  224. data/spec/app/models/game.rb +0 -2
  225. data/spec/app/models/house.rb +1 -3
  226. data/spec/app/models/id_key.rb +6 -0
  227. data/spec/app/models/item.rb +1 -5
  228. data/spec/app/models/jar.rb +1 -1
  229. data/spec/app/models/label.rb +4 -4
  230. data/spec/app/models/line_item.rb +1 -1
  231. data/spec/app/models/login.rb +1 -1
  232. data/spec/app/models/message.rb +8 -0
  233. data/spec/app/models/movie.rb +1 -0
  234. data/spec/app/models/name.rb +3 -3
  235. data/spec/app/models/note.rb +3 -1
  236. data/spec/app/models/odd.rb +7 -0
  237. data/spec/app/models/oscar.rb +1 -1
  238. data/spec/app/models/parent_doc.rb +1 -1
  239. data/spec/app/models/person.rb +16 -10
  240. data/spec/app/models/phone.rb +1 -3
  241. data/spec/app/models/player.rb +3 -3
  242. data/spec/app/models/post.rb +5 -3
  243. data/spec/app/models/preference.rb +1 -1
  244. data/spec/app/models/quiz.rb +0 -3
  245. data/spec/app/models/record.rb +10 -5
  246. data/spec/app/models/registry.rb +1 -1
  247. data/spec/app/models/server.rb +1 -1
  248. data/spec/app/models/service.rb +3 -3
  249. data/spec/app/models/sound.rb +5 -0
  250. data/spec/app/models/symptom.rb +1 -1
  251. data/spec/app/models/template.rb +1 -1
  252. data/spec/app/models/title.rb +0 -1
  253. data/spec/app/models/track.rb +5 -5
  254. data/spec/app/models/tree.rb +3 -3
  255. data/spec/app/models/video.rb +1 -5
  256. data/spec/app/models/wiki_page.rb +2 -5
  257. data/spec/app/models/word.rb +3 -0
  258. data/spec/app/models/word_origin.rb +1 -1
  259. data/spec/config/mongoid.yml +7 -8
  260. data/spec/helpers.rb +18 -0
  261. data/spec/mongoid/#atomic_spec.rb# +365 -0
  262. data/spec/mongoid/atomic/modifiers_spec.rb +22 -22
  263. data/spec/mongoid/atomic/paths/embedded/many_spec.rb +8 -49
  264. data/spec/mongoid/atomic/paths/embedded/one_spec.rb +7 -49
  265. data/spec/mongoid/atomic/paths/root_spec.rb +3 -61
  266. data/spec/mongoid/atomic/paths_spec.rb +19 -19
  267. data/spec/mongoid/atomic_spec.rb +19 -19
  268. data/spec/mongoid/{nested_attributes_spec.rb → attributes/nested_spec.rb} +474 -592
  269. data/spec/mongoid/attributes/readonly_spec.rb +58 -18
  270. data/spec/mongoid/attributes_spec.rb +349 -434
  271. data/spec/mongoid/{dirty_spec.rb → changeable_spec.rb} +203 -153
  272. data/spec/mongoid/{components_spec.rb → composable_spec.rb} +3 -3
  273. data/spec/mongoid/config/environment_spec.rb +3 -3
  274. data/spec/mongoid/config/options_spec.rb +6 -6
  275. data/spec/mongoid/config_spec.rb +24 -48
  276. data/spec/mongoid/contextual/aggregable/memory_spec.rb +12 -12
  277. data/spec/mongoid/contextual/aggregable/mongo_spec.rb +78 -38
  278. data/spec/mongoid/contextual/atomic_spec.rb +60 -56
  279. data/spec/mongoid/contextual/find_and_modify_spec.rb +14 -14
  280. data/spec/mongoid/contextual/geo_near_spec.rb +22 -22
  281. data/spec/mongoid/contextual/map_reduce_spec.rb +27 -27
  282. data/spec/mongoid/contextual/memory_spec.rb +156 -94
  283. data/spec/mongoid/contextual/mongo_spec.rb +238 -150
  284. data/spec/mongoid/contextual/none_spec.rb +127 -0
  285. data/spec/mongoid/contextual/text_search_spec.rb +209 -0
  286. data/spec/mongoid/copyable_spec.rb +56 -68
  287. data/spec/mongoid/criteria/findable_spec.rb +991 -0
  288. data/spec/mongoid/{criterion/inspection_spec.rb → criteria/inspectable_spec.rb} +5 -5
  289. data/spec/mongoid/{criterion → criteria}/marshalable_spec.rb +2 -2
  290. data/spec/mongoid/criteria/modifiable_spec.rb +1252 -0
  291. data/spec/mongoid/{criterion/scoping_spec.rb → criteria/scopable_spec.rb} +37 -37
  292. data/spec/mongoid/criteria_spec.rb +715 -2421
  293. data/spec/mongoid/document_spec.rb +171 -121
  294. data/spec/mongoid/equality_spec.rb +22 -22
  295. data/spec/mongoid/errors/ambiguous_relationship_spec.rb +3 -3
  296. data/spec/mongoid/errors/callback_spec.rb +3 -3
  297. data/spec/mongoid/errors/delete_restriction_spec.rb +3 -3
  298. data/spec/mongoid/errors/document_not_destroyed_spec.rb +33 -0
  299. data/spec/mongoid/errors/document_not_found_spec.rb +11 -11
  300. data/spec/mongoid/errors/eager_load_spec.rb +3 -3
  301. data/spec/mongoid/errors/invalid_collection_spec.rb +3 -3
  302. data/spec/mongoid/errors/invalid_config_option_spec.rb +3 -3
  303. data/spec/mongoid/errors/invalid_field_option_spec.rb +3 -3
  304. data/spec/mongoid/errors/invalid_field_spec.rb +3 -3
  305. data/spec/mongoid/errors/invalid_find_spec.rb +3 -3
  306. data/spec/mongoid/errors/invalid_includes_spec.rb +3 -3
  307. data/spec/mongoid/errors/invalid_index_spec.rb +3 -3
  308. data/spec/mongoid/errors/invalid_options_spec.rb +3 -3
  309. data/spec/mongoid/errors/invalid_path_spec.rb +3 -3
  310. data/spec/mongoid/errors/invalid_scope_spec.rb +5 -5
  311. data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +3 -3
  312. data/spec/mongoid/errors/invalid_storage_options_spec.rb +3 -3
  313. data/spec/mongoid/errors/invalid_time_spec.rb +3 -3
  314. data/spec/mongoid/errors/inverse_not_found_spec.rb +3 -3
  315. data/spec/mongoid/errors/mixed_relations_spec.rb +3 -3
  316. data/spec/mongoid/errors/mixed_session_configuration_spec.rb +3 -3
  317. data/spec/mongoid/errors/mongoid_error_spec.rb +8 -8
  318. data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +3 -3
  319. data/spec/mongoid/errors/no_environment_spec.rb +3 -3
  320. data/spec/mongoid/errors/no_map_reduce_output_spec.rb +3 -3
  321. data/spec/mongoid/errors/no_metadata_spec.rb +3 -3
  322. data/spec/mongoid/errors/no_parent_spec.rb +3 -3
  323. data/spec/mongoid/errors/no_session_config_spec.rb +3 -3
  324. data/spec/mongoid/errors/no_session_database_spec.rb +3 -3
  325. data/spec/mongoid/errors/no_session_hosts_spec.rb +3 -3
  326. data/spec/mongoid/errors/no_sessions_config_spec.rb +3 -3
  327. data/spec/mongoid/errors/readonly_attribute_spec.rb +3 -3
  328. data/spec/mongoid/errors/readonly_document_spec.rb +29 -0
  329. data/spec/mongoid/errors/scope_overwrite_spec.rb +3 -3
  330. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +3 -3
  331. data/spec/mongoid/errors/unknown_attribute_spec.rb +5 -5
  332. data/spec/mongoid/errors/unsaved_document_spec.rb +3 -3
  333. data/spec/mongoid/errors/unsupported_javascript_spec.rb +3 -3
  334. data/spec/mongoid/errors/validations_spec.rb +7 -7
  335. data/spec/mongoid/extensions/array_spec.rb +61 -61
  336. data/spec/mongoid/extensions/big_decimal_spec.rb +11 -11
  337. data/spec/mongoid/extensions/binary_spec.rb +12 -12
  338. data/spec/mongoid/extensions/boolean_spec.rb +18 -18
  339. data/spec/mongoid/extensions/date_spec.rb +13 -13
  340. data/spec/mongoid/extensions/date_time_spec.rb +8 -8
  341. data/spec/mongoid/extensions/false_class_spec.rb +5 -5
  342. data/spec/mongoid/extensions/float_spec.rb +29 -15
  343. data/spec/mongoid/extensions/hash_spec.rb +29 -29
  344. data/spec/mongoid/extensions/integer_spec.rb +15 -15
  345. data/spec/mongoid/extensions/module_spec.rb +2 -2
  346. data/spec/mongoid/extensions/nil_class_spec.rb +1 -1
  347. data/spec/mongoid/extensions/object_id_spec.rb +134 -134
  348. data/spec/mongoid/extensions/object_spec.rb +26 -26
  349. data/spec/mongoid/extensions/range_spec.rb +61 -12
  350. data/spec/mongoid/extensions/regexp_spec.rb +4 -4
  351. data/spec/mongoid/extensions/set_spec.rb +4 -4
  352. data/spec/mongoid/extensions/string_spec.rb +35 -46
  353. data/spec/mongoid/extensions/symbol_spec.rb +9 -9
  354. data/spec/mongoid/extensions/time_spec.rb +49 -49
  355. data/spec/mongoid/extensions/time_with_zone_spec.rb +34 -34
  356. data/spec/mongoid/extensions/true_class_spec.rb +5 -5
  357. data/spec/mongoid/extensions_spec.rb +29 -0
  358. data/spec/mongoid/factory_spec.rb +15 -15
  359. data/spec/mongoid/fields/foreign_key_spec.rb +73 -66
  360. data/spec/mongoid/fields/internal/foreign_keys/array_spec.rb +15 -15
  361. data/spec/mongoid/fields/internal/foreign_keys/object_spec.rb +22 -22
  362. data/spec/mongoid/fields/localized_spec.rb +38 -23
  363. data/spec/mongoid/fields/standard_spec.rb +12 -12
  364. data/spec/mongoid/fields_spec.rb +263 -217
  365. data/spec/mongoid/findable_spec.rb +509 -0
  366. data/spec/mongoid/indexable/specification_spec.rb +102 -0
  367. data/spec/mongoid/{indexes_spec.rb → indexable_spec.rb} +171 -51
  368. data/spec/mongoid/{inspection_spec.rb → inspectable_spec.rb} +6 -14
  369. data/spec/mongoid/{callbacks_spec.rb → interceptable_spec.rb} +117 -116
  370. data/spec/mongoid/log_subscriber_spec.rb +75 -0
  371. data/spec/mongoid/loggable_spec.rb +1 -1
  372. data/spec/mongoid/{matchers → matchable}/all_spec.rb +4 -4
  373. data/spec/mongoid/{matchers → matchable}/and_spec.rb +11 -11
  374. data/spec/mongoid/{matchers → matchable}/default_spec.rb +15 -15
  375. data/spec/mongoid/{matchers → matchable}/exists_spec.rb +5 -5
  376. data/spec/mongoid/{matchers → matchable}/gt_spec.rb +9 -8
  377. data/spec/mongoid/{matchers → matchable}/gte_spec.rb +7 -7
  378. data/spec/mongoid/matchable/in_spec.rb +49 -0
  379. data/spec/mongoid/{matchers → matchable}/lt_spec.rb +7 -7
  380. data/spec/mongoid/{matchers → matchable}/lte_spec.rb +7 -7
  381. data/spec/mongoid/matchable/ne_spec.rb +46 -0
  382. data/spec/mongoid/matchable/nin_spec.rb +48 -0
  383. data/spec/mongoid/{matchers → matchable}/or_spec.rb +6 -6
  384. data/spec/mongoid/{matchers → matchable}/size_spec.rb +3 -3
  385. data/spec/mongoid/{matchers_spec.rb → matchable_spec.rb} +41 -41
  386. data/spec/mongoid/persistable/creatable_spec.rb +553 -0
  387. data/spec/mongoid/persistable/deletable_spec.rb +218 -0
  388. data/spec/mongoid/persistable/destroyable_spec.rb +192 -0
  389. data/spec/mongoid/persistable/incrementable_spec.rb +173 -0
  390. data/spec/mongoid/persistable/logical_spec.rb +143 -0
  391. data/spec/mongoid/persistable/poppable_spec.rb +115 -0
  392. data/spec/mongoid/persistable/pullable_spec.rb +228 -0
  393. data/spec/mongoid/persistable/pushable_spec.rb +258 -0
  394. data/spec/mongoid/persistable/renamable_spec.rb +135 -0
  395. data/spec/mongoid/persistable/savable_spec.rb +498 -0
  396. data/spec/mongoid/persistable/settable_spec.rb +162 -0
  397. data/spec/mongoid/persistable/unsettable_spec.rb +155 -0
  398. data/spec/mongoid/persistable/updatable_spec.rb +558 -0
  399. data/spec/mongoid/persistable/upsertable_spec.rb +106 -0
  400. data/spec/mongoid/persistable_spec.rb +206 -0
  401. data/spec/mongoid/{atomic/positionable_spec.rb → positional_spec.rb} +14 -19
  402. data/spec/mongoid/query_cache_spec.rb +263 -0
  403. data/spec/mongoid/railties/document_spec.rb +2 -2
  404. data/spec/mongoid/relations/accessors_spec.rb +53 -145
  405. data/spec/mongoid/relations/auto_save_spec.rb +37 -17
  406. data/spec/mongoid/relations/bindings/embedded/in_spec.rb +12 -12
  407. data/spec/mongoid/relations/bindings/embedded/many_spec.rb +3 -3
  408. data/spec/mongoid/relations/bindings/embedded/one_spec.rb +5 -5
  409. data/spec/mongoid/relations/bindings/referenced/in_spec.rb +26 -26
  410. data/spec/mongoid/relations/bindings/referenced/many_spec.rb +10 -10
  411. data/spec/mongoid/relations/bindings/referenced/many_to_many_spec.rb +19 -19
  412. data/spec/mongoid/relations/bindings/referenced/one_spec.rb +12 -12
  413. data/spec/mongoid/relations/builders/embedded/in_spec.rb +4 -4
  414. data/spec/mongoid/relations/builders/embedded/many_spec.rb +18 -18
  415. data/spec/mongoid/relations/builders/embedded/one_spec.rb +11 -11
  416. data/spec/mongoid/relations/builders/nested_attributes/many_spec.rb +12 -13
  417. data/spec/mongoid/relations/builders/nested_attributes/one_spec.rb +14 -14
  418. data/spec/mongoid/relations/builders/referenced/in_spec.rb +24 -35
  419. data/spec/mongoid/relations/builders/referenced/many_spec.rb +15 -15
  420. data/spec/mongoid/relations/builders/referenced/many_to_many_spec.rb +18 -18
  421. data/spec/mongoid/relations/builders/referenced/one_spec.rb +12 -25
  422. data/spec/mongoid/relations/builders_spec.rb +21 -21
  423. data/spec/mongoid/relations/cascading/delete_spec.rb +9 -9
  424. data/spec/mongoid/relations/cascading/destroy_spec.rb +6 -6
  425. data/spec/mongoid/relations/cascading/nullify_spec.rb +4 -4
  426. data/spec/mongoid/relations/cascading/restrict_spec.rb +7 -7
  427. data/spec/mongoid/relations/cascading_spec.rb +16 -16
  428. data/spec/mongoid/relations/constraint_spec.rb +8 -7
  429. data/spec/mongoid/relations/conversions_spec.rb +16 -14
  430. data/spec/mongoid/relations/counter_cache_spec.rb +85 -0
  431. data/spec/mongoid/relations/cyclic_spec.rb +18 -18
  432. data/spec/mongoid/relations/eager/belongs_to_spec.rb +154 -0
  433. data/spec/mongoid/relations/eager/has_and_belongs_to_many_spec.rb +117 -0
  434. data/spec/mongoid/relations/eager/has_many_spec.rb +207 -0
  435. data/spec/mongoid/relations/eager/has_one_spec.rb +163 -0
  436. data/spec/mongoid/relations/eager_spec.rb +228 -0
  437. data/spec/mongoid/relations/embedded/dirty_spec.rb +8 -8
  438. data/spec/mongoid/relations/embedded/in_spec.rb +56 -57
  439. data/spec/mongoid/relations/embedded/many_spec.rb +467 -372
  440. data/spec/mongoid/relations/embedded/one_spec.rb +108 -141
  441. data/spec/mongoid/relations/macros_spec.rb +108 -102
  442. data/spec/mongoid/relations/metadata_spec.rb +180 -255
  443. data/spec/mongoid/relations/options_spec.rb +1 -1
  444. data/spec/mongoid/relations/polymorphic_spec.rb +13 -17
  445. data/spec/mongoid/relations/proxy_spec.rb +2 -2
  446. data/spec/mongoid/relations/referenced/in_spec.rb +128 -303
  447. data/spec/mongoid/relations/referenced/many_spec.rb +587 -527
  448. data/spec/mongoid/relations/referenced/many_to_many_spec.rb +401 -424
  449. data/spec/mongoid/relations/referenced/one_spec.rb +149 -264
  450. data/spec/mongoid/relations/reflections_spec.rb +6 -6
  451. data/spec/mongoid/relations/synchronization_spec.rb +46 -50
  452. data/spec/mongoid/relations/targets/enumerable_spec.rb +118 -118
  453. data/spec/mongoid/relations/touchable_spec.rb +333 -0
  454. data/spec/mongoid/relations_spec.rb +16 -15
  455. data/spec/mongoid/{reloading_spec.rb → reloadable_spec.rb} +38 -55
  456. data/spec/mongoid/{scoping_spec.rb → scopable_spec.rb} +89 -164
  457. data/spec/mongoid/selectable_spec.rb +134 -0
  458. data/spec/mongoid/{serialization_spec.rb → serializable_spec.rb} +129 -82
  459. data/spec/mongoid/sessions/factory_spec.rb +49 -28
  460. data/spec/mongoid/sessions/mongo_uri_spec.rb +7 -7
  461. data/spec/mongoid/sessions/options_spec.rb +108 -0
  462. data/spec/mongoid/sessions_spec.rb +319 -178
  463. data/spec/mongoid/{sharding_spec.rb → shardable_spec.rb} +8 -8
  464. data/spec/mongoid/{state_spec.rb → stateful_spec.rb} +36 -11
  465. data/spec/mongoid/tasks/database_rake_spec.rb +285 -0
  466. data/spec/mongoid/tasks/database_spec.rb +160 -0
  467. data/spec/mongoid/threaded_spec.rb +17 -70
  468. data/spec/mongoid/timestamps/created/short_spec.rb +6 -6
  469. data/spec/mongoid/timestamps/created_spec.rb +5 -5
  470. data/spec/mongoid/timestamps/timeless_spec.rb +6 -6
  471. data/spec/mongoid/timestamps/updated/short_spec.rb +11 -11
  472. data/spec/mongoid/timestamps/updated_spec.rb +9 -13
  473. data/spec/mongoid/timestamps_spec.rb +9 -13
  474. data/spec/mongoid/{hierarchy_spec.rb → traversable_spec.rb} +19 -19
  475. data/spec/mongoid/{validations → validatable}/associated_spec.rb +45 -22
  476. data/spec/mongoid/{validations → validatable}/format_spec.rb +6 -6
  477. data/spec/mongoid/{validations → validatable}/length_spec.rb +14 -14
  478. data/spec/mongoid/{validations → validatable}/numericality_spec.rb +1 -1
  479. data/spec/mongoid/{validations → validatable}/presence_spec.rb +37 -44
  480. data/spec/mongoid/{validations → validatable}/uniqueness_spec.rb +184 -192
  481. data/spec/mongoid/{validations_spec.rb → validatable_spec.rb} +28 -28
  482. data/spec/mongoid_spec.rb +8 -8
  483. data/spec/rails/mongoid_spec.rb +19 -335
  484. data/spec/spec_helper.rb +31 -13
  485. metadata +303 -283
  486. data/lib/mongoid/atomic/positionable.rb +0 -73
  487. data/lib/mongoid/components.rb +0 -92
  488. data/lib/mongoid/config/inflections.rb +0 -6
  489. data/lib/mongoid/contextual/eager.rb +0 -158
  490. data/lib/mongoid/errors/versioning_not_on_root.rb +0 -23
  491. data/lib/mongoid/identity_map.rb +0 -163
  492. data/lib/mongoid/json.rb +0 -16
  493. data/lib/mongoid/matchers.rb +0 -32
  494. data/lib/mongoid/matchers/strategies.rb +0 -97
  495. data/lib/mongoid/multi_parameter_attributes.rb +0 -105
  496. data/lib/mongoid/nested_attributes.rb +0 -78
  497. data/lib/mongoid/observer.rb +0 -192
  498. data/lib/mongoid/paranoia.rb +0 -136
  499. data/lib/mongoid/persistence.rb +0 -357
  500. data/lib/mongoid/persistence/atomic.rb +0 -231
  501. data/lib/mongoid/persistence/atomic/add_to_set.rb +0 -47
  502. data/lib/mongoid/persistence/atomic/bit.rb +0 -35
  503. data/lib/mongoid/persistence/atomic/inc.rb +0 -45
  504. data/lib/mongoid/persistence/atomic/operation.rb +0 -154
  505. data/lib/mongoid/persistence/atomic/pop.rb +0 -32
  506. data/lib/mongoid/persistence/atomic/pull.rb +0 -32
  507. data/lib/mongoid/persistence/atomic/pull_all.rb +0 -32
  508. data/lib/mongoid/persistence/atomic/push.rb +0 -25
  509. data/lib/mongoid/persistence/atomic/push_all.rb +0 -25
  510. data/lib/mongoid/persistence/atomic/rename.rb +0 -30
  511. data/lib/mongoid/persistence/atomic/sets.rb +0 -28
  512. data/lib/mongoid/persistence/atomic/unset.rb +0 -27
  513. data/lib/mongoid/persistence/deletion.rb +0 -31
  514. data/lib/mongoid/persistence/insertion.rb +0 -38
  515. data/lib/mongoid/persistence/modification.rb +0 -35
  516. data/lib/mongoid/persistence/operations.rb +0 -214
  517. data/lib/mongoid/persistence/operations/embedded/insert.rb +0 -46
  518. data/lib/mongoid/persistence/operations/embedded/remove.rb +0 -43
  519. data/lib/mongoid/persistence/operations/insert.rb +0 -34
  520. data/lib/mongoid/persistence/operations/remove.rb +0 -33
  521. data/lib/mongoid/persistence/operations/update.rb +0 -59
  522. data/lib/mongoid/persistence/operations/upsert.rb +0 -28
  523. data/lib/mongoid/persistence/upsertion.rb +0 -31
  524. data/lib/mongoid/unit_of_work.rb +0 -61
  525. data/lib/mongoid/versioning.rb +0 -217
  526. data/lib/rack/mongoid.rb +0 -2
  527. data/lib/rack/mongoid/middleware/identity_map.rb +0 -39
  528. data/lib/rails/generators/mongoid/observer/observer_generator.rb +0 -17
  529. data/lib/rails/generators/mongoid/observer/templates/observer.rb.tt +0 -4
  530. data/spec/app/models/actor_observer.rb +0 -15
  531. data/spec/app/models/callback_recorder.rb +0 -25
  532. data/spec/app/models/paranoid_phone.rb +0 -25
  533. data/spec/app/models/paranoid_post.rb +0 -36
  534. data/spec/app/models/phone_observer.rb +0 -6
  535. data/spec/mongoid/attributes/processing_spec.rb +0 -149
  536. data/spec/mongoid/criterion/destructive_spec.rb +0 -101
  537. data/spec/mongoid/criterion/modifiable_spec.rb +0 -409
  538. data/spec/mongoid/criterion/modification_spec.rb +0 -402
  539. data/spec/mongoid/errors/versioning_not_on_root_spec.rb +0 -29
  540. data/spec/mongoid/finders_spec.rb +0 -321
  541. data/spec/mongoid/identity_map_spec.rb +0 -564
  542. data/spec/mongoid/json_spec.rb +0 -33
  543. data/spec/mongoid/matchers/in_spec.rb +0 -25
  544. data/spec/mongoid/matchers/ne_spec.rb +0 -25
  545. data/spec/mongoid/matchers/nin_spec.rb +0 -25
  546. data/spec/mongoid/multi_parameter_attributes_spec.rb +0 -128
  547. data/spec/mongoid/observer_spec.rb +0 -290
  548. data/spec/mongoid/paranoia_spec.rb +0 -759
  549. data/spec/mongoid/persistence/atomic/add_to_set_spec.rb +0 -262
  550. data/spec/mongoid/persistence/atomic/bit_spec.rb +0 -88
  551. data/spec/mongoid/persistence/atomic/inc_spec.rb +0 -133
  552. data/spec/mongoid/persistence/atomic/pop_spec.rb +0 -111
  553. data/spec/mongoid/persistence/atomic/pull_all_spec.rb +0 -77
  554. data/spec/mongoid/persistence/atomic/pull_spec.rb +0 -80
  555. data/spec/mongoid/persistence/atomic/push_all_spec.rb +0 -77
  556. data/spec/mongoid/persistence/atomic/push_spec.rb +0 -77
  557. data/spec/mongoid/persistence/atomic/rename_spec.rb +0 -42
  558. data/spec/mongoid/persistence/atomic/sets_spec.rb +0 -154
  559. data/spec/mongoid/persistence/atomic/unset_spec.rb +0 -65
  560. data/spec/mongoid/persistence/atomic_spec.rb +0 -216
  561. data/spec/mongoid/persistence/operations/embedded/insert_spec.rb +0 -191
  562. data/spec/mongoid/persistence/operations/embedded/remove_spec.rb +0 -8
  563. data/spec/mongoid/persistence/operations/insert_spec.rb +0 -149
  564. data/spec/mongoid/persistence/operations/remove_spec.rb +0 -113
  565. data/spec/mongoid/persistence/operations/update_spec.rb +0 -141
  566. data/spec/mongoid/persistence/operations/upsert_spec.rb +0 -59
  567. data/spec/mongoid/persistence/operations_spec.rb +0 -313
  568. data/spec/mongoid/persistence_spec.rb +0 -2279
  569. data/spec/mongoid/unit_of_work_spec.rb +0 -196
  570. data/spec/mongoid/versioning_spec.rb +0 -540
  571. data/spec/rack/mongoid/middleware/identity_map_spec.rb +0 -72
@@ -30,11 +30,11 @@ describe Mongoid::Sessions::Factory do
30
30
  end
31
31
 
32
32
  it "returns a session" do
33
- session.should be_a(Moped::Session)
33
+ expect(session).to be_a(Moped::Session)
34
34
  end
35
35
 
36
36
  it "sets the cluster's seeds" do
37
- cluster.seeds.should eq([ "localhost:27017" ])
37
+ expect(cluster.seeds.first.address.resolved).to eq("127.0.0.1:27017")
38
38
  end
39
39
  end
40
40
 
@@ -64,15 +64,15 @@ describe Mongoid::Sessions::Factory do
64
64
  end
65
65
 
66
66
  it "returns a session" do
67
- session.should be_a(Moped::Session)
67
+ expect(session).to be_a(Moped::Session)
68
68
  end
69
69
 
70
70
  it "sets the cluster's seed ports to 27017" do
71
- cluster.seeds.should eq([ "localhost:27017" ])
71
+ expect(cluster.seeds.first.address.original).to eq("localhost:27017")
72
72
  end
73
73
 
74
74
  it "sets ips with no ports to 27017" do
75
- default.cluster.seeds.should eq([ "127.0.0.1:27017" ])
75
+ expect(default.cluster.seeds.first.address.original).to eq("127.0.0.1:27017")
76
76
  end
77
77
  end
78
78
 
@@ -100,30 +100,30 @@ describe Mongoid::Sessions::Factory do
100
100
  end
101
101
 
102
102
  it "returns a session" do
103
- session.should be_a(Moped::Session)
103
+ expect(session).to be_a(Moped::Session)
104
104
  end
105
105
 
106
106
  it "sets the cluster's seeds" do
107
- cluster.seeds.should eq([ "localhost:27017" ])
107
+ expect(cluster.seeds.first.address.original).to eq("localhost:27017")
108
108
  end
109
109
 
110
110
  it "sets the database" do
111
- session.options[:database].should eq("mongoid_test")
111
+ expect(session.options[:database]).to eq("mongoid_test")
112
112
  end
113
113
 
114
114
  it "sets the database in the configuration" do
115
115
  session
116
- Mongoid.sessions[:secondary].should include(:database)
116
+ expect(Mongoid.sessions[:secondary]).to include(:database)
117
117
  end
118
118
 
119
119
  it "sets the hosts in the configuration" do
120
120
  session
121
- Mongoid.sessions[:secondary].should include(:hosts)
121
+ expect(Mongoid.sessions[:secondary]).to include(:hosts)
122
122
  end
123
123
 
124
124
  it "removes the uri from the configuration" do
125
125
  session
126
- Mongoid.sessions[:secondary].should_not include(:uri)
126
+ expect(Mongoid.sessions[:secondary]).to_not include(:uri)
127
127
  end
128
128
  end
129
129
 
@@ -148,31 +148,35 @@ describe Mongoid::Sessions::Factory do
148
148
  session.cluster
149
149
  end
150
150
 
151
+ let(:seeds) do
152
+ cluster.seeds.map{ |node| node.address.original }
153
+ end
154
+
151
155
  it "returns a session" do
152
- session.should be_a(Moped::Session)
156
+ expect(session).to be_a(Moped::Session)
153
157
  end
154
158
 
155
159
  it "sets the cluster's seeds" do
156
- cluster.seeds.should eq([ "localhost:27017", "localhost:27017" ])
160
+ expect(seeds).to eq([ "localhost:27017", "localhost:27017" ])
157
161
  end
158
162
 
159
163
  it "sets the database" do
160
- session.options[:database].should eq("mongoid_test")
164
+ expect(session.options[:database]).to eq("mongoid_test")
161
165
  end
162
166
 
163
167
  it "sets the database in the configuration" do
164
168
  session
165
- Mongoid.sessions[:secondary].should include(:database)
169
+ expect(Mongoid.sessions[:secondary]).to include(:database)
166
170
  end
167
171
 
168
172
  it "sets the hosts in the configuration" do
169
173
  session
170
- Mongoid.sessions[:secondary].should include(:hosts)
174
+ expect(Mongoid.sessions[:secondary]).to include(:hosts)
171
175
  end
172
176
 
173
177
  it "removes the uri from the configuration" do
174
178
  session
175
- Mongoid.sessions[:secondary].should_not include(:uri)
179
+ expect(Mongoid.sessions[:secondary]).to_not include(:uri)
176
180
  end
177
181
  end
178
182
  end
@@ -206,12 +210,16 @@ describe Mongoid::Sessions::Factory do
206
210
  session.cluster
207
211
  end
208
212
 
213
+ let(:seeds) do
214
+ cluster.seeds.map{ |node| node.address.original }
215
+ end
216
+
209
217
  it "returns the default session" do
210
- session.should be_a(Moped::Session)
218
+ expect(session).to be_a(Moped::Session)
211
219
  end
212
220
 
213
221
  it "sets the cluster's seeds" do
214
- cluster.seeds.should eq([ "localhost:27017" ])
222
+ expect(seeds).to eq([ "localhost:27017" ])
215
223
  end
216
224
  end
217
225
 
@@ -247,12 +255,16 @@ describe Mongoid::Sessions::Factory do
247
255
  session.cluster
248
256
  end
249
257
 
258
+ let(:seeds) do
259
+ cluster.seeds.map{ |node| node.address.original }
260
+ end
261
+
250
262
  it "returns the default session" do
251
- session.should be_a(Moped::Session)
263
+ expect(session).to be_a(Moped::Session)
252
264
  end
253
265
 
254
266
  it "sets the cluster's seeds" do
255
- cluster.seeds.should eq([ "localhost:27017" ])
267
+ expect(seeds).to eq([ "localhost:27017" ])
256
268
  end
257
269
  end
258
270
 
@@ -267,7 +279,8 @@ describe Mongoid::Sessions::Factory do
267
279
  "down_interval" => 10,
268
280
  "max_retries" => 5,
269
281
  "refresh_interval" => 30,
270
- "retry_interval" => 0.1
282
+ "retry_interval" => 0.1,
283
+ "write" => { "w" => 1 }
271
284
  }
272
285
  }
273
286
  }
@@ -285,28 +298,36 @@ describe Mongoid::Sessions::Factory do
285
298
  session.cluster
286
299
  end
287
300
 
301
+ let(:seeds) do
302
+ cluster.seeds.map{ |node| node.address.original }
303
+ end
304
+
288
305
  it "returns the default session" do
289
- session.should be_a(Moped::Session)
306
+ expect(session).to be_a(Moped::Session)
290
307
  end
291
308
 
292
309
  it "sets the cluster's seeds" do
293
- cluster.seeds.should eq([ "localhost:27017" ])
310
+ expect(seeds).to eq([ "localhost:27017" ])
294
311
  end
295
312
 
296
313
  it "sets the cluster down interval" do
297
- cluster.down_interval.should eq(10)
314
+ expect(cluster.down_interval).to eq(10)
298
315
  end
299
316
 
300
317
  it "sets the cluster max retries" do
301
- cluster.max_retries.should eq(5)
318
+ expect(cluster.max_retries).to eq(5)
302
319
  end
303
320
 
304
321
  it "sets the cluster refresh interval" do
305
- cluster.refresh_interval.should eq(30)
322
+ expect(cluster.refresh_interval).to eq(30)
306
323
  end
307
324
 
308
325
  it "sets the cluster retry interval" do
309
- cluster.retry_interval.should eq(0.1)
326
+ expect(cluster.retry_interval).to eq(0.1)
327
+ end
328
+
329
+ it "sets the write concern" do
330
+ expect(session.write_concern).to be_a(Moped::WriteConcern::Propagate)
310
331
  end
311
332
  end
312
333
  end
@@ -17,7 +17,7 @@ describe Mongoid::Sessions::MongoUri do
17
17
  end
18
18
 
19
19
  it "returns the database name" do
20
- uri.database.should eq("mongoid_test")
20
+ expect(uri.database).to eq("mongoid_test")
21
21
  end
22
22
  end
23
23
 
@@ -30,7 +30,7 @@ describe Mongoid::Sessions::MongoUri do
30
30
  end
31
31
 
32
32
  it "returns an array with 1 node" do
33
- uri.hosts.should eq([ "localhost:27017" ])
33
+ expect(uri.hosts).to eq([ "localhost:27017" ])
34
34
  end
35
35
  end
36
36
 
@@ -41,7 +41,7 @@ describe Mongoid::Sessions::MongoUri do
41
41
  end
42
42
 
43
43
  it "returns an array with 2 nodes" do
44
- uri.hosts.should eq([ "localhost:27017", "localhost:27017" ])
44
+ expect(uri.hosts).to eq([ "localhost:27017", "localhost:27017" ])
45
45
  end
46
46
  end
47
47
  end
@@ -53,7 +53,7 @@ describe Mongoid::Sessions::MongoUri do
53
53
  end
54
54
 
55
55
  it "returns the password" do
56
- uri.password.should eq("pass")
56
+ expect(uri.password).to eq("pass")
57
57
  end
58
58
  end
59
59
 
@@ -66,7 +66,7 @@ describe Mongoid::Sessions::MongoUri do
66
66
  end
67
67
 
68
68
  it "does not include the username and password" do
69
- uri.to_hash.should eq({
69
+ expect(uri.to_hash).to eq({
70
70
  hosts: [ "localhost:27017", "localhost:27017" ],
71
71
  database: "mongoid_test"
72
72
  })
@@ -80,7 +80,7 @@ describe Mongoid::Sessions::MongoUri do
80
80
  end
81
81
 
82
82
  it "includes the username and password" do
83
- uri.to_hash.should eq({
83
+ expect(uri.to_hash).to eq({
84
84
  hosts: [ "localhost:27017" ],
85
85
  database: "mongoid_test",
86
86
  username: "user",
@@ -97,7 +97,7 @@ describe Mongoid::Sessions::MongoUri do
97
97
  end
98
98
 
99
99
  it "returns the userame" do
100
- uri.username.should eq("user")
100
+ expect(uri.username).to eq("user")
101
101
  end
102
102
  end
103
103
  end
@@ -0,0 +1,108 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Sessions::Options do
4
+
5
+ describe "#with" do
6
+
7
+ context "when passing some options" do
8
+
9
+ let(:options) { { database: 'test' } }
10
+
11
+ let!(:klass) do
12
+ Band.with(options)
13
+ end
14
+
15
+ it "sets the options into the class" do
16
+ expect(klass.persistence_options).to eq(options)
17
+ end
18
+
19
+ it "sets the options into the instance" do
20
+ expect(klass.new.persistence_options).to eq(options)
21
+ end
22
+
23
+ it "doesnt set the options on class level" do
24
+ expect(Band.new.persistence_options).to be_nil
25
+ end
26
+
27
+ context "when calling .collection method" do
28
+
29
+ before do
30
+ klass.collection
31
+ end
32
+
33
+ it "keeps the options" do
34
+ expect(klass.persistence_options).to eq(options)
35
+ end
36
+ end
37
+
38
+ context "when returning a criteria" do
39
+
40
+ let(:criteria) do
41
+ klass.all
42
+ end
43
+
44
+ it "sets the options into the criteria object" do
45
+ expect(criteria.persistence_options).to eq(options)
46
+ end
47
+
48
+ it "doesnt set the options on class level" do
49
+ expect(Band.new.persistence_options).to be_nil
50
+ end
51
+ end
52
+ end
53
+ end
54
+
55
+ describe ".with" do
56
+
57
+ let(:options) { { database: 'test' } }
58
+
59
+ let(:instance) do
60
+ Band.new.with(options)
61
+ end
62
+
63
+ it "sets the options into" do
64
+ expect(instance.persistence_options).to eq(options)
65
+ end
66
+
67
+ it "passes down the options to collection" do
68
+ session = Band.mongo_session
69
+ expect_any_instance_of(Moped::Session).to receive(:with).with(options).and_return(session)
70
+ instance.collection
71
+ end
72
+ end
73
+
74
+ describe "#persistence_options" do
75
+
76
+ it "touches the thread local" do
77
+ expect(Thread.current).to receive(:[]).with("[mongoid][Band]:persistence-options").and_return({foo: :bar})
78
+ expect(Band.persistence_options).to eq({foo: :bar})
79
+ end
80
+
81
+ it "cannot force a value on thread local" do
82
+ expect {
83
+ Band.set_persistence_options(Band, {})
84
+ }.to raise_error(NoMethodError)
85
+ end
86
+ end
87
+
88
+ describe ".persistence_options" do
89
+
90
+ context "when options exist on the current thread" do
91
+
92
+ let(:klass) do
93
+ Band.with(write: { w: 2 })
94
+ end
95
+
96
+ it "returns the options" do
97
+ expect(klass.persistence_options).to eq(write: { w: 2 })
98
+ end
99
+ end
100
+
101
+ context "when there are no options on the current thread" do
102
+
103
+ it "returns nil" do
104
+ expect(Band.persistence_options).to be_nil
105
+ end
106
+ end
107
+ end
108
+ end
@@ -2,104 +2,83 @@ require "spec_helper"
2
2
 
3
3
  describe Mongoid::Sessions do
4
4
 
5
- describe ".clear_persistence_options" do
6
-
7
- context "when options exist on the current thread" do
8
-
9
- before do
10
- Band.with(safe: true)
11
- end
5
+ describe "#collection" do
12
6
 
13
- let!(:cleared) do
14
- Band.clear_persistence_options
15
- end
7
+ shared_examples_for "an overridden collection at the class level" do
16
8
 
17
- it "remove the options from the current thread" do
18
- Band.persistence_options.should be_nil
9
+ let(:band) do
10
+ klass.new
19
11
  end
20
12
 
21
- it "returns true" do
22
- cleared.should be_true
13
+ it "returns the collection for the model" do
14
+ expect(band.collection).to be_a(Moped::Collection)
23
15
  end
24
- end
25
16
 
26
- context "when options do not exist on the current thread" do
27
-
28
- it "returns true" do
29
- Band.clear_persistence_options.should be_true
17
+ it "sets the correct collection name" do
18
+ expect(band.collection.name).to eq("artists")
30
19
  end
31
- end
32
- end
33
20
 
34
- describe "#collection" do
35
-
36
- context "when overriding the default with store_in" do
37
-
38
- shared_examples_for "an overridden collection at the class level" do
39
-
40
- let(:band) do
41
- Band.new
42
- end
21
+ context "when accessing from the class level" do
43
22
 
44
23
  it "returns the collection for the model" do
45
- band.collection.should be_a(Moped::Collection)
24
+ expect(klass.collection).to be_a(Moped::Collection)
46
25
  end
47
26
 
48
27
  it "sets the correct collection name" do
49
- band.collection.name.to_s.should eq("artists")
28
+ expect(klass.collection.name).to eq("artists")
50
29
  end
30
+ end
31
+ end
51
32
 
52
- context "when accessing from the class level" do
53
-
54
- it "returns the collection for the model" do
55
- Band.collection.should be_a(Moped::Collection)
56
- end
33
+ context "when overriding the persistence options" do
57
34
 
58
- it "sets the correct collection name" do
59
- Band.collection.name.to_s.should eq("artists")
60
- end
61
- end
35
+ let(:klass) do
36
+ Band.with(collection: "artists")
37
+ end
62
38
 
63
- context "when safety options exist" do
39
+ it_behaves_like "an overridden collection at the class level"
40
+ end
64
41
 
65
- context "when the options are from the current thread" do
42
+ context "when overriding store_in and persistence options" do
66
43
 
67
- before do
68
- Band.with(safe: { w: 3 })
69
- end
44
+ let(:klass) do
45
+ Band.with(collection: "artists")
46
+ end
70
47
 
71
- it "clears the options from the current thread" do
72
- Band.collection
73
- Band.persistence_options.should be_nil
74
- end
48
+ before do
49
+ Band.store_in collection: "foo"
50
+ end
75
51
 
76
- it "returns the collection" do
77
- Band.collection.should be_a(Moped::Collection)
78
- end
79
- end
80
- end
52
+ after do
53
+ Band.reset_storage_options!
81
54
  end
82
55
 
56
+ it_behaves_like "an overridden collection at the class level"
57
+ end
58
+
59
+ context "when overriding the default with store_in" do
60
+
83
61
  after do
84
- Band.storage_options = nil
62
+ Band.reset_storage_options!
85
63
  end
86
64
 
87
65
  context "when called multiple times with different options" do
66
+
88
67
  before do
89
68
  Band.store_in collection: "artists"
90
69
  Band.store_in session: "another"
91
70
  end
92
71
 
93
72
  it "should merge the options together" do
94
- Band.storage_options.should == {
95
- collection: "artists",
96
- session: "another"
97
- }
73
+ expect(Band.storage_options[:collection]).to eq("artists")
74
+ expect(Band.storage_options[:session]).to eq("another")
98
75
  end
99
76
  end
100
77
 
101
78
  context "when overriding with a proc" do
102
79
 
80
+ let(:klass) { Band }
81
+
103
82
  before do
104
83
  Band.store_in(collection: ->{ "artists" })
105
84
  end
@@ -109,17 +88,29 @@ describe Mongoid::Sessions do
109
88
 
110
89
  context "when overriding with a string" do
111
90
 
91
+ let(:klass) { Band }
92
+
112
93
  before do
113
94
  Band.store_in(collection: "artists")
114
95
  end
115
96
 
97
+ after do
98
+ Band.reset_storage_options!
99
+ end
100
+
116
101
  it_behaves_like "an overridden collection at the class level"
117
102
  end
118
103
 
119
104
  context "when overriding with a symbol" do
120
105
 
106
+ let(:klass) { Band }
107
+
121
108
  before do
122
- Band.store_in(collection: :artists)
109
+ klass.store_in(collection: :artists)
110
+ end
111
+
112
+ after do
113
+ klass.reset_storage_options!
123
114
  end
124
115
 
125
116
  it_behaves_like "an overridden collection at the class level"
@@ -133,21 +124,21 @@ describe Mongoid::Sessions do
133
124
  end
134
125
 
135
126
  it "returns the collection for the model" do
136
- band.collection.should be_a(Moped::Collection)
127
+ expect(band.collection).to be_a(Moped::Collection)
137
128
  end
138
129
 
139
130
  it "sets the correct collection name" do
140
- band.collection.name.to_s.should eq("bands")
131
+ expect(band.collection.name.to_s).to eq("bands")
141
132
  end
142
133
 
143
134
  context "when accessing from the class level" do
144
135
 
145
136
  it "returns the collection for the model" do
146
- Band.collection.should be_a(Moped::Collection)
137
+ expect(Band.collection).to be_a(Moped::Collection)
147
138
  end
148
139
 
149
140
  it "sets the correct collection name" do
150
- Band.collection.name.to_s.should eq("bands")
141
+ expect(Band.collection.name.to_s).to eq("bands")
151
142
  end
152
143
  end
153
144
  end
@@ -155,31 +146,59 @@ describe Mongoid::Sessions do
155
146
 
156
147
  describe "#collection_name" do
157
148
 
158
- context "when overriding the default with store_in" do
149
+ shared_examples_for "an overridden collection name at the class level" do
159
150
 
160
- shared_examples_for "an overridden collection name at the class level" do
151
+ let(:band) do
152
+ klass.new
153
+ end
161
154
 
162
- let(:band) do
163
- Band.new
155
+ context "when accessing from the instance" do
156
+
157
+ it "returns the overridden value" do
158
+ expect(band.collection_name).to eq(:artists)
164
159
  end
160
+ end
165
161
 
166
- context "when accessing from the instance" do
162
+ context "when accessing from the class level" do
167
163
 
168
- it "returns the overridden value" do
169
- band.collection_name.should eq(:artists)
170
- end
164
+ it "returns the overridden value" do
165
+ expect(klass.collection_name).to eq(:artists)
171
166
  end
167
+ end
168
+ end
172
169
 
173
- context "when accessing from the class level" do
170
+ context "when overriding the persistence options" do
174
171
 
175
- it "returns the overridden value" do
176
- Band.collection_name.should eq(:artists)
177
- end
178
- end
172
+ let(:klass) do
173
+ Band.with(collection: "artists")
174
+ end
175
+
176
+ it_behaves_like "an overridden collection name at the class level"
177
+ end
178
+
179
+ context "when overriding store_in and persistence options" do
180
+
181
+ let(:klass) do
182
+ Band.with(collection: "artists")
183
+ end
184
+
185
+ before do
186
+ Band.store_in collection: "foo"
179
187
  end
180
188
 
181
189
  after do
182
- Band.storage_options = nil
190
+ Band.reset_storage_options!
191
+ end
192
+
193
+ it_behaves_like "an overridden collection name at the class level"
194
+ end
195
+
196
+ context "when overriding the default with store_in" do
197
+
198
+ let(:klass) { Band }
199
+
200
+ after do
201
+ Band.reset_storage_options!
183
202
  end
184
203
 
185
204
  context "when overriding with a proc" do
@@ -217,13 +236,13 @@ describe Mongoid::Sessions do
217
236
  end
218
237
 
219
238
  it "returns the pluralized model name" do
220
- band.collection_name.should eq(:bands)
239
+ expect(band.collection_name).to eq(:bands)
221
240
  end
222
241
 
223
242
  context "when accessing from the class level" do
224
243
 
225
244
  it "returns the pluralized model name" do
226
- Band.collection_name.should eq(:bands)
245
+ expect(Band.collection_name).to eq(:bands)
227
246
  end
228
247
  end
229
248
  end
@@ -235,14 +254,120 @@ describe Mongoid::Sessions do
235
254
  end
236
255
 
237
256
  it "returns the root class pluralized model name" do
238
- firefox.collection_name.should eq(:canvases)
257
+ expect(firefox.collection_name).to eq(:canvases)
239
258
  end
240
259
 
241
260
  context "when accessing from the class level" do
242
261
 
243
262
  it "returns the root class pluralized model name" do
244
- Firefox.collection_name.should eq(:canvases)
263
+ expect(Firefox.collection_name).to eq(:canvases)
264
+ end
265
+ end
266
+ end
267
+ end
268
+
269
+ describe "#database_name" do
270
+
271
+ shared_examples_for "an overridden database name" do
272
+
273
+ let(:band) do
274
+ klass.new
275
+ end
276
+
277
+ context "when accessing from the instance" do
278
+
279
+ it "returns the overridden value" do
280
+ expect(band.mongo_session.options[:database].to_s).to eq(database_id_alt)
281
+ end
282
+ end
283
+
284
+ context "when accessing from the class level" do
285
+
286
+ it "returns the overridden value" do
287
+ expect(klass.database_name.to_s).to eq(database_id_alt)
288
+ end
289
+
290
+ it "session returns the overridden value" do
291
+ expect(klass.mongo_session.options[:database].to_s).to eq(database_id_alt)
292
+ end
293
+ end
294
+ end
295
+
296
+ context "when overriding the persistence options" do
297
+
298
+ let(:klass) do
299
+ Band.with(database: database_id_alt)
300
+ end
301
+
302
+ it_behaves_like "an overridden database name"
303
+ end
304
+
305
+ context "when overriding with store_in" do
306
+
307
+ let(:klass) { Band }
308
+
309
+ before do
310
+ Band.store_in database: database_id_alt
311
+ end
312
+
313
+ after do
314
+ Band.reset_storage_options!
315
+ end
316
+
317
+ it_behaves_like "an overridden database name"
318
+ end
319
+
320
+ context "when overriding store_in and persistence options" do
321
+
322
+ let(:klass) do
323
+ Band.with(database: database_id_alt)
324
+ end
325
+
326
+ before do
327
+ Band.store_in database: "foo"
328
+ end
329
+
330
+ after do
331
+ Band.reset_storage_options!
332
+ end
333
+
334
+ it_behaves_like "an overridden database name"
335
+ end
336
+
337
+ context "when overriding using the session" do
338
+
339
+ let(:session_name) { :alternative }
340
+
341
+ before do
342
+ Mongoid.sessions[session_name] = { database: database_id_alt, hosts: [ "#{HOST}:#{PORT}" ] }
343
+ end
344
+
345
+ after do
346
+ Mongoid.sessions.delete(session_name)
347
+ end
348
+
349
+ context "when overriding the persistence options" do
350
+
351
+ let(:klass) do
352
+ Band.with(session: session_name)
245
353
  end
354
+
355
+ it_behaves_like "an overridden database name"
356
+ end
357
+
358
+ context "when overriding with store_in" do
359
+
360
+ let(:klass) { Band }
361
+
362
+ before do
363
+ Band.store_in(session: session_name)
364
+ end
365
+
366
+ after do
367
+ Band.reset_storage_options!
368
+ end
369
+
370
+ it_behaves_like "an overridden database name"
246
371
  end
247
372
  end
248
373
  end
@@ -259,10 +384,6 @@ describe Mongoid::Sessions do
259
384
  Mongoid.sessions[:default][:database] = database_id
260
385
  end
261
386
 
262
- after do
263
- Band.storage_options = nil
264
- end
265
-
266
387
  context "when getting the default" do
267
388
 
268
389
  let(:file) do
@@ -270,16 +391,11 @@ describe Mongoid::Sessions do
270
391
  end
271
392
 
272
393
  before do
273
- Band.storage_options = nil
274
394
  described_class.clear
275
395
  Mongoid.load!(file, :test)
276
396
  Mongoid.sessions[:default][:database] = database_id
277
397
  end
278
398
 
279
- after do
280
- Band.storage_options = nil
281
- end
282
-
283
399
  let!(:band) do
284
400
  Band.new
285
401
  end
@@ -289,7 +405,37 @@ describe Mongoid::Sessions do
289
405
  end
290
406
 
291
407
  it "returns the default session" do
292
- mongo_session.options[:database].should eq(database_id)
408
+ expect(mongo_session.options[:database].to_s).to eq(database_id)
409
+ end
410
+ end
411
+
412
+ context "when overridden the database with store_in" do
413
+
414
+ before do
415
+ Band.store_in(database: database_id_alt)
416
+ end
417
+
418
+ context "on instance level" do
419
+
420
+ let(:band) do
421
+ Band.new.with({:read=>:primary})
422
+ end
423
+
424
+ it "uses the new database" do
425
+ expect(band.mongo_session.send(:current_database).name).to eq database_id_alt
426
+ end
427
+
428
+ context "when using another database before" do
429
+
430
+ before do
431
+ band
432
+ User.create!
433
+ end
434
+
435
+ it "uses the new database" do
436
+ expect(band.mongo_session.send(:current_database).name).to eq database_id_alt
437
+ end
438
+ end
293
439
  end
294
440
  end
295
441
 
@@ -306,7 +452,7 @@ describe Mongoid::Sessions do
306
452
  end
307
453
 
308
454
  it "returns the default session" do
309
- single_session.options[:database].should eq(ENV["MONGOHQ_SINGLE_NAME"])
455
+ expect(single_session.options[:database].to_s).to eq(ENV["MONGOHQ_SINGLE_NAME"])
310
456
  end
311
457
  end
312
458
 
@@ -350,8 +496,12 @@ describe Mongoid::Sessions do
350
496
 
351
497
  shared_examples_for "an overridden session to a mongohq replica set" do
352
498
 
353
- it "returns the default session" do
354
- replica_session.options[:database].should eq(ENV["MONGOHQ_REPL_NAME"])
499
+ let(:seeds) do
500
+ replica_session.cluster.seeds.map{ |node| node.address.original }
501
+ end
502
+
503
+ it "returns the overridden session" do
504
+ expect(seeds).to eq([ ENV["MONGOHQ_REPL_1_URL"], ENV["MONGOHQ_REPL_2_URL"] ])
355
505
  end
356
506
  end
357
507
 
@@ -397,8 +547,12 @@ describe Mongoid::Sessions do
397
547
  band.mongo_session
398
548
  end
399
549
 
400
- it "returns the default session" do
401
- repl_session.options[:database].should eq(ENV["MONGOHQ_REPL_NAME"])
550
+ let(:seeds) do
551
+ repl_session.cluster.seeds.map{ |node| node.address.original }
552
+ end
553
+
554
+ it "returns the overridden session" do
555
+ expect(seeds).to eq([ ENV["MONGOHQ_REPL_1_URL"], ENV["MONGOHQ_REPL_2_URL"] ])
402
556
  end
403
557
  end
404
558
 
@@ -433,7 +587,7 @@ describe Mongoid::Sessions do
433
587
  end
434
588
 
435
589
  after do
436
- Band.storage_options = nil
590
+ Band.reset_storage_options!
437
591
  end
438
592
 
439
593
  context "when getting the default" do
@@ -443,7 +597,7 @@ describe Mongoid::Sessions do
443
597
  end
444
598
 
445
599
  before do
446
- Band.storage_options = nil
600
+ Band.reset_storage_options!
447
601
  described_class.clear
448
602
  Mongoid.load!(file, :test)
449
603
  Mongoid.sessions[:default][:database] = database_id
@@ -454,7 +608,7 @@ describe Mongoid::Sessions do
454
608
  end
455
609
 
456
610
  it "returns the default session" do
457
- mongo_session.options[:database].should eq(database_id)
611
+ expect(mongo_session.options[:database].to_s).to eq(database_id)
458
612
  end
459
613
  end
460
614
 
@@ -469,7 +623,7 @@ describe Mongoid::Sessions do
469
623
  end
470
624
 
471
625
  it "returns the default session" do
472
- session.options[:database].should eq(ENV["MONGOHQ_SINGLE_NAME"])
626
+ expect(session.options[:database].to_s).to eq(ENV["MONGOHQ_SINGLE_NAME"])
473
627
  end
474
628
  end
475
629
 
@@ -483,8 +637,12 @@ describe Mongoid::Sessions do
483
637
  Band.mongo_session
484
638
  end
485
639
 
486
- it "returns the default session" do
487
- repl_session.options[:database].should eq(ENV["MONGOHQ_REPL_NAME"])
640
+ let(:seeds) do
641
+ repl_session.cluster.seeds.map{ |node| node.address.original }
642
+ end
643
+
644
+ it "returns the overridden session" do
645
+ expect(seeds).to eq([ ENV["MONGOHQ_REPL_1_URL"], ENV["MONGOHQ_REPL_2_URL"] ])
488
646
  end
489
647
  end
490
648
 
@@ -502,39 +660,27 @@ describe Mongoid::Sessions do
502
660
  end
503
661
  end
504
662
 
505
- describe ".persistence_options" do
506
-
507
- context "when options exist on the current thread" do
508
-
509
- before do
510
- Band.with(safe: { w: 2 })
511
- end
663
+ describe ".store_in" do
512
664
 
513
- after do
514
- Band.clear_persistence_options
515
- end
665
+ context "when provided a non hash" do
516
666
 
517
- it "returns the options" do
518
- Band.persistence_options.should eq(safe: { w: 2 })
667
+ it "raises an error" do
668
+ expect {
669
+ Band.store_in :artists
670
+ }.to raise_error(Mongoid::Errors::InvalidStorageOptions)
519
671
  end
520
672
  end
521
673
 
522
- context "when there are no options on the current thread" do
674
+ context "when provided a class that extend another document" do
523
675
 
524
- it "returns nil" do
525
- Band.persistence_options.should be_nil
676
+ let(:klass) do
677
+ Class.new(Band)
526
678
  end
527
- end
528
- end
529
-
530
- describe ".store_in" do
531
-
532
- context "when provided a non hash" do
533
679
 
534
680
  it "raises an error" do
535
681
  expect {
536
- Band.store_in :artists
537
- }.to raise_error(Mongoid::Errors::InvalidStorageOptions)
682
+ klass.store_in(database: :artists)
683
+ }.to raise_error(Mongoid::Errors::InvalidStorageParent)
538
684
  end
539
685
  end
540
686
 
@@ -556,13 +702,13 @@ describe Mongoid::Sessions do
556
702
  context "when sending operations to a different database" do
557
703
 
558
704
  after do
559
- Band.with(database: "mongoid_test_alt").delete_all
705
+ Band.with(database: database_id_alt).delete_all
560
706
  end
561
707
 
562
708
  describe ".create" do
563
709
 
564
710
  let!(:band) do
565
- Band.with(database: "mongoid_test_alt").create
711
+ Band.with(database: database_id_alt).create
566
712
  end
567
713
 
568
714
  it "does not persist to the default database" do
@@ -572,15 +718,15 @@ describe Mongoid::Sessions do
572
718
  end
573
719
 
574
720
  let(:from_db) do
575
- Band.with(database: "mongoid_test_alt").find(band.id)
721
+ Band.with(database: database_id_alt).find(band.id)
576
722
  end
577
723
 
578
724
  it "persists to the specified database" do
579
- from_db.should eq(band)
725
+ expect(from_db).to eq(band)
580
726
  end
581
727
 
582
728
  it "persists the correct number of documents" do
583
- Band.with(database: "mongoid_test_alt").count.should eq(1)
729
+ expect(Band.with(database: database_id_alt).count).to eq(1)
584
730
  end
585
731
  end
586
732
 
@@ -605,40 +751,40 @@ describe Mongoid::Sessions do
605
751
  end
606
752
 
607
753
  before do
608
- Band.with(database: "mongoid_test_alt").delete_all
754
+ Band.with(database: database_id_alt).delete_all
609
755
  end
610
756
 
611
757
  let!(:depeche_mode) do
612
- Band.with(database: "mongoid_test_alt").
758
+ Band.with(database: database_id_alt).
613
759
  create(name: "Depeche Mode", likes: 200)
614
760
  end
615
761
 
616
762
  let!(:tool) do
617
- Band.with(database: "mongoid_test_alt").
763
+ Band.with(database: database_id_alt).
618
764
  create(name: "Tool", likes: 100)
619
765
  end
620
766
 
621
767
  context "when outputting in memory" do
622
768
 
623
769
  let(:results) do
624
- Band.with(database: "mongoid_test_alt").
770
+ Band.with(database: database_id_alt).
625
771
  map_reduce(map, reduce).out(inline: 1)
626
772
  end
627
773
 
628
774
  it "executes the map/reduce on the correct database" do
629
- results.first["value"].should eq({ "likes" => 200 })
775
+ expect(results.first["value"]).to eq({ "likes" => 200 })
630
776
  end
631
777
  end
632
778
 
633
779
  context "when outputting to a collection" do
634
780
 
635
781
  let(:results) do
636
- Band.with(database: "mongoid_test_alt").
782
+ Band.with(database: database_id_alt).
637
783
  map_reduce(map, reduce).out(replace: "bands_output")
638
784
  end
639
785
 
640
786
  it "executes the map/reduce on the correct database" do
641
- results.first["value"].should eq({ "likes" => 200 })
787
+ expect(results.first["value"]).to eq({ "likes" => 200 })
642
788
  end
643
789
  end
644
790
  end
@@ -663,11 +809,11 @@ describe Mongoid::Sessions do
663
809
  end
664
810
 
665
811
  it "persists to the specified database" do
666
- from_db.should eq(band)
812
+ expect(from_db).to eq(band)
667
813
  end
668
814
 
669
815
  it "persists the correct number of documents" do
670
- Band.with(collection: "artists").count.should eq(1)
816
+ expect(Band.with(collection: "artists").count).to eq(1)
671
817
  end
672
818
  end
673
819
 
@@ -711,7 +857,7 @@ describe Mongoid::Sessions do
711
857
  end
712
858
 
713
859
  it "executes the map/reduce on the correct collection" do
714
- results.first["value"].should eq({ "likes" => 200 })
860
+ expect(results.first["value"]).to eq({ "likes" => 200 })
715
861
  end
716
862
  end
717
863
  end
@@ -746,7 +892,7 @@ describe Mongoid::Sessions do
746
892
  end
747
893
 
748
894
  it "persists to the specified database" do
749
- from_db.should eq(band)
895
+ expect(from_db).to eq(band)
750
896
  end
751
897
  end
752
898
 
@@ -767,7 +913,7 @@ describe Mongoid::Sessions do
767
913
  end
768
914
 
769
915
  it "persists to the specified database" do
770
- from_db.should eq(band)
916
+ expect(from_db).to eq(band)
771
917
  end
772
918
  end
773
919
 
@@ -788,7 +934,7 @@ describe Mongoid::Sessions do
788
934
  end
789
935
 
790
936
  it "persists to the specified database" do
791
- from_db.should eq(band)
937
+ expect(from_db).to eq(band)
792
938
  end
793
939
  end
794
940
  end
@@ -851,7 +997,7 @@ describe Mongoid::Sessions do
851
997
  end
852
998
 
853
999
  it "executes the map/reduce on the correct session" do
854
- results.first["value"].should eq({ "likes" => 200 })
1000
+ expect(results.first["value"]).to eq({ "likes" => 200 })
855
1001
  end
856
1002
  end
857
1003
  end
@@ -861,33 +1007,34 @@ describe Mongoid::Sessions do
861
1007
  describe ".create" do
862
1008
 
863
1009
  before do
864
- Person.with(safe: true).create(ssn: "432-97-1111")
1010
+ Person.create_indexes
1011
+ Person.create(ssn: "432-97-1111")
865
1012
  end
866
1013
 
867
1014
  context "when no error occurs" do
868
1015
 
869
1016
  it "inserts the document" do
870
- Person.count.should eq(1)
1017
+ expect(Person.count).to eq(1)
871
1018
  end
872
1019
  end
873
1020
 
874
1021
  context "when a mongodb error occurs" do
875
1022
 
876
- before do
877
- Person.create_indexes
878
- end
879
-
880
1023
  it "bubbles up to the caller" do
881
1024
  expect {
882
- Person.with(safe: true).create(ssn: "432-97-1111")
1025
+ Person.create(ssn: "432-97-1111")
883
1026
  }.to raise_error(Moped::Errors::OperationFailure)
884
1027
  end
885
1028
  end
886
1029
 
887
- context "when using safe: false" do
1030
+ context "when using write -1" do
1031
+
1032
+ let(:new_person) do
1033
+ Person.with(write: {w: -1}).create(ssn: "432-97-1111")
1034
+ end
888
1035
 
889
1036
  it "ignores mongodb error" do
890
- Person.with(safe: false).create(ssn: "432-97-1111").should be_true
1037
+ expect(new_person).to_not be nil
891
1038
  end
892
1039
  end
893
1040
  end
@@ -895,13 +1042,13 @@ describe Mongoid::Sessions do
895
1042
  describe ".create!" do
896
1043
 
897
1044
  before do
898
- Person.with(safe: true).create!(ssn: "432-97-1112")
1045
+ Person.create!(ssn: "432-97-1112")
899
1046
  end
900
1047
 
901
1048
  context "when no error occurs" do
902
1049
 
903
1050
  it "inserts the document" do
904
- Person.count.should eq(1)
1051
+ expect(Person.count).to eq(1)
905
1052
  end
906
1053
  end
907
1054
 
@@ -913,7 +1060,7 @@ describe Mongoid::Sessions do
913
1060
 
914
1061
  it "bubbles up to the caller" do
915
1062
  expect {
916
- Person.with(safe: true).create!(ssn: "432-97-1112")
1063
+ Person.create!(ssn: "432-97-1112")
917
1064
  }.to raise_error(Moped::Errors::OperationFailure)
918
1065
  end
919
1066
  end
@@ -922,7 +1069,7 @@ describe Mongoid::Sessions do
922
1069
 
923
1070
  it "raises the validation error" do
924
1071
  expect {
925
- Account.with(safe: true).create!(name: "this name is way too long")
1072
+ Account.create!(name: "this name is way too long")
926
1073
  }.to raise_error(Mongoid::Errors::Validations)
927
1074
  end
928
1075
  end
@@ -931,7 +1078,7 @@ describe Mongoid::Sessions do
931
1078
  describe ".save" do
932
1079
 
933
1080
  before do
934
- Person.with(safe: true).create(ssn: "432-97-1113")
1081
+ Person.create(ssn: "432-97-1113")
935
1082
  end
936
1083
 
937
1084
  context "when a mongodb error occurs" do
@@ -946,7 +1093,7 @@ describe Mongoid::Sessions do
946
1093
 
947
1094
  it "bubbles up to the caller" do
948
1095
  expect {
949
- person.with(safe: true).save
1096
+ person.save
950
1097
  }.to raise_error(Moped::Errors::OperationFailure)
951
1098
  end
952
1099
  end
@@ -955,7 +1102,7 @@ describe Mongoid::Sessions do
955
1102
  describe ".save!" do
956
1103
 
957
1104
  before do
958
- Person.with(safe: true).create!(ssn: "432-97-1114")
1105
+ Person.create!(ssn: "432-97-1114")
959
1106
  end
960
1107
 
961
1108
  context "when a mongodb error occurs" do
@@ -970,7 +1117,7 @@ describe Mongoid::Sessions do
970
1117
 
971
1118
  it "bubbles up to the caller" do
972
1119
  expect {
973
- person.with(safe: true).save!
1120
+ person.save!
974
1121
  }.to raise_error(Moped::Errors::OperationFailure)
975
1122
  end
976
1123
  end
@@ -983,7 +1130,7 @@ describe Mongoid::Sessions do
983
1130
 
984
1131
  it "raises the validation error" do
985
1132
  expect {
986
- account.with(safe: true).save!
1133
+ account.save!
987
1134
  }.to raise_error(Mongoid::Errors::Validations)
988
1135
  end
989
1136
  end
@@ -1013,7 +1160,7 @@ describe Mongoid::Sessions do
1013
1160
  end
1014
1161
 
1015
1162
  it "persists the document to the correct database" do
1016
- Band.find(band.id).should eq(band)
1163
+ expect(Band.find(band.id)).to eq(band)
1017
1164
  end
1018
1165
  end
1019
1166
  end
@@ -1045,7 +1192,7 @@ describe Mongoid::Sessions do
1045
1192
 
1046
1193
  it "persists to the overridden database" do
1047
1194
  Band.mongo_session.with(database: :mongoid_optional) do |sess|
1048
- sess[:bands].find(name: "Tool").should_not be_nil
1195
+ expect(sess[:bands].find(name: "Tool")).to_not be_nil
1049
1196
  end
1050
1197
  end
1051
1198
  end
@@ -1055,19 +1202,13 @@ describe Mongoid::Sessions do
1055
1202
 
1056
1203
  context "when the override is configured with a uri" do
1057
1204
 
1058
- let(:database_name) do
1059
- "mongoid_other"
1060
- end
1061
-
1062
- let(:config) do
1063
- { default: { uri: "mongodb://localhost:#{PORT}/#{database_id}" },
1064
- session1: { uri: "mongodb://localhost:#{PORT}/#{database_name}" }}
1205
+ let(:file) do
1206
+ File.join(File.dirname(__FILE__), "..", "config", "mongoid.yml")
1065
1207
  end
1066
1208
 
1067
1209
  before do
1068
- Mongoid::Threaded.sessions.clear
1069
- Mongoid.sessions = config
1070
- Mongoid.override_session(:session1)
1210
+ Mongoid::Config.load!(file, :test)
1211
+ Mongoid.override_session(:mongohq_repl_uri)
1071
1212
  end
1072
1213
 
1073
1214
  after do
@@ -1075,7 +1216,7 @@ describe Mongoid::Sessions do
1075
1216
  end
1076
1217
 
1077
1218
  it "has some database name on session" do
1078
- Band.mongo_session.options[:database].should eq(database_name)
1219
+ expect(Band.mongo_session.options[:database]).to eq(:mongoid_replica)
1079
1220
  end
1080
1221
  end
1081
1222
 
@@ -1104,7 +1245,7 @@ describe Mongoid::Sessions do
1104
1245
  end
1105
1246
 
1106
1247
  it "persists to the overridden session" do
1107
- persisted.should eq(band)
1248
+ expect(persisted).to eq(band)
1108
1249
  end
1109
1250
  end
1110
1251
  end