mongoid 3.1.7 → 4.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (567) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +470 -9
  3. data/README.md +10 -7
  4. data/lib/config/locales/en.yml +34 -20
  5. data/lib/mongoid/atomic/paths/embedded/many.rb +1 -1
  6. data/lib/mongoid/atomic/paths/embedded/one.rb +1 -1
  7. data/lib/mongoid/atomic/paths/embedded.rb +0 -30
  8. data/lib/mongoid/atomic/paths/root.rb +0 -13
  9. data/lib/mongoid/atomic.rb +3 -14
  10. data/lib/mongoid/attributes/dynamic.rb +154 -0
  11. data/lib/mongoid/attributes/nested.rb +82 -0
  12. data/lib/mongoid/attributes/processing.rb +13 -66
  13. data/lib/mongoid/attributes.rb +63 -99
  14. data/lib/mongoid/{dirty.rb → changeable.rb} +32 -2
  15. data/lib/mongoid/composable.rb +105 -0
  16. data/lib/mongoid/config/options.rb +1 -1
  17. data/lib/mongoid/config.rb +3 -9
  18. data/lib/mongoid/contextual/aggregable/memory.rb +2 -2
  19. data/lib/mongoid/contextual/aggregable/mongo.rb +5 -9
  20. data/lib/mongoid/contextual/atomic.rb +53 -53
  21. data/lib/mongoid/contextual/geo_near.rb +1 -1
  22. data/lib/mongoid/contextual/map_reduce.rb +4 -2
  23. data/lib/mongoid/contextual/memory.rb +23 -11
  24. data/lib/mongoid/contextual/mongo.rb +75 -57
  25. data/lib/mongoid/contextual/none.rb +90 -0
  26. data/lib/mongoid/contextual/text_search.rb +178 -0
  27. data/lib/mongoid/contextual.rb +2 -0
  28. data/lib/mongoid/copyable.rb +2 -3
  29. data/lib/mongoid/{criterion → criteria}/findable.rb +7 -47
  30. data/lib/mongoid/{criterion/inspection.rb → criteria/inspectable.rb} +2 -2
  31. data/lib/mongoid/{criterion → criteria}/marshalable.rb +3 -1
  32. data/lib/mongoid/{criterion → criteria}/modifiable.rb +28 -8
  33. data/lib/mongoid/criteria/permission.rb +70 -0
  34. data/lib/mongoid/{criterion/scoping.rb → criteria/scopable.rb} +2 -2
  35. data/lib/mongoid/criteria.rb +39 -34
  36. data/lib/mongoid/document.rb +39 -24
  37. data/lib/mongoid/errors/document_not_destroyed.rb +25 -0
  38. data/lib/mongoid/errors/document_not_found.rb +2 -1
  39. data/lib/mongoid/errors/invalid_storage_options.rb +1 -1
  40. data/lib/mongoid/errors/invalid_storage_parent.rb +26 -0
  41. data/lib/mongoid/errors/invalid_value.rb +16 -0
  42. data/lib/mongoid/errors/mongoid_error.rb +1 -1
  43. data/lib/mongoid/errors/readonly_document.rb +24 -0
  44. data/lib/mongoid/errors.rb +4 -1
  45. data/lib/mongoid/extensions/array.rb +3 -3
  46. data/lib/mongoid/extensions/big_decimal.rb +1 -1
  47. data/lib/mongoid/extensions/boolean.rb +15 -17
  48. data/lib/mongoid/extensions/date.rb +1 -1
  49. data/lib/mongoid/extensions/date_time.rb +3 -3
  50. data/lib/mongoid/extensions/float.rb +2 -1
  51. data/lib/mongoid/extensions/hash.rb +3 -3
  52. data/lib/mongoid/extensions/integer.rb +1 -1
  53. data/lib/mongoid/extensions/object.rb +7 -7
  54. data/lib/mongoid/extensions/object_id.rb +5 -5
  55. data/lib/mongoid/extensions/range.rb +9 -3
  56. data/lib/mongoid/extensions/regexp.rb +1 -1
  57. data/lib/mongoid/extensions/set.rb +1 -1
  58. data/lib/mongoid/extensions/string.rb +6 -18
  59. data/lib/mongoid/extensions/symbol.rb +1 -1
  60. data/lib/mongoid/extensions/time.rb +3 -3
  61. data/lib/mongoid/extensions/time_with_zone.rb +1 -1
  62. data/lib/mongoid/extensions.rb +15 -7
  63. data/lib/mongoid/factory.rb +8 -6
  64. data/lib/mongoid/fields/foreign_key.rb +3 -3
  65. data/lib/mongoid/fields/localized.rb +1 -1
  66. data/lib/mongoid/fields/standard.rb +5 -17
  67. data/lib/mongoid/fields/validators/macro.rb +15 -5
  68. data/lib/mongoid/fields.rb +41 -8
  69. data/lib/mongoid/{finders.rb → findable.rb} +35 -7
  70. data/lib/mongoid/indexable/specification.rb +104 -0
  71. data/lib/mongoid/{indexes → indexable}/validators/options.rb +2 -1
  72. data/lib/mongoid/{indexes.rb → indexable.rb} +50 -55
  73. data/lib/mongoid/{inspection.rb → inspectable.rb} +15 -11
  74. data/lib/mongoid/{callbacks.rb → interceptable.rb} +30 -62
  75. data/lib/mongoid/log_subscriber.rb +55 -0
  76. data/lib/mongoid/{matchers → matchable}/all.rb +1 -1
  77. data/lib/mongoid/{matchers → matchable}/and.rb +2 -2
  78. data/lib/mongoid/{matchers → matchable}/default.rb +1 -1
  79. data/lib/mongoid/{matchers → matchable}/exists.rb +1 -1
  80. data/lib/mongoid/{matchers → matchable}/gt.rb +1 -1
  81. data/lib/mongoid/{matchers → matchable}/gte.rb +1 -1
  82. data/lib/mongoid/{matchers → matchable}/in.rb +2 -2
  83. data/lib/mongoid/{matchers → matchable}/lt.rb +1 -1
  84. data/lib/mongoid/{matchers → matchable}/lte.rb +1 -1
  85. data/lib/mongoid/{matchers → matchable}/ne.rb +1 -1
  86. data/lib/mongoid/{matchers → matchable}/nin.rb +3 -2
  87. data/lib/mongoid/{matchers → matchable}/or.rb +2 -2
  88. data/lib/mongoid/{matchers → matchable}/size.rb +1 -1
  89. data/lib/mongoid/matchable.rb +152 -0
  90. data/lib/mongoid/persistable/creatable.rb +189 -0
  91. data/lib/mongoid/persistable/deletable.rb +149 -0
  92. data/lib/mongoid/persistable/destroyable.rb +60 -0
  93. data/lib/mongoid/persistable/incrementable.rb +36 -0
  94. data/lib/mongoid/persistable/logical.rb +38 -0
  95. data/lib/mongoid/persistable/poppable.rb +39 -0
  96. data/lib/mongoid/persistable/pullable.rb +55 -0
  97. data/lib/mongoid/persistable/pushable.rb +62 -0
  98. data/lib/mongoid/persistable/renamable.rb +35 -0
  99. data/lib/mongoid/persistable/savable.rb +52 -0
  100. data/lib/mongoid/persistable/settable.rb +33 -0
  101. data/lib/mongoid/persistable/unsettable.rb +36 -0
  102. data/lib/mongoid/persistable/updatable.rb +153 -0
  103. data/lib/mongoid/persistable/upsertable.rb +55 -0
  104. data/lib/mongoid/persistable.rb +216 -0
  105. data/lib/mongoid/positional.rb +71 -0
  106. data/lib/mongoid/query_cache.rb +255 -0
  107. data/lib/mongoid/railtie.rb +34 -60
  108. data/lib/mongoid/railties/database.rake +9 -25
  109. data/lib/mongoid/relations/accessors.rb +15 -51
  110. data/lib/mongoid/relations/auto_save.rb +15 -36
  111. data/lib/mongoid/relations/binding.rb +2 -25
  112. data/lib/mongoid/relations/bindings/embedded/in.rb +1 -1
  113. data/lib/mongoid/relations/bindings/embedded/many.rb +1 -3
  114. data/lib/mongoid/relations/bindings/referenced/in.rb +3 -8
  115. data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +4 -2
  116. data/lib/mongoid/relations/builder.rb +1 -1
  117. data/lib/mongoid/relations/builders/embedded/one.rb +1 -1
  118. data/lib/mongoid/relations/builders/nested_attributes/many.rb +10 -13
  119. data/lib/mongoid/relations/builders/nested_attributes/one.rb +5 -6
  120. data/lib/mongoid/relations/builders/referenced/in.rb +1 -1
  121. data/lib/mongoid/relations/builders/referenced/many.rb +1 -2
  122. data/lib/mongoid/relations/builders/referenced/many_to_many.rb +1 -2
  123. data/lib/mongoid/relations/builders/referenced/one.rb +1 -1
  124. data/lib/mongoid/relations/builders.rb +2 -2
  125. data/lib/mongoid/relations/cascading.rb +3 -5
  126. data/lib/mongoid/relations/constraint.rb +1 -1
  127. data/lib/mongoid/relations/conversions.rb +1 -1
  128. data/lib/mongoid/relations/counter_cache.rb +39 -15
  129. data/lib/mongoid/relations/eager/base.rb +149 -0
  130. data/lib/mongoid/relations/eager/belongs_to.rb +31 -0
  131. data/lib/mongoid/relations/eager/has_and_belongs_to_many.rb +47 -0
  132. data/lib/mongoid/relations/eager/has_many.rb +38 -0
  133. data/lib/mongoid/relations/eager/has_one.rb +30 -0
  134. data/lib/mongoid/relations/eager.rb +46 -0
  135. data/lib/mongoid/relations/embedded/batchable.rb +4 -5
  136. data/lib/mongoid/relations/embedded/in.rb +4 -4
  137. data/lib/mongoid/relations/embedded/many.rb +14 -32
  138. data/lib/mongoid/relations/embedded/one.rb +1 -1
  139. data/lib/mongoid/relations/macros.rb +3 -4
  140. data/lib/mongoid/relations/many.rb +51 -31
  141. data/lib/mongoid/relations/marshalable.rb +3 -3
  142. data/lib/mongoid/relations/metadata.rb +14 -79
  143. data/lib/mongoid/relations/nested_builder.rb +2 -2
  144. data/lib/mongoid/relations/one.rb +1 -1
  145. data/lib/mongoid/relations/options.rb +1 -0
  146. data/lib/mongoid/relations/polymorphic.rb +0 -1
  147. data/lib/mongoid/relations/proxy.rb +21 -41
  148. data/lib/mongoid/relations/referenced/in.rb +4 -20
  149. data/lib/mongoid/relations/referenced/many.rb +22 -35
  150. data/lib/mongoid/relations/referenced/many_to_many.rb +19 -42
  151. data/lib/mongoid/relations/referenced/one.rb +6 -25
  152. data/lib/mongoid/relations/synchronization.rb +4 -4
  153. data/lib/mongoid/relations/targets/enumerable.rb +10 -10
  154. data/lib/mongoid/relations/touchable.rb +34 -1
  155. data/lib/mongoid/relations.rb +11 -25
  156. data/lib/mongoid/{reloading.rb → reloadable.rb} +7 -5
  157. data/lib/mongoid/{scoping.rb → scopable.rb} +36 -36
  158. data/lib/mongoid/selectable.rb +59 -0
  159. data/lib/mongoid/{serialization.rb → serializable.rb} +11 -2
  160. data/lib/mongoid/sessions/factory.rb +2 -0
  161. data/lib/mongoid/sessions/options.rb +185 -0
  162. data/lib/mongoid/sessions/storage_options.rb +140 -0
  163. data/lib/mongoid/sessions/thread_options.rb +19 -0
  164. data/lib/mongoid/sessions/validators/storage.rb +16 -3
  165. data/lib/mongoid/sessions.rb +37 -345
  166. data/lib/mongoid/{sharding.rb → shardable.rb} +5 -1
  167. data/lib/mongoid/{state.rb → stateful.rb} +13 -1
  168. data/lib/mongoid/support/query_counter.rb +23 -0
  169. data/lib/mongoid/tasks/database.rake +31 -0
  170. data/lib/mongoid/tasks/database.rb +107 -0
  171. data/lib/mongoid/threaded/lifecycle.rb +0 -28
  172. data/lib/mongoid/threaded.rb +26 -172
  173. data/lib/mongoid/timestamps/updated/short.rb +2 -2
  174. data/lib/mongoid/{hierarchy.rb → traversable.rb} +15 -7
  175. data/lib/mongoid/{validations → validatable}/associated.rb +4 -2
  176. data/lib/mongoid/{validations → validatable}/format.rb +1 -1
  177. data/lib/mongoid/{validations → validatable}/length.rb +1 -1
  178. data/lib/mongoid/{validations → validatable}/localizable.rb +1 -1
  179. data/lib/mongoid/{validations → validatable}/macros.rb +4 -3
  180. data/lib/mongoid/{validations → validatable}/presence.rb +1 -1
  181. data/lib/mongoid/{validations → validatable}/queryable.rb +1 -2
  182. data/lib/mongoid/{validations → validatable}/uniqueness.rb +25 -21
  183. data/lib/mongoid/{validations.rb → validatable.rb} +23 -10
  184. data/lib/mongoid/version.rb +1 -1
  185. data/lib/mongoid.rb +10 -76
  186. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +46 -25
  187. data/lib/rails/generators/mongoid/model/model_generator.rb +0 -1
  188. data/lib/rails/generators/mongoid/model/templates/model.rb.tt +0 -3
  189. data/lib/rails/generators/mongoid_generator.rb +3 -40
  190. data/lib/rails/mongoid.rb +0 -122
  191. data/lib/support/ruby_version.rb +1 -1
  192. data/spec/app/models/account.rb +2 -6
  193. data/spec/app/models/acolyte.rb +2 -1
  194. data/spec/app/models/actor.rb +0 -1
  195. data/spec/app/models/address.rb +8 -3
  196. data/spec/app/models/animal.rb +1 -1
  197. data/spec/app/models/appointment.rb +3 -3
  198. data/spec/app/models/article.rb +1 -4
  199. data/spec/app/models/audio.rb +5 -0
  200. data/spec/app/models/author.rb +0 -2
  201. data/spec/app/models/band.rb +3 -2
  202. data/spec/app/models/bar.rb +1 -0
  203. data/spec/app/models/book.rb +1 -0
  204. data/spec/app/models/building.rb +0 -2
  205. data/spec/app/models/building_address.rb +0 -2
  206. data/spec/app/models/bus.rb +1 -1
  207. data/spec/app/models/canvas.rb +1 -1
  208. data/spec/app/models/contextable_item.rb +5 -0
  209. data/spec/app/models/contractor.rb +0 -2
  210. data/spec/app/models/country_code.rb +1 -1
  211. data/spec/app/models/definition.rb +2 -2
  212. data/spec/app/models/dog.rb +1 -1
  213. data/spec/app/models/dragon.rb +4 -0
  214. data/spec/app/models/drug.rb +1 -3
  215. data/spec/app/models/dungeon.rb +4 -0
  216. data/spec/app/models/edit.rb +5 -0
  217. data/spec/app/models/even.rb +7 -0
  218. data/spec/app/models/event.rb +1 -1
  219. data/spec/app/models/filesystem.rb +1 -0
  220. data/spec/app/models/fish.rb +0 -1
  221. data/spec/app/models/fruits.rb +6 -0
  222. data/spec/app/models/game.rb +0 -2
  223. data/spec/app/models/house.rb +1 -3
  224. data/spec/app/models/id_key.rb +6 -0
  225. data/spec/app/models/item.rb +1 -5
  226. data/spec/app/models/jar.rb +1 -1
  227. data/spec/app/models/label.rb +4 -4
  228. data/spec/app/models/line_item.rb +1 -1
  229. data/spec/app/models/login.rb +1 -1
  230. data/spec/app/models/message.rb +8 -0
  231. data/spec/app/models/movie.rb +1 -0
  232. data/spec/app/models/name.rb +3 -3
  233. data/spec/app/models/note.rb +3 -1
  234. data/spec/app/models/odd.rb +7 -0
  235. data/spec/app/models/oscar.rb +1 -1
  236. data/spec/app/models/parent_doc.rb +1 -1
  237. data/spec/app/models/person.rb +16 -10
  238. data/spec/app/models/phone.rb +1 -3
  239. data/spec/app/models/player.rb +3 -3
  240. data/spec/app/models/post.rb +5 -3
  241. data/spec/app/models/preference.rb +1 -1
  242. data/spec/app/models/quiz.rb +0 -3
  243. data/spec/app/models/record.rb +10 -5
  244. data/spec/app/models/registry.rb +1 -1
  245. data/spec/app/models/server.rb +1 -1
  246. data/spec/app/models/service.rb +3 -3
  247. data/spec/app/models/sound.rb +5 -0
  248. data/spec/app/models/symptom.rb +1 -1
  249. data/spec/app/models/template.rb +1 -1
  250. data/spec/app/models/title.rb +0 -1
  251. data/spec/app/models/track.rb +5 -5
  252. data/spec/app/models/tree.rb +3 -3
  253. data/spec/app/models/video.rb +1 -5
  254. data/spec/app/models/wiki_page.rb +2 -5
  255. data/spec/app/models/word.rb +3 -0
  256. data/spec/app/models/word_origin.rb +1 -1
  257. data/spec/config/mongoid.yml +7 -8
  258. data/spec/helpers.rb +18 -0
  259. data/spec/mongoid/atomic/modifiers_spec.rb +22 -22
  260. data/spec/mongoid/atomic/paths/embedded/many_spec.rb +8 -49
  261. data/spec/mongoid/atomic/paths/embedded/one_spec.rb +7 -49
  262. data/spec/mongoid/atomic/paths/root_spec.rb +3 -61
  263. data/spec/mongoid/atomic/paths_spec.rb +19 -19
  264. data/spec/mongoid/atomic_spec.rb +19 -19
  265. data/spec/mongoid/{nested_attributes_spec.rb → attributes/nested_spec.rb} +474 -592
  266. data/spec/mongoid/attributes/readonly_spec.rb +58 -18
  267. data/spec/mongoid/attributes_spec.rb +334 -434
  268. data/spec/mongoid/{dirty_spec.rb → changeable_spec.rb} +203 -153
  269. data/spec/mongoid/{components_spec.rb → composable_spec.rb} +3 -3
  270. data/spec/mongoid/config/environment_spec.rb +3 -3
  271. data/spec/mongoid/config/options_spec.rb +6 -6
  272. data/spec/mongoid/config_spec.rb +24 -48
  273. data/spec/mongoid/contextual/aggregable/memory_spec.rb +12 -12
  274. data/spec/mongoid/contextual/aggregable/mongo_spec.rb +46 -38
  275. data/spec/mongoid/contextual/atomic_spec.rb +59 -55
  276. data/spec/mongoid/contextual/find_and_modify_spec.rb +14 -14
  277. data/spec/mongoid/contextual/geo_near_spec.rb +22 -22
  278. data/spec/mongoid/contextual/map_reduce_spec.rb +27 -27
  279. data/spec/mongoid/contextual/memory_spec.rb +156 -94
  280. data/spec/mongoid/contextual/mongo_spec.rb +238 -150
  281. data/spec/mongoid/contextual/none_spec.rb +127 -0
  282. data/spec/mongoid/contextual/text_search_spec.rb +209 -0
  283. data/spec/mongoid/copyable_spec.rb +56 -68
  284. data/spec/mongoid/criteria/findable_spec.rb +991 -0
  285. data/spec/mongoid/{criterion/inspection_spec.rb → criteria/inspectable_spec.rb} +5 -5
  286. data/spec/mongoid/{criterion → criteria}/marshalable_spec.rb +2 -2
  287. data/spec/mongoid/criteria/modifiable_spec.rb +1252 -0
  288. data/spec/mongoid/{criterion/scoping_spec.rb → criteria/scopable_spec.rb} +37 -37
  289. data/spec/mongoid/criteria_spec.rb +713 -2419
  290. data/spec/mongoid/document_spec.rb +171 -121
  291. data/spec/mongoid/equality_spec.rb +22 -22
  292. data/spec/mongoid/errors/ambiguous_relationship_spec.rb +3 -3
  293. data/spec/mongoid/errors/callback_spec.rb +3 -3
  294. data/spec/mongoid/errors/delete_restriction_spec.rb +3 -3
  295. data/spec/mongoid/errors/document_not_destroyed_spec.rb +33 -0
  296. data/spec/mongoid/errors/document_not_found_spec.rb +11 -11
  297. data/spec/mongoid/errors/eager_load_spec.rb +3 -3
  298. data/spec/mongoid/errors/invalid_collection_spec.rb +3 -3
  299. data/spec/mongoid/errors/invalid_config_option_spec.rb +3 -3
  300. data/spec/mongoid/errors/invalid_field_option_spec.rb +3 -3
  301. data/spec/mongoid/errors/invalid_field_spec.rb +3 -3
  302. data/spec/mongoid/errors/invalid_find_spec.rb +3 -3
  303. data/spec/mongoid/errors/invalid_includes_spec.rb +3 -3
  304. data/spec/mongoid/errors/invalid_index_spec.rb +3 -3
  305. data/spec/mongoid/errors/invalid_options_spec.rb +3 -3
  306. data/spec/mongoid/errors/invalid_path_spec.rb +3 -3
  307. data/spec/mongoid/errors/invalid_scope_spec.rb +5 -5
  308. data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +3 -3
  309. data/spec/mongoid/errors/invalid_storage_options_spec.rb +3 -3
  310. data/spec/mongoid/errors/invalid_time_spec.rb +3 -3
  311. data/spec/mongoid/errors/inverse_not_found_spec.rb +3 -3
  312. data/spec/mongoid/errors/mixed_relations_spec.rb +3 -3
  313. data/spec/mongoid/errors/mixed_session_configuration_spec.rb +3 -3
  314. data/spec/mongoid/errors/mongoid_error_spec.rb +8 -8
  315. data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +3 -3
  316. data/spec/mongoid/errors/no_environment_spec.rb +3 -3
  317. data/spec/mongoid/errors/no_map_reduce_output_spec.rb +3 -3
  318. data/spec/mongoid/errors/no_metadata_spec.rb +3 -3
  319. data/spec/mongoid/errors/no_parent_spec.rb +3 -3
  320. data/spec/mongoid/errors/no_session_config_spec.rb +3 -3
  321. data/spec/mongoid/errors/no_session_database_spec.rb +3 -3
  322. data/spec/mongoid/errors/no_session_hosts_spec.rb +3 -3
  323. data/spec/mongoid/errors/no_sessions_config_spec.rb +3 -3
  324. data/spec/mongoid/errors/readonly_attribute_spec.rb +3 -3
  325. data/spec/mongoid/errors/readonly_document_spec.rb +29 -0
  326. data/spec/mongoid/errors/scope_overwrite_spec.rb +3 -3
  327. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +3 -3
  328. data/spec/mongoid/errors/unknown_attribute_spec.rb +5 -5
  329. data/spec/mongoid/errors/unsaved_document_spec.rb +3 -3
  330. data/spec/mongoid/errors/unsupported_javascript_spec.rb +3 -3
  331. data/spec/mongoid/errors/validations_spec.rb +7 -7
  332. data/spec/mongoid/extensions/array_spec.rb +61 -61
  333. data/spec/mongoid/extensions/big_decimal_spec.rb +11 -11
  334. data/spec/mongoid/extensions/binary_spec.rb +12 -12
  335. data/spec/mongoid/extensions/boolean_spec.rb +18 -18
  336. data/spec/mongoid/extensions/date_spec.rb +13 -13
  337. data/spec/mongoid/extensions/date_time_spec.rb +8 -8
  338. data/spec/mongoid/extensions/false_class_spec.rb +5 -5
  339. data/spec/mongoid/extensions/float_spec.rb +29 -15
  340. data/spec/mongoid/extensions/hash_spec.rb +29 -29
  341. data/spec/mongoid/extensions/integer_spec.rb +15 -15
  342. data/spec/mongoid/extensions/module_spec.rb +2 -2
  343. data/spec/mongoid/extensions/nil_class_spec.rb +1 -1
  344. data/spec/mongoid/extensions/object_id_spec.rb +134 -134
  345. data/spec/mongoid/extensions/object_spec.rb +26 -26
  346. data/spec/mongoid/extensions/range_spec.rb +61 -12
  347. data/spec/mongoid/extensions/regexp_spec.rb +4 -4
  348. data/spec/mongoid/extensions/set_spec.rb +4 -4
  349. data/spec/mongoid/extensions/string_spec.rb +35 -46
  350. data/spec/mongoid/extensions/symbol_spec.rb +9 -9
  351. data/spec/mongoid/extensions/time_spec.rb +49 -49
  352. data/spec/mongoid/extensions/time_with_zone_spec.rb +34 -34
  353. data/spec/mongoid/extensions/true_class_spec.rb +5 -5
  354. data/spec/mongoid/extensions_spec.rb +29 -0
  355. data/spec/mongoid/factory_spec.rb +15 -15
  356. data/spec/mongoid/fields/foreign_key_spec.rb +73 -66
  357. data/spec/mongoid/fields/internal/foreign_keys/array_spec.rb +15 -15
  358. data/spec/mongoid/fields/internal/foreign_keys/object_spec.rb +22 -22
  359. data/spec/mongoid/fields/localized_spec.rb +38 -23
  360. data/spec/mongoid/fields/standard_spec.rb +12 -12
  361. data/spec/mongoid/fields_spec.rb +263 -217
  362. data/spec/mongoid/findable_spec.rb +509 -0
  363. data/spec/mongoid/indexable/specification_spec.rb +102 -0
  364. data/spec/mongoid/{indexes_spec.rb → indexable_spec.rb} +171 -51
  365. data/spec/mongoid/{inspection_spec.rb → inspectable_spec.rb} +6 -14
  366. data/spec/mongoid/{callbacks_spec.rb → interceptable_spec.rb} +117 -116
  367. data/spec/mongoid/log_subscriber_spec.rb +75 -0
  368. data/spec/mongoid/loggable_spec.rb +1 -1
  369. data/spec/mongoid/{matchers → matchable}/all_spec.rb +4 -4
  370. data/spec/mongoid/{matchers → matchable}/and_spec.rb +11 -11
  371. data/spec/mongoid/{matchers → matchable}/default_spec.rb +15 -15
  372. data/spec/mongoid/{matchers → matchable}/exists_spec.rb +5 -5
  373. data/spec/mongoid/{matchers → matchable}/gt_spec.rb +9 -8
  374. data/spec/mongoid/{matchers → matchable}/gte_spec.rb +7 -7
  375. data/spec/mongoid/matchable/in_spec.rb +49 -0
  376. data/spec/mongoid/{matchers → matchable}/lt_spec.rb +7 -7
  377. data/spec/mongoid/{matchers → matchable}/lte_spec.rb +7 -7
  378. data/spec/mongoid/{matchers → matchable}/ne_spec.rb +3 -3
  379. data/spec/mongoid/matchable/nin_spec.rb +48 -0
  380. data/spec/mongoid/{matchers → matchable}/or_spec.rb +6 -6
  381. data/spec/mongoid/{matchers → matchable}/size_spec.rb +3 -3
  382. data/spec/mongoid/{matchers_spec.rb → matchable_spec.rb} +41 -41
  383. data/spec/mongoid/persistable/creatable_spec.rb +553 -0
  384. data/spec/mongoid/persistable/deletable_spec.rb +218 -0
  385. data/spec/mongoid/persistable/destroyable_spec.rb +192 -0
  386. data/spec/mongoid/persistable/incrementable_spec.rb +173 -0
  387. data/spec/mongoid/persistable/logical_spec.rb +143 -0
  388. data/spec/mongoid/persistable/poppable_spec.rb +115 -0
  389. data/spec/mongoid/persistable/pullable_spec.rb +228 -0
  390. data/spec/mongoid/persistable/pushable_spec.rb +258 -0
  391. data/spec/mongoid/persistable/renamable_spec.rb +135 -0
  392. data/spec/mongoid/persistable/savable_spec.rb +498 -0
  393. data/spec/mongoid/persistable/settable_spec.rb +162 -0
  394. data/spec/mongoid/persistable/unsettable_spec.rb +155 -0
  395. data/spec/mongoid/persistable/updatable_spec.rb +558 -0
  396. data/spec/mongoid/persistable/upsertable_spec.rb +106 -0
  397. data/spec/mongoid/persistable_spec.rb +206 -0
  398. data/spec/mongoid/{atomic/positionable_spec.rb → positional_spec.rb} +9 -9
  399. data/spec/mongoid/query_cache_spec.rb +263 -0
  400. data/spec/mongoid/railties/document_spec.rb +2 -2
  401. data/spec/mongoid/relations/accessors_spec.rb +53 -145
  402. data/spec/mongoid/relations/auto_save_spec.rb +37 -17
  403. data/spec/mongoid/relations/bindings/embedded/in_spec.rb +12 -12
  404. data/spec/mongoid/relations/bindings/embedded/many_spec.rb +3 -3
  405. data/spec/mongoid/relations/bindings/embedded/one_spec.rb +5 -5
  406. data/spec/mongoid/relations/bindings/referenced/in_spec.rb +26 -26
  407. data/spec/mongoid/relations/bindings/referenced/many_spec.rb +10 -10
  408. data/spec/mongoid/relations/bindings/referenced/many_to_many_spec.rb +19 -19
  409. data/spec/mongoid/relations/bindings/referenced/one_spec.rb +12 -12
  410. data/spec/mongoid/relations/builders/embedded/in_spec.rb +4 -4
  411. data/spec/mongoid/relations/builders/embedded/many_spec.rb +18 -18
  412. data/spec/mongoid/relations/builders/embedded/one_spec.rb +11 -11
  413. data/spec/mongoid/relations/builders/nested_attributes/many_spec.rb +12 -13
  414. data/spec/mongoid/relations/builders/nested_attributes/one_spec.rb +14 -14
  415. data/spec/mongoid/relations/builders/referenced/in_spec.rb +24 -35
  416. data/spec/mongoid/relations/builders/referenced/many_spec.rb +15 -15
  417. data/spec/mongoid/relations/builders/referenced/many_to_many_spec.rb +18 -18
  418. data/spec/mongoid/relations/builders/referenced/one_spec.rb +12 -25
  419. data/spec/mongoid/relations/builders_spec.rb +21 -21
  420. data/spec/mongoid/relations/cascading/delete_spec.rb +9 -9
  421. data/spec/mongoid/relations/cascading/destroy_spec.rb +6 -6
  422. data/spec/mongoid/relations/cascading/nullify_spec.rb +4 -4
  423. data/spec/mongoid/relations/cascading/restrict_spec.rb +7 -7
  424. data/spec/mongoid/relations/cascading_spec.rb +16 -16
  425. data/spec/mongoid/relations/constraint_spec.rb +8 -7
  426. data/spec/mongoid/relations/conversions_spec.rb +16 -14
  427. data/spec/mongoid/relations/counter_cache_spec.rb +85 -0
  428. data/spec/mongoid/relations/cyclic_spec.rb +18 -18
  429. data/spec/mongoid/relations/eager/belongs_to_spec.rb +154 -0
  430. data/spec/mongoid/relations/eager/has_and_belongs_to_many_spec.rb +117 -0
  431. data/spec/mongoid/relations/eager/has_many_spec.rb +207 -0
  432. data/spec/mongoid/relations/eager/has_one_spec.rb +163 -0
  433. data/spec/mongoid/relations/eager_spec.rb +228 -0
  434. data/spec/mongoid/relations/embedded/dirty_spec.rb +8 -8
  435. data/spec/mongoid/relations/embedded/in_spec.rb +56 -57
  436. data/spec/mongoid/relations/embedded/many_spec.rb +467 -372
  437. data/spec/mongoid/relations/embedded/one_spec.rb +108 -141
  438. data/spec/mongoid/relations/macros_spec.rb +108 -102
  439. data/spec/mongoid/relations/metadata_spec.rb +180 -255
  440. data/spec/mongoid/relations/options_spec.rb +1 -1
  441. data/spec/mongoid/relations/polymorphic_spec.rb +13 -17
  442. data/spec/mongoid/relations/proxy_spec.rb +2 -2
  443. data/spec/mongoid/relations/referenced/in_spec.rb +128 -303
  444. data/spec/mongoid/relations/referenced/many_spec.rb +587 -527
  445. data/spec/mongoid/relations/referenced/many_to_many_spec.rb +401 -424
  446. data/spec/mongoid/relations/referenced/one_spec.rb +149 -264
  447. data/spec/mongoid/relations/reflections_spec.rb +6 -6
  448. data/spec/mongoid/relations/synchronization_spec.rb +46 -50
  449. data/spec/mongoid/relations/targets/enumerable_spec.rb +118 -118
  450. data/spec/mongoid/relations/touchable_spec.rb +333 -0
  451. data/spec/mongoid/relations_spec.rb +16 -15
  452. data/spec/mongoid/{reloading_spec.rb → reloadable_spec.rb} +38 -55
  453. data/spec/mongoid/{scoping_spec.rb → scopable_spec.rb} +89 -164
  454. data/spec/mongoid/selectable_spec.rb +134 -0
  455. data/spec/mongoid/{serialization_spec.rb → serializable_spec.rb} +129 -82
  456. data/spec/mongoid/sessions/factory_spec.rb +49 -28
  457. data/spec/mongoid/sessions/mongo_uri_spec.rb +7 -7
  458. data/spec/mongoid/sessions/options_spec.rb +108 -0
  459. data/spec/mongoid/sessions_spec.rb +319 -178
  460. data/spec/mongoid/{sharding_spec.rb → shardable_spec.rb} +8 -8
  461. data/spec/mongoid/{state_spec.rb → stateful_spec.rb} +36 -11
  462. data/spec/mongoid/tasks/database_rake_spec.rb +285 -0
  463. data/spec/mongoid/tasks/database_spec.rb +160 -0
  464. data/spec/mongoid/threaded_spec.rb +17 -70
  465. data/spec/mongoid/timestamps/created/short_spec.rb +6 -6
  466. data/spec/mongoid/timestamps/created_spec.rb +5 -5
  467. data/spec/mongoid/timestamps/timeless_spec.rb +6 -6
  468. data/spec/mongoid/timestamps/updated/short_spec.rb +11 -11
  469. data/spec/mongoid/timestamps/updated_spec.rb +9 -13
  470. data/spec/mongoid/timestamps_spec.rb +9 -13
  471. data/spec/mongoid/{hierarchy_spec.rb → traversable_spec.rb} +19 -19
  472. data/spec/mongoid/{validations → validatable}/associated_spec.rb +45 -22
  473. data/spec/mongoid/{validations → validatable}/format_spec.rb +6 -6
  474. data/spec/mongoid/{validations → validatable}/length_spec.rb +14 -14
  475. data/spec/mongoid/{validations → validatable}/numericality_spec.rb +1 -1
  476. data/spec/mongoid/{validations → validatable}/presence_spec.rb +37 -44
  477. data/spec/mongoid/{validations → validatable}/uniqueness_spec.rb +184 -192
  478. data/spec/mongoid/{validations_spec.rb → validatable_spec.rb} +28 -28
  479. data/spec/mongoid_spec.rb +8 -8
  480. data/spec/rails/mongoid_spec.rb +19 -350
  481. data/spec/spec_helper.rb +26 -15
  482. metadata +262 -247
  483. data/lib/mongoid/atomic/positionable.rb +0 -73
  484. data/lib/mongoid/components.rb +0 -92
  485. data/lib/mongoid/config/inflections.rb +0 -6
  486. data/lib/mongoid/contextual/eager.rb +0 -158
  487. data/lib/mongoid/errors/versioning_not_on_root.rb +0 -23
  488. data/lib/mongoid/identity_map.rb +0 -163
  489. data/lib/mongoid/json.rb +0 -16
  490. data/lib/mongoid/matchers/strategies.rb +0 -97
  491. data/lib/mongoid/matchers.rb +0 -32
  492. data/lib/mongoid/multi_parameter_attributes.rb +0 -105
  493. data/lib/mongoid/nested_attributes.rb +0 -78
  494. data/lib/mongoid/observer.rb +0 -192
  495. data/lib/mongoid/paranoia.rb +0 -136
  496. data/lib/mongoid/persistence/atomic/add_to_set.rb +0 -47
  497. data/lib/mongoid/persistence/atomic/bit.rb +0 -35
  498. data/lib/mongoid/persistence/atomic/inc.rb +0 -45
  499. data/lib/mongoid/persistence/atomic/operation.rb +0 -154
  500. data/lib/mongoid/persistence/atomic/pop.rb +0 -32
  501. data/lib/mongoid/persistence/atomic/pull.rb +0 -32
  502. data/lib/mongoid/persistence/atomic/pull_all.rb +0 -32
  503. data/lib/mongoid/persistence/atomic/push.rb +0 -25
  504. data/lib/mongoid/persistence/atomic/push_all.rb +0 -25
  505. data/lib/mongoid/persistence/atomic/rename.rb +0 -30
  506. data/lib/mongoid/persistence/atomic/sets.rb +0 -28
  507. data/lib/mongoid/persistence/atomic/unset.rb +0 -27
  508. data/lib/mongoid/persistence/atomic.rb +0 -231
  509. data/lib/mongoid/persistence/deletion.rb +0 -31
  510. data/lib/mongoid/persistence/insertion.rb +0 -38
  511. data/lib/mongoid/persistence/modification.rb +0 -35
  512. data/lib/mongoid/persistence/operations/embedded/insert.rb +0 -46
  513. data/lib/mongoid/persistence/operations/embedded/remove.rb +0 -43
  514. data/lib/mongoid/persistence/operations/insert.rb +0 -34
  515. data/lib/mongoid/persistence/operations/remove.rb +0 -33
  516. data/lib/mongoid/persistence/operations/update.rb +0 -59
  517. data/lib/mongoid/persistence/operations/upsert.rb +0 -28
  518. data/lib/mongoid/persistence/operations.rb +0 -214
  519. data/lib/mongoid/persistence/upsertion.rb +0 -31
  520. data/lib/mongoid/persistence.rb +0 -357
  521. data/lib/mongoid/unit_of_work.rb +0 -61
  522. data/lib/mongoid/versioning.rb +0 -217
  523. data/lib/rack/mongoid/middleware/identity_map.rb +0 -39
  524. data/lib/rack/mongoid.rb +0 -2
  525. data/lib/rails/generators/mongoid/observer/observer_generator.rb +0 -17
  526. data/lib/rails/generators/mongoid/observer/templates/observer.rb.tt +0 -4
  527. data/spec/app/models/actor_observer.rb +0 -15
  528. data/spec/app/models/callback_recorder.rb +0 -25
  529. data/spec/app/models/paranoid_phone.rb +0 -25
  530. data/spec/app/models/paranoid_post.rb +0 -36
  531. data/spec/app/models/phone_observer.rb +0 -6
  532. data/spec/mongoid/attributes/processing_spec.rb +0 -149
  533. data/spec/mongoid/criterion/destructive_spec.rb +0 -101
  534. data/spec/mongoid/criterion/modifiable_spec.rb +0 -409
  535. data/spec/mongoid/criterion/modification_spec.rb +0 -402
  536. data/spec/mongoid/errors/versioning_not_on_root_spec.rb +0 -29
  537. data/spec/mongoid/finders_spec.rb +0 -321
  538. data/spec/mongoid/identity_map_spec.rb +0 -564
  539. data/spec/mongoid/json_spec.rb +0 -33
  540. data/spec/mongoid/matchers/in_spec.rb +0 -25
  541. data/spec/mongoid/matchers/nin_spec.rb +0 -25
  542. data/spec/mongoid/multi_parameter_attributes_spec.rb +0 -128
  543. data/spec/mongoid/observer_spec.rb +0 -290
  544. data/spec/mongoid/paranoia_spec.rb +0 -759
  545. data/spec/mongoid/persistence/atomic/add_to_set_spec.rb +0 -262
  546. data/spec/mongoid/persistence/atomic/bit_spec.rb +0 -88
  547. data/spec/mongoid/persistence/atomic/inc_spec.rb +0 -133
  548. data/spec/mongoid/persistence/atomic/pop_spec.rb +0 -111
  549. data/spec/mongoid/persistence/atomic/pull_all_spec.rb +0 -77
  550. data/spec/mongoid/persistence/atomic/pull_spec.rb +0 -80
  551. data/spec/mongoid/persistence/atomic/push_all_spec.rb +0 -77
  552. data/spec/mongoid/persistence/atomic/push_spec.rb +0 -77
  553. data/spec/mongoid/persistence/atomic/rename_spec.rb +0 -42
  554. data/spec/mongoid/persistence/atomic/sets_spec.rb +0 -154
  555. data/spec/mongoid/persistence/atomic/unset_spec.rb +0 -65
  556. data/spec/mongoid/persistence/atomic_spec.rb +0 -216
  557. data/spec/mongoid/persistence/operations/embedded/insert_spec.rb +0 -191
  558. data/spec/mongoid/persistence/operations/embedded/remove_spec.rb +0 -8
  559. data/spec/mongoid/persistence/operations/insert_spec.rb +0 -149
  560. data/spec/mongoid/persistence/operations/remove_spec.rb +0 -113
  561. data/spec/mongoid/persistence/operations/update_spec.rb +0 -141
  562. data/spec/mongoid/persistence/operations/upsert_spec.rb +0 -59
  563. data/spec/mongoid/persistence/operations_spec.rb +0 -313
  564. data/spec/mongoid/persistence_spec.rb +0 -2279
  565. data/spec/mongoid/unit_of_work_spec.rb +0 -196
  566. data/spec/mongoid/versioning_spec.rb +0 -540
  567. data/spec/rack/mongoid/middleware/identity_map_spec.rb +0 -72
data/lib/mongoid.rb CHANGED
@@ -1,34 +1,13 @@
1
1
  # encoding: utf-8
2
-
3
- # Copyright (c) 2009 - 2011 Durran Jordan and friends.
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining
6
- # a copy of this software and associated documentation files (the
7
- # "Software"), to deal in the Software without restriction, including
8
- # without limitation the rights to use, copy, modify, merge, publish,
9
- # distribute, sublicense, and/or sell copies of the Software, and to
10
- # permit persons to whom the Software is furnished to do so, subject to
11
- # the following conditions:
12
- #
13
- # The above copyright notice and this permission notice shall be
14
- # included in all copies or substantial portions of the Software.
15
- #
16
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
- # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
- # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
- # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
- # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
- # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
- # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
-
24
- require 'support/ruby_version'
2
+ require "support/ruby_version"
25
3
 
26
4
  require "delegate"
27
5
  require "time"
28
6
  require "set"
29
7
 
8
+ require "active_support"
30
9
  require "active_support/core_ext"
31
- require 'active_support/json'
10
+ require "active_support/json"
32
11
  require "active_support/inflector"
33
12
  require "active_support/time_with_zone"
34
13
  require "active_model"
@@ -36,49 +15,14 @@ require "active_model"
36
15
  require "origin"
37
16
  require "moped"
38
17
 
39
- require "mongoid/atomic/positionable"
40
- require "mongoid/evolvable"
41
- require "mongoid/extensions"
42
- require "mongoid/errors"
43
- require "mongoid/threaded"
44
- require "mongoid/relations"
45
- require "mongoid/atomic"
46
- require "mongoid/attributes"
47
- require "mongoid/callbacks"
18
+ require "mongoid/version"
48
19
  require "mongoid/config"
49
- require "mongoid/contextual"
50
- require "mongoid/copyable"
51
- require "mongoid/equality"
52
- require "mongoid/criteria"
53
- require "mongoid/dirty"
54
- require "mongoid/factory"
55
- require "mongoid/fields"
56
- require "mongoid/finders"
57
- require "mongoid/hierarchy"
58
- require "mongoid/identity_map"
59
- require "mongoid/indexes"
60
- require "mongoid/inspection"
61
- require "mongoid/json"
62
20
  require "mongoid/loggable"
63
- require "mongoid/matchers"
64
- require "mongoid/multi_parameter_attributes"
65
- require "mongoid/nested_attributes"
66
- require "mongoid/observer"
67
- require "mongoid/persistence"
68
- require "mongoid/reloading"
69
- require "mongoid/scoping"
70
- require "mongoid/serialization"
71
21
  require "mongoid/sessions"
72
- require "mongoid/sharding"
73
- require "mongoid/state"
74
- require "mongoid/timestamps"
75
- require "mongoid/unit_of_work"
76
- require "mongoid/validations"
77
- require "mongoid/version"
78
- require "mongoid/versioning"
79
- require "mongoid/components"
80
- require "mongoid/paranoia"
81
22
  require "mongoid/document"
23
+ require "mongoid/log_subscriber"
24
+ require "mongoid/tasks/database"
25
+ require "mongoid/query_cache"
82
26
 
83
27
  # If we are using Rails then we will include the Mongoid railtie. This has all
84
28
  # the nifty initializers that Mongoid needs.
@@ -86,28 +30,20 @@ if defined?(Rails)
86
30
  require "mongoid/railtie"
87
31
  end
88
32
 
89
- # If we are using any Rack based application then we need the Mongoid rack
90
- # middleware to ensure our app is running properly.
91
- if defined?(Rack)
92
- require "rack/mongoid"
93
- end
94
-
95
33
  # add english load path by default
96
34
  I18n.load_path << File.join(File.dirname(__FILE__), "config", "locales", "en.yml")
97
35
 
98
36
  module Mongoid
99
37
  extend Loggable
100
- extend UnitOfWork
101
38
  extend self
102
39
 
103
- MONGODB_VERSION = "2.0.0"
40
+ MONGODB_VERSION = "2.2.0"
104
41
 
105
42
  # Sets the Mongoid configuration options. Best used by passing a block.
106
43
  #
107
44
  # @example Set up configuration options.
108
45
  # Mongoid.configure do |config|
109
- # config.allow_dynamic_fields = false
110
- # config.use(name: "mongoid_test", host: "localhost", port: 27017)
46
+ # config.connect_to("mongoid_test")
111
47
  # end
112
48
  #
113
49
  # @return [ Config ] The configuration object.
@@ -160,7 +96,5 @@ module Mongoid
160
96
  # Mongoid.database = Mongo::Connection.new.db("test")
161
97
  #
162
98
  # @since 1.0.0
163
- delegate(*(Config.public_instance_methods(false) +
164
- ActiveModel::Observing::ClassMethods.public_instance_methods(false) - [:logger=, :logger] <<
165
- { to: Config }))
99
+ delegate(*(Config.public_instance_methods(false) - [ :logger=, :logger ] << { to: Config }))
166
100
  end
@@ -11,35 +11,60 @@ development:
11
11
  hosts:
12
12
  - localhost:27017
13
13
  options:
14
- # Change whether the session persists in safe mode by default.
15
- # (default: false)
16
- # safe: false
14
+ # Change the default write concern. (default = { w: 1 })
15
+ # write:
16
+ # w: 1
17
17
 
18
- # Change the default consistency model to :eventual or :strong.
19
- # :eventual will send reads to secondaries, :strong sends everything
20
- # to master. (default: :eventual)
21
- # consistency: :eventual
18
+ # Change the default consistency model to primary, secondary.
19
+ # 'secondary' will send reads to secondaries, 'primary' sends everything
20
+ # to master. (default: primary)
21
+ # read: secondary_preferred
22
22
 
23
23
  # How many times Moped should attempt to retry an operation after
24
- # failure. (default: 30)
25
- # max_retries: 30
24
+ # failure. (default: The number of nodes in the cluster)
25
+ # max_retries: 20
26
26
 
27
27
  # The time in seconds that Moped should wait before retrying an
28
- # operation on failure. (default: 1)
29
- # retry_interval: 1
30
- # Configure Mongoid specific options. (optional)
31
- options:
32
- # Configuration for whether or not to allow access to fields that do
33
- # not have a field definition on the model. (default: true)
34
- # allow_dynamic_fields: true
28
+ # operation on failure. (default: 0.25)
29
+ # retry_interval: 0.25
30
+
31
+ # The connection pool size per-node. This should match or exceed the
32
+ # number of threads for a multi-threaded application. (default: 5)
33
+ # pool_size: 5
34
+
35
+ # The time in seconds that Moped should wait for the pool to provide
36
+ # an available connection. This number should probably remain at the
37
+ # default, unless for some reason you absolutely need to limit the
38
+ # pool_size, as this wait is only used when the pool is saturated.
39
+ # (default: 0.5)
40
+ # pool_timeout: 0.5
41
+
42
+ # The time in seconds before Moped will timeout connection and node
43
+ # operations. (default: 5)
44
+ # timeout: 5
45
+
46
+ # The amount of time in seconds between forced refreshes of node
47
+ # information including the discovery of new peers. (default: 300)
48
+ # refresh_interval: 300
49
+
50
+ # The amount of time in seconds that a node will be flagged as down.
51
+ # (default: 30)
52
+ # down_interval: 30
53
+
54
+ # Whether connections should use SSL. (default: nil/false)
55
+ # ssl: false
56
+
57
+ # Whether Moped will use the existing seeds/nodes to find other peers.
58
+ # (default: true)
59
+ # auto_discover: true
35
60
 
36
- # Enable the identity map, needed for eager loading. (default: false)
37
- # identity_map_enabled: false
38
61
 
62
+ # Configure Mongoid specific options. (optional)
63
+ options:
39
64
  # Includes the root model name in json serialization. (default: false)
40
65
  # include_root_in_json: false
41
66
 
42
- # Include the _type field in serializaion. (default: false)
67
+ # Include the _type field in serialization. (default: false)
43
68
  # include_type_for_serialization: false
44
69
 
45
70
  # Preload all models in development, needed when models use
@@ -57,11 +82,7 @@ development:
57
82
  # existing method. (default: false)
58
83
  # scope_overwrite_exception: false
59
84
 
60
- # Skip the database version check, used when connecting to a db without
61
- # admin access. (default: false)
62
- # skip_version_check: false
63
-
64
- # User Active Support's time zone in conversions. (default: true)
85
+ # Use Active Support's time zone in conversions. (default: true)
65
86
  # use_activesupport_time_zone: true
66
87
 
67
88
  # Ensure all times are UTC in the app side. (default: false)
@@ -73,7 +94,7 @@ test:
73
94
  hosts:
74
95
  - localhost:27017
75
96
  options:
76
- consistency: :strong
97
+ read: primary
77
98
  # In the test environment we lower the retries and retry interval to
78
99
  # low amounts for fast failures.
79
100
  max_retries: 1
@@ -12,7 +12,6 @@ module Mongoid
12
12
 
13
13
  class_option :timestamps, type: :boolean
14
14
  class_option :parent, type: :string, desc: "The parent class for the generated model"
15
- class_option :versioning, type: :boolean, default: false, desc: "Enable mongoid versioning"
16
15
  class_option :collection, type: :string, desc: "The collection for storing model's documents"
17
16
 
18
17
  def create_model_file
@@ -6,9 +6,6 @@ class <%= class_name %><%= " < #{options[:parent].classify}" if options[:parent]
6
6
  <% if options[:timestamps] -%>
7
7
  include Mongoid::Timestamps
8
8
  <% end -%>
9
- <% if options[:versioning] -%>
10
- include Mongoid::Versioning
11
- <% end -%>
12
9
  <% if options[:collection] -%>
13
10
  store_in collection: "<%= options[:collection] %>"
14
11
  <% end -%>
@@ -11,44 +11,6 @@ module Mongoid
11
11
  File.expand_path("../#{base_name}/#{generator_name}/templates", __FILE__)
12
12
  end
13
13
  end
14
-
15
- class ActiveModel < ::Rails::Generators::ActiveModel
16
- def self.all(klass)
17
- "#{klass}.all"
18
- end
19
-
20
- def self.find(klass, params=nil)
21
- "#{klass}.find(#{params})"
22
- end
23
-
24
- def self.build(klass, params=nil)
25
- if params
26
- "#{klass}.new(#{params})"
27
- else
28
- "#{klass}.new"
29
- end
30
- end
31
-
32
- def save
33
- "#{name}.save"
34
- end
35
-
36
- def update_attributes(params=nil)
37
- "#{name}.update_attributes(#{params})"
38
- end
39
-
40
- def errors
41
- "#{name}.errors"
42
- end
43
-
44
- def delete
45
- "#{name}.delete"
46
- end
47
-
48
- def destroy
49
- "#{name}.destroy"
50
- end
51
- end
52
14
  end
53
15
  end
54
16
 
@@ -56,8 +18,9 @@ module Rails
56
18
  module Generators
57
19
  class GeneratedAttribute
58
20
  def type_class
59
- return "Time" if type.to_s == "datetime"
60
- return "String" if type.to_s == "text"
21
+ return "Time" if type == :datetime
22
+ return "String" if type == :text
23
+ return "Mongoid::Boolean" if type == :boolean
61
24
  type.to_s.camelcase
62
25
  end
63
26
  end
data/lib/rails/mongoid.rb CHANGED
@@ -3,98 +3,6 @@ module Rails
3
3
  module Mongoid
4
4
  extend self
5
5
 
6
- # Create indexes for each model given the provided globs and the class is
7
- # not embedded.
8
- #
9
- # @example Create all the indexes.
10
- # Rails::Mongoid.create_indexes("app/models/**/*.rb")
11
- #
12
- # @param [ Array<String> ] globs The file matching globs.
13
- #
14
- # @return [ Array<Class> ] The indexed models.
15
- #
16
- # @since 2.1.0
17
- def create_indexes(*globs)
18
- models(*globs).each do |model|
19
- next if model.index_options.empty?
20
- if !model.embedded? || model.cyclic?
21
- model.create_indexes
22
- logger.info("MONGOID: Created indexes on #{model}:")
23
- model.index_options.each_pair do |index, options|
24
- logger.info("MONGOID: Index: #{index}, Options: #{options}")
25
- end
26
- model
27
- else
28
- logger.info("MONGOID: Index ignored on: #{model}, please define in the root model.")
29
- nil
30
- end
31
- end.compact
32
- end
33
-
34
- # Remove indexes for each model given the provided globs and the class is
35
- # not embedded.
36
- #
37
- # @example Remove all the indexes.
38
- # Rails::Mongoid.create_indexes("app/models/**/*.rb")
39
- #
40
- # @param [ Array<String> ] globs The file matching globs.
41
- #
42
- # @return [ Array<Class> ] The un-indexed models.
43
- #
44
- def remove_indexes(*globs)
45
- models(*globs).each do |model|
46
- next if model.embedded?
47
- indexes = model.collection.indexes.map{ |doc| doc["name"] }
48
- indexes.delete_one("_id_")
49
- model.remove_indexes
50
- logger.info("MONGOID: Removing indexes on: #{model} for: #{indexes.join(', ')}.")
51
- model
52
- end.compact
53
- end
54
-
55
- # Return all models matching the globs or, if no globs are specified, all
56
- # possible models known from engines, the app, any gems, etc.
57
- #
58
- # @example Return *all* models. Return all models under app/models/
59
- # Rails::Mongoid.models
60
- # Rails::Mongoid.models("app/models/**/*.rb")
61
- #
62
- # @param [ String ] glob The file matching glob.
63
- #
64
- # @return [ Array<Class> ] The models.
65
- #
66
- def models(*globs)
67
- all_possible_models = globs.empty?
68
-
69
- if globs.empty?
70
- engines_models_paths = Rails.application.railties.engines.map{|engine| engine.paths["app/models"].expanded}
71
- root_models_paths = Rails.application.paths["app/models"]
72
- models_paths = engines_models_paths.push(root_models_paths).flatten
73
- globs.replace(models_paths.map{|path| "#{path}/**/*.rb"})
74
- end
75
-
76
- models = []
77
-
78
- globs.flatten.compact.each do |glob|
79
- Dir.glob(glob).map do |file|
80
- begin
81
- model = determine_model(file, logger)
82
- models.push(model)
83
- rescue => e
84
- logger.error(%Q{MONGOID: Failed to determine model from #{file}:
85
- #{e.class}:#{e.message}
86
- #{e.backtrace.join("\n")}
87
- })
88
- nil
89
- end
90
- end
91
- end
92
-
93
- models = (::Mongoid.models | models) if all_possible_models
94
-
95
- models.compact.sort_by { |model| model.name || '' }
96
- end
97
-
98
6
  # Use the application configuration to get every model and require it, so
99
7
  # that indexing and inheritance work in both development and production
100
8
  # with the same results.
@@ -144,35 +52,5 @@ module Rails
144
52
  Logger.new($stdout).warn(e.message)
145
53
  end
146
54
  end
147
-
148
- # Given the provided file name, determine the model and return the class.
149
- #
150
- # @example Determine the model from the file.
151
- # Rails::Mongoid.determine_model("app/models/person.rb")
152
- #
153
- # @param [ String ] file The filename.
154
- #
155
- # @return [ Class ] The model.
156
- #
157
- # @since 2.1.0
158
- def determine_model(file, logger)
159
- return nil unless file =~ /app\/models\/(.*).rb$/
160
- return nil unless logger
161
-
162
- model_path = $1.split('/')
163
- begin
164
- parts = model_path.map { |path| path.camelize }
165
- name = parts.join("::")
166
- klass = name.constantize
167
- rescue NameError, LoadError
168
- logger.info("MONGOID: Attempted to constantize #{name}, trying without namespacing.")
169
- klass = parts.last.constantize rescue nil
170
- end
171
- klass if klass && klass.ancestors.include?(::Mongoid::Document)
172
- end
173
-
174
- def logger
175
- @logger ||= Logger.new($stdout)
176
- end
177
55
  end
178
56
  end
@@ -19,7 +19,7 @@ end
19
19
  if invalid_version?
20
20
  message = %{
21
21
  Mongoid requires MRI version 1.9.3+ or JRuby 1.6.0+ running in 1.9 mode.
22
- You're current Ruby version is defined as #{RUBY_VERSION}. Please see:
22
+ Your current Ruby version is defined as #{RUBY_VERSION}. Please see:
23
23
  http://mongoid.org/en/mongoid/docs/tips.html#ruby for details.
24
24
  }
25
25
  raise_version_error(message)
@@ -1,13 +1,13 @@
1
1
  class Account
2
2
  include Mongoid::Document
3
3
 
4
- field :_id, type: String, default: ->{ name.try(:parameterize) }
4
+ field :_id, type: String, overwrite: true, default: ->{ name.try(:parameterize) }
5
5
 
6
6
  field :number, type: String
7
7
  field :balance, type: String
8
8
  field :nickname, type: String
9
9
  field :name, type: String
10
- field :balanced, type: Boolean, default: ->{ balance? ? true : false }
10
+ field :balanced, type: Mongoid::Boolean, default: ->{ balance? ? true : false }
11
11
 
12
12
  field :overridden, type: String
13
13
 
@@ -18,10 +18,6 @@ class Account
18
18
  has_and_belongs_to_many :agents
19
19
  has_one :comment, validate: false
20
20
 
21
- attr_accessible :nickname, as: [ :default, :admin ]
22
- attr_accessible :name, as: [ :default, :admin ]
23
- attr_accessible :balance, as: :default
24
-
25
21
  validates_presence_of :name
26
22
  validates_presence_of :nickname, on: :upsert
27
23
  validates_length_of :name, maximum: 10, on: :create
@@ -1,12 +1,13 @@
1
1
  class Acolyte
2
2
  include Mongoid::Document
3
+ include Mongoid::Attributes::Dynamic
3
4
  field :status
4
5
  field :name
5
6
 
6
7
  embeds_many :versions, as: :memorable
7
8
  belongs_to :church
8
9
 
9
- default_scope asc(:name)
10
+ default_scope ->{ asc(:name) }
10
11
  scope :active, ->{ where(status: "active") }
11
12
  scope :named, ->{ where(:name.exists => true) }
12
13
 
@@ -7,7 +7,6 @@ class Actor
7
7
  accepts_nested_attributes_for :things, allow_destroy: true
8
8
 
9
9
  define_model_callbacks :custom
10
- observable :custom
11
10
 
12
11
  def do_something
13
12
  run_callbacks(:custom) do
@@ -1,21 +1,26 @@
1
1
  class Address
2
2
  include Mongoid::Document
3
3
 
4
- field :_id, type: String, default: ->{ street.try(:parameterize) }
4
+ field :_id, type: String, overwrite: true, default: ->{ street.try(:parameterize) }
5
5
 
6
6
  attr_accessor :mode
7
7
 
8
8
  field :address_type
9
9
  field :number, type: Integer
10
+ field :no, type: Integer
11
+ field :h, as: :house, type: Integer
10
12
  field :street
11
13
  field :city
12
14
  field :state
13
15
  field :post_code
14
16
  field :parent_title
15
17
  field :services, type: Array
18
+ field :aliases, as: :a, type: Array
19
+ field :test, type: Array
16
20
  field :latlng, type: Array
17
21
  field :map, type: Hash
18
22
  field :move_in, type: DateTime
23
+ field :end_date, type: Date
19
24
  field :s, type: String, as: :suite
20
25
  field :name, localize: true
21
26
 
@@ -38,8 +43,8 @@ class Address
38
43
  belongs_to :account
39
44
  belongs_to :band
40
45
 
41
- scope :without_postcode, where(postcode: nil)
42
- scope :rodeo, where(street: "Rodeo Dr") do
46
+ scope :without_postcode, ->{ where(postcode: nil) }
47
+ scope :rodeo, ->{ where(street: "Rodeo Dr") } do
43
48
  def mansion?
44
49
  all? { |address| address.street == "Rodeo Dr" }
45
50
  end
@@ -1,7 +1,7 @@
1
1
  class Animal
2
2
  include Mongoid::Document
3
3
 
4
- field :_id, type: String, default: ->{ name.try(:parameterize) }
4
+ field :_id, type: String, overwrite: true, default: ->{ name.try(:parameterize) }
5
5
 
6
6
  field :name
7
7
  field :height, type: Integer
@@ -1,7 +1,7 @@
1
1
  class Appointment
2
2
  include Mongoid::Document
3
- field :active, type: Boolean, default: true
4
- field :timed, type: Boolean, default: true
3
+ field :active, type: Mongoid::Boolean, default: true
4
+ field :timed, type: Mongoid::Boolean, default: true
5
5
  embedded_in :person
6
- default_scope where(active: true)
6
+ default_scope ->{ where(active: true) }
7
7
  end
@@ -2,12 +2,9 @@ class Article
2
2
  include Mongoid::Document
3
3
 
4
4
  field :title, type: String
5
- field :is_rss, type: Boolean, default: false
5
+ field :is_rss, type: Mongoid::Boolean, default: false
6
6
  field :user_login, type: String
7
7
 
8
- attr_accessible :title, as: [:default, :parser]
9
- attr_accessible :is_rss, as: :parser
10
- attr_accessible :user_login
11
8
  has_and_belongs_to_many :tags, validate: false
12
9
  has_and_belongs_to_many :preferences, inverse_of: nil, validate: false
13
10
  end
@@ -0,0 +1,5 @@
1
+ class Audio
2
+ include Mongoid::Document
3
+ field :likes, type: Integer
4
+ default_scope ->{ where(:likes.gt => 100) }
5
+ end
@@ -1,6 +1,4 @@
1
1
  class Author
2
2
  include Mongoid::Document
3
3
  field :name, type: String
4
-
5
- belongs_to :paranoid_post
6
4
  end
@@ -1,7 +1,8 @@
1
1
  class Band
2
2
  include Mongoid::Document
3
+ include Mongoid::Attributes::Dynamic
3
4
  field :name, type: String
4
- field :active, type: Boolean, default: true
5
+ field :active, type: Mongoid::Boolean, default: true
5
6
  field :origin, type: String
6
7
  field :genres, type: Array
7
8
  field :member_count, type: Integer
@@ -9,7 +10,7 @@ class Band
9
10
  field :likes, type: Integer
10
11
  field :views, type: Integer
11
12
  field :rating, type: Float
12
- field :upserted, type: Boolean, default: false
13
+ field :upserted, type: Mongoid::Boolean, default: false
13
14
  field :created, type: DateTime
14
15
  field :sales, type: BigDecimal
15
16
  field :y, as: :years, type: Integer
@@ -1,5 +1,6 @@
1
1
  class Bar
2
2
  include Mongoid::Document
3
+ include Mongoid::Attributes::Dynamic
3
4
  field :name, type: String
4
5
  field :location, type: Array
5
6
  field :lat_lng, type: LatLng
@@ -1,5 +1,6 @@
1
1
  class Book
2
2
  include Mongoid::Document
3
+ include Mongoid::Attributes::Dynamic
3
4
  field :title, type: String
4
5
  field :chapters, type: Integer
5
6
  belongs_to :series
@@ -1,7 +1,5 @@
1
1
  class Building
2
2
  include Mongoid::Document
3
- attr_accessible
4
- attr_accessible :building_address, :contractors, as: :admin
5
3
  embeds_one :building_address
6
4
  embeds_many :contractors
7
5
  end
@@ -1,7 +1,5 @@
1
1
  class BuildingAddress
2
2
  include Mongoid::Document
3
- attr_accessible
4
- attr_accessible :city, as: :admin
5
3
  embedded_in :building
6
4
  field :city, type: String
7
5
  end
@@ -1,6 +1,6 @@
1
1
  class Bus
2
2
  include Mongoid::Document
3
- field :saturday, type: Boolean, default: false
3
+ field :saturday, type: Mongoid::Boolean, default: false
4
4
  field :departure_time, type: Time
5
5
  field :number, type: Integer
6
6
  embedded_in :circuit
@@ -18,7 +18,7 @@ class Canvas
18
18
 
19
19
  class Test < Canvas
20
20
 
21
- field :foo, type: String, default: ->{ "overridden" }
21
+ field :foo, type: String, overwrite: true, default: ->{ "overridden" }
22
22
  end
23
23
  end
24
24
 
@@ -0,0 +1,5 @@
1
+ class ContextableItem
2
+ include Mongoid::Document
3
+ field :title
4
+ validates :title, presence: true, on: :in_context
5
+ end