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
@@ -1,5 +1,5 @@
1
- module Mongoid #:nodoc
2
- module Errors #:nodoc
1
+ module Mongoid
2
+ module Errors
3
3
 
4
4
  # This error is raised when trying to create set nested records above the
5
5
  # specified :limit
@@ -9,9 +9,9 @@ module Mongoid #:nodoc
9
9
  class TooManyNestedAttributeRecords < MongoidError
10
10
  def initialize(association, limit)
11
11
  super(
12
- translate(
12
+ compose_message(
13
13
  "too_many_nested_attribute_records",
14
- { :association => association, :limit => limit }
14
+ { association: association, limit: limit }
15
15
  )
16
16
  )
17
17
  end
@@ -0,0 +1,25 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ module Errors
4
+
5
+ # This error is raised when trying to set a value in Mongoid that is not
6
+ # already set with dynamic attributes or the field is not defined.
7
+ class UnknownAttribute < MongoidError
8
+
9
+ # Create the new error.
10
+ #
11
+ # @example Instantiate the error.
12
+ # UnknownAttribute.new(Person, "gender")
13
+ #
14
+ # @param [ Class ] klass The model class.
15
+ # @param [ String, Symbol ] name The name of the attribute.
16
+ #
17
+ # @since 3.0.0
18
+ def initialize(klass, name)
19
+ super(
20
+ compose_message("unknown_attribute", { klass: klass.name, name: name })
21
+ )
22
+ end
23
+ end
24
+ end
25
+ end
@@ -1,20 +1,16 @@
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 attempting to call create or create! through a
6
6
  # references_many when the parent document has not been saved. This
7
7
  # prevents the child from getting presisted and immediately being orphaned.
8
8
  class UnsavedDocument < MongoidError
9
-
10
- attr_reader :base, :document
11
-
12
9
  def initialize(base, document)
13
- @base, @document = base, document
14
10
  super(
15
- translate(
11
+ compose_message(
16
12
  "unsaved_document",
17
- { :base => base.class.name, :document => document.class.name }
13
+ { base: base.class.name, document: document.class.name }
18
14
  )
19
15
  )
20
16
  end
@@ -0,0 +1,27 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ module Errors
4
+
5
+ # Raised when Javascript criteria selector is passed for embedded document.
6
+ class UnsupportedJavascript < MongoidError
7
+
8
+ # Create the new error caused by using Javascript in embedded document criteria selector.
9
+ #
10
+ # @example Create the error.
11
+ # UnsupportedJavascriptSelector.new(Album, "this.name == '101'")
12
+ #
13
+ # @param [ Class ] klass The embedded document class.
14
+ # @param [ String ] javascript The javascript expression.
15
+ #
16
+ # @since 3.0.0
17
+ def initialize(klass, javascript)
18
+ super(
19
+ compose_message(
20
+ "unsupported_javascript",
21
+ { klass: klass, javascript: javascript }
22
+ )
23
+ )
24
+ end
25
+ end
26
+ end
27
+ 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 the database version is not supported by Mongoid.
6
6
  #
@@ -9,9 +9,9 @@ module Mongoid #:nodoc
9
9
  class UnsupportedVersion < MongoidError
10
10
  def initialize(version)
11
11
  super(
12
- translate(
12
+ compose_message(
13
13
  "unsupported_version",
14
- { :version => version, :mongo_version => Mongoid::MONGODB_VERSION }
14
+ { version: version, mongo_version: Mongoid::MONGODB_VERSION }
15
15
  )
16
16
  )
17
17
  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 a persistence method ending in ! fails validation. The message
6
6
  # will contain the full error messages from the +Document+ in question.
@@ -8,13 +8,14 @@ module Mongoid #:nodoc
8
8
  # @example Create the error.
9
9
  # Validations.new(person.errors)
10
10
  class Validations < MongoidError
11
- attr_reader :document
12
11
  def initialize(document)
13
- @document = document
14
12
  super(
15
- translate(
13
+ compose_message(
16
14
  "validations",
17
- { :errors => document.errors.full_messages.join(", ") }
15
+ {
16
+ document: document.class,
17
+ errors: document.errors.full_messages.join(", ")
18
+ }
18
19
  )
19
20
  )
20
21
  end
@@ -0,0 +1,23 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ module Errors
4
+
5
+ # This error is raised when attempting to version an embedded document.
6
+ class VersioningNotOnRoot < MongoidError
7
+
8
+ # Create the new error.
9
+ #
10
+ # @example Create the new error.
11
+ # VersioningNotOnRoot.new(Address)
12
+ #
13
+ # @param [ Class ] klass The embedded class.
14
+ #
15
+ # @since 3.0.0
16
+ def initialize(klass)
17
+ super(
18
+ compose_message("versioning_not_on_root", { klass: klass })
19
+ )
20
+ end
21
+ end
22
+ end
23
+ end
@@ -1,19 +1,41 @@
1
1
  # encoding: utf-8
2
2
  require "mongoid/errors/mongoid_error"
3
+ require "mongoid/errors/ambiguous_relationship"
3
4
  require "mongoid/errors/callback"
4
5
  require "mongoid/errors/document_not_found"
5
6
  require "mongoid/errors/eager_load"
6
7
  require "mongoid/errors/invalid_collection"
8
+ require "mongoid/errors/invalid_config_option"
7
9
  require "mongoid/errors/invalid_database"
8
10
  require "mongoid/errors/invalid_field"
11
+ require "mongoid/errors/invalid_field_option"
9
12
  require "mongoid/errors/invalid_find"
13
+ require "mongoid/errors/invalid_index"
10
14
  require "mongoid/errors/invalid_options"
15
+ require "mongoid/errors/invalid_scope"
16
+ require "mongoid/errors/invalid_set_polymorphic_relation"
17
+ require "mongoid/errors/invalid_storage_options"
11
18
  require "mongoid/errors/invalid_time"
12
- require "mongoid/errors/invalid_type"
19
+ require "mongoid/errors/inverse_not_found"
13
20
  require "mongoid/errors/mixed_relations"
21
+ require "mongoid/errors/mixed_session_configuration"
22
+ require "mongoid/errors/nested_attributes_metadata_not_found"
23
+ require "mongoid/errors/no_default_session"
14
24
  require "mongoid/errors/no_environment"
25
+ require "mongoid/errors/no_map_reduce_output"
26
+ require "mongoid/errors/no_metadata"
27
+ require "mongoid/errors/no_parent"
28
+ require "mongoid/errors/no_session_config"
29
+ require "mongoid/errors/no_sessions_config"
30
+ require "mongoid/errors/no_session_database"
31
+ require "mongoid/errors/no_session_hosts"
32
+ require "mongoid/errors/readonly_attribute"
15
33
  require "mongoid/errors/scope_overwrite"
16
34
  require "mongoid/errors/too_many_nested_attribute_records"
35
+ require "mongoid/errors/unknown_attribute"
17
36
  require "mongoid/errors/unsaved_document"
37
+ require "mongoid/errors/unsupported_javascript"
18
38
  require "mongoid/errors/unsupported_version"
19
39
  require "mongoid/errors/validations"
40
+ require "mongoid/errors/versioning_not_on_root"
41
+ require "mongoid/errors/delete_restriction"
@@ -0,0 +1,19 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+
4
+ # Contains behaviour specific to evolving for origin queries.
5
+ module Evolvable
6
+
7
+ # Evolve the document into an object id.
8
+ #
9
+ # @example Evolve the document.
10
+ # document.__evolve_object_id__
11
+ #
12
+ # @return [ Object ] The document's id.
13
+ #
14
+ # @since 3.0.0
15
+ def __evolve_object_id__
16
+ id
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,164 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ module Extensions
4
+ module Array
5
+
6
+ # Evolve the array into an array of object ids.
7
+ #
8
+ # @example Evolve the array to object ids.
9
+ # [ id ].__evolve_object_id__
10
+ #
11
+ # @return [ Array<Moped::BSON::ObjectId> ] The converted array.
12
+ #
13
+ # @since 3.0.0
14
+ def __evolve_object_id__
15
+ map!(&:__evolve_object_id__)
16
+ self
17
+ end
18
+
19
+ # Get the array of args as arguments for a find query.
20
+ #
21
+ # @example Get the array as find args.
22
+ # [ 1, 2, 3 ].__find_args__
23
+ #
24
+ # @return [ Array ] The array of args.
25
+ #
26
+ # @since 3.0.0
27
+ def __find_args__
28
+ flat_map{ |a| a.__find_args__ }.uniq_by{ |a| a.to_s }
29
+ end
30
+
31
+ # Mongoize the array into an array of object ids.
32
+ #
33
+ # @example Evolve the array to object ids.
34
+ # [ id ].__mongoize_object_id__
35
+ #
36
+ # @return [ Array<Moped::BSON::ObjectId> ] The converted array.
37
+ #
38
+ # @since 3.0.0
39
+ def __mongoize_object_id__
40
+ map!(&:__mongoize_object_id__).compact!
41
+ self
42
+ end
43
+
44
+ # Converts the array for storing as a time.
45
+ #
46
+ # @example Convert the array to a time.
47
+ # [ 2010, 1, 1 ].__mongoize_time__
48
+ #
49
+ # @return [ Time ] The time.
50
+ #
51
+ # @since 3.0.0
52
+ def __mongoize_time__
53
+ ::Time.configured.local(*self)
54
+ end
55
+
56
+ # Is the array a set of multiple arguments in a method?
57
+ #
58
+ # @example Is this multi args?
59
+ # [ 1, 2, 3 ].multi_arged?
60
+ #
61
+ # @return [ true, false ] If the array is multi args.
62
+ #
63
+ # @since 3.0.0
64
+ def multi_arged?
65
+ first.resizable? || size > 1
66
+ end
67
+
68
+ # Turn the object from the ruby type we deal with to a Mongo friendly
69
+ # type.
70
+ #
71
+ # @example Mongoize the object.
72
+ # object.mongoize
73
+ #
74
+ # @return [ Array ] The object.
75
+ #
76
+ # @since 3.0.0
77
+ def mongoize
78
+ ::Array.mongoize(self)
79
+ end
80
+
81
+ # Delete the first object in the array that is equal to the supplied
82
+ # object and return it. This is much faster than performing a standard
83
+ # delete for large arrays ince it attempt to delete multiple in the
84
+ # other.
85
+ #
86
+ # @example Delete the first object.
87
+ # [ "1", "2", "1" ].delete_one("1")
88
+ #
89
+ # @param [ Object ] object The object to delete.
90
+ #
91
+ # @return [ Object ] The deleted object.
92
+ #
93
+ # @since 2.1.0
94
+ def delete_one(object)
95
+ position = index(object)
96
+ position ? delete_at(position) : nil
97
+ end
98
+
99
+ # Is the object's size changable?
100
+ #
101
+ # @example Is the object resizable?
102
+ # object.resizable?
103
+ #
104
+ # @return [ true ] true.
105
+ #
106
+ # @since 3.0.0
107
+ def resizable?
108
+ true
109
+ end
110
+
111
+ module ClassMethods
112
+
113
+ # Convert the provided object to a propery array of foreign keys.
114
+ #
115
+ # @example Mongoize the object.
116
+ # Array.__mongoize_fk__(constraint, object)
117
+ #
118
+ # @param [ Constraint ] constraint The metadata constraint.
119
+ # @param [ Object ] object The object to convert.
120
+ #
121
+ # @return [ Array ] The array of ids.
122
+ #
123
+ # @since 3.0.0
124
+ def __mongoize_fk__(constraint, object)
125
+ if object.resizable?
126
+ object.blank? ? object : constraint.convert(object)
127
+ else
128
+ object.blank? ? [] : constraint.convert(Array(object))
129
+ end
130
+ end
131
+
132
+ # Turn the object from the ruby type we deal with to a Mongo friendly
133
+ # type.
134
+ #
135
+ # @example Mongoize the object.
136
+ # Array.mongoize([ 1, 2, 3 ])
137
+ #
138
+ # @param [ Object ] object The object to mongoize.
139
+ #
140
+ # @return [ Array ] The object mongoized.
141
+ #
142
+ # @since 3.0.0
143
+ def mongoize(object)
144
+ evolve(object)
145
+ end
146
+
147
+ # Is the object's size changable?
148
+ #
149
+ # @example Is the object resizable?
150
+ # Array.resizable?
151
+ #
152
+ # @return [ true ] true.
153
+ #
154
+ # @since 3.0.0
155
+ def resizable?
156
+ true
157
+ end
158
+ end
159
+ end
160
+ end
161
+ end
162
+
163
+ ::Array.__send__(:include, Mongoid::Extensions::Array)
164
+ ::Array.__send__(:extend, Mongoid::Extensions::Array::ClassMethods)
@@ -0,0 +1,42 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ module Extensions
4
+ module BigDecimal
5
+
6
+ # Turn the object from the ruby type we deal with to a Mongo friendly
7
+ # type.
8
+ #
9
+ # @example Mongoize the object.
10
+ # object.mongoize
11
+ #
12
+ # @return [ Object ] The object.
13
+ #
14
+ # @since 3.0.0
15
+ def mongoize
16
+ to_s
17
+ end
18
+
19
+ module ClassMethods
20
+
21
+ # Convert the object from it's mongo friendly ruby type to this type.
22
+ #
23
+ # @example Demongoize the object.
24
+ # Object.demongoize(object)
25
+ #
26
+ # @param [ Object ] object The object to demongoize.
27
+ #
28
+ # @return [ Object ] The object.
29
+ #
30
+ # @since 3.0.0
31
+ def demongoize(object)
32
+ if object
33
+ object.numeric? ? ::BigDecimal.new(object.to_s) : object
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+
41
+ ::BigDecimal.__send__(:include, Mongoid::Extensions::BigDecimal)
42
+ ::BigDecimal.__send__(:extend, Mongoid::Extensions::BigDecimal::ClassMethods)
@@ -0,0 +1,24 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ module Extensions
4
+ module Boolean
5
+ module ClassMethods
6
+
7
+ # Turn the object from the ruby type we deal with to a Mongo friendly
8
+ # type.
9
+ #
10
+ # @example Mongoize the object.
11
+ # Boolean.mongoize("123.11")
12
+ #
13
+ # @return [ String ] The object mongoized.
14
+ #
15
+ # @since 3.0.0
16
+ def mongoize(object)
17
+ evolve(object)
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+
24
+ ::Boolean.__send__(:extend, Mongoid::Extensions::Boolean::ClassMethods)
@@ -0,0 +1,70 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ module Extensions
4
+ module Date
5
+
6
+ # Convert the date into a time.
7
+ #
8
+ # @example Convert the date to a time.
9
+ # date.__mongoize_time__
10
+ #
11
+ # @return [ Time ] The converted time.
12
+ #
13
+ # @since 3.0.0
14
+ def __mongoize_time__
15
+ ::Time.configured.local(year, month, day)
16
+ end
17
+
18
+ # Turn the object from the ruby type we deal with to a Mongo friendly
19
+ # type.
20
+ #
21
+ # @example Mongoize the object.
22
+ # date.mongoize
23
+ #
24
+ # @return [ Time ] The object mongoized.
25
+ #
26
+ # @since 3.0.0
27
+ def mongoize
28
+ ::Date.mongoize(self)
29
+ end
30
+
31
+ module ClassMethods
32
+
33
+ # Convert the object from it's mongo friendly ruby type to this type.
34
+ #
35
+ # @example Demongoize the object.
36
+ # Date.demongoize(object)
37
+ #
38
+ # @param [ Time ] object The time from Mongo.
39
+ #
40
+ # @return [ Date ] The object as a date.
41
+ #
42
+ # @since 3.0.0
43
+ def demongoize(object)
44
+ ::Date.new(object.year, object.month, object.day) if object
45
+ end
46
+
47
+ # Turn the object from the ruby type we deal with to a Mongo friendly
48
+ # type.
49
+ #
50
+ # @example Mongoize the object.
51
+ # Date.mongoize("2012-1-1")
52
+ #
53
+ # @param [ Object ] object The object to mongoize.
54
+ #
55
+ # @return [ Time ] The object mongoized.
56
+ #
57
+ # @since 3.0.0
58
+ def mongoize(object)
59
+ unless object.blank?
60
+ time = object.__mongoize_time__
61
+ ::Time.utc(time.year, time.month, time.day)
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
68
+
69
+ ::Date.__send__(:include, Mongoid::Extensions::Date)
70
+ ::Date.__send__(:extend, Mongoid::Extensions::Date::ClassMethods)
@@ -0,0 +1,73 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ module Extensions
4
+ module DateTime
5
+
6
+ # Mongoize the date time into a time.
7
+ #
8
+ # @example Mongoize the date time.
9
+ # date_time.__mongoize_time__
10
+ #
11
+ # @return [ Time ] The mongoized time.
12
+ #
13
+ # @since 3.0.0
14
+ def __mongoize_time__
15
+ return self if utc? && Mongoid.use_utc?
16
+ if Mongoid.use_activesupport_time_zone?
17
+ in_time_zone(::Time.zone)
18
+ else
19
+ time = to_time
20
+ time.respond_to?(:getlocal) ? time.getlocal : time
21
+ end
22
+ end
23
+
24
+ # Turn the object from the ruby type we deal with to a Mongo friendly
25
+ # type.
26
+ #
27
+ # @example Mongoize the object.
28
+ # date_time.mongoize
29
+ #
30
+ # @return [ Time ] The object mongoized.
31
+ #
32
+ # @since 3.0.0
33
+ def mongoize
34
+ ::DateTime.mongoize(self)
35
+ end
36
+
37
+ module ClassMethods
38
+
39
+ # Convert the object from it's mongo friendly ruby type to this type.
40
+ #
41
+ # @example Demongoize the object.
42
+ # DateTime.demongoize(object)
43
+ #
44
+ # @param [ Time ] object The time from Mongo.
45
+ #
46
+ # @return [ DateTime ] The object as a date.
47
+ #
48
+ # @since 3.0.0
49
+ def demongoize(object)
50
+ ::Time.demongoize(object).try(:to_datetime)
51
+ end
52
+
53
+ # Turn the object from the ruby type we deal with to a Mongo friendly
54
+ # type.
55
+ #
56
+ # @example Mongoize the object.
57
+ # DateTime.mongoize("2012-1-1")
58
+ #
59
+ # @param [ Object ] object The object to convert.
60
+ #
61
+ # @return [ Time ] The object mongoized.
62
+ #
63
+ # @since 3.0.0
64
+ def mongoize(object)
65
+ ::Time.mongoize(object)
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
71
+
72
+ ::DateTime.__send__(:include, Mongoid::Extensions::DateTime)
73
+ ::DateTime.__send__(:extend, Mongoid::Extensions::DateTime::ClassMethods)
@@ -0,0 +1,38 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ module Extensions
4
+ module FalseClass
5
+
6
+ # Get the value of the object as a mongo friendy sort value.
7
+ #
8
+ # @example Get the object as sort criteria.
9
+ # object.__sortable__
10
+ #
11
+ # @return [ Integer ] 0.
12
+ #
13
+ # @since 3.0.0
14
+ def __sortable__
15
+ 0
16
+ end
17
+
18
+ # Is the passed value a boolean?
19
+ #
20
+ # @example Is the value a boolean type?
21
+ # false.is_a?(Boolean)
22
+ #
23
+ # @param [ Class ] other The class to check.
24
+ #
25
+ # @return [ true, false ] If the other is a boolean.
26
+ #
27
+ # @since 1.0.0
28
+ def is_a?(other)
29
+ if other == ::Boolean || other.class == ::Boolean
30
+ return true
31
+ end
32
+ super(other)
33
+ end
34
+ end
35
+ end
36
+ end
37
+
38
+ ::FalseClass.__send__(:include, Mongoid::Extensions::FalseClass)