mongoid 3.1.7 → 4.0.2

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