mongoid 3.1.6 → 4.0.2

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