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
@@ -0,0 +1,127 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Contextual::None do
4
+
5
+ describe "#==" do
6
+
7
+ let!(:band) do
8
+ Band.create(name: "Depeche Mode")
9
+ end
10
+
11
+ let(:context) do
12
+ described_class.new(Band.where(name: "Depeche Mode"))
13
+ end
14
+
15
+ context "when the other is a none" do
16
+
17
+ let(:other) do
18
+ described_class.new(Band.where(name: "Depeche Mode"))
19
+ end
20
+
21
+ it "returns true" do
22
+ expect(context).to eq(other)
23
+ end
24
+ end
25
+
26
+ context "when the other is not a none" do
27
+
28
+ let(:other) do
29
+ Mongoid::Contextual::Memory.new(Band.where(name: "Depeche Mode"))
30
+ end
31
+
32
+ it "returns false" do
33
+ expect(context).to_not eq(other)
34
+ end
35
+ end
36
+ end
37
+
38
+ describe "#each" do
39
+
40
+ let!(:band) do
41
+ Band.create(name: "Depeche Mode")
42
+ end
43
+
44
+ let(:context) do
45
+ described_class.new(Band.where(name: "Depeche Mode"))
46
+ end
47
+
48
+ it "iterates over no documents" do
49
+ expect(context.each.entries).to be_empty
50
+ end
51
+ end
52
+
53
+ describe "#exists?" do
54
+
55
+ let!(:band) do
56
+ Band.create(name: "Depeche Mode")
57
+ end
58
+
59
+ let(:context) do
60
+ described_class.new(Band.where(name: "Depeche Mode"))
61
+ end
62
+
63
+ it "returns false" do
64
+ expect(context).to_not be_exists
65
+ end
66
+ end
67
+
68
+ describe "#first" do
69
+
70
+ let!(:band) do
71
+ Band.create(name: "Depeche Mode")
72
+ end
73
+
74
+ let(:context) do
75
+ described_class.new(Band.where(name: "Depeche Mode"))
76
+ end
77
+
78
+ it "returns nil" do
79
+ expect(context.first).to be_nil
80
+ end
81
+ end
82
+
83
+ describe "#last" do
84
+
85
+ let!(:band) do
86
+ Band.create(name: "Depeche Mode")
87
+ end
88
+
89
+ let(:context) do
90
+ described_class.new(Band.where(name: "Depeche Mode"))
91
+ end
92
+
93
+ it "returns nil" do
94
+ expect(context.last).to be_nil
95
+ end
96
+ end
97
+
98
+ describe "#length" do
99
+
100
+ let!(:band) do
101
+ Band.create(name: "Depeche Mode")
102
+ end
103
+
104
+ let(:context) do
105
+ described_class.new(Band.where(name: "Depeche Mode"))
106
+ end
107
+
108
+ it "returns zero" do
109
+ expect(context.length).to eq(0)
110
+ end
111
+ end
112
+
113
+ describe "#size" do
114
+
115
+ let!(:band) do
116
+ Band.create(name: "Depeche Mode")
117
+ end
118
+
119
+ let(:context) do
120
+ described_class.new(Band.where(name: "Depeche Mode"))
121
+ end
122
+
123
+ it "returns zero" do
124
+ expect(context.size).to eq(0)
125
+ end
126
+ end
127
+ end
@@ -0,0 +1,209 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Contextual::TextSearch do
4
+
5
+ before do
6
+ Word.with(database: "admin").mongo_session.command(setParameter: 1, textSearchEnabled: true)
7
+ Word.create_indexes
8
+ end
9
+
10
+ after(:all) do
11
+ Word.remove_indexes
12
+ end
13
+
14
+ describe "#each" do
15
+
16
+ let(:collection) do
17
+ Word.collection
18
+ end
19
+
20
+ let(:criteria) do
21
+ Word.all
22
+ end
23
+
24
+ before do
25
+ Word.create!(name: "phase", origin: "latin")
26
+ Word.create!(name: "phazed", origin: "latin")
27
+ end
28
+
29
+ context "when the search is projecting" do
30
+
31
+ let(:search) do
32
+ described_class.new(collection, criteria, "phase").project(name: 1)
33
+ end
34
+
35
+ let(:documents) do
36
+ search.entries
37
+ end
38
+
39
+ it "limits the fields to the projection" do
40
+ expect {
41
+ documents.first.origin
42
+ }.to raise_error(ActiveModel::MissingAttributeError)
43
+ end
44
+ end
45
+
46
+ context "when the search is not projecting" do
47
+
48
+ let(:search) do
49
+ described_class.new(collection, criteria, "phase")
50
+ end
51
+
52
+ let(:documents) do
53
+ search.entries
54
+ end
55
+
56
+ it "returns all fields" do
57
+ expect(documents.first.origin).to eq("latin")
58
+ end
59
+ end
60
+ end
61
+
62
+ describe "#execute" do
63
+
64
+ let(:collection) do
65
+ Word.collection
66
+ end
67
+
68
+ let(:criteria) do
69
+ Word.all
70
+ end
71
+
72
+ let(:search) do
73
+ described_class.new(collection, criteria, "phase")
74
+ end
75
+
76
+ before do
77
+ Word.create!(name: "phase", origin: "latin")
78
+ Word.create!(name: "phazed", origin: "latin")
79
+ end
80
+
81
+ let(:results) do
82
+ search.execute
83
+ end
84
+
85
+ it "returns the raw results" do
86
+ expect(results).to_not be_empty
87
+ end
88
+ end
89
+
90
+ describe "#initialize" do
91
+
92
+ let(:collection) do
93
+ Word.collection
94
+ end
95
+
96
+ let(:criteria) do
97
+ Word.limit(100)
98
+ end
99
+
100
+ let(:search) do
101
+ described_class.new(collection, criteria, "phase")
102
+ end
103
+
104
+ it "sets the collection" do
105
+ expect(search.collection).to eq(collection)
106
+ end
107
+
108
+ it "sets the criteria" do
109
+ expect(search.criteria).to eq(criteria)
110
+ end
111
+
112
+ it "sets the text command" do
113
+ expect(search.command[:text]).to eq(collection.name)
114
+ end
115
+
116
+ it "sets the text search parameter" do
117
+ expect(search.command[:search]).to eq("phase")
118
+ end
119
+
120
+ it "sets the criteria" do
121
+ expect(search.command[:filter]).to be_empty
122
+ end
123
+
124
+ it "sets the limit" do
125
+ expect(search.command[:limit]).to eq(100)
126
+ end
127
+ end
128
+
129
+ describe "#language" do
130
+
131
+ let(:collection) do
132
+ Word.collection
133
+ end
134
+
135
+ let(:criteria) do
136
+ Word.limit(100)
137
+ end
138
+
139
+ let(:search) do
140
+ described_class.new(collection, criteria, "phase")
141
+ end
142
+
143
+ let!(:text_search) do
144
+ search.language("deutsch")
145
+ end
146
+
147
+ it "sets the search language" do
148
+ expect(search.command[:language]).to eq("deutsch")
149
+ end
150
+
151
+ it "returns the text search" do
152
+ expect(text_search).to equal(search)
153
+ end
154
+ end
155
+
156
+ describe "#project" do
157
+
158
+ let(:collection) do
159
+ Word.collection
160
+ end
161
+
162
+ let(:criteria) do
163
+ Word.limit(100)
164
+ end
165
+
166
+ let(:search) do
167
+ described_class.new(collection, criteria, "phase")
168
+ end
169
+
170
+ let!(:text_search) do
171
+ search.project(name: 1, title: 1)
172
+ end
173
+
174
+ it "sets the search field limitations" do
175
+ expect(search.command[:project]).to eq(name: 1, title: 1)
176
+ end
177
+
178
+ it "returns the text search" do
179
+ expect(text_search).to equal(search)
180
+ end
181
+ end
182
+
183
+ describe "#stats" do
184
+
185
+ let(:collection) do
186
+ Word.collection
187
+ end
188
+
189
+ let(:criteria) do
190
+ Word.all
191
+ end
192
+
193
+ let(:search) do
194
+ described_class.new(collection, criteria, "phase")
195
+ end
196
+
197
+ before do
198
+ Word.create!(name: "phase", origin: "latin")
199
+ end
200
+
201
+ let(:stats) do
202
+ search.stats
203
+ end
204
+
205
+ it "returns the raw stats" do
206
+ expect(stats["nscanned"]).to eq(1)
207
+ end
208
+ end
209
+ end
@@ -50,7 +50,7 @@ describe Mongoid::Copyable do
50
50
  end
51
51
 
52
52
  it "does not set the id field as the _id" do
53
- cloned.id.should_not eq(1234)
53
+ expect(cloned.id).to_not eq(1234)
54
54
  end
55
55
  end
56
56
 
@@ -76,17 +76,17 @@ describe Mongoid::Copyable do
76
76
 
77
77
  it "sets the pt_BR version" do
78
78
  I18n.locale = 'pt_BR'
79
- copy.desc.should eq("descrição")
79
+ expect(copy.desc).to eq("descrição")
80
80
  end
81
81
 
82
82
  it "sets the english version" do
83
83
  I18n.locale = :en
84
- copy.desc.should eq("description")
84
+ expect(copy.desc).to eq("description")
85
85
  end
86
86
 
87
87
  it "sets to nil an nonexistent lang" do
88
88
  I18n.locale = :fr
89
- copy.desc.should be_nil
89
+ expect(copy.desc).to be_nil
90
90
  end
91
91
  end
92
92
 
@@ -105,21 +105,21 @@ describe Mongoid::Copyable do
105
105
  end
106
106
 
107
107
  it "marks the fields as dirty" do
108
- copy.changes["age"].should eq([ nil, 100 ])
108
+ expect(copy.changes["age"]).to eq([ nil, 100 ])
109
109
  end
110
110
 
111
111
  it "flags the document as changed" do
112
- copy.should be_changed
112
+ expect(copy).to be_changed
113
113
  end
114
114
 
115
115
  it "copies protected fields" do
116
- copy.owner_id.should eq(5)
116
+ expect(copy.owner_id).to eq(5)
117
117
  end
118
118
  end
119
119
 
120
120
  context "when the document is new" do
121
121
 
122
- context "when versions exist" do
122
+ context "when there are changes" do
123
123
 
124
124
  let(:copy) do
125
125
  person.send(method)
@@ -130,71 +130,63 @@ describe Mongoid::Copyable do
130
130
  end
131
131
 
132
132
  it "returns a new document" do
133
- copy.should_not be_persisted
133
+ expect(copy).to_not be_persisted
134
134
  end
135
135
 
136
136
  it "has an id" do
137
- copy.id.should_not be_nil
137
+ expect(copy.id).to_not be_nil
138
138
  end
139
139
 
140
140
  it "flags the document as changed" do
141
- copy.should be_changed
141
+ expect(copy).to be_changed
142
142
  end
143
143
 
144
144
  it "marks fields as dirty" do
145
- copy.changes["age"].should eq([ nil, 100 ])
145
+ expect(copy.changes["age"]).to eq([ nil, 100 ])
146
146
  end
147
147
 
148
148
  it "has a different id from the original" do
149
- copy.id.should_not eq(person.id)
150
- end
151
-
152
- it "does not copy the versions" do
153
- copy[:versions].should be_nil
154
- end
155
-
156
- it "resets the document version" do
157
- copy.version.should eq(1)
149
+ expect(copy.id).to_not eq(person.id)
158
150
  end
159
151
 
160
152
  it "returns a new instance" do
161
- copy.should_not be_eql(person)
153
+ expect(copy).to_not be_eql(person)
162
154
  end
163
155
 
164
156
  it "copys embeds many documents" do
165
- copy.addresses.should eq(person.addresses)
157
+ expect(copy.addresses).to eq(person.addresses)
166
158
  end
167
159
 
168
160
  it "sets the embedded many documents as new" do
169
- copy.addresses.first.should be_new_record
161
+ expect(copy.addresses.first).to be_new_record
170
162
  end
171
163
 
172
164
  it "creates new embeds many instances" do
173
- copy.addresses.should_not equal(person.addresses)
165
+ expect(copy.addresses).to_not equal(person.addresses)
174
166
  end
175
167
 
176
168
  it "copys embeds one documents" do
177
- copy.name.should eq(person.name)
169
+ expect(copy.name).to eq(person.name)
178
170
  end
179
171
 
180
172
  it "flags the embeds one documents as new" do
181
- copy.name.should be_new_record
173
+ expect(copy.name).to be_new_record
182
174
  end
183
175
 
184
176
  it "creates a new embeds one instance" do
185
- copy.name.should_not equal(person.name)
177
+ expect(copy.name).to_not equal(person.name)
186
178
  end
187
179
 
188
180
  it "does not copy referenced many documents" do
189
- copy.posts.should be_empty
181
+ expect(copy.posts).to be_empty
190
182
  end
191
183
 
192
184
  it "does not copy references one documents" do
193
- copy.game.should be_nil
185
+ expect(copy.game).to be_nil
194
186
  end
195
187
 
196
188
  it "copies localized fields" do
197
- copy.desc.should eq("description")
189
+ expect(copy.desc).to eq("description")
198
190
  end
199
191
 
200
192
  context "when saving the copy" do
@@ -208,15 +200,15 @@ describe Mongoid::Copyable do
208
200
  end
209
201
 
210
202
  it "persists the attributes" do
211
- reloaded.title.should eq("Sir")
203
+ expect(reloaded.title).to eq("Sir")
212
204
  end
213
205
 
214
206
  it "persists the embeds many relation" do
215
- reloaded.addresses.should eq(person.addresses)
207
+ expect(reloaded.addresses).to eq(person.addresses)
216
208
  end
217
209
 
218
210
  it "persists the embeds one relation" do
219
- reloaded.name.should eq(person.name)
211
+ expect(reloaded.name).to eq(person.name)
220
212
  end
221
213
  end
222
214
  end
@@ -228,7 +220,7 @@ describe Mongoid::Copyable do
228
220
  person.new_record = false
229
221
  end
230
222
 
231
- context "when versions exist" do
223
+ context "when there are changes" do
232
224
 
233
225
  let(:copy) do
234
226
  person.send(method)
@@ -239,55 +231,51 @@ describe Mongoid::Copyable do
239
231
  end
240
232
 
241
233
  it "flags the document as changed" do
242
- copy.should be_changed
234
+ expect(copy).to be_changed
243
235
  end
244
236
 
245
237
  it "marks fields as dirty" do
246
- copy.changes["age"].should eq([ nil, 100 ])
238
+ expect(copy.changes["age"]).to eq([ nil, 100 ])
247
239
  end
248
240
 
249
241
  it "returns a new document" do
250
- copy.should_not be_persisted
242
+ expect(copy).to_not be_persisted
251
243
  end
252
244
 
253
245
  it "has an id" do
254
- copy.id.should_not be_nil
246
+ expect(copy.id).to_not be_nil
255
247
  end
256
248
 
257
249
  it "has a different id from the original" do
258
- copy.id.should_not eq(person.id)
259
- end
260
-
261
- it "does not copy the versions" do
262
- copy[:versions].should be_nil
250
+ expect(copy.id).to_not eq(person.id)
263
251
  end
264
252
 
265
253
  it "returns a new instance" do
266
- copy.should_not be_eql(person)
254
+ expect(copy).to_not be_eql(person)
267
255
  end
268
256
 
269
257
  it "copys embeds many documents" do
270
- copy.addresses.should eq(person.addresses)
258
+ expect(copy.addresses).to eq(person.addresses)
271
259
  end
272
260
 
273
261
  it "creates new embeds many instances" do
274
- copy.addresses.should_not equal(person.addresses)
262
+ expect(copy.addresses).to_not equal(person.addresses)
275
263
  end
276
264
 
277
265
  it "copys embeds one documents" do
278
- copy.name.should eq(person.name)
266
+ expect(copy.name).to eq(person.name)
279
267
  end
280
268
 
281
269
  it "creates a new embeds one instance" do
282
- copy.name.should_not equal(person.name)
270
+ expect(copy.name).to_not equal(person.name)
283
271
  end
284
272
 
285
273
  it "does not copy referenced many documents" do
286
- copy.posts.should be_empty
274
+ expect(copy.posts).to be_empty
287
275
  end
288
276
 
289
277
  it "does not copy references one documents" do
290
- copy.game.should be_nil
278
+ expect(copy.game).to be_nil
291
279
  end
292
280
 
293
281
  context "when saving the copy" do
@@ -301,15 +289,15 @@ describe Mongoid::Copyable do
301
289
  end
302
290
 
303
291
  it "persists the attributes" do
304
- reloaded.title.should eq("Sir")
292
+ expect(reloaded.title).to eq("Sir")
305
293
  end
306
294
 
307
295
  it "persists the embeds many relation" do
308
- reloaded.addresses.should eq(person.addresses)
296
+ expect(reloaded.addresses).to eq(person.addresses)
309
297
  end
310
298
 
311
299
  it "persists the embeds one relation" do
312
- reloaded.name.should eq(person.name)
300
+ expect(reloaded.name).to eq(person.name)
313
301
  end
314
302
  end
315
303
  end
@@ -322,47 +310,47 @@ describe Mongoid::Copyable do
322
310
  end
323
311
 
324
312
  it "returns a new document" do
325
- copy.should_not be_persisted
313
+ expect(copy).to_not be_persisted
326
314
  end
327
315
 
328
316
  it "has an id" do
329
- copy.id.should_not be_nil
317
+ expect(copy.id).to_not be_nil
330
318
  end
331
319
 
332
320
  it "has a different id from the original" do
333
- copy.id.should_not eq(person.id)
321
+ expect(copy.id).to_not eq(person.id)
334
322
  end
335
323
 
336
324
  it "returns a new instance" do
337
- copy.should_not be_eql(person)
325
+ expect(copy).to_not be_eql(person)
338
326
  end
339
327
 
340
328
  it "copys embeds many documents" do
341
- copy.addresses.should eq(person.addresses)
329
+ expect(copy.addresses).to eq(person.addresses)
342
330
  end
343
331
 
344
332
  it "creates new embeds many instances" do
345
- copy.addresses.should_not equal(person.addresses)
333
+ expect(copy.addresses).to_not equal(person.addresses)
346
334
  end
347
335
 
348
336
  it "copys embeds one documents" do
349
- copy.name.should eq(person.name)
337
+ expect(copy.name).to eq(person.name)
350
338
  end
351
339
 
352
340
  it "creates a new embeds one instance" do
353
- copy.name.should_not equal(person.name)
341
+ expect(copy.name).to_not equal(person.name)
354
342
  end
355
343
 
356
344
  it "does not copy referenced many documents" do
357
- copy.posts.should be_empty
345
+ expect(copy.posts).to be_empty
358
346
  end
359
347
 
360
348
  it "does not copy references one documents" do
361
- copy.game.should be_nil
349
+ expect(copy.game).to be_nil
362
350
  end
363
351
 
364
352
  it "keeps the original attributes frozen" do
365
- person.attributes.should be_frozen
353
+ expect(person.attributes).to be_frozen
366
354
  end
367
355
 
368
356
  context "when saving the copy" do
@@ -376,15 +364,15 @@ describe Mongoid::Copyable do
376
364
  end
377
365
 
378
366
  it "persists the attributes" do
379
- reloaded.title.should eq("Sir")
367
+ expect(reloaded.title).to eq("Sir")
380
368
  end
381
369
 
382
370
  it "persists the embeds many relation" do
383
- reloaded.addresses.should eq(person.addresses)
371
+ expect(reloaded.addresses).to eq(person.addresses)
384
372
  end
385
373
 
386
374
  it "persists the embeds one relation" do
387
- reloaded.name.should eq(person.name)
375
+ expect(reloaded.name).to eq(person.name)
388
376
  end
389
377
  end
390
378
  end