mongoid 2.4.10 → 3.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 (356) hide show
  1. data/CHANGELOG.md +949 -10
  2. data/LICENSE +1 -1
  3. data/README.md +10 -11
  4. data/Rakefile +3 -17
  5. data/lib/config/locales/en.yml +455 -51
  6. data/lib/mongoid/atomic/modifiers.rb +2 -2
  7. data/lib/mongoid/atomic/paths/embedded/many.rb +6 -6
  8. data/lib/mongoid/atomic/paths/embedded/one.rb +5 -5
  9. data/lib/mongoid/atomic/paths/embedded.rb +4 -5
  10. data/lib/mongoid/atomic/paths/root.rb +4 -5
  11. data/lib/mongoid/atomic.rb +70 -16
  12. data/lib/mongoid/attributes/processing.rb +14 -10
  13. data/lib/mongoid/attributes/readonly.rb +56 -0
  14. data/lib/mongoid/attributes.rb +95 -32
  15. data/lib/mongoid/callbacks.rb +106 -43
  16. data/lib/mongoid/components.rb +12 -23
  17. data/lib/mongoid/config/environment.rb +7 -4
  18. data/lib/mongoid/config/inflections.rb +6 -0
  19. data/lib/mongoid/config/options.rb +1 -1
  20. data/lib/mongoid/config/validators/option.rb +25 -0
  21. data/lib/mongoid/config/validators/session.rb +140 -0
  22. data/lib/mongoid/config/validators.rb +3 -0
  23. data/lib/mongoid/config.rb +104 -225
  24. data/lib/mongoid/contextual/aggregable/memory.rb +109 -0
  25. data/lib/mongoid/contextual/aggregable/mongo.rb +181 -0
  26. data/lib/mongoid/contextual/atomic.rb +179 -0
  27. data/lib/mongoid/contextual/command.rb +43 -0
  28. data/lib/mongoid/contextual/find_and_modify.rb +68 -0
  29. data/lib/mongoid/contextual/map_reduce.rb +273 -0
  30. data/lib/mongoid/contextual/memory.rb +406 -0
  31. data/lib/mongoid/contextual/mongo.rb +662 -0
  32. data/lib/mongoid/contextual.rb +50 -0
  33. data/lib/mongoid/copyable.rb +7 -25
  34. data/lib/mongoid/criteria.rb +515 -245
  35. data/lib/mongoid/criterion/inspection.rb +14 -8
  36. data/lib/mongoid/criterion/scoping.rb +114 -44
  37. data/lib/mongoid/dirty.rb +152 -67
  38. data/lib/mongoid/document.rb +71 -52
  39. data/lib/mongoid/errors/ambiguous_relationship.rb +51 -0
  40. data/lib/mongoid/errors/callback.rb +5 -6
  41. data/lib/mongoid/errors/delete_restriction.rb +29 -0
  42. data/lib/mongoid/errors/document_not_found.rb +98 -17
  43. data/lib/mongoid/errors/eager_load.rb +3 -6
  44. data/lib/mongoid/errors/invalid_collection.rb +3 -3
  45. data/lib/mongoid/errors/invalid_config_option.rb +27 -0
  46. data/lib/mongoid/errors/invalid_database.rb +3 -3
  47. data/lib/mongoid/errors/invalid_field.rb +54 -8
  48. data/lib/mongoid/errors/invalid_field_option.rb +35 -0
  49. data/lib/mongoid/errors/invalid_find.rb +3 -3
  50. data/lib/mongoid/errors/invalid_index.rb +28 -0
  51. data/lib/mongoid/errors/invalid_options.rb +4 -4
  52. data/lib/mongoid/errors/invalid_scope.rb +24 -0
  53. data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +38 -0
  54. data/lib/mongoid/errors/invalid_storage_options.rb +27 -0
  55. data/lib/mongoid/errors/invalid_time.rb +3 -6
  56. data/lib/mongoid/errors/inverse_not_found.rb +29 -0
  57. data/lib/mongoid/errors/mixed_relations.rb +4 -9
  58. data/lib/mongoid/errors/mixed_session_configuration.rb +28 -0
  59. data/lib/mongoid/errors/mongoid_error.rb +54 -3
  60. data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +28 -0
  61. data/lib/mongoid/errors/no_default_session.rb +23 -0
  62. data/lib/mongoid/errors/no_environment.rb +3 -3
  63. data/lib/mongoid/errors/no_map_reduce_output.rb +24 -0
  64. data/lib/mongoid/errors/no_metadata.rb +21 -0
  65. data/lib/mongoid/errors/no_parent.rb +24 -0
  66. data/lib/mongoid/errors/no_session_config.rb +22 -0
  67. data/lib/mongoid/errors/no_session_database.rb +27 -0
  68. data/lib/mongoid/errors/no_session_hosts.rb +27 -0
  69. data/lib/mongoid/errors/no_sessions_config.rb +20 -0
  70. data/lib/mongoid/errors/readonly_attribute.rb +25 -0
  71. data/lib/mongoid/errors/scope_overwrite.rb +4 -4
  72. data/lib/mongoid/errors/too_many_nested_attribute_records.rb +4 -4
  73. data/lib/mongoid/errors/unknown_attribute.rb +25 -0
  74. data/lib/mongoid/errors/unsaved_document.rb +4 -8
  75. data/lib/mongoid/errors/unsupported_javascript.rb +27 -0
  76. data/lib/mongoid/errors/unsupported_version.rb +4 -4
  77. data/lib/mongoid/errors/validations.rb +7 -6
  78. data/lib/mongoid/errors/versioning_not_on_root.rb +23 -0
  79. data/lib/mongoid/errors.rb +23 -1
  80. data/lib/mongoid/evolvable.rb +19 -0
  81. data/lib/mongoid/extensions/array.rb +164 -0
  82. data/lib/mongoid/extensions/big_decimal.rb +42 -0
  83. data/lib/mongoid/extensions/boolean.rb +24 -0
  84. data/lib/mongoid/extensions/date.rb +70 -0
  85. data/lib/mongoid/extensions/date_time.rb +73 -0
  86. data/lib/mongoid/extensions/false_class.rb +38 -0
  87. data/lib/mongoid/extensions/float.rb +56 -0
  88. data/lib/mongoid/extensions/hash.rb +123 -0
  89. data/lib/mongoid/extensions/integer.rb +66 -0
  90. data/lib/mongoid/extensions/module.rb +28 -0
  91. data/lib/mongoid/extensions/nil_class.rb +21 -0
  92. data/lib/mongoid/extensions/object.rb +238 -0
  93. data/lib/mongoid/extensions/object_id.rb +54 -0
  94. data/lib/mongoid/extensions/range.rb +79 -0
  95. data/lib/mongoid/extensions/regexp.rb +27 -0
  96. data/lib/mongoid/extensions/set.rb +55 -0
  97. data/lib/mongoid/extensions/string.rb +181 -0
  98. data/lib/mongoid/extensions/symbol.rb +54 -0
  99. data/lib/mongoid/extensions/time.rb +78 -0
  100. data/lib/mongoid/extensions/time_with_zone.rb +55 -0
  101. data/lib/mongoid/extensions/true_class.rb +38 -0
  102. data/lib/mongoid/extensions.rb +28 -76
  103. data/lib/mongoid/factory.rb +1 -1
  104. data/lib/mongoid/fields/foreign_key.rb +150 -0
  105. data/lib/mongoid/fields/localized.rb +73 -0
  106. data/lib/mongoid/fields/standard.rb +268 -0
  107. data/lib/mongoid/fields/validators/macro.rb +83 -0
  108. data/lib/mongoid/fields/validators.rb +2 -0
  109. data/lib/mongoid/fields.rb +142 -208
  110. data/lib/mongoid/finders.rb +45 -50
  111. data/lib/mongoid/hierarchy.rb +44 -15
  112. data/lib/mongoid/identity_map.rb +49 -21
  113. data/lib/mongoid/indexes/validators/options.rb +80 -0
  114. data/lib/mongoid/indexes.rb +66 -15
  115. data/lib/mongoid/inspection.rb +1 -1
  116. data/lib/mongoid/json.rb +2 -2
  117. data/lib/mongoid/loggable.rb +69 -0
  118. data/lib/mongoid/matchers/all.rb +7 -8
  119. data/lib/mongoid/matchers/and.rb +3 -3
  120. data/lib/mongoid/matchers/default.rb +6 -4
  121. data/lib/mongoid/matchers/exists.rb +2 -2
  122. data/lib/mongoid/matchers/gt.rb +2 -2
  123. data/lib/mongoid/matchers/gte.rb +2 -2
  124. data/lib/mongoid/matchers/in.rb +3 -7
  125. data/lib/mongoid/matchers/lt.rb +2 -2
  126. data/lib/mongoid/matchers/lte.rb +2 -2
  127. data/lib/mongoid/matchers/ne.rb +2 -2
  128. data/lib/mongoid/matchers/nin.rb +2 -2
  129. data/lib/mongoid/matchers/or.rb +2 -2
  130. data/lib/mongoid/matchers/size.rb +2 -2
  131. data/lib/mongoid/matchers/strategies.rb +3 -3
  132. data/lib/mongoid/matchers.rb +1 -1
  133. data/lib/mongoid/multi_parameter_attributes.rb +9 -11
  134. data/lib/mongoid/nested_attributes.rb +17 -9
  135. data/lib/mongoid/observer.rb +1 -2
  136. data/lib/mongoid/paranoia.rb +10 -44
  137. data/lib/mongoid/persistence/atomic/add_to_set.rb +5 -9
  138. data/lib/mongoid/persistence/atomic/bit.rb +5 -7
  139. data/lib/mongoid/persistence/atomic/inc.rb +5 -7
  140. data/lib/mongoid/persistence/atomic/operation.rb +45 -6
  141. data/lib/mongoid/persistence/atomic/pop.rb +5 -7
  142. data/lib/mongoid/persistence/atomic/pull.rb +5 -7
  143. data/lib/mongoid/persistence/atomic/pull_all.rb +5 -7
  144. data/lib/mongoid/persistence/atomic/push.rb +4 -10
  145. data/lib/mongoid/persistence/atomic/push_all.rb +4 -10
  146. data/lib/mongoid/persistence/atomic/rename.rb +6 -7
  147. data/lib/mongoid/persistence/atomic/sets.rb +5 -7
  148. data/lib/mongoid/persistence/atomic/unset.rb +4 -5
  149. data/lib/mongoid/persistence/atomic.rb +2 -2
  150. data/lib/mongoid/persistence/deletion.rb +2 -2
  151. data/lib/mongoid/persistence/insertion.rb +10 -16
  152. data/lib/mongoid/persistence/modification.rb +5 -9
  153. data/lib/mongoid/persistence/operations/embedded/insert.rb +7 -6
  154. data/lib/mongoid/persistence/operations/embedded/remove.rb +5 -5
  155. data/lib/mongoid/persistence/operations/insert.rb +4 -4
  156. data/lib/mongoid/persistence/operations/remove.rb +4 -4
  157. data/lib/mongoid/persistence/operations/update.rb +5 -5
  158. data/lib/mongoid/persistence/operations/upsert.rb +28 -0
  159. data/lib/mongoid/persistence/operations.rb +22 -19
  160. data/lib/mongoid/persistence/upsertion.rb +30 -0
  161. data/lib/mongoid/persistence.rb +94 -39
  162. data/lib/mongoid/railtie.rb +26 -11
  163. data/lib/mongoid/railties/database.rake +22 -108
  164. data/lib/mongoid/relations/accessors.rb +120 -20
  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 +4 -4
  175. data/lib/mongoid/relations/builders/embedded/in.rb +5 -5
  176. data/lib/mongoid/relations/builders/embedded/many.rb +12 -12
  177. data/lib/mongoid/relations/builders/embedded/one.rb +6 -6
  178. data/lib/mongoid/relations/builders/nested_attributes/many.rb +8 -8
  179. data/lib/mongoid/relations/builders/nested_attributes/one.rb +5 -5
  180. data/lib/mongoid/relations/builders/referenced/in.rb +4 -4
  181. data/lib/mongoid/relations/builders/referenced/many.rb +6 -6
  182. data/lib/mongoid/relations/builders/referenced/many_to_many.rb +7 -5
  183. data/lib/mongoid/relations/builders/referenced/one.rb +5 -5
  184. data/lib/mongoid/relations/builders.rb +19 -16
  185. data/lib/mongoid/relations/cascading/delete.rb +3 -5
  186. data/lib/mongoid/relations/cascading/destroy.rb +3 -3
  187. data/lib/mongoid/relations/cascading/nullify.rb +3 -3
  188. data/lib/mongoid/relations/cascading/restrict.rb +37 -0
  189. data/lib/mongoid/relations/cascading.rb +10 -7
  190. data/lib/mongoid/relations/constraint.rb +4 -3
  191. data/lib/mongoid/relations/conversions.rb +6 -7
  192. data/lib/mongoid/relations/cyclic.rb +7 -7
  193. data/lib/mongoid/relations/embedded/batchable.rb +347 -0
  194. data/lib/mongoid/relations/embedded/in.rb +23 -12
  195. data/lib/mongoid/relations/embedded/many.rb +100 -161
  196. data/lib/mongoid/relations/embedded/one.rb +25 -14
  197. data/lib/mongoid/relations/macros.rb +105 -60
  198. data/lib/mongoid/relations/many.rb +93 -14
  199. data/lib/mongoid/relations/metadata.rb +277 -47
  200. data/lib/mongoid/relations/nested_builder.rb +4 -6
  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 +62 -31
  205. data/lib/mongoid/relations/referenced/in.rb +40 -15
  206. data/lib/mongoid/relations/referenced/many.rb +162 -130
  207. data/lib/mongoid/relations/referenced/many_to_many.rb +104 -48
  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/relations/touchable.rb +32 -0
  213. data/lib/mongoid/relations.rb +22 -6
  214. data/lib/mongoid/reloading.rb +12 -14
  215. data/lib/mongoid/scoping.rb +312 -0
  216. data/lib/mongoid/serialization.rb +94 -42
  217. data/lib/mongoid/sessions/factory.rb +108 -0
  218. data/lib/mongoid/sessions/mongo_uri.rb +93 -0
  219. data/lib/mongoid/sessions/validators/storage.rb +49 -0
  220. data/lib/mongoid/sessions/validators.rb +2 -0
  221. data/lib/mongoid/sessions.rb +383 -0
  222. data/lib/mongoid/sharding.rb +6 -6
  223. data/lib/mongoid/state.rb +6 -7
  224. data/lib/mongoid/threaded/lifecycle.rb +21 -21
  225. data/lib/mongoid/threaded/sessions.rb +0 -0
  226. data/lib/mongoid/threaded.rb +219 -59
  227. data/lib/mongoid/timestamps/created.rb +8 -4
  228. data/lib/mongoid/timestamps/timeless.rb +6 -4
  229. data/lib/mongoid/timestamps/updated.rb +4 -3
  230. data/lib/mongoid/timestamps.rb +1 -1
  231. data/lib/mongoid/unit_of_work.rb +61 -0
  232. data/lib/mongoid/validations/associated.rb +2 -2
  233. data/lib/mongoid/validations/format.rb +2 -2
  234. data/lib/mongoid/validations/presence.rb +34 -4
  235. data/lib/mongoid/validations/uniqueness.rb +11 -12
  236. data/lib/mongoid/validations.rb +28 -20
  237. data/lib/mongoid/version.rb +2 -2
  238. data/lib/mongoid/versioning.rb +25 -26
  239. data/lib/mongoid.rb +37 -37
  240. data/lib/rack/mongoid/middleware/identity_map.rb +3 -3
  241. data/lib/rails/generators/mongoid/config/config_generator.rb +1 -1
  242. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +65 -17
  243. data/lib/rails/generators/mongoid/model/model_generator.rb +7 -7
  244. data/lib/rails/generators/mongoid/model/templates/model.rb.tt +2 -2
  245. data/lib/rails/generators/mongoid/observer/observer_generator.rb +4 -4
  246. data/lib/rails/generators/mongoid_generator.rb +5 -5
  247. data/lib/rails/mongoid.rb +73 -26
  248. metadata +103 -148
  249. data/lib/config/locales/bg.yml +0 -61
  250. data/lib/config/locales/de.yml +0 -61
  251. data/lib/config/locales/en-GB.yml +0 -64
  252. data/lib/config/locales/es.yml +0 -59
  253. data/lib/config/locales/fr.yml +0 -62
  254. data/lib/config/locales/hi.yml +0 -53
  255. data/lib/config/locales/hu.yml +0 -64
  256. data/lib/config/locales/id.yml +0 -62
  257. data/lib/config/locales/it.yml +0 -59
  258. data/lib/config/locales/ja.yml +0 -57
  259. data/lib/config/locales/kr.yml +0 -54
  260. data/lib/config/locales/nl.yml +0 -61
  261. data/lib/config/locales/pl.yml +0 -59
  262. data/lib/config/locales/pt-BR.yml +0 -60
  263. data/lib/config/locales/pt.yml +0 -60
  264. data/lib/config/locales/ro.yml +0 -66
  265. data/lib/config/locales/ru.yml +0 -61
  266. data/lib/config/locales/sv.yml +0 -60
  267. data/lib/config/locales/vi.yml +0 -62
  268. data/lib/config/locales/zh-CN.yml +0 -53
  269. data/lib/mongoid/collection.rb +0 -157
  270. data/lib/mongoid/collections/master.rb +0 -45
  271. data/lib/mongoid/collections/operations.rb +0 -44
  272. data/lib/mongoid/collections/retry.rb +0 -59
  273. data/lib/mongoid/collections.rb +0 -120
  274. data/lib/mongoid/config/database.rb +0 -181
  275. data/lib/mongoid/config/replset_database.rb +0 -80
  276. data/lib/mongoid/contexts/enumerable/sort.rb +0 -43
  277. data/lib/mongoid/contexts/enumerable.rb +0 -313
  278. data/lib/mongoid/contexts/mongo.rb +0 -487
  279. data/lib/mongoid/contexts.rb +0 -25
  280. data/lib/mongoid/criterion/builder.rb +0 -34
  281. data/lib/mongoid/criterion/complex.rb +0 -84
  282. data/lib/mongoid/criterion/creational.rb +0 -34
  283. data/lib/mongoid/criterion/exclusion.rb +0 -108
  284. data/lib/mongoid/criterion/inclusion.rb +0 -290
  285. data/lib/mongoid/criterion/optional.rb +0 -259
  286. data/lib/mongoid/criterion/selector.rb +0 -177
  287. data/lib/mongoid/cursor.rb +0 -88
  288. data/lib/mongoid/default_scope.rb +0 -36
  289. data/lib/mongoid/errors/invalid_type.rb +0 -25
  290. data/lib/mongoid/extensions/array/deep_copy.rb +0 -25
  291. data/lib/mongoid/extensions/array/deletion.rb +0 -29
  292. data/lib/mongoid/extensions/false_class/equality.rb +0 -26
  293. data/lib/mongoid/extensions/hash/criteria_helpers.rb +0 -47
  294. data/lib/mongoid/extensions/hash/deep_copy.rb +0 -25
  295. data/lib/mongoid/extensions/hash/scoping.rb +0 -25
  296. data/lib/mongoid/extensions/integer/checks.rb +0 -23
  297. data/lib/mongoid/extensions/nil/collectionization.rb +0 -23
  298. data/lib/mongoid/extensions/object/checks.rb +0 -29
  299. data/lib/mongoid/extensions/object/deep_copy.rb +0 -21
  300. data/lib/mongoid/extensions/object/reflections.rb +0 -48
  301. data/lib/mongoid/extensions/object/substitutable.rb +0 -15
  302. data/lib/mongoid/extensions/object/yoda.rb +0 -44
  303. data/lib/mongoid/extensions/object_id/conversions.rb +0 -60
  304. data/lib/mongoid/extensions/proc/scoping.rb +0 -25
  305. data/lib/mongoid/extensions/string/checks.rb +0 -36
  306. data/lib/mongoid/extensions/string/conversions.rb +0 -22
  307. data/lib/mongoid/extensions/string/inflections.rb +0 -118
  308. data/lib/mongoid/extensions/symbol/checks.rb +0 -23
  309. data/lib/mongoid/extensions/symbol/inflections.rb +0 -67
  310. data/lib/mongoid/extensions/true_class/equality.rb +0 -26
  311. data/lib/mongoid/extras.rb +0 -31
  312. data/lib/mongoid/fields/internal/array.rb +0 -76
  313. data/lib/mongoid/fields/internal/big_decimal.rb +0 -63
  314. data/lib/mongoid/fields/internal/bignum.rb +0 -10
  315. data/lib/mongoid/fields/internal/binary.rb +0 -11
  316. data/lib/mongoid/fields/internal/boolean.rb +0 -58
  317. data/lib/mongoid/fields/internal/date.rb +0 -51
  318. data/lib/mongoid/fields/internal/date_time.rb +0 -28
  319. data/lib/mongoid/fields/internal/false_class.rb +0 -10
  320. data/lib/mongoid/fields/internal/fixnum.rb +0 -10
  321. data/lib/mongoid/fields/internal/float.rb +0 -47
  322. data/lib/mongoid/fields/internal/foreign_keys/array.rb +0 -88
  323. data/lib/mongoid/fields/internal/foreign_keys/object.rb +0 -56
  324. data/lib/mongoid/fields/internal/hash.rb +0 -11
  325. data/lib/mongoid/fields/internal/integer.rb +0 -59
  326. data/lib/mongoid/fields/internal/localized.rb +0 -62
  327. data/lib/mongoid/fields/internal/nil_class.rb +0 -53
  328. data/lib/mongoid/fields/internal/object.rb +0 -11
  329. data/lib/mongoid/fields/internal/object_id.rb +0 -46
  330. data/lib/mongoid/fields/internal/range.rb +0 -61
  331. data/lib/mongoid/fields/internal/set.rb +0 -57
  332. data/lib/mongoid/fields/internal/string.rb +0 -42
  333. data/lib/mongoid/fields/internal/symbol.rb +0 -43
  334. data/lib/mongoid/fields/internal/time.rb +0 -23
  335. data/lib/mongoid/fields/internal/time_with_zone.rb +0 -23
  336. data/lib/mongoid/fields/internal/timekeeping.rb +0 -122
  337. data/lib/mongoid/fields/internal/true_class.rb +0 -10
  338. data/lib/mongoid/fields/mappings.rb +0 -42
  339. data/lib/mongoid/fields/serializable.rb +0 -270
  340. data/lib/mongoid/identity.rb +0 -92
  341. data/lib/mongoid/javascript/functions.yml +0 -63
  342. data/lib/mongoid/javascript.rb +0 -20
  343. data/lib/mongoid/keys.rb +0 -144
  344. data/lib/mongoid/logger.rb +0 -45
  345. data/lib/mongoid/multi_database.rb +0 -36
  346. data/lib/mongoid/named_scope.rb +0 -166
  347. data/lib/mongoid/relations/embedded/atomic/operation.rb +0 -63
  348. data/lib/mongoid/relations/embedded/atomic/pull.rb +0 -65
  349. data/lib/mongoid/relations/embedded/atomic/push_all.rb +0 -59
  350. data/lib/mongoid/relations/embedded/atomic/set.rb +0 -61
  351. data/lib/mongoid/relations/embedded/atomic/unset.rb +0 -41
  352. data/lib/mongoid/relations/embedded/atomic.rb +0 -89
  353. data/lib/mongoid/relations/referenced/batch/insert.rb +0 -57
  354. data/lib/mongoid/relations/referenced/batch.rb +0 -73
  355. data/lib/mongoid/safety.rb +0 -105
  356. data/lib/mongoid/scope.rb +0 -31
@@ -0,0 +1,35 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ module Errors
4
+
5
+ # This error is raised when trying to create a field that has an invalid
6
+ # option.
7
+ class InvalidFieldOption < MongoidError
8
+
9
+ # Create the new error.
10
+ #
11
+ # @example Create the error.
12
+ # InvalidFieldOption.new(Model, :name, :localized, [ :localize ])
13
+ #
14
+ # @param [ Class ] klass The document class.
15
+ # @param [ Symbol ] name The method name.
16
+ # @param [ Symbol ] option The option name.
17
+ # @param [ Array<Symbol> ] valid All the valid options.
18
+ #
19
+ # @since 3.0.0
20
+ def initialize(klass, name, option, valid)
21
+ super(
22
+ compose_message(
23
+ "invalid_field_option",
24
+ {
25
+ name: name,
26
+ klass: klass,
27
+ option: option,
28
+ valid: valid.join(", ")
29
+ }
30
+ )
31
+ )
32
+ end
33
+ end
34
+ end
35
+ end
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
- module Mongoid #:nodoc
3
- module Errors #:nodoc
2
+ module Mongoid
3
+ module Errors
4
4
 
5
5
  # Raised when invalid arguments are passed to #find.
6
6
  class InvalidFind < MongoidError
@@ -12,7 +12,7 @@ module Mongoid #:nodoc
12
12
  #
13
13
  # @since 2.2.0
14
14
  def initialize
15
- super(translate("calling_document_find_with_nil_is_invalid", {}))
15
+ super(compose_message("calling_document_find_with_nil_is_invalid", {}))
16
16
  end
17
17
  end
18
18
  end
@@ -0,0 +1,28 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ module Errors
4
+
5
+ # Raised when an invalid index is defined.
6
+ class InvalidIndex < MongoidError
7
+
8
+ # Create the new error.
9
+ #
10
+ # @example Create the error.
11
+ # InvalidIndex.new(Band, name: 1)
12
+ #
13
+ # @param [ Class ] klass The model class.
14
+ # @param [ Hash ] spec The invalid specification.
15
+ # @param [ Hash ] options The invalid options.
16
+ #
17
+ # @since 3.0.0
18
+ def initialize(klass, spec, options)
19
+ super(
20
+ compose_message(
21
+ "invalid_index",
22
+ { klass: klass.name, spec: spec, options: options }
23
+ )
24
+ )
25
+ end
26
+ end
27
+ end
28
+ end
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
- module Mongoid #:nodoc
3
- module Errors #:nodoc
2
+ module Mongoid
3
+ module Errors
4
4
 
5
5
  # Raised when invalid options are passed to a relation macro.
6
6
  class InvalidOptions < MongoidError
@@ -17,9 +17,9 @@ module Mongoid #:nodoc
17
17
  # @since 2.1.0
18
18
  def initialize(name, invalid, valid)
19
19
  super(
20
- translate(
20
+ compose_message(
21
21
  "invalid_options",
22
- { :name => name, :invalid => invalid, :valid => valid.join(', ') }
22
+ { name: name, invalid: invalid, valid: valid.join(', ') }
23
23
  )
24
24
  )
25
25
  end
@@ -0,0 +1,24 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ module Errors
4
+
5
+ # This error is raised when defining a scope of an invalid type.
6
+ class InvalidScope < MongoidError
7
+
8
+ # Create the error.
9
+ #
10
+ # @example Create the error.
11
+ # InvalidScope.new(Band, {})
12
+ #
13
+ # @param [ Class ] klass The model class.
14
+ # @param [ Object ] value The attempted scope value.
15
+ #
16
+ # @since 3.0.0
17
+ def initialize(klass, value)
18
+ super(
19
+ compose_message("invalid_scope", { klass: klass, value: value })
20
+ )
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,38 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ module Errors
4
+
5
+ # Raised when trying to set a polymorphic "references in" relation to a
6
+ # model with multiple "references many/one" relations pointing to that
7
+ # first model.
8
+ #
9
+ # @example Invalid setting of a polymorphic relation.
10
+ # class Face
11
+ # include Mongoid::Document
12
+ #
13
+ # has_one :left_eye, class_name: "Eye", as: :eyeable
14
+ # has_one :right_eye, class_name: "Eye", as: :eyeable
15
+ # end
16
+ #
17
+ # class Eye
18
+ # include Mongoid::Document
19
+ #
20
+ # belongs_to :eyeable, polymorphic: true
21
+ # end
22
+ #
23
+ # eye = Eye.new
24
+ # face = Face.new
25
+ # eye.eyeable = face # Raises error
26
+
27
+ class InvalidSetPolymorphicRelation < MongoidError
28
+
29
+ # Create the new invalid set polymorphic relation error.
30
+ #
31
+ # @example Create the error.
32
+ # InvalidSetPolymorphicRelation.new
33
+ def initialize(name, klass, other_klass)
34
+ super(compose_message("invalid_set_polymorphic_relation", { name: name, klass: klass, other_klass: other_klass }))
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,27 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ module Errors
4
+
5
+ # Raised when options provided to :store_in are invalid.
6
+ class InvalidStorageOptions < MongoidError
7
+
8
+ # Create the new error.
9
+ #
10
+ # @example Create the new error.
11
+ # InvalidStorageOptions.new(:collection_name)
12
+ #
13
+ # @param [ Class ] klass The model class.
14
+ # @param [ Hash, String, Symbol ] options The provided options.
15
+ #
16
+ # @since 3.0.0
17
+ def initialize(klass, options)
18
+ super(
19
+ compose_message(
20
+ "invalid_storage_options",
21
+ { klass: klass, options: options }
22
+ )
23
+ )
24
+ end
25
+ end
26
+ end
27
+ end
@@ -1,13 +1,11 @@
1
1
  # encoding: utf-8
2
- module Mongoid #:nodoc
3
- module Errors #:nodoc
2
+ module Mongoid
3
+ module Errors
4
4
 
5
5
  # This exception is raised when a bad value is attempted to be converted to
6
6
  # a date or time.
7
7
  class InvalidTime < MongoidError
8
8
 
9
- attr_reader :klass, :value
10
-
11
9
  # Create the new invalid date error.
12
10
  #
13
11
  # @example Create the new invalid date error.
@@ -17,8 +15,7 @@ module Mongoid #:nodoc
17
15
  #
18
16
  # @since 2.3.1
19
17
  def initialize(value)
20
- @value = value
21
- super(translate("invalid_time", { :value => value }))
18
+ super(compose_message("invalid_time", { value: value }))
22
19
  end
23
20
  end
24
21
  end
@@ -0,0 +1,29 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ module Errors
4
+
5
+ # Raised when no inverse_of definition can be found when needed.
6
+ class InverseNotFound < MongoidError
7
+
8
+ # Create then new error.
9
+ #
10
+ # @example Create the new error.
11
+ # InverseNotFound.new(Town, :citizens, Person, :town_id)
12
+ #
13
+ # @param [ Class ] base The base class.
14
+ # @param [ Symbol ] name The name of the relation.
15
+ # @param [ Class ] The child class.
16
+ # @param [ Symbol ] inverse The attempted inverse key.
17
+ #
18
+ # @since 3.0.0
19
+ def initialize(base, name, klass, inverse)
20
+ super(
21
+ compose_message(
22
+ "inverse_not_found",
23
+ { base: base, name: name, klass: klass, inverse: inverse }
24
+ )
25
+ )
26
+ end
27
+ end
28
+ end
29
+ end
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
- module Mongoid #:nodoc
3
- module Errors #:nodoc
2
+ module Mongoid
3
+ module Errors
4
4
 
5
5
  # This error is raised when trying to reference an embedded document from
6
6
  # a document in another collection that is not it's parent.
@@ -19,16 +19,11 @@ module Mongoid #:nodoc
19
19
  #
20
20
  # @since 2.0.0
21
21
  class MixedRelations < MongoidError
22
-
23
- attr_reader :root_klass, :embedded_klass
24
-
25
22
  def initialize(root_klass, embedded_klass)
26
- @root_klass, @embedded_klass = root_klass, embedded_klass
27
-
28
23
  super(
29
- translate(
24
+ compose_message(
30
25
  "mixed_relations",
31
- { :root => root_klass, :embedded => embedded_klass }
26
+ { root: root_klass, embedded: embedded_klass }
32
27
  )
33
28
  )
34
29
  end
@@ -0,0 +1,28 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ module Errors
4
+
5
+ # This error is raised when a session configuration contains both a uri and
6
+ # other standard options.
7
+ class MixedSessionConfiguration < MongoidError
8
+
9
+ # Initialize the error.
10
+ #
11
+ # @example Initialize the error.
12
+ # MixedSessionConfiguration.new(:name, {})
13
+ #
14
+ # @param [ Symbol ] name The name of the session config.
15
+ # @param [ Hash ] config The configuration options.
16
+ #
17
+ # @since 3.0.0
18
+ def initialize(name, config)
19
+ super(
20
+ compose_message(
21
+ "mixed_session_configuration",
22
+ { name: name, config: config }
23
+ )
24
+ )
25
+ end
26
+ end
27
+ end
28
+ end
@@ -1,13 +1,28 @@
1
1
  # encoding: utf-8
2
- module Mongoid #:nodoc
3
- module Errors #:nodoc
2
+ module Mongoid
3
+ module Errors
4
4
 
5
5
  # Default parent Mongoid error for all custom errors. This handles the base
6
6
  # key for the translations and provides the convenience method for
7
7
  # translating the messages.
8
8
  class MongoidError < StandardError
9
+
9
10
  BASE_KEY = "mongoid.errors.messages"
10
11
 
12
+ # Compose the message.
13
+ #
14
+ # @example Create the message
15
+ # error.compose_message
16
+ #
17
+ # @return [ String ] The composed message.
18
+ #
19
+ # @since 3.0.0
20
+ def compose_message(key, attributes)
21
+ "\nProblem:\n #{problem(key, attributes)}"+
22
+ "\nSummary:\n #{summary(key, attributes)}"+
23
+ "\nResolution:\n #{resolution(key, attributes)}"
24
+ end
25
+
11
26
  # Given the key of the specific error and the options hash, translate the
12
27
  # message.
13
28
  #
@@ -19,7 +34,43 @@ module Mongoid #:nodoc
19
34
  #
20
35
  # @return [ String ] A localized error message string.
21
36
  def translate(key, options)
22
- ::I18n.translate("#{BASE_KEY}.#{key}", options)
37
+ ::I18n.translate("#{BASE_KEY}.#{key}", { locale: :en }.merge(options))
38
+ end
39
+
40
+ # Create the problem.
41
+ #
42
+ # @example Create the problem.
43
+ # error.problem
44
+ #
45
+ # @return [ String ] The problem.
46
+ #
47
+ # @since 3.0.0
48
+ def problem(key, attributes)
49
+ translate("#{key}.message", attributes)
50
+ end
51
+
52
+ # Create the summary.
53
+ #
54
+ # @example Create the summary.
55
+ # error.summary
56
+ #
57
+ # @return [ String ] The summary.
58
+ #
59
+ # @since 3.0.0
60
+ def summary(key, attributes)
61
+ translate("#{key}.summary", attributes)
62
+ end
63
+
64
+ # Create the resolution.
65
+ #
66
+ # @example Create the resolution.
67
+ # error.resolution
68
+ #
69
+ # @return [ String ] The resolution.
70
+ #
71
+ # @since 3.0.0
72
+ def resolution(key, attributes)
73
+ translate("#{key}.resolution", attributes)
23
74
  end
24
75
  end
25
76
  end
@@ -0,0 +1,28 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ module Errors
4
+
5
+ # This error is raised when metadata could not be found when defining
6
+ # nested attributes, or the name was incorrect.
7
+ class NestedAttributesMetadataNotFound < MongoidError
8
+
9
+ # Create the new metadata error.
10
+ #
11
+ # @example Create the new metadata error.
12
+ # NestedAttributesMetadataNotFound.new(klass, name)
13
+ #
14
+ # @param [ Class ] klass The class of the document.
15
+ # @param [ Symbol, String ] name The name of the relation
16
+ #
17
+ # @since 3.0.0
18
+ def initialize(klass, name)
19
+ super(
20
+ compose_message(
21
+ "nested_attributes_metadata_not_found",
22
+ { klass: klass, name: name }
23
+ )
24
+ )
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,23 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ module Errors
4
+
5
+ # This error is raised when a default session is not defined.
6
+ class NoDefaultSession < MongoidError
7
+
8
+ # Create the new error with the defined session names.
9
+ #
10
+ # @example Create the new error.
11
+ # NoDefaultSession.new([ :secondary ])
12
+ #
13
+ # @param [ Array<Symbol> ] keys The defined sessions.
14
+ #
15
+ # @since 3.0.0
16
+ def initialize(keys)
17
+ super(
18
+ compose_message("no_default_session", { keys: keys.join(", ") })
19
+ )
20
+ end
21
+ end
22
+ end
23
+ end
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
- module Mongoid #:nodoc
3
- module Errors #:nodoc
2
+ module Mongoid
3
+ module Errors
4
4
 
5
5
  # Raised when trying to load configuration with no RACK_ENV set
6
6
  class NoEnvironment < MongoidError
@@ -12,7 +12,7 @@ module Mongoid #:nodoc
12
12
  #
13
13
  # @since 2.4.0
14
14
  def initialize
15
- super(translate("no_environment", {}))
15
+ super(compose_message("no_environment", {}))
16
16
  end
17
17
  end
18
18
  end
@@ -0,0 +1,24 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ module Errors
4
+
5
+ # Raised when executing a map/reduce without specifying the output
6
+ # location.
7
+ class NoMapReduceOutput < MongoidError
8
+
9
+ # Create the new error.
10
+ #
11
+ # @example Create the new error.
12
+ # NoMapReduceOutput.new({ map: "" })
13
+ #
14
+ # @param [ Hash ] command The map/reduce command.
15
+ #
16
+ # @since 3.0.0
17
+ def initialize(command)
18
+ super(
19
+ compose_message("no_map_reduce_output", { command: command })
20
+ )
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,21 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ module Errors
4
+
5
+ # Used when trying to persist data when metadata has not been set.
6
+ class NoMetadata < MongoidError
7
+
8
+ # Create the new error.
9
+ #
10
+ # @example Create the error.
11
+ # NoMetadata.new(Address)
12
+ #
13
+ # @param [ Class ] klass The document class.
14
+ #
15
+ # @since 3.0.0
16
+ def initialize(klass)
17
+ super(compose_message("no_metadata", { klass: klass }))
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,24 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ module Errors
4
+
5
+ # This error is raised when trying to persist an embedded document
6
+ # when there is no parent set.
7
+ class NoParent < MongoidError
8
+
9
+ # Create the new error.
10
+ #
11
+ # @example Create the new error.
12
+ # NoParent.new(klass)
13
+ #
14
+ # @param [ Class ] klass The class of the embedded document.
15
+ #
16
+ # @since 3.0.0
17
+ def initialize(klass)
18
+ super(
19
+ compose_message("no_parent", { klass: klass })
20
+ )
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,22 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ module Errors
4
+
5
+ # This error is raised when attempting to create a new session that does
6
+ # not have a named configuration.
7
+ class NoSessionConfig < MongoidError
8
+
9
+ # Create the new error.
10
+ #
11
+ # @example Create the error.
12
+ # NoSessionConfig.new(:secondary)
13
+ #
14
+ # @param [ String, Symbol ] name The name of the session.
15
+ #
16
+ # @since 3.0.0
17
+ def initialize(name)
18
+ super(compose_message("no_session_config", { name: name }))
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,27 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ module Errors
4
+
5
+ # This error is raised when a session is configured without a database.
6
+ class NoSessionDatabase < MongoidError
7
+
8
+ # Create the new error.
9
+ #
10
+ # @example Create the new error.
11
+ # NoSessionDatabase.new(:default, {}})
12
+ #
13
+ # @param [ Symbol, String ] name The db config key.
14
+ # @param [ Hash ] config The hash configuration options.
15
+ #
16
+ # @since 3.0.0
17
+ def initialize(name, config)
18
+ super(
19
+ compose_message(
20
+ "no_session_database",
21
+ { name: name, config: config }
22
+ )
23
+ )
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,27 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ module Errors
4
+
5
+ # This error is raised when a session is configured without hosts.
6
+ class NoSessionHosts < MongoidError
7
+
8
+ # Create the new error.
9
+ #
10
+ # @example Create the new error.
11
+ # NoSessionHosts.new(:default, {}})
12
+ #
13
+ # @param [ Symbol, String ] name The db config key.
14
+ # @param [ Hash ] config The hash configuration options.
15
+ #
16
+ # @since 3.0.0
17
+ def initialize(name, config)
18
+ super(
19
+ compose_message(
20
+ "no_session_hosts",
21
+ { name: name, config: config }
22
+ )
23
+ )
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,20 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ module Errors
4
+
5
+ # This error is raised when no sessions exists in the database
6
+ # configuration.
7
+ class NoSessionsConfig < MongoidError
8
+
9
+ # Create the new error.
10
+ #
11
+ # @example Create the error.
12
+ # NoSessionsConfig.new
13
+ #
14
+ # @since 3.0.0
15
+ def initialize
16
+ super(compose_message("no_sessions_config", {}))
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,25 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ module Errors
4
+
5
+ # This error is raised when attempting the change the value of a readonly
6
+ # attribute after the document has been persisted.
7
+ class ReadonlyAttribute < MongoidError
8
+
9
+ # Create the new error.
10
+ #
11
+ # @example Create the new error.
12
+ # ReadonlyAttribute.new(:title, "mr")
13
+ #
14
+ # @param [ Symbol, String ] name The name of the attribute.
15
+ # @param [ Object ] value The attempted set value.
16
+ #
17
+ # @since 3.0.0
18
+ def initialize(name, value)
19
+ super(
20
+ compose_message("readonly_attribute", { name: name, value: value })
21
+ )
22
+ end
23
+ end
24
+ end
25
+ end
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
- module Mongoid #:nodoc
3
- module Errors #:nodoc
2
+ module Mongoid
3
+ module Errors
4
4
 
5
5
  # This error is raised when trying to create a scope with an name already
6
6
  # taken by another scope or method
@@ -10,9 +10,9 @@ module Mongoid #:nodoc
10
10
  class ScopeOverwrite < MongoidError
11
11
  def initialize(model_name,scope_name)
12
12
  super(
13
- translate(
13
+ compose_message(
14
14
  "scope_overwrite",
15
- { :model_name => model_name, :scope_name => scope_name }
15
+ { model_name: model_name, scope_name: scope_name }
16
16
  )
17
17
  )
18
18
  end