mongoid 3.1.7 → 4.0.0.alpha1

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