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,51 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid #:nodoc:
3
- module Fields #:nodoc:
4
- module Internal #:nodoc:
5
-
6
- # Defines the behaviour for date fields.
7
- class Date
8
- include Serializable
9
- include Timekeeping
10
-
11
- # Deserialize this field from the type stored in MongoDB to the type
12
- # defined on the model.
13
- #
14
- # @example Deserialize the field.
15
- # field.deserialize(object)
16
- #
17
- # @param [ Object ] object The object to cast.
18
- #
19
- # @return [ Date ] The converted date.
20
- #
21
- # @since 2.1.0
22
- def deserialize(object)
23
- return nil if object.blank?
24
- if Mongoid::Config.use_utc?
25
- object.to_date
26
- else
27
- ::Date.new(object.year, object.month, object.day)
28
- end
29
- end
30
-
31
- protected
32
-
33
- # Converts the date to a time to persist.
34
- #
35
- # @example Convert the date to a time.
36
- # Date.convert_to_time(date)
37
- #
38
- # @param [ Date ] value The date to convert.
39
- #
40
- # @return [ Time ] The date converted.
41
- #
42
- # @since 2.1.0
43
- def convert_to_time(value)
44
- value = ::Date.parse(value) if value.is_a?(::String)
45
- value = ::Date.civil(*value) if value.is_a?(::Array)
46
- ::Time.utc(value.year, value.month, value.day)
47
- end
48
- end
49
- end
50
- end
51
- end
@@ -1,28 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid #:nodoc:
3
- module Fields #:nodoc:
4
- module Internal #:nodoc:
5
-
6
- # Defines the behaviour for date time fields.
7
- class DateTime
8
- include Serializable
9
- include Timekeeping
10
-
11
- # Deserialize this field from the type stored in MongoDB to the type
12
- # defined on the model.
13
- #
14
- # @example Deserialize the field.
15
- # field.deserialize(object)
16
- #
17
- # @param [ Object ] object The object to cast.
18
- #
19
- # @return [ DateTime ] The converted date time.
20
- #
21
- # @since 2.1.0
22
- def deserialize(object)
23
- super(object).try(:to_datetime)
24
- end
25
- end
26
- end
27
- end
28
- end
@@ -1,10 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid #:nodoc:
3
- module Fields #:nodoc:
4
- module Internal #:nodoc:
5
- # Defines the behaviour for false values.
6
- class FalseClass < Boolean
7
- end
8
- end
9
- end
10
- end
@@ -1,10 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid #:nodoc:
3
- module Fields #:nodoc:
4
- module Internal #:nodoc:
5
- # Defines the behaviour for fixnum fields.
6
- class Fixnum < Integer
7
- end
8
- end
9
- end
10
- end
@@ -1,47 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid #:nodoc:
3
- module Fields #:nodoc:
4
- module Internal #:nodoc:
5
-
6
- # Defines the behaviour for float fields.
7
- class Float
8
- include Serializable
9
-
10
- # Special case to serialize the object.
11
- #
12
- # @example Convert to a selection.
13
- # field.selection(object)
14
- #
15
- # @param [ Object ] The object to convert.
16
- #
17
- # @return [ Object ] The converted object.
18
- #
19
- # @since 2.4.0
20
- def selection(object)
21
- return object if object.is_a?(::Hash)
22
- serialize(object)
23
- end
24
-
25
- # Serialize the object from the type defined in the model to a MongoDB
26
- # compatible object to store.
27
- #
28
- # @example Serialize the field.
29
- # field.serialize(object)
30
- #
31
- # @param [ Object ] object The object to cast.
32
- #
33
- # @return [ Float ] The converted float.
34
- #
35
- # @since 2.1.0
36
- def serialize(object)
37
- return nil if object.blank?
38
- begin
39
- Float(object)
40
- rescue ArgumentError => e
41
- object
42
- end
43
- end
44
- end
45
- end
46
- end
47
- end
@@ -1,88 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid #:nodoc:
3
- module Fields #:nodoc:
4
- module Internal #:nodoc:
5
- module ForeignKeys #:nodoc:
6
-
7
- # Defines the behaviour for array foreign key fields.
8
- class Array
9
- include Serializable
10
-
11
- # Adds the atomic changes for this type of resizable field.
12
- #
13
- # @example Add the atomic changes.
14
- # field.add_atomic_changes(doc, "key", {}, [], [])
15
- #
16
- # @todo: Durran: Refactor, big time.
17
- #
18
- # @param [ Document ] document The document to add to.
19
- # @param [ String ] name The name of the field.
20
- # @param [ String ] key The atomic location of the field.
21
- # @param [ Hash ] mods The current modifications.
22
- # @param [ Array ] new The new elements to add.
23
- # @param [ Array ] old The old elements getting removed.
24
- #
25
- # @since 2.4.0
26
- def add_atomic_changes(document, name, key, mods, new_elements, old_elements)
27
- old = (old_elements || [])
28
- new = (new_elements || [])
29
- if new.length > old.length
30
- if new.first(old.length) == old
31
- document.atomic_array_add_to_sets[key] = new.drop(old.length)
32
- else
33
- mods[key] = document.attributes[name]
34
- end
35
- elsif new.length < old.length
36
- pulls = old - new
37
- if new == old - pulls
38
- document.atomic_array_pulls[key] = pulls
39
- else
40
- mods[key] = document.attributes[name]
41
- end
42
- elsif new != old
43
- mods[key] = document.attributes[name]
44
- end
45
- end
46
-
47
- # Is the field a BSON::ObjectId?
48
- #
49
- # @example Is the field a BSON::ObjectId?
50
- # field.object_id_field?
51
- #
52
- # @return [ true, false ] If the field is a BSON::ObjectId.
53
- #
54
- # @since 2.2.0
55
- def object_id_field?
56
- @object_id_field ||=
57
- metadata.polymorphic? ? true : metadata.klass.using_object_ids?
58
- end
59
-
60
- # Array fields are resizable.
61
- #
62
- # @example Is this field resizable?
63
- # field.resizable?
64
- #
65
- # @return [ true ] Always true.
66
- #
67
- # @since 2.4.0
68
- def resizable?; true; end
69
-
70
- # Serialize the object from the type defined in the model to a MongoDB
71
- # compatible object to store.
72
- #
73
- # @example Serialize the field.
74
- # field.serialize(object)
75
- #
76
- # @param [ Object ] object The object to cast.
77
- #
78
- # @return [ Array ] The converted object.
79
- #
80
- # @since 2.1.0
81
- def serialize(object)
82
- object ? constraint.convert(object) : []
83
- end
84
- end
85
- end
86
- end
87
- end
88
- end
@@ -1,56 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid #:nodoc:
3
- module Fields #:nodoc:
4
- module Internal #:nodoc:
5
- module ForeignKeys #:nodoc:
6
-
7
- # Defines the behaviour for integer foreign key fields.
8
- class Object
9
- include Serializable
10
-
11
- # Is the field a BSON::ObjectId?
12
- #
13
- # @example Is the field a BSON::ObjectId?
14
- # field.object_id_field?
15
- #
16
- # @return [ true, false ] If the field is a BSON::ObjectId.
17
- #
18
- # @since 2.2.0
19
- def object_id_field?
20
- @object_id_field ||=
21
- metadata.polymorphic? ? true : metadata.klass.using_object_ids?
22
- end
23
-
24
- # Serialize the object from the type defined in the model to a MongoDB
25
- # compatible object to store.
26
- #
27
- # @example Serialize the field.
28
- # field.serialize(object)
29
- #
30
- # @param [ Object ] object The object to cast.
31
- #
32
- # @return [ Array ] The converted object.
33
- #
34
- # @since 2.1.0
35
- def serialize(object)
36
- return nil if object.blank?
37
- if object_id_field?
38
- constraint.convert(object)
39
- else
40
- case object
41
- when ::Array
42
- object.replace(object.map { |arg| serialize(arg) })
43
- when ::Hash
44
- object.each_pair do |key, value|
45
- object[key] = serialize(value)
46
- end
47
- else
48
- metadata.klass.fields["_id"].serialize(object)
49
- end
50
- end
51
- end
52
- end
53
- end
54
- end
55
- end
56
- end
@@ -1,11 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid #:nodoc:
3
- module Fields #:nodoc:
4
- module Internal #:nodoc:
5
- # Defines the behaviour for hash fields.
6
- class Hash
7
- include Serializable
8
- end
9
- end
10
- end
11
- end
@@ -1,59 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid #:nodoc:
3
- module Fields #:nodoc:
4
- module Internal #:nodoc:
5
-
6
- # Defines the behaviour for integer fields.
7
- class Integer
8
- include Serializable
9
-
10
- # Special case to serialize the object.
11
- #
12
- # @example Convert to a selection.
13
- # field.selection(object)
14
- #
15
- # @param [ Object ] The object to convert.
16
- #
17
- # @return [ Object ] The converted object.
18
- #
19
- # @since 2.4.0
20
- def selection(object)
21
- return object if object.is_a?(::Hash)
22
- serialize(object)
23
- end
24
-
25
- # Serialize the object from the type defined in the model to a MongoDB
26
- # compatible object to store.
27
- #
28
- # @example Serialize the field.
29
- # field.serialize(object)
30
- #
31
- # @param [ Object ] object The object to cast.
32
- #
33
- # @return [ Integer ] The converted integer.
34
- #
35
- # @since 2.1.0
36
- def serialize(object)
37
- return nil if object.blank?
38
- numeric(object) rescue object
39
- end
40
-
41
- private
42
-
43
- # Get the numeric value for the provided object.
44
- #
45
- # @example Get the numeric value.
46
- # field.numeric("1120")
47
- #
48
- # @param [ Object ] object The object to convert.
49
- #
50
- # @return [ Integer, Float ] The number.
51
- #
52
- # @since 2.3.0
53
- def numeric(object)
54
- object.to_s =~ /(^[-+]?[0-9]+$)|(\.0+)$/ ? object.to_i : Float(object)
55
- end
56
- end
57
- end
58
- end
59
- end
@@ -1,62 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid #:nodoc:
3
- module Fields #:nodoc:
4
- module Internal #:nodoc:
5
-
6
- # Defines the behaviour for localized string fields.
7
- class Localized
8
- include Serializable
9
-
10
- # Deserialize the object based on the current locale. Will look in the
11
- # hash for the current locale.
12
- #
13
- # @example Get the deserialized value.
14
- # field.deserialize({ "en" => "testing" })
15
- #
16
- # @param [ Hash ] object The hash of translations.
17
- #
18
- # @return [ String ] The value for the current locale.
19
- #
20
- # @since 2.3.0
21
- def deserialize(object)
22
- return nil if object.nil?
23
- locale = ::I18n.locale
24
- if ::I18n.respond_to?(:fallbacks)
25
- object[::I18n.fallbacks[locale].map(&:to_s).find{ |loc| object[loc] }]
26
- else
27
- object[locale.to_s]
28
- end
29
- end
30
-
31
- # Special case to serialize the object.
32
- #
33
- # @example Convert to a selection.
34
- # field.selection(object)
35
- #
36
- # @param [ Object ] The object to convert.
37
- #
38
- # @return [ Object ] The converted object.
39
- #
40
- # @since 2.4.0
41
- def selection(object)
42
- return object if object.is_a?(::Hash)
43
- serialize(object)
44
- end
45
-
46
- # Convert the provided string into a hash for the locale.
47
- #
48
- # @example Serialize the value.
49
- # field.serialize("testing")
50
- #
51
- # @param [ String ] object The string to convert.
52
- #
53
- # @return [ Hash ] The locale with string translation.
54
- #
55
- # @since 2.3.0
56
- def serialize(object)
57
- { ::I18n.locale.to_s => object.try(:to_s) }
58
- end
59
- end
60
- end
61
- end
62
- end
@@ -1,53 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid #:nodoc:
3
- module Fields #:nodoc:
4
- module Internal #:nodoc:
5
-
6
- # Defines the behaviour for nil fields.
7
- class NilClass
8
- include Serializable
9
-
10
- # Deserialize this field from the type stored in MongoDB to the type
11
- # defined on the model
12
- #
13
- # @example Deserialize the field.
14
- # field.deserialize(object)
15
- #
16
- # @param [ Object ] object The object to cast.
17
- #
18
- # @return [ nil ] Always nil.
19
- #
20
- # @since 2.1.0
21
- def deserialize(object); nil; end
22
-
23
- # Special case to serialize the object.
24
- #
25
- # @example Convert to a selection.
26
- # field.selection(object)
27
- #
28
- # @param [ Object ] The object to convert.
29
- #
30
- # @return [ Object ] The converted object.
31
- #
32
- # @since 2.4.0
33
- def selection(object)
34
- return object if object.is_a?(::Hash)
35
- serialize(object)
36
- end
37
-
38
- # Serialize the object from the type defined in the model to a MongoDB
39
- # compatible object to store.
40
- #
41
- # @example Serialize the field.
42
- # field.serialize(object)
43
- #
44
- # @param [ Object ] object The object to cast.
45
- #
46
- # @return [ nil ] always nil.
47
- #
48
- # @since 2.1.0
49
- def serialize(object); nil; end
50
- end
51
- end
52
- end
53
- end
@@ -1,11 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid #:nodoc:
3
- module Fields #:nodoc:
4
- module Internal #:nodoc:
5
- # Defines the behaviour for object fields.
6
- class Object
7
- include Serializable
8
- end
9
- end
10
- end
11
- end
@@ -1,46 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid #:nodoc:
3
- module Fields #:nodoc:
4
- module Internal #:nodoc:
5
-
6
- # Defines the behaviour for BSON::ObjectId fields.
7
- class ObjectId
8
- include Serializable
9
-
10
- # Special case to serialize the object.
11
- #
12
- # @example Convert to a selection.
13
- # field.selection(object)
14
- #
15
- # @param [ Object ] The object to convert.
16
- #
17
- # @return [ Object ] The converted object.
18
- #
19
- # @since 2.4.0
20
- def selection(object)
21
- return object if object.is_a?(::Hash)
22
- serialize(object)
23
- end
24
-
25
- # Serialize the object from the type defined in the model to a MongoDB
26
- # compatible object to store.
27
- #
28
- # @example Serialize the field.
29
- # field.serialize(object)
30
- #
31
- # @param [ Object ] object The object to cast.
32
- #
33
- # @return [ BSON::ObjectId ] The converted object id.
34
- #
35
- # @since 2.1.0
36
- def serialize(object)
37
- if object.is_a?(::String)
38
- BSON::ObjectId.from_string(object) unless object.blank?
39
- else
40
- object
41
- end
42
- end
43
- end
44
- end
45
- end
46
- end
@@ -1,61 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid #:nodoc:
3
- module Fields #:nodoc:
4
- module Internal #:nodoc:
5
-
6
- # Defines the behaviour for range fields.
7
- class Range
8
- include Serializable
9
-
10
- # Deserialize this field from the type stored in MongoDB to the type
11
- # defined on the model.
12
- #
13
- # @example Deserialize the field.
14
- # field.deserialize(object)
15
- #
16
- # @param [ Object ] object The object to cast.
17
- #
18
- # @return [ Range ] The converted range.
19
- #
20
- # @since 2.1.0
21
- def deserialize(object)
22
- object.nil? ? nil : ::Range.new(object["min"], object["max"])
23
- end
24
-
25
- # Convert the provided object to a Mongoid criteria friendly value. For
26
- # ranges this will look for something between the min and max values.
27
- #
28
- # @example Convert the field.
29
- # field.selection(object)
30
- #
31
- # @param [ Object ] The object to convert.
32
- #
33
- # @return [ Object ] The converted object.
34
- #
35
- # @since 2.4.0
36
- def selection(object)
37
- return object if object.is_a?(::Hash)
38
- {
39
- "min" => { "$gte" => object.first },
40
- "max" => { "$lte" => object.last }
41
- }
42
- end
43
-
44
- # Serialize the object from the type defined in the model to a MongoDB
45
- # compatible object to store.
46
- #
47
- # @example Serialize the field.
48
- # field.serialize(object)
49
- #
50
- # @param [ Object ] object The object to cast.
51
- #
52
- # @return [ Hash ] The converted hash.
53
- #
54
- # @since 2.1.0
55
- def serialize(object)
56
- object.nil? ? nil : { "min" => object.first, "max" => object.last }
57
- end
58
- end
59
- end
60
- end
61
- end
@@ -1,57 +0,0 @@
1
- # encoding: utf-8
2
- module Mongoid #:nodoc:
3
- module Fields #:nodoc:
4
- module Internal #:nodoc:
5
-
6
- # Defines the behaviour for set fields.
7
- class Set
8
- include Serializable
9
-
10
- # Deserialize this field from the type stored in MongoDB to the type
11
- # defined on the model.
12
- #
13
- # @example Deserialize the field.
14
- # field.deserialize(object)
15
- #
16
- # @param [ Object ] object The object to cast.
17
- #
18
- # @return [ Set ] The converted set.
19
- #
20
- # @since 2.1.0
21
- def deserialize(object)
22
- ::Set.new(object)
23
- end
24
-
25
- # Special case to serialize the object.
26
- #
27
- # @example Convert to a selection.
28
- # field.selection(object)
29
- #
30
- # @param [ Object ] The object to convert.
31
- #
32
- # @return [ Object ] The converted object.
33
- #
34
- # @since 2.4.0
35
- def selection(object)
36
- return object unless object.is_a?(::Set)
37
- serialize(object)
38
- end
39
-
40
- # Serialize the object from the type defined in the model to a MongoDB
41
- # compatible object to store.
42
- #
43
- # @example Serialize the field.
44
- # field.serialize(object)
45
- #
46
- # @param [ Object ] object The object to cast.
47
- #
48
- # @return [ Array ] The converted array.
49
- #
50
- # @since 2.1.0
51
- def serialize(object)
52
- object.to_a
53
- end
54
- end
55
- end
56
- end
57
- end