mongoid 3.1.7 → 4.0.0

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 (562) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +423 -9
  3. data/README.md +5 -6
  4. data/lib/config/locales/en.yml +32 -18
  5. data/lib/mongoid/atomic/paths/embedded/many.rb +1 -1
  6. data/lib/mongoid/atomic/paths/embedded/one.rb +1 -1
  7. data/lib/mongoid/atomic/paths/embedded.rb +0 -30
  8. data/lib/mongoid/atomic/paths/root.rb +0 -13
  9. data/lib/mongoid/atomic.rb +1 -12
  10. data/lib/mongoid/attributes/dynamic.rb +154 -0
  11. data/lib/mongoid/attributes/nested.rb +82 -0
  12. data/lib/mongoid/attributes/processing.rb +13 -66
  13. data/lib/mongoid/attributes.rb +61 -99
  14. data/lib/mongoid/{dirty.rb → changeable.rb} +32 -2
  15. data/lib/mongoid/composable.rb +105 -0
  16. data/lib/mongoid/config/options.rb +1 -1
  17. data/lib/mongoid/config.rb +3 -9
  18. data/lib/mongoid/contextual/aggregable/mongo.rb +5 -9
  19. data/lib/mongoid/contextual/atomic.rb +53 -53
  20. data/lib/mongoid/contextual/geo_near.rb +1 -1
  21. data/lib/mongoid/contextual/map_reduce.rb +4 -2
  22. data/lib/mongoid/contextual/memory.rb +18 -6
  23. data/lib/mongoid/contextual/mongo.rb +64 -56
  24. data/lib/mongoid/contextual/none.rb +90 -0
  25. data/lib/mongoid/contextual/text_search.rb +178 -0
  26. data/lib/mongoid/contextual.rb +2 -0
  27. data/lib/mongoid/copyable.rb +2 -3
  28. data/lib/mongoid/criteria/{#findable.rb# → findable.rb} +0 -2
  29. data/lib/mongoid/{criterion/inspection.rb → criteria/inspectable.rb} +2 -2
  30. data/lib/mongoid/{criterion → criteria}/marshalable.rb +3 -1
  31. data/lib/mongoid/{criterion → criteria}/modifiable.rb +28 -8
  32. data/lib/mongoid/criteria/permission.rb +70 -0
  33. data/lib/mongoid/{criterion/scoping.rb → criteria/scopable.rb} +2 -2
  34. data/lib/mongoid/criteria.rb +39 -34
  35. data/lib/mongoid/document.rb +32 -17
  36. data/lib/mongoid/errors/document_not_destroyed.rb +25 -0
  37. data/lib/mongoid/errors/document_not_found.rb +2 -1
  38. data/lib/mongoid/errors/invalid_storage_options.rb +1 -1
  39. data/lib/mongoid/errors/invalid_storage_parent.rb +26 -0
  40. data/lib/mongoid/errors/invalid_value.rb +16 -0
  41. data/lib/mongoid/errors/mongoid_error.rb +1 -1
  42. data/lib/mongoid/errors/readonly_document.rb +24 -0
  43. data/lib/mongoid/errors.rb +4 -1
  44. data/lib/mongoid/extensions/array.rb +3 -3
  45. data/lib/mongoid/extensions/big_decimal.rb +1 -1
  46. data/lib/mongoid/extensions/boolean.rb +15 -17
  47. data/lib/mongoid/extensions/date.rb +1 -1
  48. data/lib/mongoid/extensions/date_time.rb +3 -3
  49. data/lib/mongoid/extensions/float.rb +2 -1
  50. data/lib/mongoid/extensions/hash.rb +3 -3
  51. data/lib/mongoid/extensions/integer.rb +1 -1
  52. data/lib/mongoid/extensions/object.rb +7 -7
  53. data/lib/mongoid/extensions/object_id.rb +5 -5
  54. data/lib/mongoid/extensions/range.rb +9 -3
  55. data/lib/mongoid/extensions/regexp.rb +1 -1
  56. data/lib/mongoid/extensions/set.rb +1 -1
  57. data/lib/mongoid/extensions/string.rb +6 -18
  58. data/lib/mongoid/extensions/symbol.rb +1 -1
  59. data/lib/mongoid/extensions/time.rb +3 -3
  60. data/lib/mongoid/extensions/time_with_zone.rb +1 -1
  61. data/lib/mongoid/extensions.rb +2 -7
  62. data/lib/mongoid/factory.rb +8 -6
  63. data/lib/mongoid/fields/foreign_key.rb +3 -3
  64. data/lib/mongoid/fields/localized.rb +1 -1
  65. data/lib/mongoid/fields/standard.rb +5 -17
  66. data/lib/mongoid/fields/validators/macro.rb +15 -5
  67. data/lib/mongoid/fields.rb +41 -8
  68. data/lib/mongoid/{finders.rb → findable.rb} +8 -2
  69. data/lib/mongoid/indexable/specification.rb +104 -0
  70. data/lib/mongoid/{indexes → indexable}/validators/options.rb +2 -1
  71. data/lib/mongoid/{indexes.rb → indexable.rb} +50 -55
  72. data/lib/mongoid/{inspection.rb → inspectable.rb} +15 -11
  73. data/lib/mongoid/{callbacks.rb → interceptable.rb} +30 -62
  74. data/lib/mongoid/log_subscriber.rb +55 -0
  75. data/lib/mongoid/{matchers → matchable}/all.rb +1 -1
  76. data/lib/mongoid/{matchers → matchable}/and.rb +2 -2
  77. data/lib/mongoid/{matchers → matchable}/default.rb +1 -1
  78. data/lib/mongoid/{matchers → matchable}/exists.rb +1 -1
  79. data/lib/mongoid/{matchers → matchable}/gt.rb +1 -1
  80. data/lib/mongoid/{matchers → matchable}/gte.rb +1 -1
  81. data/lib/mongoid/{matchers → matchable}/in.rb +2 -2
  82. data/lib/mongoid/{matchers → matchable}/lt.rb +1 -1
  83. data/lib/mongoid/{matchers → matchable}/lte.rb +1 -1
  84. data/lib/mongoid/{matchers → matchable}/ne.rb +1 -1
  85. data/lib/mongoid/{matchers → matchable}/nin.rb +3 -2
  86. data/lib/mongoid/{matchers → matchable}/or.rb +2 -2
  87. data/lib/mongoid/{matchers → matchable}/size.rb +1 -1
  88. data/lib/mongoid/matchable.rb +152 -0
  89. data/lib/mongoid/persistable/creatable.rb +188 -0
  90. data/lib/mongoid/persistable/deletable.rb +149 -0
  91. data/lib/mongoid/persistable/destroyable.rb +60 -0
  92. data/lib/mongoid/persistable/incrementable.rb +36 -0
  93. data/lib/mongoid/persistable/logical.rb +38 -0
  94. data/lib/mongoid/persistable/poppable.rb +39 -0
  95. data/lib/mongoid/persistable/pullable.rb +55 -0
  96. data/lib/mongoid/persistable/pushable.rb +62 -0
  97. data/lib/mongoid/persistable/renamable.rb +35 -0
  98. data/lib/mongoid/persistable/savable.rb +52 -0
  99. data/lib/mongoid/persistable/settable.rb +33 -0
  100. data/lib/mongoid/persistable/unsettable.rb +36 -0
  101. data/lib/mongoid/persistable/updatable.rb +152 -0
  102. data/lib/mongoid/persistable/upsertable.rb +55 -0
  103. data/lib/mongoid/persistable.rb +216 -0
  104. data/lib/mongoid/positional.rb +71 -0
  105. data/lib/mongoid/query_cache.rb +247 -0
  106. data/lib/mongoid/railtie.rb +32 -45
  107. data/lib/mongoid/railties/database.rake +9 -25
  108. data/lib/mongoid/relations/accessors.rb +13 -49
  109. data/lib/mongoid/relations/auto_save.rb +15 -36
  110. data/lib/mongoid/relations/binding.rb +1 -24
  111. data/lib/mongoid/relations/bindings/embedded/in.rb +1 -1
  112. data/lib/mongoid/relations/bindings/embedded/many.rb +1 -3
  113. data/lib/mongoid/relations/bindings/referenced/in.rb +3 -8
  114. data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +3 -1
  115. data/lib/mongoid/relations/builder.rb +1 -1
  116. data/lib/mongoid/relations/builders/nested_attributes/many.rb +10 -13
  117. data/lib/mongoid/relations/builders/nested_attributes/one.rb +4 -5
  118. data/lib/mongoid/relations/builders/referenced/in.rb +1 -1
  119. data/lib/mongoid/relations/builders/referenced/many.rb +1 -2
  120. data/lib/mongoid/relations/builders/referenced/many_to_many.rb +1 -2
  121. data/lib/mongoid/relations/builders/referenced/one.rb +1 -1
  122. data/lib/mongoid/relations/builders.rb +2 -2
  123. data/lib/mongoid/relations/cascading.rb +3 -5
  124. data/lib/mongoid/relations/constraint.rb +1 -1
  125. data/lib/mongoid/relations/conversions.rb +1 -1
  126. data/lib/mongoid/relations/counter_cache.rb +39 -15
  127. data/lib/mongoid/relations/eager/base.rb +149 -0
  128. data/lib/mongoid/relations/eager/belongs_to.rb +31 -0
  129. data/lib/mongoid/relations/eager/has_and_belongs_to_many.rb +47 -0
  130. data/lib/mongoid/relations/eager/has_many.rb +38 -0
  131. data/lib/mongoid/relations/eager/has_one.rb +30 -0
  132. data/lib/mongoid/relations/eager.rb +46 -0
  133. data/lib/mongoid/relations/embedded/batchable.rb +4 -5
  134. data/lib/mongoid/relations/embedded/in.rb +4 -4
  135. data/lib/mongoid/relations/embedded/many.rb +14 -32
  136. data/lib/mongoid/relations/embedded/one.rb +1 -1
  137. data/lib/mongoid/relations/macros.rb +3 -4
  138. data/lib/mongoid/relations/many.rb +30 -31
  139. data/lib/mongoid/relations/marshalable.rb +3 -3
  140. data/lib/mongoid/relations/metadata.rb +14 -79
  141. data/lib/mongoid/relations/nested_builder.rb +2 -2
  142. data/lib/mongoid/relations/options.rb +1 -0
  143. data/lib/mongoid/relations/polymorphic.rb +0 -1
  144. data/lib/mongoid/relations/proxy.rb +21 -41
  145. data/lib/mongoid/relations/referenced/in.rb +4 -20
  146. data/lib/mongoid/relations/referenced/many.rb +19 -32
  147. data/lib/mongoid/relations/referenced/many_to_many.rb +15 -38
  148. data/lib/mongoid/relations/referenced/one.rb +6 -25
  149. data/lib/mongoid/relations/synchronization.rb +3 -3
  150. data/lib/mongoid/relations/touchable.rb +34 -1
  151. data/lib/mongoid/relations.rb +11 -25
  152. data/lib/mongoid/{reloading.rb → reloadable.rb} +6 -4
  153. data/lib/mongoid/{scoping.rb → scopable.rb} +36 -36
  154. data/lib/mongoid/selectable.rb +59 -0
  155. data/lib/mongoid/{serialization.rb → serializable.rb} +11 -2
  156. data/lib/mongoid/sessions/factory.rb +2 -0
  157. data/lib/mongoid/sessions/options.rb +180 -0
  158. data/lib/mongoid/sessions/storage_options.rb +140 -0
  159. data/lib/mongoid/sessions/thread_options.rb +19 -0
  160. data/lib/mongoid/sessions/validators/storage.rb +16 -3
  161. data/lib/mongoid/sessions.rb +37 -345
  162. data/lib/mongoid/{sharding.rb → shardable.rb} +5 -1
  163. data/lib/mongoid/{state.rb → stateful.rb} +13 -1
  164. data/lib/mongoid/support/query_counter.rb +23 -0
  165. data/lib/mongoid/tasks/database.rake +31 -0
  166. data/lib/mongoid/tasks/database.rb +107 -0
  167. data/lib/mongoid/threaded/lifecycle.rb +0 -28
  168. data/lib/mongoid/threaded.rb +0 -157
  169. data/lib/mongoid/timestamps/updated/short.rb +2 -2
  170. data/lib/mongoid/{hierarchy.rb → traversable.rb} +9 -5
  171. data/lib/mongoid/{validations → validatable}/associated.rb +4 -2
  172. data/lib/mongoid/{validations → validatable}/format.rb +1 -1
  173. data/lib/mongoid/{validations → validatable}/length.rb +1 -1
  174. data/lib/mongoid/{validations → validatable}/localizable.rb +1 -1
  175. data/lib/mongoid/{validations → validatable}/macros.rb +4 -3
  176. data/lib/mongoid/{validations → validatable}/presence.rb +1 -1
  177. data/lib/mongoid/{validations → validatable}/queryable.rb +1 -2
  178. data/lib/mongoid/{validations → validatable}/uniqueness.rb +23 -19
  179. data/lib/mongoid/{validations.rb → validatable.rb} +23 -10
  180. data/lib/mongoid/version.rb +1 -1
  181. data/lib/mongoid.rb +10 -76
  182. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +13 -24
  183. data/lib/rails/generators/mongoid/model/model_generator.rb +0 -1
  184. data/lib/rails/generators/mongoid/model/templates/model.rb.tt +0 -3
  185. data/lib/rails/generators/mongoid_generator.rb +3 -40
  186. data/lib/rails/mongoid.rb +0 -122
  187. data/lib/support/ruby_version.rb +1 -1
  188. data/spec/app/models/account.rb +2 -6
  189. data/spec/app/models/acolyte.rb +2 -1
  190. data/spec/app/models/actor.rb +0 -1
  191. data/spec/app/models/address.rb +8 -3
  192. data/spec/app/models/animal.rb +1 -1
  193. data/spec/app/models/appointment.rb +3 -3
  194. data/spec/app/models/article.rb +1 -4
  195. data/spec/app/models/audio.rb +5 -0
  196. data/spec/app/models/author.rb +0 -2
  197. data/spec/app/models/band.rb +3 -2
  198. data/spec/app/models/bar.rb +1 -0
  199. data/spec/app/models/book.rb +1 -0
  200. data/spec/app/models/building.rb +0 -2
  201. data/spec/app/models/building_address.rb +0 -2
  202. data/spec/app/models/bus.rb +1 -1
  203. data/spec/app/models/canvas.rb +1 -1
  204. data/spec/app/models/contractor.rb +0 -2
  205. data/spec/app/models/country_code.rb +1 -1
  206. data/spec/app/models/definition.rb +2 -2
  207. data/spec/app/models/dog.rb +1 -1
  208. data/spec/app/models/dragon.rb +4 -0
  209. data/spec/app/models/drug.rb +1 -3
  210. data/spec/app/models/dungeon.rb +4 -0
  211. data/spec/app/models/edit.rb +5 -0
  212. data/spec/app/models/even.rb +7 -0
  213. data/spec/app/models/event.rb +1 -1
  214. data/spec/app/models/filesystem.rb +1 -0
  215. data/spec/app/models/fish.rb +0 -1
  216. data/spec/app/models/fruits.rb +6 -0
  217. data/spec/app/models/game.rb +0 -2
  218. data/spec/app/models/house.rb +1 -3
  219. data/spec/app/models/item.rb +1 -5
  220. data/spec/app/models/jar.rb +1 -1
  221. data/spec/app/models/label.rb +4 -4
  222. data/spec/app/models/line_item.rb +1 -1
  223. data/spec/app/models/login.rb +1 -1
  224. data/spec/app/models/message.rb +8 -0
  225. data/spec/app/models/movie.rb +1 -0
  226. data/spec/app/models/name.rb +3 -3
  227. data/spec/app/models/note.rb +3 -1
  228. data/spec/app/models/odd.rb +7 -0
  229. data/spec/app/models/oscar.rb +1 -1
  230. data/spec/app/models/parent_doc.rb +1 -1
  231. data/spec/app/models/person.rb +16 -10
  232. data/spec/app/models/phone.rb +1 -3
  233. data/spec/app/models/player.rb +3 -3
  234. data/spec/app/models/post.rb +5 -3
  235. data/spec/app/models/preference.rb +1 -1
  236. data/spec/app/models/quiz.rb +0 -3
  237. data/spec/app/models/record.rb +10 -5
  238. data/spec/app/models/registry.rb +1 -1
  239. data/spec/app/models/server.rb +1 -1
  240. data/spec/app/models/service.rb +3 -3
  241. data/spec/app/models/sound.rb +5 -0
  242. data/spec/app/models/symptom.rb +1 -1
  243. data/spec/app/models/template.rb +1 -1
  244. data/spec/app/models/title.rb +0 -1
  245. data/spec/app/models/track.rb +5 -5
  246. data/spec/app/models/tree.rb +3 -3
  247. data/spec/app/models/video.rb +1 -5
  248. data/spec/app/models/wiki_page.rb +2 -5
  249. data/spec/app/models/word.rb +3 -0
  250. data/spec/app/models/word_origin.rb +1 -1
  251. data/spec/config/mongoid.yml +7 -8
  252. data/spec/helpers.rb +18 -0
  253. data/spec/mongoid/atomic/modifiers_spec.rb +22 -22
  254. data/spec/mongoid/atomic/paths/embedded/many_spec.rb +8 -49
  255. data/spec/mongoid/atomic/paths/embedded/one_spec.rb +7 -49
  256. data/spec/mongoid/atomic/paths/root_spec.rb +3 -61
  257. data/spec/mongoid/atomic/paths_spec.rb +19 -19
  258. data/spec/mongoid/atomic_spec.rb +19 -19
  259. data/spec/mongoid/{nested_attributes_spec.rb → attributes/nested_spec.rb} +335 -448
  260. data/spec/mongoid/attributes/readonly_spec.rb +58 -18
  261. data/spec/mongoid/attributes_spec.rb +300 -436
  262. data/spec/mongoid/{dirty_spec.rb → changeable_spec.rb} +203 -153
  263. data/spec/mongoid/{components_spec.rb → composable_spec.rb} +3 -3
  264. data/spec/mongoid/config/environment_spec.rb +3 -3
  265. data/spec/mongoid/config/options_spec.rb +6 -6
  266. data/spec/mongoid/config_spec.rb +24 -48
  267. data/spec/mongoid/contextual/aggregable/memory_spec.rb +12 -12
  268. data/spec/mongoid/contextual/aggregable/mongo_spec.rb +46 -38
  269. data/spec/mongoid/contextual/atomic_spec.rb +69 -59
  270. data/spec/mongoid/contextual/find_and_modify_spec.rb +14 -14
  271. data/spec/mongoid/contextual/geo_near_spec.rb +22 -22
  272. data/spec/mongoid/contextual/map_reduce_spec.rb +27 -27
  273. data/spec/mongoid/contextual/memory_spec.rb +151 -94
  274. data/spec/mongoid/contextual/mongo_spec.rb +238 -150
  275. data/spec/mongoid/contextual/none_spec.rb +127 -0
  276. data/spec/mongoid/contextual/text_search_spec.rb +209 -0
  277. data/spec/mongoid/copyable_spec.rb +56 -68
  278. data/spec/mongoid/criteria/findable_spec.rb +991 -0
  279. data/spec/mongoid/{criterion/inspection_spec.rb → criteria/inspectable_spec.rb} +5 -5
  280. data/spec/mongoid/{criterion → criteria}/marshalable_spec.rb +2 -2
  281. data/spec/mongoid/criteria/modifiable_spec.rb +1255 -0
  282. data/spec/mongoid/{criterion/scoping_spec.rb → criteria/scopable_spec.rb} +37 -37
  283. data/spec/mongoid/criteria_spec.rb +576 -2293
  284. data/spec/mongoid/document_spec.rb +166 -120
  285. data/spec/mongoid/equality_spec.rb +22 -22
  286. data/spec/mongoid/errors/ambiguous_relationship_spec.rb +3 -3
  287. data/spec/mongoid/errors/callback_spec.rb +3 -3
  288. data/spec/mongoid/errors/delete_restriction_spec.rb +3 -3
  289. data/spec/mongoid/errors/document_not_destroyed_spec.rb +33 -0
  290. data/spec/mongoid/errors/document_not_found_spec.rb +11 -11
  291. data/spec/mongoid/errors/eager_load_spec.rb +3 -3
  292. data/spec/mongoid/errors/invalid_collection_spec.rb +3 -3
  293. data/spec/mongoid/errors/invalid_config_option_spec.rb +3 -3
  294. data/spec/mongoid/errors/invalid_field_option_spec.rb +3 -3
  295. data/spec/mongoid/errors/invalid_field_spec.rb +3 -3
  296. data/spec/mongoid/errors/invalid_find_spec.rb +3 -3
  297. data/spec/mongoid/errors/invalid_includes_spec.rb +3 -3
  298. data/spec/mongoid/errors/invalid_index_spec.rb +3 -3
  299. data/spec/mongoid/errors/invalid_options_spec.rb +3 -3
  300. data/spec/mongoid/errors/invalid_path_spec.rb +3 -3
  301. data/spec/mongoid/errors/invalid_scope_spec.rb +5 -5
  302. data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +3 -3
  303. data/spec/mongoid/errors/invalid_storage_options_spec.rb +3 -3
  304. data/spec/mongoid/errors/invalid_time_spec.rb +3 -3
  305. data/spec/mongoid/errors/inverse_not_found_spec.rb +3 -3
  306. data/spec/mongoid/errors/mixed_relations_spec.rb +3 -3
  307. data/spec/mongoid/errors/mixed_session_configuration_spec.rb +3 -3
  308. data/spec/mongoid/errors/mongoid_error_spec.rb +8 -8
  309. data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +3 -3
  310. data/spec/mongoid/errors/no_environment_spec.rb +3 -3
  311. data/spec/mongoid/errors/no_map_reduce_output_spec.rb +3 -3
  312. data/spec/mongoid/errors/no_metadata_spec.rb +3 -3
  313. data/spec/mongoid/errors/no_parent_spec.rb +3 -3
  314. data/spec/mongoid/errors/no_session_config_spec.rb +3 -3
  315. data/spec/mongoid/errors/no_session_database_spec.rb +3 -3
  316. data/spec/mongoid/errors/no_session_hosts_spec.rb +3 -3
  317. data/spec/mongoid/errors/no_sessions_config_spec.rb +3 -3
  318. data/spec/mongoid/errors/readonly_attribute_spec.rb +3 -3
  319. data/spec/mongoid/errors/readonly_document_spec.rb +29 -0
  320. data/spec/mongoid/errors/scope_overwrite_spec.rb +3 -3
  321. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +3 -3
  322. data/spec/mongoid/errors/unknown_attribute_spec.rb +5 -5
  323. data/spec/mongoid/errors/unsaved_document_spec.rb +3 -3
  324. data/spec/mongoid/errors/unsupported_javascript_spec.rb +3 -3
  325. data/spec/mongoid/errors/validations_spec.rb +7 -7
  326. data/spec/mongoid/extensions/array_spec.rb +61 -61
  327. data/spec/mongoid/extensions/big_decimal_spec.rb +11 -11
  328. data/spec/mongoid/extensions/binary_spec.rb +12 -12
  329. data/spec/mongoid/extensions/boolean_spec.rb +18 -18
  330. data/spec/mongoid/extensions/date_spec.rb +13 -13
  331. data/spec/mongoid/extensions/date_time_spec.rb +8 -8
  332. data/spec/mongoid/extensions/false_class_spec.rb +5 -5
  333. data/spec/mongoid/extensions/float_spec.rb +29 -15
  334. data/spec/mongoid/extensions/hash_spec.rb +29 -29
  335. data/spec/mongoid/extensions/integer_spec.rb +15 -15
  336. data/spec/mongoid/extensions/module_spec.rb +2 -2
  337. data/spec/mongoid/extensions/nil_class_spec.rb +1 -1
  338. data/spec/mongoid/extensions/object_id_spec.rb +134 -134
  339. data/spec/mongoid/extensions/object_spec.rb +26 -26
  340. data/spec/mongoid/extensions/range_spec.rb +61 -12
  341. data/spec/mongoid/extensions/regexp_spec.rb +4 -4
  342. data/spec/mongoid/extensions/set_spec.rb +4 -4
  343. data/spec/mongoid/extensions/string_spec.rb +35 -46
  344. data/spec/mongoid/extensions/symbol_spec.rb +9 -9
  345. data/spec/mongoid/extensions/time_spec.rb +49 -49
  346. data/spec/mongoid/extensions/time_with_zone_spec.rb +34 -34
  347. data/spec/mongoid/extensions/true_class_spec.rb +5 -5
  348. data/spec/mongoid/extensions_spec.rb +15 -0
  349. data/spec/mongoid/factory_spec.rb +15 -15
  350. data/spec/mongoid/fields/foreign_key_spec.rb +73 -66
  351. data/spec/mongoid/fields/internal/foreign_keys/array_spec.rb +15 -15
  352. data/spec/mongoid/fields/internal/foreign_keys/object_spec.rb +22 -22
  353. data/spec/mongoid/fields/localized_spec.rb +38 -23
  354. data/spec/mongoid/fields/standard_spec.rb +12 -12
  355. data/spec/mongoid/fields_spec.rb +263 -217
  356. data/spec/mongoid/{finders_spec.rb → findable_spec.rb} +127 -27
  357. data/spec/mongoid/indexable/specification_spec.rb +102 -0
  358. data/spec/mongoid/{indexes_spec.rb → indexable_spec.rb} +171 -51
  359. data/spec/mongoid/{inspection_spec.rb → inspectable_spec.rb} +6 -14
  360. data/spec/mongoid/{callbacks_spec.rb → interceptable_spec.rb} +117 -116
  361. data/spec/mongoid/log_subscriber_spec.rb +75 -0
  362. data/spec/mongoid/loggable_spec.rb +1 -1
  363. data/spec/mongoid/{matchers → matchable}/all_spec.rb +4 -4
  364. data/spec/mongoid/{matchers → matchable}/and_spec.rb +11 -11
  365. data/spec/mongoid/{matchers → matchable}/default_spec.rb +15 -15
  366. data/spec/mongoid/{matchers → matchable}/exists_spec.rb +5 -5
  367. data/spec/mongoid/{matchers → matchable}/gt_spec.rb +9 -8
  368. data/spec/mongoid/{matchers → matchable}/gte_spec.rb +7 -7
  369. data/spec/mongoid/matchable/in_spec.rb +49 -0
  370. data/spec/mongoid/{matchers → matchable}/lt_spec.rb +7 -7
  371. data/spec/mongoid/{matchers → matchable}/lte_spec.rb +7 -7
  372. data/spec/mongoid/{matchers → matchable}/ne_spec.rb +3 -3
  373. data/spec/mongoid/matchable/nin_spec.rb +48 -0
  374. data/spec/mongoid/{matchers → matchable}/or_spec.rb +6 -6
  375. data/spec/mongoid/{matchers → matchable}/size_spec.rb +3 -3
  376. data/spec/mongoid/{matchers_spec.rb → matchable_spec.rb} +41 -41
  377. data/spec/mongoid/persistable/creatable_spec.rb +512 -0
  378. data/spec/mongoid/persistable/deletable_spec.rb +218 -0
  379. data/spec/mongoid/persistable/destroyable_spec.rb +192 -0
  380. data/spec/mongoid/persistable/incrementable_spec.rb +173 -0
  381. data/spec/mongoid/persistable/logical_spec.rb +143 -0
  382. data/spec/mongoid/persistable/poppable_spec.rb +115 -0
  383. data/spec/mongoid/persistable/pullable_spec.rb +228 -0
  384. data/spec/mongoid/persistable/pushable_spec.rb +258 -0
  385. data/spec/mongoid/persistable/renamable_spec.rb +135 -0
  386. data/spec/mongoid/persistable/savable_spec.rb +461 -0
  387. data/spec/mongoid/persistable/settable_spec.rb +139 -0
  388. data/spec/mongoid/persistable/unsettable_spec.rb +155 -0
  389. data/spec/mongoid/persistable/updatable_spec.rb +558 -0
  390. data/spec/mongoid/persistable/upsertable_spec.rb +106 -0
  391. data/spec/mongoid/persistable_spec.rb +206 -0
  392. data/spec/mongoid/{atomic/positionable_spec.rb → positional_spec.rb} +19 -14
  393. data/spec/mongoid/query_cache_spec.rb +231 -0
  394. data/spec/mongoid/railties/document_spec.rb +2 -2
  395. data/spec/mongoid/relations/accessors_spec.rb +53 -145
  396. data/spec/mongoid/relations/auto_save_spec.rb +37 -17
  397. data/spec/mongoid/relations/bindings/embedded/in_spec.rb +12 -12
  398. data/spec/mongoid/relations/bindings/embedded/many_spec.rb +3 -3
  399. data/spec/mongoid/relations/bindings/embedded/one_spec.rb +5 -5
  400. data/spec/mongoid/relations/bindings/referenced/in_spec.rb +26 -26
  401. data/spec/mongoid/relations/bindings/referenced/many_spec.rb +10 -10
  402. data/spec/mongoid/relations/bindings/referenced/many_to_many_spec.rb +19 -19
  403. data/spec/mongoid/relations/bindings/referenced/one_spec.rb +12 -12
  404. data/spec/mongoid/relations/builders/embedded/in_spec.rb +4 -4
  405. data/spec/mongoid/relations/builders/embedded/many_spec.rb +18 -18
  406. data/spec/mongoid/relations/builders/embedded/one_spec.rb +11 -11
  407. data/spec/mongoid/relations/builders/nested_attributes/many_spec.rb +12 -13
  408. data/spec/mongoid/relations/builders/nested_attributes/one_spec.rb +14 -14
  409. data/spec/mongoid/relations/builders/referenced/in_spec.rb +24 -35
  410. data/spec/mongoid/relations/builders/referenced/many_spec.rb +15 -15
  411. data/spec/mongoid/relations/builders/referenced/many_to_many_spec.rb +18 -18
  412. data/spec/mongoid/relations/builders/referenced/one_spec.rb +12 -25
  413. data/spec/mongoid/relations/builders_spec.rb +21 -21
  414. data/spec/mongoid/relations/cascading/delete_spec.rb +9 -9
  415. data/spec/mongoid/relations/cascading/destroy_spec.rb +6 -6
  416. data/spec/mongoid/relations/cascading/nullify_spec.rb +4 -4
  417. data/spec/mongoid/relations/cascading/restrict_spec.rb +7 -7
  418. data/spec/mongoid/relations/cascading_spec.rb +16 -16
  419. data/spec/mongoid/relations/constraint_spec.rb +8 -7
  420. data/spec/mongoid/relations/conversions_spec.rb +16 -14
  421. data/spec/mongoid/relations/counter_cache_spec.rb +85 -0
  422. data/spec/mongoid/relations/cyclic_spec.rb +18 -18
  423. data/spec/mongoid/relations/eager/belongs_to_spec.rb +154 -0
  424. data/spec/mongoid/relations/eager/has_and_belongs_to_many_spec.rb +117 -0
  425. data/spec/mongoid/relations/eager/has_many_spec.rb +207 -0
  426. data/spec/mongoid/relations/eager/has_one_spec.rb +163 -0
  427. data/spec/mongoid/relations/eager_spec.rb +228 -0
  428. data/spec/mongoid/relations/embedded/dirty_spec.rb +8 -8
  429. data/spec/mongoid/relations/embedded/in_spec.rb +56 -57
  430. data/spec/mongoid/relations/embedded/many_spec.rb +393 -372
  431. data/spec/mongoid/relations/embedded/one_spec.rb +108 -141
  432. data/spec/mongoid/relations/macros_spec.rb +108 -102
  433. data/spec/mongoid/relations/metadata_spec.rb +180 -255
  434. data/spec/mongoid/relations/options_spec.rb +1 -1
  435. data/spec/mongoid/relations/polymorphic_spec.rb +13 -17
  436. data/spec/mongoid/relations/proxy_spec.rb +2 -2
  437. data/spec/mongoid/relations/referenced/in_spec.rb +128 -303
  438. data/spec/mongoid/relations/referenced/many_spec.rb +434 -527
  439. data/spec/mongoid/relations/referenced/many_to_many_spec.rb +352 -424
  440. data/spec/mongoid/relations/referenced/one_spec.rb +149 -264
  441. data/spec/mongoid/relations/reflections_spec.rb +6 -6
  442. data/spec/mongoid/relations/synchronization_spec.rb +46 -50
  443. data/spec/mongoid/relations/targets/enumerable_spec.rb +118 -118
  444. data/spec/mongoid/relations/touchable_spec.rb +333 -0
  445. data/spec/mongoid/relations_spec.rb +16 -15
  446. data/spec/mongoid/{reloading_spec.rb → reloadable_spec.rb} +20 -60
  447. data/spec/mongoid/{scoping_spec.rb → scopable_spec.rb} +89 -164
  448. data/spec/mongoid/selectable_spec.rb +134 -0
  449. data/spec/mongoid/{serialization_spec.rb → serializable_spec.rb} +129 -82
  450. data/spec/mongoid/sessions/factory_spec.rb +49 -28
  451. data/spec/mongoid/sessions/mongo_uri_spec.rb +7 -7
  452. data/spec/mongoid/sessions/options_spec.rb +107 -0
  453. data/spec/mongoid/sessions_spec.rb +289 -178
  454. data/spec/mongoid/{sharding_spec.rb → shardable_spec.rb} +8 -8
  455. data/spec/mongoid/{state_spec.rb → stateful_spec.rb} +36 -11
  456. data/spec/mongoid/tasks/database_rake_spec.rb +285 -0
  457. data/spec/mongoid/tasks/database_spec.rb +160 -0
  458. data/spec/mongoid/threaded_spec.rb +17 -70
  459. data/spec/mongoid/timestamps/created/short_spec.rb +6 -6
  460. data/spec/mongoid/timestamps/created_spec.rb +5 -5
  461. data/spec/mongoid/timestamps/timeless_spec.rb +6 -6
  462. data/spec/mongoid/timestamps/updated/short_spec.rb +11 -11
  463. data/spec/mongoid/timestamps/updated_spec.rb +9 -13
  464. data/spec/mongoid/timestamps_spec.rb +9 -13
  465. data/spec/mongoid/{hierarchy_spec.rb → traversable_spec.rb} +19 -19
  466. data/spec/mongoid/{validations → validatable}/associated_spec.rb +45 -22
  467. data/spec/mongoid/{validations → validatable}/format_spec.rb +6 -6
  468. data/spec/mongoid/{validations → validatable}/length_spec.rb +14 -14
  469. data/spec/mongoid/{validations → validatable}/numericality_spec.rb +1 -1
  470. data/spec/mongoid/{validations → validatable}/presence_spec.rb +37 -44
  471. data/spec/mongoid/{validations → validatable}/uniqueness_spec.rb +184 -192
  472. data/spec/mongoid/{validations_spec.rb → validatable_spec.rb} +28 -28
  473. data/spec/mongoid_spec.rb +8 -8
  474. data/spec/rails/mongoid_spec.rb +19 -350
  475. data/spec/spec_helper.rb +24 -15
  476. metadata +259 -251
  477. data/lib/mongoid/atomic/positionable.rb +0 -73
  478. data/lib/mongoid/components.rb +0 -92
  479. data/lib/mongoid/config/inflections.rb +0 -6
  480. data/lib/mongoid/contextual/eager.rb +0 -158
  481. data/lib/mongoid/criterion/findable.rb +0 -179
  482. data/lib/mongoid/errors/versioning_not_on_root.rb +0 -23
  483. data/lib/mongoid/identity_map.rb +0 -163
  484. data/lib/mongoid/json.rb +0 -16
  485. data/lib/mongoid/matchers/strategies.rb +0 -97
  486. data/lib/mongoid/matchers.rb +0 -32
  487. data/lib/mongoid/multi_parameter_attributes.rb +0 -105
  488. data/lib/mongoid/nested_attributes.rb +0 -78
  489. data/lib/mongoid/observer.rb +0 -192
  490. data/lib/mongoid/paranoia.rb +0 -136
  491. data/lib/mongoid/persistence/atomic/add_to_set.rb +0 -47
  492. data/lib/mongoid/persistence/atomic/bit.rb +0 -35
  493. data/lib/mongoid/persistence/atomic/inc.rb +0 -45
  494. data/lib/mongoid/persistence/atomic/operation.rb +0 -154
  495. data/lib/mongoid/persistence/atomic/pop.rb +0 -32
  496. data/lib/mongoid/persistence/atomic/pull.rb +0 -32
  497. data/lib/mongoid/persistence/atomic/pull_all.rb +0 -32
  498. data/lib/mongoid/persistence/atomic/push.rb +0 -25
  499. data/lib/mongoid/persistence/atomic/push_all.rb +0 -25
  500. data/lib/mongoid/persistence/atomic/rename.rb +0 -30
  501. data/lib/mongoid/persistence/atomic/sets.rb +0 -28
  502. data/lib/mongoid/persistence/atomic/unset.rb +0 -27
  503. data/lib/mongoid/persistence/atomic.rb +0 -231
  504. data/lib/mongoid/persistence/deletion.rb +0 -31
  505. data/lib/mongoid/persistence/insertion.rb +0 -38
  506. data/lib/mongoid/persistence/modification.rb +0 -35
  507. data/lib/mongoid/persistence/operations/embedded/insert.rb +0 -46
  508. data/lib/mongoid/persistence/operations/embedded/remove.rb +0 -43
  509. data/lib/mongoid/persistence/operations/insert.rb +0 -34
  510. data/lib/mongoid/persistence/operations/remove.rb +0 -33
  511. data/lib/mongoid/persistence/operations/update.rb +0 -59
  512. data/lib/mongoid/persistence/operations/upsert.rb +0 -28
  513. data/lib/mongoid/persistence/operations.rb +0 -214
  514. data/lib/mongoid/persistence/upsertion.rb +0 -31
  515. data/lib/mongoid/persistence.rb +0 -357
  516. data/lib/mongoid/unit_of_work.rb +0 -61
  517. data/lib/mongoid/versioning.rb +0 -217
  518. data/lib/rack/mongoid/middleware/identity_map.rb +0 -39
  519. data/lib/rack/mongoid.rb +0 -2
  520. data/lib/rails/generators/mongoid/observer/observer_generator.rb +0 -17
  521. data/lib/rails/generators/mongoid/observer/templates/observer.rb.tt +0 -4
  522. data/spec/app/models/actor_observer.rb +0 -15
  523. data/spec/app/models/callback_recorder.rb +0 -25
  524. data/spec/app/models/paranoid_phone.rb +0 -25
  525. data/spec/app/models/paranoid_post.rb +0 -36
  526. data/spec/app/models/phone_observer.rb +0 -6
  527. data/spec/mongoid/#atomic_spec.rb# +0 -365
  528. data/spec/mongoid/attributes/processing_spec.rb +0 -149
  529. data/spec/mongoid/criterion/destructive_spec.rb +0 -101
  530. data/spec/mongoid/criterion/modifiable_spec.rb +0 -409
  531. data/spec/mongoid/criterion/modification_spec.rb +0 -402
  532. data/spec/mongoid/errors/versioning_not_on_root_spec.rb +0 -29
  533. data/spec/mongoid/identity_map_spec.rb +0 -564
  534. data/spec/mongoid/json_spec.rb +0 -33
  535. data/spec/mongoid/matchers/in_spec.rb +0 -25
  536. data/spec/mongoid/matchers/nin_spec.rb +0 -25
  537. data/spec/mongoid/multi_parameter_attributes_spec.rb +0 -128
  538. data/spec/mongoid/observer_spec.rb +0 -290
  539. data/spec/mongoid/paranoia_spec.rb +0 -759
  540. data/spec/mongoid/persistence/atomic/add_to_set_spec.rb +0 -262
  541. data/spec/mongoid/persistence/atomic/bit_spec.rb +0 -88
  542. data/spec/mongoid/persistence/atomic/inc_spec.rb +0 -133
  543. data/spec/mongoid/persistence/atomic/pop_spec.rb +0 -111
  544. data/spec/mongoid/persistence/atomic/pull_all_spec.rb +0 -77
  545. data/spec/mongoid/persistence/atomic/pull_spec.rb +0 -80
  546. data/spec/mongoid/persistence/atomic/push_all_spec.rb +0 -77
  547. data/spec/mongoid/persistence/atomic/push_spec.rb +0 -77
  548. data/spec/mongoid/persistence/atomic/rename_spec.rb +0 -42
  549. data/spec/mongoid/persistence/atomic/sets_spec.rb +0 -154
  550. data/spec/mongoid/persistence/atomic/unset_spec.rb +0 -65
  551. data/spec/mongoid/persistence/atomic_spec.rb +0 -216
  552. data/spec/mongoid/persistence/operations/embedded/insert_spec.rb +0 -191
  553. data/spec/mongoid/persistence/operations/embedded/remove_spec.rb +0 -8
  554. data/spec/mongoid/persistence/operations/insert_spec.rb +0 -149
  555. data/spec/mongoid/persistence/operations/remove_spec.rb +0 -113
  556. data/spec/mongoid/persistence/operations/update_spec.rb +0 -141
  557. data/spec/mongoid/persistence/operations/upsert_spec.rb +0 -59
  558. data/spec/mongoid/persistence/operations_spec.rb +0 -313
  559. data/spec/mongoid/persistence_spec.rb +0 -2279
  560. data/spec/mongoid/unit_of_work_spec.rb +0 -196
  561. data/spec/mongoid/versioning_spec.rb +0 -540
  562. data/spec/rack/mongoid/middleware/identity_map_spec.rb +0 -72
@@ -1,13 +1,15 @@
1
1
  class Name
2
2
  include Mongoid::Document
3
+ include Mongoid::Attributes::Dynamic
3
4
 
4
- field :_id, type: String, default: ->{
5
+ field :_id, type: String, overwrite: true, default: ->{
5
6
  "#{first_name}-#{last_name}"
6
7
  }
7
8
 
8
9
  field :first_name, type: String
9
10
  field :last_name, type: String
10
11
  field :parent_title, type: String
12
+ field :middle, type: String
11
13
 
12
14
  embeds_many :translations, validate: false
13
15
  embeds_one :language, as: :translatable, validate: false
@@ -15,8 +17,6 @@ class Name
15
17
 
16
18
  accepts_nested_attributes_for :language
17
19
 
18
- attr_protected :_id, :id
19
-
20
20
  def set_parent=(set = false)
21
21
  self.parent_title = namable.title if set
22
22
  end
@@ -1,11 +1,13 @@
1
1
  class Note
2
2
  include Mongoid::Document
3
3
  field :text, type: String
4
- field :saved, type: Boolean, default: false
4
+ field :saved, type: Mongoid::Boolean, default: false
5
5
  embedded_in :noteable, polymorphic: true
6
6
 
7
7
  after_save :update_saved
8
8
 
9
+ scope :permanent, ->{ where(saved: true) }
10
+
9
11
  def update_saved
10
12
  self.saved = true
11
13
  end
@@ -0,0 +1,7 @@
1
+ class Odd
2
+ include Mongoid::Document
3
+ field :name
4
+
5
+ belongs_to :parent, class_name: 'Even', inverse_of: :odds
6
+ has_many :evens, inverse_of: :parent
7
+ end
@@ -1,7 +1,7 @@
1
1
  class Oscar
2
2
  include Mongoid::Document
3
3
  field :title, type: String
4
- field :destroy_after_save, type: Boolean, default: false
4
+ field :destroy_after_save, type: Mongoid::Boolean, default: false
5
5
  before_save :complain
6
6
 
7
7
  def complain
@@ -2,5 +2,5 @@ class ParentDoc
2
2
  include Mongoid::Document
3
3
  field :statistic
4
4
  field :children_order, type: Array, default: [] # hold all the children's id
5
- embeds_many :child_docs
5
+ embeds_many :children, class_name: 'ChildDoc', inverse_of: :parent_doc
6
6
  end
@@ -1,5 +1,6 @@
1
1
  class Person
2
2
  include Mongoid::Document
3
+ include Mongoid::Attributes::Dynamic
3
4
  attr_accessor :mode
4
5
 
5
6
  class_attribute :somebody_elses_important_class_options
@@ -7,8 +8,8 @@ class Person
7
8
 
8
9
  field :username, default: -> { "arthurnn#{rand(0..10)}" }
9
10
  field :title
10
- field :terms, type: Boolean
11
- field :pets, type: Boolean, default: false
11
+ field :terms, type: Mongoid::Boolean
12
+ field :pets, type: Mongoid::Boolean, default: false
12
13
  field :age, type: Integer, default: "100"
13
14
  field :dob, type: Date
14
15
  field :employer_id
@@ -23,7 +24,7 @@ class Person
23
24
  field :owner_id, type: Integer
24
25
  field :security_code
25
26
  field :reading, type: Object
26
- field :bson_id, type: Moped::BSON::ObjectId
27
+ field :bson_id, type: BSON::ObjectId
27
28
  field :pattern, type: Regexp
28
29
  field :override_me, type: Integer
29
30
  field :at, as: :aliased_timestamp, type: Time
@@ -31,6 +32,10 @@ class Person
31
32
  field :i, as: :inte, type: Integer
32
33
  field :a, as: :array, type: Array
33
34
  field :desc, localize: true
35
+ field :test_array, type: Array
36
+ field :overridden_setter, type: String
37
+ field :arrays, type: Array
38
+ field :range, type: Range
34
39
 
35
40
  index age: 1
36
41
  index addresses: 1
@@ -42,8 +47,6 @@ class Person
42
47
 
43
48
  attr_reader :rescored
44
49
 
45
- attr_protected :security_code, :owner_id, :appointments
46
-
47
50
  embeds_many :favorites, order: :title.desc, inverse_of: :perp, validate: false
48
51
  embeds_many :videos, order: [[ :title, :asc ]], validate: false
49
52
  embeds_many :phone_numbers, class_name: "Phone", validate: false
@@ -58,10 +61,10 @@ class Person
58
61
  end
59
62
 
60
63
  embeds_many :address_components, validate: false
61
- embeds_many :paranoid_phones, validate: false
62
64
  embeds_many :services, cascade_callbacks: true, validate: false
63
65
  embeds_many :symptoms, validate: false
64
66
  embeds_many :appointments, validate: false
67
+ embeds_many :messages, validate: false
65
68
 
66
69
  embeds_one :passport, autobuild: true, store_as: :pass, validate: false
67
70
  embeds_one :pet, class_name: "Animal", validate: false
@@ -90,7 +93,6 @@ class Person
90
93
  end
91
94
  end
92
95
  has_many :ordered_posts, order: :rating.desc, validate: false
93
- has_many :paranoid_posts, validate: false
94
96
  has_and_belongs_to_many \
95
97
  :preferences,
96
98
  index: true,
@@ -114,7 +116,6 @@ class Person
114
116
  validate: false
115
117
 
116
118
  accepts_nested_attributes_for :addresses
117
- accepts_nested_attributes_for :paranoid_phones
118
119
  accepts_nested_attributes_for :name, update_only: true
119
120
  accepts_nested_attributes_for :pet, allow_destroy: true
120
121
  accepts_nested_attributes_for :game, allow_destroy: true
@@ -124,8 +125,8 @@ class Person
124
125
  accepts_nested_attributes_for :quiz
125
126
  accepts_nested_attributes_for :services, allow_destroy: true
126
127
 
127
- scope :minor, where(:age.lt => 18)
128
- scope :without_ssn, without(:ssn)
128
+ scope :minor, ->{ where(:age.lt => 18) }
129
+ scope :without_ssn, ->{ without(:ssn) }
129
130
  scope :search, ->(query){ any_of({ title: query }) }
130
131
 
131
132
  def score_with_rescoring=(score)
@@ -153,6 +154,11 @@ class Person
153
154
  read_attribute(:override_me).to_s
154
155
  end
155
156
 
157
+ def overridden_setter=(value)
158
+ @override_called = true
159
+ super(value)
160
+ end
161
+
156
162
  class << self
157
163
  def accepted
158
164
  scoped.where(terms: true)
@@ -1,9 +1,7 @@
1
1
  class Phone
2
2
  include Mongoid::Document
3
3
 
4
- attr_accessor :number_in_observer
5
-
6
- field :_id, type: String, default: ->{ number }
4
+ field :_id, type: String, overwrite: true, default: ->{ number }
7
5
 
8
6
  field :number
9
7
  embeds_one :country_code
@@ -1,18 +1,18 @@
1
1
  class Player
2
2
  include Mongoid::Document
3
- field :active, type: Boolean
3
+ field :active, type: Mongoid::Boolean
4
4
  field :frags, type: Integer
5
5
  field :deaths, type: Integer
6
6
  field :impressions, type: Integer, default: 0
7
7
  field :status
8
8
 
9
- scope :active, where(active: true) do
9
+ scope :active, ->{ where(active: true) } do
10
10
  def extension
11
11
  "extension"
12
12
  end
13
13
  end
14
14
 
15
- scope :inactive, where(active: false)
15
+ scope :inactive, ->{ where(active: false) }
16
16
  scope :frags_over, ->(count) { where(:frags.gt => count) }
17
17
  scope :deaths_under, ->(count) { where(:deaths.lt => count) }
18
18
  scope :deaths_over, ->(count) { where(:deaths.gt => count) }
@@ -1,10 +1,11 @@
1
1
  class Post
2
2
  include Mongoid::Document
3
+ include Mongoid::Attributes::Dynamic
3
4
 
4
5
  field :title, type: String
5
6
  field :content, type: String
6
7
  field :rating, type: Integer
7
- field :person_title, type: String, default: ->{ person.try(:title) }
8
+ field :person_title, type: String, default: ->{ person.title if ivar(:person) }
8
9
 
9
10
  attr_accessor :before_add_called, :after_add_called, :before_remove_called, :after_remove_called
10
11
 
@@ -14,8 +15,9 @@ class Post
14
15
  has_many :videos, validate: false
15
16
  has_many :roles, validate: false
16
17
 
17
- scope :recent, where(created_at: { "$lt" => Time.now, "$gt" => 30.days.ago })
18
- scope :posting, where(:content.in => [ "Posting" ])
18
+ scope :recent, ->{ where(created_at: { "$lt" => Time.now, "$gt" => 30.days.ago }) }
19
+ scope :posting, ->{ where(:content.in => [ "Posting" ]) }
20
+ scope :open, ->{ where(title: "open") }
19
21
 
20
22
  validates_format_of :title, without: /\$\$\$/
21
23
 
@@ -5,5 +5,5 @@ class Preference
5
5
  field :ranking, type: Integer
6
6
  has_and_belongs_to_many :people, validate: false
7
7
  validates_length_of :name, minimum: 2, allow_nil: true
8
- scope :posting, where(:value.in => [ "Posting" ])
8
+ scope :posting, ->{ where(:value.in => [ "Posting" ]) }
9
9
  end
@@ -4,7 +4,4 @@ class Quiz
4
4
  field :name, type: String
5
5
  field :topic, type: String
6
6
  embeds_many :pages
7
-
8
- attr_accessible :topic, as: [ :default, :admin ]
9
- attr_accessible :name, as: :default
10
7
  end
@@ -2,11 +2,11 @@ class Record
2
2
  include Mongoid::Document
3
3
  field :name, type: String
4
4
 
5
- field :before_create_called, type: Boolean, default: false
6
- field :before_save_called, type: Boolean, default: false
7
- field :before_update_called, type: Boolean, default: false
8
- field :before_validation_called, type: Boolean, default: false
9
- field :before_destroy_called, type: Boolean, default: false
5
+ field :before_create_called, type: Mongoid::Boolean, default: false
6
+ field :before_save_called, type: Mongoid::Boolean, default: false
7
+ field :before_update_called, type: Mongoid::Boolean, default: false
8
+ field :before_validation_called, type: Mongoid::Boolean, default: false
9
+ field :before_destroy_called, type: Mongoid::Boolean, default: false
10
10
 
11
11
  embedded_in :band
12
12
  embeds_many :tracks, cascade_callbacks: true
@@ -43,4 +43,9 @@ class Record
43
43
  def access_band
44
44
  band.name
45
45
  end
46
+
47
+ def dont_call_me_twice
48
+ end
49
+
50
+ validate { dont_call_me_twice }
46
51
  end
@@ -1,4 +1,4 @@
1
1
  class Registry
2
2
  include Mongoid::Document
3
- field :data, type: Moped::BSON::Binary
3
+ field :data, type: BSON::Binary
4
4
  end
@@ -1,7 +1,7 @@
1
1
  class Server
2
2
  include Mongoid::Document
3
3
  field :name, type: String
4
- field :after, type: Boolean, default: false
4
+ field :after, type: Mongoid::Boolean, default: false
5
5
  belongs_to :node
6
6
  embeds_many :filesystems, validate: false
7
7
  accepts_nested_attributes_for :filesystems
@@ -1,9 +1,9 @@
1
1
  class Service
2
2
  include Mongoid::Document
3
3
  field :sid
4
- field :before_destroy_called, type: Boolean, default: false
5
- field :after_destroy_called, type: Boolean, default: false
6
- field :after_initialize_called, type: Boolean, default: false
4
+ field :before_destroy_called, type: Mongoid::Boolean, default: false
5
+ field :after_destroy_called, type: Mongoid::Boolean, default: false
6
+ field :after_initialize_called, type: Mongoid::Boolean, default: false
7
7
  embedded_in :person
8
8
  belongs_to :target, class_name: "User"
9
9
  validates_numericality_of :sid
@@ -0,0 +1,5 @@
1
+ class Sound
2
+ include Mongoid::Document
3
+ field :active, type: Mongoid::Boolean
4
+ default_scope ->{ where(active: true) }
5
+ end
@@ -2,5 +2,5 @@ class Symptom
2
2
  include Mongoid::Document
3
3
  field :name, type: String
4
4
  embedded_in :person
5
- default_scope asc(:name)
5
+ default_scope ->{ asc(:name) }
6
6
  end
@@ -1,5 +1,5 @@
1
1
  class Template
2
2
  include Mongoid::Document
3
- field :active, type: Boolean, default: false
3
+ field :active, type: Mongoid::Boolean, default: false
4
4
  validates :active, presence: true
5
5
  end
@@ -1,4 +1,3 @@
1
1
  class Title
2
2
  include Mongoid::Document
3
- belongs_to :paranoid_post
4
3
  end
@@ -2,11 +2,11 @@ class Track
2
2
  include Mongoid::Document
3
3
  field :name, type: String
4
4
 
5
- field :before_create_called, type: Boolean, default: false
6
- field :before_save_called, type: Boolean, default: false
7
- field :before_update_called, type: Boolean, default: false
8
- field :before_validation_called, type: Boolean, default: false
9
- field :before_destroy_called, type: Boolean, default: false
5
+ field :before_create_called, type: Mongoid::Boolean, default: false
6
+ field :before_save_called, type: Mongoid::Boolean, default: false
7
+ field :before_update_called, type: Mongoid::Boolean, default: false
8
+ field :before_validation_called, type: Mongoid::Boolean, default: false
9
+ field :before_destroy_called, type: Mongoid::Boolean, default: false
10
10
 
11
11
  embedded_in :record
12
12
 
@@ -2,8 +2,8 @@ class Tree
2
2
  include Mongoid::Document
3
3
 
4
4
  field :name
5
- field :evergreen, type: Boolean
5
+ field :evergreen, type: Mongoid::Boolean
6
6
 
7
- scope :verdant, where(evergreen: true)
8
- default_scope asc(:name)
7
+ scope :verdant, ->{ where(evergreen: true) }
8
+ default_scope ->{ asc(:name) }
9
9
  end
@@ -9,9 +9,5 @@ class Video
9
9
  belongs_to :post
10
10
  belongs_to :game
11
11
 
12
- default_scope asc(:title)
13
-
14
- attr_accessible :title, as: [ :default, :admin ]
15
- attr_accessible :year, as: [ :default ]
16
- attr_accessible :person_attributes, as: [ :default ]
12
+ default_scope ->{ asc(:title) }
17
13
  end
@@ -1,16 +1,13 @@
1
1
  class WikiPage
2
2
  include Mongoid::Document
3
3
  include Mongoid::Timestamps
4
- include Mongoid::Versioning
5
4
 
6
5
  field :title, type: String
7
- field :transient_property, type: String, versioned: false
6
+ field :transient_property, type: String
8
7
  field :author, type: String
9
8
  field :description, type: String, localize: true
10
- max_versions 5
11
-
12
- attr_protected :author
13
9
 
10
+ embeds_many :edits, validate: false
14
11
  has_many :comments, dependent: :destroy, validate: false
15
12
  has_many :child_pages, class_name: "WikiPage", dependent: :delete, inverse_of: :parent_pages
16
13
  belongs_to :parent_pages, class_name: "WikiPage", inverse_of: :child_pages
@@ -1,6 +1,7 @@
1
1
  class Word
2
2
  include Mongoid::Document
3
3
  field :name, type: String
4
+ field :origin, type: String
4
5
 
5
6
  belongs_to :dictionary
6
7
 
@@ -9,4 +10,6 @@ class Word
9
10
  embeds_one :pronunciation, validate: false
10
11
 
11
12
  accepts_nested_attributes_for :definitions, allow_destroy: true
13
+
14
+ index({ name: "text" }, default_language: "english")
12
15
  end
@@ -1,7 +1,7 @@
1
1
  class WordOrigin
2
2
  include Mongoid::Document
3
3
 
4
- field :_id, type: Integer, default: ->{ origin_id }
4
+ field :_id, type: Integer, overwrite: true, default: ->{ origin_id }
5
5
 
6
6
  field :origin_id, type: Integer
7
7
  field :country, type: String
@@ -5,7 +5,7 @@ test:
5
5
  hosts:
6
6
  - <%=ENV["MONGOID_SPEC_HOST"]%>:<%=ENV["MONGOID_SPEC_PORT"]%>
7
7
  options:
8
- consistency: :strong
8
+ read: primary
9
9
  mongohq_single:
10
10
  database: <%=ENV["MONGOHQ_SINGLE_NAME"]%>
11
11
  username: <%=ENV["MONGOHQ_SINGLE_USER"]%>
@@ -13,8 +13,9 @@ test:
13
13
  hosts:
14
14
  - <%=ENV["MONGOHQ_SINGLE_URL"]%>
15
15
  options:
16
- safe: true
17
- consistency: :strong
16
+ write:
17
+ w: 1
18
+ read: primary
18
19
  mongohq_repl:
19
20
  database: <%=ENV["MONGOHQ_REPL_NAME"]%>
20
21
  username: <%=ENV["MONGOHQ_REPL_USER"]%>
@@ -23,18 +24,16 @@ test:
23
24
  - <%=ENV["MONGOHQ_REPL_1_URL"]%>
24
25
  - <%=ENV["MONGOHQ_REPL_2_URL"]%>
25
26
  options:
26
- consistency: :strong
27
- safe: true
27
+ read: primary
28
+ write:
29
+ w: majority
28
30
  mongohq_repl_uri:
29
31
  uri: <%= ENV["MONGOHQ_REPL_URI"]%>
30
32
  options:
31
- allow_dynamic_fields: true
32
- identity_map_enabled: false
33
33
  include_root_in_json: false
34
34
  include_type_for_serialization: false
35
35
  preload_models: false
36
36
  scope_overwrite_exception: false
37
37
  raise_not_found_error: true
38
- skip_version_check: true
39
38
  use_activesupport_time_zone: true
40
39
  use_utc: false
data/spec/helpers.rb ADDED
@@ -0,0 +1,18 @@
1
+ require 'mongoid/support/query_counter'
2
+
3
+ module Mongoid
4
+ module SpecHelpers
5
+ def expect_query(number, &block)
6
+ query_counter = Mongoid::QueryCounter.new
7
+ query_counter.instrument(&block)
8
+ expect(query_counter.events.size).to(eq(number), %[
9
+ Expected to receive #{number} queries, it received #{query_counter.events.size}
10
+ #{query_counter.inspect}
11
+ ])
12
+ end
13
+
14
+ def expect_no_queries(&block)
15
+ expect_query(0, &block)
16
+ end
17
+ end
18
+ end
@@ -15,7 +15,7 @@ describe Mongoid::Atomic::Modifiers do
15
15
  end
16
16
 
17
17
  it "does not contain any operations" do
18
- modifiers.should eq({})
18
+ expect(modifiers).to eq({})
19
19
  end
20
20
  end
21
21
 
@@ -32,7 +32,7 @@ describe Mongoid::Atomic::Modifiers do
32
32
  end
33
33
 
34
34
  it "adds the add to set with each modifiers" do
35
- modifiers.should eq({
35
+ expect(modifiers).to eq({
36
36
  "$addToSet" => { "preference_ids" => { "$each" => [ "one", "two" ] }}
37
37
  })
38
38
  end
@@ -50,7 +50,7 @@ describe Mongoid::Atomic::Modifiers do
50
50
  end
51
51
 
52
52
  it "adds the add to set with each modifiers" do
53
- modifiers.should eq({
53
+ expect(modifiers).to eq({
54
54
  "$addToSet" =>
55
55
  { "preference_ids" =>
56
56
  { "$each" => [ "one", "two", "three" ] }
@@ -70,7 +70,7 @@ describe Mongoid::Atomic::Modifiers do
70
70
  end
71
71
 
72
72
  it "does not contain any pull operations" do
73
- modifiers.should eq({})
73
+ expect(modifiers).to eq({})
74
74
  end
75
75
  end
76
76
 
@@ -87,7 +87,7 @@ describe Mongoid::Atomic::Modifiers do
87
87
  end
88
88
 
89
89
  it "adds the push all modifiers" do
90
- modifiers.should eq(
90
+ expect(modifiers).to eq(
91
91
  { "$pull" => { "addresses" => { "_id" => { "$in" => [ "one" ]}}}}
92
92
  )
93
93
  end
@@ -109,7 +109,7 @@ describe Mongoid::Atomic::Modifiers do
109
109
  end
110
110
 
111
111
  it "overwrites the previous pulls" do
112
- modifiers.should eq(
112
+ expect(modifiers).to eq(
113
113
  { "$pull" => { "addresses" => { "_id" => { "$in" => [ "two" ]}}}}
114
114
  )
115
115
  end
@@ -126,7 +126,7 @@ describe Mongoid::Atomic::Modifiers do
126
126
  end
127
127
 
128
128
  it "does not contain any pull operations" do
129
- modifiers.should eq({})
129
+ expect(modifiers).to eq({})
130
130
  end
131
131
  end
132
132
 
@@ -143,7 +143,7 @@ describe Mongoid::Atomic::Modifiers do
143
143
  end
144
144
 
145
145
  it "adds the push all modifiers" do
146
- modifiers.should eq(
146
+ expect(modifiers).to eq(
147
147
  { "$pullAll" =>
148
148
  { "addresses" => [
149
149
  { "_id" => "one" }
@@ -170,7 +170,7 @@ describe Mongoid::Atomic::Modifiers do
170
170
  end
171
171
 
172
172
  it "adds the pull all modifiers" do
173
- modifiers.should eq(
173
+ expect(modifiers).to eq(
174
174
  { "$pullAll" =>
175
175
  { "addresses" => [
176
176
  { "street" => "Hobrechtstr." },
@@ -193,7 +193,7 @@ describe Mongoid::Atomic::Modifiers do
193
193
  end
194
194
 
195
195
  it "does not contain any push operations" do
196
- modifiers.should eq({})
196
+ expect(modifiers).to eq({})
197
197
  end
198
198
  end
199
199
 
@@ -210,7 +210,7 @@ describe Mongoid::Atomic::Modifiers do
210
210
  end
211
211
 
212
212
  it "adds the push all modifiers" do
213
- modifiers.should eq(
213
+ expect(modifiers).to eq(
214
214
  { "$pushAll" =>
215
215
  { "addresses" => [
216
216
  { "street" => "Oxford St" }
@@ -237,7 +237,7 @@ describe Mongoid::Atomic::Modifiers do
237
237
  end
238
238
 
239
239
  it "adds the push all modifiers" do
240
- modifiers.should eq(
240
+ expect(modifiers).to eq(
241
241
  { "$pushAll" =>
242
242
  { "addresses" => [
243
243
  { "street" => "Hobrechtstr." },
@@ -268,7 +268,7 @@ describe Mongoid::Atomic::Modifiers do
268
268
  end
269
269
 
270
270
  it "adds the push all modifiers to the conflicts hash" do
271
- modifiers.should eq(
271
+ expect(modifiers).to eq(
272
272
  { "$set" => { "addresses.0.street" => "Bond" },
273
273
  conflicts: { "$pushAll" =>
274
274
  { "addresses" => [
@@ -297,7 +297,7 @@ describe Mongoid::Atomic::Modifiers do
297
297
  end
298
298
 
299
299
  it "adds the push all modifiers to the conflicts hash" do
300
- modifiers.should eq(
300
+ expect(modifiers).to eq(
301
301
  { "$pullAll" => {
302
302
  "addresses" => { "street" => "Bond St" }},
303
303
  conflicts: { "$pushAll" =>
@@ -327,7 +327,7 @@ describe Mongoid::Atomic::Modifiers do
327
327
  end
328
328
 
329
329
  it "adds the push all modifiers to the conflicts hash" do
330
- modifiers.should eq(
330
+ expect(modifiers).to eq(
331
331
  { "$pushAll" => {
332
332
  "addresses.0.locations" => [{ "street" => "Bond St" }]},
333
333
  conflicts: { "$pushAll" =>
@@ -360,14 +360,14 @@ describe Mongoid::Atomic::Modifiers do
360
360
  end
361
361
 
362
362
  it "adds the sets to the modifiers" do
363
- modifiers.should eq({ "$set" => { "title" => "Sir" } })
363
+ expect(modifiers).to eq({ "$set" => { "title" => "Sir" } })
364
364
  end
365
365
  end
366
366
 
367
367
  context "when the sets contain an id" do
368
368
 
369
369
  let(:sets) do
370
- { "_id" => Moped::BSON::ObjectId.new }
370
+ { "_id" => BSON::ObjectId.new }
371
371
  end
372
372
 
373
373
  before do
@@ -375,7 +375,7 @@ describe Mongoid::Atomic::Modifiers do
375
375
  end
376
376
 
377
377
  it "does not include the id sets" do
378
- modifiers.should eq({})
378
+ expect(modifiers).to eq({})
379
379
  end
380
380
  end
381
381
 
@@ -386,7 +386,7 @@ describe Mongoid::Atomic::Modifiers do
386
386
  end
387
387
 
388
388
  it "does not contain set operations" do
389
- modifiers.should eq({})
389
+ expect(modifiers).to eq({})
390
390
  end
391
391
  end
392
392
  end
@@ -407,7 +407,7 @@ describe Mongoid::Atomic::Modifiers do
407
407
  end
408
408
 
409
409
  it "adds the set modifiers to the conflicts hash" do
410
- modifiers.should eq(
410
+ expect(modifiers).to eq(
411
411
  { "$pullAll" =>
412
412
  { "addresses" => [
413
413
  { "_id" => "one" }
@@ -437,7 +437,7 @@ describe Mongoid::Atomic::Modifiers do
437
437
  end
438
438
 
439
439
  it "adds the unsets to the modifiers" do
440
- modifiers.should eq({ "$unset" => { "addresses" => true } })
440
+ expect(modifiers).to eq({ "$unset" => { "addresses" => true } })
441
441
  end
442
442
  end
443
443
 
@@ -448,7 +448,7 @@ describe Mongoid::Atomic::Modifiers do
448
448
  end
449
449
 
450
450
  it "does not contain unset operations" do
451
- modifiers.should eq({})
451
+ expect(modifiers).to eq({})
452
452
  end
453
453
  end
454
454
  end