mongoid 2.8.1 → 3.0.0.rc

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 (351) hide show
  1. data/CHANGELOG.md +802 -58
  2. data/LICENSE +1 -1
  3. data/README.md +10 -11
  4. data/Rakefile +2 -8
  5. data/lib/config/locales/en.yml +441 -51
  6. data/lib/mongoid.rb +24 -39
  7. data/lib/mongoid/atomic.rb +16 -33
  8. data/lib/mongoid/atomic/modifiers.rb +2 -2
  9. data/lib/mongoid/atomic/paths/embedded.rb +4 -5
  10. data/lib/mongoid/atomic/paths/embedded/many.rb +6 -6
  11. data/lib/mongoid/atomic/paths/embedded/one.rb +5 -5
  12. data/lib/mongoid/atomic/paths/root.rb +4 -5
  13. data/lib/mongoid/attributes.rb +95 -32
  14. data/lib/mongoid/attributes/processing.rb +14 -10
  15. data/lib/mongoid/attributes/readonly.rb +56 -0
  16. data/lib/mongoid/callbacks.rb +90 -27
  17. data/lib/mongoid/collections/retry.rb +2 -3
  18. data/lib/mongoid/components.rb +11 -23
  19. data/lib/mongoid/config.rb +87 -233
  20. data/lib/mongoid/config/environment.rb +5 -6
  21. data/lib/mongoid/config/inflections.rb +6 -0
  22. data/lib/mongoid/config/options.rb +1 -1
  23. data/lib/mongoid/config/validators.rb +3 -0
  24. data/lib/mongoid/config/validators/option.rb +25 -0
  25. data/lib/mongoid/config/validators/session.rb +140 -0
  26. data/lib/mongoid/contextual.rb +50 -0
  27. data/lib/mongoid/contextual/aggregable/memory.rb +98 -0
  28. data/lib/mongoid/contextual/aggregable/mongo.rb +181 -0
  29. data/lib/mongoid/contextual/atomic.rb +179 -0
  30. data/lib/mongoid/contextual/command.rb +43 -0
  31. data/lib/mongoid/contextual/find_and_modify.rb +66 -0
  32. data/lib/mongoid/contextual/map_reduce.rb +273 -0
  33. data/lib/mongoid/contextual/memory.rb +383 -0
  34. data/lib/mongoid/contextual/mongo.rb +543 -0
  35. data/lib/mongoid/copyable.rb +3 -34
  36. data/lib/mongoid/criteria.rb +436 -250
  37. data/lib/mongoid/criterion/inspection.rb +14 -8
  38. data/lib/mongoid/criterion/scoping.rb +114 -44
  39. data/lib/mongoid/dirty.rb +152 -67
  40. data/lib/mongoid/document.rb +69 -50
  41. data/lib/mongoid/errors.rb +22 -1
  42. data/lib/mongoid/errors/ambiguous_relationship.rb +51 -0
  43. data/lib/mongoid/errors/callback.rb +5 -6
  44. data/lib/mongoid/errors/delete_restriction.rb +29 -0
  45. data/lib/mongoid/errors/document_not_found.rb +98 -17
  46. data/lib/mongoid/errors/eager_load.rb +3 -6
  47. data/lib/mongoid/errors/invalid_collection.rb +3 -3
  48. data/lib/mongoid/errors/invalid_config_option.rb +27 -0
  49. data/lib/mongoid/errors/invalid_database.rb +3 -3
  50. data/lib/mongoid/errors/invalid_field.rb +54 -8
  51. data/lib/mongoid/errors/invalid_field_option.rb +35 -0
  52. data/lib/mongoid/errors/invalid_find.rb +3 -3
  53. data/lib/mongoid/errors/invalid_index.rb +28 -0
  54. data/lib/mongoid/errors/invalid_options.rb +4 -4
  55. data/lib/mongoid/errors/invalid_scope.rb +24 -0
  56. data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +38 -0
  57. data/lib/mongoid/errors/invalid_storage_options.rb +27 -0
  58. data/lib/mongoid/errors/invalid_time.rb +3 -6
  59. data/lib/mongoid/errors/inverse_not_found.rb +29 -0
  60. data/lib/mongoid/errors/mixed_relations.rb +4 -9
  61. data/lib/mongoid/errors/mixed_session_configuration.rb +28 -0
  62. data/lib/mongoid/errors/mongoid_error.rb +54 -3
  63. data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +28 -0
  64. data/lib/mongoid/errors/no_default_session.rb +23 -0
  65. data/lib/mongoid/errors/no_environment.rb +3 -3
  66. data/lib/mongoid/errors/no_map_reduce_output.rb +24 -0
  67. data/lib/mongoid/errors/no_parent.rb +24 -0
  68. data/lib/mongoid/errors/no_session_config.rb +22 -0
  69. data/lib/mongoid/errors/no_session_database.rb +27 -0
  70. data/lib/mongoid/errors/no_session_hosts.rb +27 -0
  71. data/lib/mongoid/errors/no_sessions_config.rb +20 -0
  72. data/lib/mongoid/errors/readonly_attribute.rb +25 -0
  73. data/lib/mongoid/errors/scope_overwrite.rb +4 -4
  74. data/lib/mongoid/errors/too_many_nested_attribute_records.rb +4 -4
  75. data/lib/mongoid/errors/unknown_attribute.rb +25 -0
  76. data/lib/mongoid/errors/unsaved_document.rb +4 -8
  77. data/lib/mongoid/errors/unsupported_javascript.rb +27 -0
  78. data/lib/mongoid/errors/unsupported_version.rb +4 -4
  79. data/lib/mongoid/errors/validations.rb +7 -6
  80. data/lib/mongoid/errors/versioning_not_on_root.rb +23 -0
  81. data/lib/mongoid/extensions.rb +28 -76
  82. data/lib/mongoid/extensions/array.rb +127 -0
  83. data/lib/mongoid/extensions/big_decimal.rb +42 -0
  84. data/lib/mongoid/extensions/boolean.rb +24 -0
  85. data/lib/mongoid/extensions/date.rb +70 -0
  86. data/lib/mongoid/extensions/date_time.rb +68 -0
  87. data/lib/mongoid/extensions/false_class.rb +26 -0
  88. data/lib/mongoid/extensions/float.rb +44 -0
  89. data/lib/mongoid/extensions/hash.rb +91 -0
  90. data/lib/mongoid/extensions/integer.rb +54 -0
  91. data/lib/mongoid/extensions/module.rb +28 -0
  92. data/lib/mongoid/extensions/nil_class.rb +21 -0
  93. data/lib/mongoid/extensions/object.rb +188 -0
  94. data/lib/mongoid/extensions/object_id.rb +53 -0
  95. data/lib/mongoid/extensions/range.rb +55 -0
  96. data/lib/mongoid/extensions/regexp.rb +27 -0
  97. data/lib/mongoid/extensions/set.rb +55 -0
  98. data/lib/mongoid/extensions/string.rb +155 -0
  99. data/lib/mongoid/extensions/symbol.rb +54 -0
  100. data/lib/mongoid/extensions/time.rb +78 -0
  101. data/lib/mongoid/extensions/time_with_zone.rb +55 -0
  102. data/lib/mongoid/extensions/true_class.rb +26 -0
  103. data/lib/mongoid/factory.rb +1 -1
  104. data/lib/mongoid/fields.rb +129 -194
  105. data/lib/mongoid/fields/foreign_key.rb +134 -0
  106. data/lib/mongoid/fields/localized.rb +73 -0
  107. data/lib/mongoid/fields/standard.rb +268 -0
  108. data/lib/mongoid/fields/validators.rb +2 -0
  109. data/lib/mongoid/fields/validators/macro.rb +83 -0
  110. data/lib/mongoid/finders.rb +42 -43
  111. data/lib/mongoid/hierarchy.rb +25 -14
  112. data/lib/mongoid/identity_map.rb +31 -19
  113. data/lib/mongoid/indexes.rb +66 -15
  114. data/lib/mongoid/indexes/validators/options.rb +80 -0
  115. data/lib/mongoid/inspection.rb +1 -1
  116. data/lib/mongoid/javascript.rb +1 -1
  117. data/lib/mongoid/json.rb +2 -2
  118. data/lib/mongoid/loggable.rb +69 -0
  119. data/lib/mongoid/matchers.rb +1 -1
  120. data/lib/mongoid/matchers/all.rb +7 -8
  121. data/lib/mongoid/matchers/and.rb +3 -3
  122. data/lib/mongoid/matchers/default.rb +6 -4
  123. data/lib/mongoid/matchers/exists.rb +2 -2
  124. data/lib/mongoid/matchers/gt.rb +2 -2
  125. data/lib/mongoid/matchers/gte.rb +2 -2
  126. data/lib/mongoid/matchers/in.rb +3 -7
  127. data/lib/mongoid/matchers/lt.rb +2 -2
  128. data/lib/mongoid/matchers/lte.rb +2 -2
  129. data/lib/mongoid/matchers/ne.rb +2 -2
  130. data/lib/mongoid/matchers/nin.rb +2 -2
  131. data/lib/mongoid/matchers/or.rb +2 -2
  132. data/lib/mongoid/matchers/size.rb +2 -2
  133. data/lib/mongoid/matchers/strategies.rb +3 -3
  134. data/lib/mongoid/multi_parameter_attributes.rb +8 -10
  135. data/lib/mongoid/nested_attributes.rb +17 -9
  136. data/lib/mongoid/observer.rb +1 -2
  137. data/lib/mongoid/paranoia.rb +13 -18
  138. data/lib/mongoid/persistence.rb +43 -39
  139. data/lib/mongoid/persistence/atomic.rb +2 -2
  140. data/lib/mongoid/persistence/atomic/add_to_set.rb +5 -9
  141. data/lib/mongoid/persistence/atomic/bit.rb +5 -7
  142. data/lib/mongoid/persistence/atomic/inc.rb +5 -7
  143. data/lib/mongoid/persistence/atomic/operation.rb +45 -6
  144. data/lib/mongoid/persistence/atomic/pop.rb +5 -7
  145. data/lib/mongoid/persistence/atomic/pull.rb +5 -7
  146. data/lib/mongoid/persistence/atomic/pull_all.rb +5 -7
  147. data/lib/mongoid/persistence/atomic/push.rb +4 -10
  148. data/lib/mongoid/persistence/atomic/push_all.rb +4 -10
  149. data/lib/mongoid/persistence/atomic/rename.rb +6 -7
  150. data/lib/mongoid/persistence/atomic/sets.rb +5 -7
  151. data/lib/mongoid/persistence/atomic/unset.rb +4 -5
  152. data/lib/mongoid/persistence/deletion.rb +2 -2
  153. data/lib/mongoid/persistence/insertion.rb +10 -16
  154. data/lib/mongoid/persistence/modification.rb +5 -9
  155. data/lib/mongoid/persistence/operations.rb +6 -19
  156. data/lib/mongoid/persistence/operations/embedded/insert.rb +7 -6
  157. data/lib/mongoid/persistence/operations/embedded/remove.rb +5 -5
  158. data/lib/mongoid/persistence/operations/insert.rb +4 -4
  159. data/lib/mongoid/persistence/operations/remove.rb +4 -4
  160. data/lib/mongoid/persistence/operations/update.rb +5 -5
  161. data/lib/mongoid/railtie.rb +26 -11
  162. data/lib/mongoid/railties/database.rake +22 -108
  163. data/lib/mongoid/relations.rb +4 -6
  164. data/lib/mongoid/relations/accessors.rb +119 -19
  165. data/lib/mongoid/relations/auto_save.rb +59 -5
  166. data/lib/mongoid/relations/binding.rb +211 -2
  167. data/lib/mongoid/relations/bindings/embedded/in.rb +16 -22
  168. data/lib/mongoid/relations/bindings/embedded/many.rb +9 -50
  169. data/lib/mongoid/relations/bindings/embedded/one.rb +10 -16
  170. data/lib/mongoid/relations/bindings/referenced/in.rb +31 -57
  171. data/lib/mongoid/relations/bindings/referenced/many.rb +8 -20
  172. data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +15 -19
  173. data/lib/mongoid/relations/bindings/referenced/one.rb +10 -24
  174. data/lib/mongoid/relations/builder.rb +3 -3
  175. data/lib/mongoid/relations/builders.rb +19 -16
  176. data/lib/mongoid/relations/builders/embedded/in.rb +5 -5
  177. data/lib/mongoid/relations/builders/embedded/many.rb +12 -12
  178. data/lib/mongoid/relations/builders/embedded/one.rb +6 -6
  179. data/lib/mongoid/relations/builders/nested_attributes/many.rb +8 -8
  180. data/lib/mongoid/relations/builders/nested_attributes/one.rb +4 -4
  181. data/lib/mongoid/relations/builders/referenced/in.rb +4 -4
  182. data/lib/mongoid/relations/builders/referenced/many.rb +5 -5
  183. data/lib/mongoid/relations/builders/referenced/many_to_many.rb +7 -5
  184. data/lib/mongoid/relations/builders/referenced/one.rb +5 -5
  185. data/lib/mongoid/relations/cascading.rb +6 -4
  186. data/lib/mongoid/relations/cascading/delete.rb +3 -5
  187. data/lib/mongoid/relations/cascading/destroy.rb +3 -3
  188. data/lib/mongoid/relations/cascading/nullify.rb +3 -3
  189. data/lib/mongoid/relations/cascading/restrict.rb +37 -0
  190. data/lib/mongoid/relations/constraint.rb +4 -3
  191. data/lib/mongoid/relations/conversions.rb +5 -6
  192. data/lib/mongoid/relations/cyclic.rb +7 -7
  193. data/lib/mongoid/relations/embedded/batchable.rb +346 -0
  194. data/lib/mongoid/relations/embedded/in.rb +23 -12
  195. data/lib/mongoid/relations/embedded/many.rb +99 -161
  196. data/lib/mongoid/relations/embedded/one.rb +25 -14
  197. data/lib/mongoid/relations/macros.rb +105 -61
  198. data/lib/mongoid/relations/many.rb +93 -14
  199. data/lib/mongoid/relations/metadata.rb +200 -45
  200. data/lib/mongoid/relations/nested_builder.rb +3 -5
  201. data/lib/mongoid/relations/one.rb +2 -2
  202. data/lib/mongoid/relations/options.rb +2 -2
  203. data/lib/mongoid/relations/polymorphic.rb +9 -9
  204. data/lib/mongoid/relations/proxy.rb +60 -31
  205. data/lib/mongoid/relations/referenced/in.rb +40 -15
  206. data/lib/mongoid/relations/referenced/many.rb +117 -132
  207. data/lib/mongoid/relations/referenced/many_to_many.rb +101 -46
  208. data/lib/mongoid/relations/referenced/one.rb +34 -13
  209. data/lib/mongoid/relations/reflections.rb +3 -3
  210. data/lib/mongoid/relations/synchronization.rb +19 -23
  211. data/lib/mongoid/relations/targets/enumerable.rb +86 -57
  212. data/lib/mongoid/reloading.rb +12 -14
  213. data/lib/mongoid/scoping.rb +329 -0
  214. data/lib/mongoid/serialization.rb +8 -27
  215. data/lib/mongoid/sessions.rb +359 -0
  216. data/lib/mongoid/sessions/factory.rb +106 -0
  217. data/lib/mongoid/sessions/mongo_uri.rb +93 -0
  218. data/lib/mongoid/sessions/validators.rb +2 -0
  219. data/lib/mongoid/sessions/validators/storage.rb +49 -0
  220. data/lib/mongoid/sharding.rb +6 -6
  221. data/lib/mongoid/state.rb +6 -7
  222. data/lib/mongoid/threaded.rb +167 -59
  223. data/lib/mongoid/threaded/lifecycle.rb +21 -22
  224. data/lib/mongoid/threaded/sessions.rb +0 -0
  225. data/lib/mongoid/timestamps.rb +1 -1
  226. data/lib/mongoid/timestamps/created.rb +8 -4
  227. data/lib/mongoid/timestamps/timeless.rb +6 -4
  228. data/lib/mongoid/timestamps/updated.rb +3 -3
  229. data/lib/mongoid/unit_of_work.rb +61 -0
  230. data/lib/mongoid/validations.rb +27 -19
  231. data/lib/mongoid/validations/associated.rb +2 -2
  232. data/lib/mongoid/validations/format.rb +2 -2
  233. data/lib/mongoid/validations/presence.rb +31 -5
  234. data/lib/mongoid/validations/uniqueness.rb +9 -12
  235. data/lib/mongoid/version.rb +2 -2
  236. data/lib/mongoid/versioning.rb +25 -26
  237. data/lib/rack/mongoid/middleware/identity_map.rb +3 -3
  238. data/lib/rails/generators/mongoid/config/config_generator.rb +1 -1
  239. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +59 -19
  240. data/lib/rails/generators/mongoid/model/model_generator.rb +7 -7
  241. data/lib/rails/generators/mongoid/model/templates/model.rb.tt +2 -2
  242. data/lib/rails/generators/mongoid/observer/observer_generator.rb +4 -4
  243. data/lib/rails/generators/mongoid_generator.rb +5 -5
  244. data/lib/rails/mongoid.rb +69 -25
  245. metadata +110 -137
  246. checksums.yaml +0 -7
  247. data/lib/config/locales/bg.yml +0 -61
  248. data/lib/config/locales/de.yml +0 -61
  249. data/lib/config/locales/en-GB.yml +0 -64
  250. data/lib/config/locales/es.yml +0 -59
  251. data/lib/config/locales/fr.yml +0 -62
  252. data/lib/config/locales/hi.yml +0 -53
  253. data/lib/config/locales/hu.yml +0 -64
  254. data/lib/config/locales/id.yml +0 -62
  255. data/lib/config/locales/it.yml +0 -59
  256. data/lib/config/locales/ja.yml +0 -57
  257. data/lib/config/locales/kr.yml +0 -54
  258. data/lib/config/locales/nl.yml +0 -61
  259. data/lib/config/locales/pl.yml +0 -59
  260. data/lib/config/locales/pt-BR.yml +0 -60
  261. data/lib/config/locales/pt.yml +0 -60
  262. data/lib/config/locales/ro.yml +0 -66
  263. data/lib/config/locales/ru.yml +0 -61
  264. data/lib/config/locales/sv.yml +0 -60
  265. data/lib/config/locales/vi.yml +0 -62
  266. data/lib/config/locales/zh-CN.yml +0 -53
  267. data/lib/mongoid/collection.rb +0 -157
  268. data/lib/mongoid/collections.rb +0 -120
  269. data/lib/mongoid/collections/master.rb +0 -45
  270. data/lib/mongoid/collections/operations.rb +0 -44
  271. data/lib/mongoid/config/database.rb +0 -181
  272. data/lib/mongoid/config/replset_database.rb +0 -80
  273. data/lib/mongoid/contexts.rb +0 -25
  274. data/lib/mongoid/contexts/enumerable.rb +0 -313
  275. data/lib/mongoid/contexts/enumerable/sort.rb +0 -43
  276. data/lib/mongoid/contexts/mongo.rb +0 -487
  277. data/lib/mongoid/criterion/builder.rb +0 -34
  278. data/lib/mongoid/criterion/complex.rb +0 -84
  279. data/lib/mongoid/criterion/creational.rb +0 -34
  280. data/lib/mongoid/criterion/exclusion.rb +0 -110
  281. data/lib/mongoid/criterion/inclusion.rb +0 -290
  282. data/lib/mongoid/criterion/optional.rb +0 -259
  283. data/lib/mongoid/criterion/selector.rb +0 -177
  284. data/lib/mongoid/cursor.rb +0 -88
  285. data/lib/mongoid/default_scope.rb +0 -36
  286. data/lib/mongoid/errors/invalid_type.rb +0 -25
  287. data/lib/mongoid/extensions/array/deep_copy.rb +0 -25
  288. data/lib/mongoid/extensions/array/deletion.rb +0 -29
  289. data/lib/mongoid/extensions/false_class/equality.rb +0 -26
  290. data/lib/mongoid/extensions/hash/criteria_helpers.rb +0 -47
  291. data/lib/mongoid/extensions/hash/deep_copy.rb +0 -25
  292. data/lib/mongoid/extensions/hash/scoping.rb +0 -25
  293. data/lib/mongoid/extensions/integer/checks.rb +0 -23
  294. data/lib/mongoid/extensions/nil/collectionization.rb +0 -23
  295. data/lib/mongoid/extensions/object/checks.rb +0 -29
  296. data/lib/mongoid/extensions/object/deep_copy.rb +0 -21
  297. data/lib/mongoid/extensions/object/reflections.rb +0 -48
  298. data/lib/mongoid/extensions/object/substitutable.rb +0 -15
  299. data/lib/mongoid/extensions/object/yoda.rb +0 -44
  300. data/lib/mongoid/extensions/object_id/conversions.rb +0 -60
  301. data/lib/mongoid/extensions/proc/scoping.rb +0 -25
  302. data/lib/mongoid/extensions/string/checks.rb +0 -36
  303. data/lib/mongoid/extensions/string/conversions.rb +0 -22
  304. data/lib/mongoid/extensions/string/inflections.rb +0 -118
  305. data/lib/mongoid/extensions/symbol/checks.rb +0 -23
  306. data/lib/mongoid/extensions/symbol/inflections.rb +0 -67
  307. data/lib/mongoid/extensions/true_class/equality.rb +0 -26
  308. data/lib/mongoid/extras.rb +0 -31
  309. data/lib/mongoid/fields/internal/array.rb +0 -77
  310. data/lib/mongoid/fields/internal/big_decimal.rb +0 -63
  311. data/lib/mongoid/fields/internal/bignum.rb +0 -10
  312. data/lib/mongoid/fields/internal/binary.rb +0 -11
  313. data/lib/mongoid/fields/internal/boolean.rb +0 -58
  314. data/lib/mongoid/fields/internal/date.rb +0 -51
  315. data/lib/mongoid/fields/internal/date_time.rb +0 -28
  316. data/lib/mongoid/fields/internal/false_class.rb +0 -10
  317. data/lib/mongoid/fields/internal/fixnum.rb +0 -10
  318. data/lib/mongoid/fields/internal/float.rb +0 -47
  319. data/lib/mongoid/fields/internal/foreign_keys/array.rb +0 -88
  320. data/lib/mongoid/fields/internal/foreign_keys/object.rb +0 -56
  321. data/lib/mongoid/fields/internal/hash.rb +0 -11
  322. data/lib/mongoid/fields/internal/integer.rb +0 -59
  323. data/lib/mongoid/fields/internal/localized.rb +0 -62
  324. data/lib/mongoid/fields/internal/nil_class.rb +0 -53
  325. data/lib/mongoid/fields/internal/object.rb +0 -11
  326. data/lib/mongoid/fields/internal/object_id.rb +0 -46
  327. data/lib/mongoid/fields/internal/range.rb +0 -61
  328. data/lib/mongoid/fields/internal/set.rb +0 -57
  329. data/lib/mongoid/fields/internal/string.rb +0 -42
  330. data/lib/mongoid/fields/internal/symbol.rb +0 -43
  331. data/lib/mongoid/fields/internal/time.rb +0 -23
  332. data/lib/mongoid/fields/internal/time_with_zone.rb +0 -23
  333. data/lib/mongoid/fields/internal/timekeeping.rb +0 -122
  334. data/lib/mongoid/fields/internal/true_class.rb +0 -10
  335. data/lib/mongoid/fields/mappings.rb +0 -42
  336. data/lib/mongoid/fields/serializable.rb +0 -270
  337. data/lib/mongoid/identity.rb +0 -92
  338. data/lib/mongoid/keys.rb +0 -144
  339. data/lib/mongoid/logger.rb +0 -45
  340. data/lib/mongoid/multi_database.rb +0 -36
  341. data/lib/mongoid/named_scope.rb +0 -166
  342. data/lib/mongoid/relations/embedded/atomic.rb +0 -89
  343. data/lib/mongoid/relations/embedded/atomic/operation.rb +0 -63
  344. data/lib/mongoid/relations/embedded/atomic/pull.rb +0 -65
  345. data/lib/mongoid/relations/embedded/atomic/push_all.rb +0 -59
  346. data/lib/mongoid/relations/embedded/atomic/set.rb +0 -61
  347. data/lib/mongoid/relations/embedded/atomic/unset.rb +0 -41
  348. data/lib/mongoid/relations/referenced/batch.rb +0 -73
  349. data/lib/mongoid/relations/referenced/batch/insert.rb +0 -57
  350. data/lib/mongoid/safety.rb +0 -105
  351. data/lib/mongoid/scope.rb +0 -31
@@ -1,7 +1,7 @@
1
1
  # encoding: utf-8
2
- module Mongoid #:nodoc:
3
- module Persistence #:nodoc:
4
- module Atomic #:nodoc:
2
+ module Mongoid
3
+ module Persistence
4
+ module Atomic
5
5
 
6
6
  # This class provides the ability to perform an explicit $pop
7
7
  # modification on a specific field.
@@ -21,10 +21,8 @@ module Mongoid #:nodoc:
21
21
  if document[field]
22
22
  values = document.send(field)
23
23
  value > 0 ? values.pop : values.shift
24
- values.tap do
25
- collection.update(document.atomic_selector, operation("$pop"), options)
26
- document.remove_change(field) if document.persisted?
27
- end
24
+ execute("$pop")
25
+ values
28
26
  end
29
27
  end
30
28
  end
@@ -1,7 +1,7 @@
1
1
  # encoding: utf-8
2
- module Mongoid #:nodoc:
3
- module Persistence #:nodoc:
4
- module Atomic #:nodoc:
2
+ module Mongoid
3
+ module Persistence
4
+ module Atomic
5
5
 
6
6
  # This class provides the ability to perform an explicit $pull
7
7
  # modification on a specific field.
@@ -21,10 +21,8 @@ module Mongoid #:nodoc:
21
21
  if document[field]
22
22
  values = document.send(field)
23
23
  values.delete(value)
24
- values.tap do
25
- collection.update(document.atomic_selector, operation("$pull"), options)
26
- document.remove_change(field) if document.persisted?
27
- end
24
+ execute("$pull")
25
+ values
28
26
  end
29
27
  end
30
28
  end
@@ -1,7 +1,7 @@
1
1
  # encoding: utf-8
2
- module Mongoid #:nodoc:
3
- module Persistence #:nodoc:
4
- module Atomic #:nodoc:
2
+ module Mongoid
3
+ module Persistence
4
+ module Atomic
5
5
 
6
6
  # This class provides the ability to perform an explicit $pullAll
7
7
  # modification on a specific field.
@@ -21,10 +21,8 @@ module Mongoid #:nodoc:
21
21
  if document[field]
22
22
  values = document.send(field)
23
23
  values.delete_if { |val| value.include?(val) }
24
- values.tap do
25
- collection.update(document.atomic_selector, operation("$pullAll"), options)
26
- document.remove_change(field) if document.persisted?
27
- end
24
+ execute("$pullAll")
25
+ values
28
26
  end
29
27
  end
30
28
  end
@@ -1,7 +1,7 @@
1
1
  # encoding: utf-8
2
- module Mongoid #:nodoc:
3
- module Persistence #:nodoc:
4
- module Atomic #:nodoc:
2
+ module Mongoid
3
+ module Persistence
4
+ module Atomic
5
5
 
6
6
  # This class provides the ability to perform an explicit $push modification
7
7
  # on a specific field.
@@ -17,13 +17,7 @@ module Mongoid #:nodoc:
17
17
  #
18
18
  # @since 2.0.0
19
19
  def persist
20
- prepare do
21
- document[field] = [] unless document[field]
22
- document.send(field).push(value).tap do |value|
23
- collection.update(document.atomic_selector, operation("$push"), options)
24
- document.remove_change(field)
25
- end
26
- end
20
+ append_with("$push")
27
21
  end
28
22
  end
29
23
  end
@@ -1,7 +1,7 @@
1
1
  # encoding: utf-8
2
- module Mongoid #:nodoc:
3
- module Persistence #:nodoc:
4
- module Atomic #:nodoc:
2
+ module Mongoid
3
+ module Persistence
4
+ module Atomic
5
5
 
6
6
  # This class provides the ability to perform an explicit $pushAll modification
7
7
  # on a specific field.
@@ -17,13 +17,7 @@ module Mongoid #:nodoc:
17
17
  #
18
18
  # @since 2.1.0
19
19
  def persist
20
- prepare do
21
- document[field] = [] unless document[field]
22
- document.send(field).concat(value).tap do |value|
23
- collection.update(document.atomic_selector, operation("$pushAll"), options)
24
- document.remove_change(field)
25
- end
26
- end
20
+ append_with("$pushAll")
27
21
  end
28
22
  end
29
23
  end
@@ -1,7 +1,7 @@
1
1
  # encoding: utf-8
2
- module Mongoid #:nodoc:
3
- module Persistence #:nodoc:
4
- module Atomic #:nodoc:
2
+ module Mongoid
3
+ module Persistence
4
+ module Atomic
5
5
 
6
6
  # Performs an atomic rename operation.
7
7
  class Rename
@@ -19,10 +19,9 @@ module Mongoid #:nodoc:
19
19
  prepare do
20
20
  @value = value.to_s
21
21
  document[value] = document.attributes.delete(field)
22
- document[value].tap do
23
- collection.update(document.atomic_selector, operation("$rename"), options)
24
- document.remove_change(value)
25
- end
22
+ execute("$rename")
23
+ document.remove_change(value)
24
+ document[value]
26
25
  end
27
26
  end
28
27
  end
@@ -1,7 +1,7 @@
1
1
  # encoding: utf-8
2
- module Mongoid #:nodoc:
3
- module Persistence #:nodoc:
4
- module Atomic #:nodoc:
2
+ module Mongoid
3
+ module Persistence
4
+ module Atomic
5
5
 
6
6
  # This class provides atomic $set behaviour.
7
7
  class Sets
@@ -18,10 +18,8 @@ module Mongoid #:nodoc:
18
18
  def persist
19
19
  prepare do
20
20
  document[field] = value
21
- document[field].tap do
22
- collection.update(document.atomic_selector, operation("$set"), options)
23
- document.remove_change(field)
24
- end
21
+ execute("$set")
22
+ document[field]
25
23
  end
26
24
  end
27
25
  end
@@ -1,7 +1,7 @@
1
1
  # encoding: utf-8
2
- module Mongoid #:nodoc:
3
- module Persistence #:nodoc:
4
- module Atomic #:nodoc:
2
+ module Mongoid
3
+ module Persistence
4
+ module Atomic
5
5
 
6
6
  # Performs atomic $unset operations.
7
7
  class Unset
@@ -18,8 +18,7 @@ module Mongoid #:nodoc:
18
18
  def persist
19
19
  prepare do
20
20
  document.attributes.delete(field)
21
- collection.update(document.atomic_selector, operation("$unset"), options)
22
- document.remove_change(value)
21
+ execute("$unset")
23
22
  end
24
23
  end
25
24
  end
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
- module Mongoid #:nodoc:
3
- module Persistence #:nodoc:
2
+ module Mongoid
3
+ module Persistence
4
4
 
5
5
  # Contains common logic for delete operations.
6
6
  module Deletion
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
- module Mongoid #:nodoc:
3
- module Persistence #:nodoc:
2
+ module Mongoid
3
+ module Persistence
4
4
 
5
5
  # Contains common logic for insertion operations.
6
6
  module Insertion
@@ -19,23 +19,17 @@ module Mongoid #:nodoc:
19
19
  #
20
20
  # @since 2.1.0
21
21
  def prepare(&block)
22
- document.tap do |doc|
23
- unless validating? && document.invalid?(:create)
24
- result = doc.run_callbacks(:save) do
25
- doc.run_callbacks(:create) do
26
- yield(doc)
27
- doc.new_record = false
28
- true
29
- end
30
- end
31
-
32
- unless result == false
33
- doc.reset_persisted_children
34
- doc.move_changes
35
- Threaded.clear_options!
22
+ unless validating? && document.invalid?(:create)
23
+ result = document.run_callbacks(:save) do
24
+ document.run_callbacks(:create) do
25
+ yield(document)
26
+ document.new_record = false
27
+ true
36
28
  end
37
29
  end
30
+ document.post_persist unless result == false
38
31
  end
32
+ document
39
33
  end
40
34
  end
41
35
  end
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
- module Mongoid #:nodoc:
3
- module Persistence #:nodoc:
2
+ module Mongoid
3
+ module Persistence
4
4
 
5
5
  # Contains common logic for modification operations.
6
6
  module Modification
@@ -20,17 +20,13 @@ module Mongoid #:nodoc:
20
20
  # @since 2.1.0
21
21
  def prepare(&block)
22
22
  return false if validating? && document.invalid?(:update)
23
- document.run_callbacks(:save) do
23
+ result = document.run_callbacks(:save) do
24
24
  document.run_callbacks(:update) do
25
25
  yield(document); true
26
26
  end
27
- end.tap do |result|
28
- unless result == false
29
- document.reset_persisted_children
30
- document.move_changes
31
- Threaded.clear_options!
32
- end
33
27
  end
28
+ document.post_persist unless result == false
29
+ result
34
30
  end
35
31
  end
36
32
  end
@@ -5,14 +5,14 @@ require "mongoid/persistence/operations/update"
5
5
  require "mongoid/persistence/operations/embedded/insert"
6
6
  require "mongoid/persistence/operations/embedded/remove"
7
7
 
8
- module Mongoid #:nodoc:
9
- module Persistence #:nodoc:
8
+ module Mongoid
9
+ module Persistence
10
10
 
11
11
  # Persistence operations include this module to get basic functionality
12
12
  # on initialization.
13
13
  module Operations
14
14
 
15
- attr_reader :conflicts, :document
15
+ attr_reader :conflicts, :document, :options
16
16
 
17
17
  # Get the collection we should be persisting to.
18
18
  #
@@ -80,19 +80,6 @@ module Mongoid #:nodoc:
80
80
  @notifying_parent ||= !@options.delete(:suppress)
81
81
  end
82
82
 
83
- # Get all the options that will be sent to the database. Right now this
84
- # is only safe mode opts.
85
- #
86
- # @example Get the options hash.
87
- # operation.options
88
- #
89
- # @return [ Hash ] The options for the database.
90
- #
91
- # @since 2.1.0
92
- def options
93
- Safety.merge_safety_options(@options)
94
- end
95
-
96
83
  # Get the parent of the provided document.
97
84
  #
98
85
  # @example Get the parent.
@@ -154,9 +141,9 @@ module Mongoid #:nodoc:
154
141
  #
155
142
  # @since 2.1.0
156
143
  def init_updates
157
- document.atomic_updates.tap do |updates|
158
- @conflicts = updates.delete(:conflicts) || {}
159
- end
144
+ updates = document.atomic_updates
145
+ @conflicts = updates.delete(:conflicts) || {}
146
+ updates
160
147
  end
161
148
 
162
149
  class << self
@@ -1,8 +1,8 @@
1
1
  # encoding: utf-8
2
- module Mongoid #:nodoc:
3
- module Persistence #:nodoc:
4
- module Operations #:nodoc:
5
- module Embedded #:nodoc:
2
+ module Mongoid
3
+ module Persistence
4
+ module Operations
5
+ module Embedded
6
6
 
7
7
  # Insert is a persistence command responsible for taking a document that
8
8
  # has not been saved to the database and saving it. This specific class
@@ -28,10 +28,11 @@ module Mongoid #:nodoc:
28
28
  # @return [ Document ] The document to be inserted.
29
29
  def persist
30
30
  prepare do
31
- if parent.new?
31
+ raise Errors::NoParent.new(document.class.name) unless parent
32
+ if parent.new_record?
32
33
  parent.insert
33
34
  else
34
- collection.update(parent.atomic_selector, inserts, options)
35
+ collection.find(parent.atomic_selector).update(inserts)
35
36
  end
36
37
  end
37
38
  end
@@ -1,8 +1,8 @@
1
1
  # encoding: utf-8
2
- module Mongoid #:nodoc:
3
- module Persistence #:nodoc:
4
- module Operations #:nodoc:
5
- module Embedded #:nodoc:
2
+ module Mongoid
3
+ module Persistence
4
+ module Operations
5
+ module Embedded
6
6
 
7
7
  # Remove is a persistence command responsible for deleting a document from
8
8
  # the database.
@@ -29,7 +29,7 @@ module Mongoid #:nodoc:
29
29
  prepare do |doc|
30
30
  parent.remove_child(doc) if notifying_parent?
31
31
  if parent.persisted?
32
- collection.update(parent.atomic_selector, deletes, options)
32
+ collection.find(parent.atomic_selector).update(deletes)
33
33
  end
34
34
  end
35
35
  end
@@ -1,7 +1,7 @@
1
1
  # encoding: utf-8
2
- module Mongoid #:nodoc:
3
- module Persistence #:nodoc:
4
- module Operations #:nodoc:
2
+ module Mongoid
3
+ module Persistence
4
+ module Operations
5
5
 
6
6
  # Insert is a persistence command responsible for taking a document that
7
7
  # has not been saved to the database and saving it.
@@ -24,7 +24,7 @@ module Mongoid #:nodoc:
24
24
  # @return [ Document ] The document to be inserted.
25
25
  def persist
26
26
  prepare do |doc|
27
- collection.insert(doc.as_document, options)
27
+ collection.insert(doc.as_document)
28
28
  IdentityMap.set(doc)
29
29
  end
30
30
  end
@@ -1,7 +1,7 @@
1
1
  # encoding: utf-8
2
- module Mongoid #:nodoc:
3
- module Persistence #:nodoc:
4
- module Operations #:nodoc:
2
+ module Mongoid
3
+ module Persistence
4
+ module Operations
5
5
 
6
6
  # Remove is a persistence command responsible for deleting a document from
7
7
  # the database.
@@ -24,7 +24,7 @@ module Mongoid #:nodoc:
24
24
  # @return [ true ] Always true.
25
25
  def persist
26
26
  prepare do |doc|
27
- collection.remove({ :_id => doc.id }, options)
27
+ collection.find({ _id: doc.id }).remove
28
28
  end
29
29
  end
30
30
  end
@@ -1,7 +1,7 @@
1
1
  # encoding: utf-8
2
- module Mongoid #:nodoc:
3
- module Persistence #:nodoc:
4
- module Operations #:nodoc:
2
+ module Mongoid
3
+ module Persistence
4
+ module Operations
5
5
 
6
6
  # Update is a persistence command responsible for taking a document that
7
7
  # has already been saved to the database and saving it, depending on
@@ -42,9 +42,9 @@ module Mongoid #:nodoc:
42
42
  def persist
43
43
  prepare do
44
44
  unless updates.empty?
45
- collection.update(selector, updates, options)
45
+ collection.find(selector).update(updates)
46
46
  conflicts.each_pair do |key, value|
47
- collection.update(selector, { key => value }, options)
47
+ collection.find(selector).update({ key => value })
48
48
  end
49
49
  end
50
50
  end
@@ -1,14 +1,13 @@
1
1
  # encoding: utf-8
2
- require "singleton"
3
2
  require "mongoid"
4
3
  require "mongoid/config"
5
4
  require "mongoid/railties/document"
6
5
  require "rails"
7
6
  require "rails/mongoid"
8
7
 
9
- module Rails #:nodoc:
10
- module Mongoid #:nodoc:
11
- class Railtie < Rails::Railtie #:nodoc:
8
+ module Rails
9
+ module Mongoid
10
+ class Railtie < Rails::Railtie
12
11
 
13
12
  # Determine which generator to use. app_generators was introduced after
14
13
  # 3.0.0.
@@ -23,7 +22,7 @@ module Rails #:nodoc:
23
22
  config.respond_to?(:app_generators) ? :app_generators : :generators
24
23
  end
25
24
 
26
- # Maping of rescued exceptions to HTTP responses
25
+ # Mapping of rescued exceptions to HTTP responses
27
26
  #
28
27
  # @example
29
28
  # railtie.rescue_responses
@@ -38,7 +37,7 @@ module Rails #:nodoc:
38
37
  }
39
38
  end
40
39
 
41
- config.send(generator).orm :mongoid, :migration => false
40
+ config.send(generator).orm :mongoid, migration: false
42
41
 
43
42
  if config.action_dispatch.rescue_responses
44
43
  config.action_dispatch.rescue_responses.merge!(rescue_responses)
@@ -73,15 +72,22 @@ module Rails #:nodoc:
73
72
  # # - host: localhost
74
73
  # # port: 27019
75
74
  # allow_dynamic_fields: false
76
- # parameterize_keys: false
77
75
  # persist_in_safe_mode: false
78
76
  #
79
77
  initializer "setup database" do
80
78
  config_file = Rails.root.join("config", "mongoid.yml")
81
- # @todo: Durran: Remove extra check when #1291 complete.
82
- if config_file.file? &&
83
- YAML.load(ERB.new(File.read(config_file)).result)[Rails.env].values.flatten.any?
84
- ::Mongoid.load!(config_file)
79
+ if config_file.file?
80
+ begin
81
+ ::Mongoid.load!(config_file)
82
+ rescue ::Mongoid::Errors::NoSessionsConfig => e
83
+ handle_configuration_error(e)
84
+ rescue ::Mongoid::Errors::NoDefaultSession => e
85
+ handle_configuration_error(e)
86
+ rescue ::Mongoid::Errors::NoSessionDatabase => e
87
+ handle_configuration_error(e)
88
+ rescue ::Mongoid::Errors::NoSessionHosts => e
89
+ handle_configuration_error(e)
90
+ end
85
91
  end
86
92
  end
87
93
 
@@ -139,6 +145,15 @@ module Rails #:nodoc:
139
145
  end
140
146
  end
141
147
  end
148
+
149
+ # Rails runs all initializers first before getting into any generator
150
+ # code, so we have no way in the intitializer to know if we are
151
+ # generating a mongoid.yml. So instead of failing, we catch all the
152
+ # errors and print them out.
153
+ def handle_configuration_error(e)
154
+ puts "There is a configuration error with the current mongoid.yml."
155
+ puts e.message
156
+ end
142
157
  end
143
158
  end
144
159
  end