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,8 +1,8 @@
1
1
  # encoding: utf-8
2
- module Mongoid # :nodoc:
3
- module Relations #:nodoc:
4
- module Bindings #:nodoc:
5
- module Embedded #:nodoc:
2
+ module Mongoid
3
+ module Relations
4
+ module Bindings
5
+ module Embedded
6
6
 
7
7
  # Binding class for embedded_in relations.
8
8
  class In < Binding
@@ -23,20 +23,17 @@ module Mongoid # :nodoc:
23
23
  # @option options [ true, false ] :binding Are we in build mode?
24
24
  #
25
25
  # @since 2.0.0.rc.1
26
- def bind
26
+ def bind_one
27
27
  base.metadata = metadata.inverse_metadata(target) unless base.metadata
28
28
  base.parentize(target)
29
- unless _binding?
30
- _binding do
31
- if base.embedded_many?
32
- target.do_or_do_not(metadata.inverse(target)).push(base)
33
- else
34
- target.do_or_do_not(metadata.inverse_setter(target), base)
35
- end
29
+ binding do
30
+ if base.embedded_many?
31
+ target.do_or_do_not(metadata.inverse(target)).push(base)
32
+ else
33
+ target.do_or_do_not(metadata.inverse_setter(target), base)
36
34
  end
37
35
  end
38
36
  end
39
- alias :bind_one :bind
40
37
 
41
38
  # Unbinds the base object and the inverse, caused by setting the
42
39
  # reference to nil.
@@ -50,18 +47,15 @@ module Mongoid # :nodoc:
50
47
  # @option options [ true, false ] :continue Do we continue unbinding?
51
48
  #
52
49
  # @since 2.0.0.rc.1
53
- def unbind
54
- unless _binding?
55
- _binding do
56
- if base.embedded_many?
57
- target.do_or_do_not(metadata.inverse(target)).delete(base)
58
- else
59
- target.do_or_do_not(metadata.inverse_setter(target), nil)
60
- end
50
+ def unbind_one
51
+ binding do
52
+ if base.embedded_many?
53
+ target.do_or_do_not(metadata.inverse(target)).delete(base)
54
+ else
55
+ target.do_or_do_not(metadata.inverse_setter(target), nil)
61
56
  end
62
57
  end
63
58
  end
64
- alias :unbind_one :unbind
65
59
  end
66
60
  end
67
61
  end
@@ -1,32 +1,12 @@
1
1
  # encoding: utf-8
2
- module Mongoid # :nodoc:
3
- module Relations #:nodoc:
4
- module Bindings #:nodoc:
5
- module Embedded #:nodoc:
2
+ module Mongoid
3
+ module Relations
4
+ module Bindings
5
+ module Embedded
6
6
 
7
7
  # Binding class for embeds_many relations.
8
8
  class Many < Binding
9
9
 
10
- # Binds the base object to the inverse of the relation. This is so we
11
- # are referenced to the actual objects themselves on both sides.
12
- #
13
- # This case sets the metadata on the inverse object as well as the
14
- # document itself.
15
- #
16
- # @example Bind all the documents.
17
- # person.addresses.bind
18
- # person.addresses = [ Address.new ]
19
- #
20
- # @param [ Hash ] options The binding options.
21
- #
22
- # @option options [ true, false ] :continue Continue binding the inverse.
23
- # @option options [ true, false ] :binding Are we in build mode?
24
- #
25
- # @since 2.0.0.rc.1
26
- def bind
27
- target.each { |doc| bind_one(doc) }
28
- end
29
-
30
10
  # Binds a single document with the inverse relation. Used
31
11
  # specifically when appending to the proxy.
32
12
  #
@@ -42,32 +22,13 @@ module Mongoid # :nodoc:
42
22
  # @since 2.0.0.rc.1
43
23
  def bind_one(doc)
44
24
  doc.parentize(base)
45
- unless _binding?
46
- _binding do
47
- unless metadata.versioned?
48
- doc.do_or_do_not(metadata.inverse_setter(target), base)
49
- end
25
+ binding do
26
+ unless metadata.versioned?
27
+ doc.do_or_do_not(metadata.inverse_setter(target), base)
50
28
  end
51
29
  end
52
30
  end
53
31
 
54
- # Unbinds the base object and the inverse, caused by setting the
55
- # reference to nil.
56
- #
57
- # @example Unbind the documents.
58
- # person.addresses.unbind
59
- # person.addresses = nil
60
- #
61
- # @param [ Hash ] options The binding options.
62
- #
63
- # @option options [ true, false ] :continue Continue binding the inverse.
64
- # @option options [ true, false ] :binding Are we in build mode?
65
- #
66
- # @since 2.0.0.rc.1
67
- def unbind
68
- target.each { |doc| unbind_one(doc) }
69
- end
70
-
71
32
  # Unbind a single document.
72
33
  #
73
34
  # @example Unbind the document.
@@ -80,10 +41,8 @@ module Mongoid # :nodoc:
80
41
  #
81
42
  # @since 2.0.0.rc.1
82
43
  def unbind_one(doc)
83
- unless _binding?
84
- _binding do
85
- doc.do_or_do_not(metadata.inverse_setter(target), nil)
86
- end
44
+ binding do
45
+ doc.do_or_do_not(metadata.inverse_setter(target), nil)
87
46
  end
88
47
  end
89
48
  end
@@ -1,8 +1,8 @@
1
1
  # encoding: utf-8
2
- module Mongoid # :nodoc:
3
- module Relations #:nodoc:
4
- module Bindings #:nodoc:
5
- module Embedded #:nodoc:
2
+ module Mongoid
3
+ module Relations
4
+ module Bindings
5
+ module Embedded
6
6
 
7
7
  # Binding class for embeds_one relations.
8
8
  class One < Binding
@@ -23,15 +23,12 @@ module Mongoid # :nodoc:
23
23
  # @option options [ true, false ] :binding Are we in build mode?
24
24
  #
25
25
  # @since 2.0.0.rc.1
26
- def bind
26
+ def bind_one
27
27
  target.parentize(base)
28
- unless _binding?
29
- _binding do
30
- target.do_or_do_not(metadata.inverse_setter(target), base)
31
- end
28
+ binding do
29
+ target.do_or_do_not(metadata.inverse_setter(target), base)
32
30
  end
33
31
  end
34
- alias :bind_one :bind
35
32
 
36
33
  # Unbinds the base object and the inverse, caused by setting the
37
34
  # reference to nil.
@@ -46,14 +43,11 @@ module Mongoid # :nodoc:
46
43
  # @option options [ true, false ] :binding Are we in build mode?
47
44
  #
48
45
  # @since 2.0.0.rc.1
49
- def unbind
50
- unless _binding?
51
- _binding do
52
- target.do_or_do_not(metadata.inverse_setter(target), nil)
53
- end
46
+ def unbind_one
47
+ binding do
48
+ target.do_or_do_not(metadata.inverse_setter(target), nil)
54
49
  end
55
50
  end
56
- alias :unbind_one :unbind
57
51
  end
58
52
  end
59
53
  end
@@ -1,8 +1,8 @@
1
1
  # encoding: utf-8
2
- module Mongoid # :nodoc:
3
- module Relations #:nodoc:
4
- module Bindings #:nodoc:
5
- module Referenced #:nodoc:
2
+ module Mongoid
3
+ module Relations
4
+ module Bindings
5
+ module Referenced
6
6
 
7
7
  # Binding class for all referenced_in relations.
8
8
  class In < Binding
@@ -18,27 +18,23 @@ module Mongoid # :nodoc:
18
18
  # game.person = Person.new
19
19
  #
20
20
  # @since 2.0.0.rc.1
21
- def bind
22
- base.you_must(metadata.foreign_key_setter, target.id)
23
- if metadata.inverse_type
24
- base.you_must(metadata.inverse_type_setter, target.class.model_name)
25
- end
26
- unless _binding?
27
- _binding do
28
- inverse = metadata.inverse(target)
29
- if inverse
30
- if set_base_metadata
31
- if base.referenced_many?
32
- target.send(inverse).push(base) unless Mongoid.identity_map_enabled?
33
- else
34
- target.do_or_do_not(metadata.inverse_setter(target), base)
35
- end
21
+ def bind_one
22
+ binding do
23
+ check_inverses!(target)
24
+ bind_foreign_key(base, target.id)
25
+ bind_polymorphic_inverse_type(base, target.class.model_name)
26
+ if inverse = metadata.inverse(target)
27
+ if set_base_metadata
28
+ bind_inverse_of_field(base, base.metadata_name)
29
+ if base.referenced_many?
30
+ target.__send__(inverse).push(base) unless Mongoid.using_identity_map?
31
+ else
32
+ target.do_or_do_not(metadata.inverse_setter(target), base)
36
33
  end
37
34
  end
38
35
  end
39
36
  end
40
37
  end
41
- alias :bind_one :bind
42
38
 
43
39
  # Unbinds the base object and the inverse, caused by setting the
44
40
  # reference to nil.
@@ -48,47 +44,25 @@ module Mongoid # :nodoc:
48
44
  # game.person = nil
49
45
  #
50
46
  # @since 2.0.0.rc.1
51
- def unbind
52
- base.you_must(metadata.foreign_key_setter, nil)
53
- if metadata.inverse_type
54
- base.you_must(metadata.inverse_type_setter, nil)
55
- end
56
- unless _binding?
57
- _binding do
58
- inverse = metadata.inverse(target)
59
- if inverse
60
- set_base_metadata
61
- if base.referenced_many?
62
- target.send(inverse).delete(base)
63
- else
64
- target.send(metadata.inverse_setter(target), nil)
65
- end
47
+ def unbind_one
48
+ binding do
49
+ inverse = metadata.inverse(target)
50
+ if !inverse && metadata.inverse_of_field
51
+ inverse = base.__send__(metadata.inverse_of_field)
52
+ end
53
+ bind_foreign_key(base, nil)
54
+ bind_polymorphic_inverse_type(base, nil)
55
+ bind_inverse_of_field(base, nil)
56
+ if inverse
57
+ set_base_metadata
58
+ if base.referenced_many?
59
+ target.__send__(inverse).delete(base)
60
+ else
61
+ target.__send__("#{inverse}=", nil)
66
62
  end
67
63
  end
68
64
  end
69
65
  end
70
- alias :unbind_one :unbind
71
-
72
- private
73
-
74
- # Ensure that the metadata on the base is correct, for the cases
75
- # where we have multiple belongs to definitions and were are setting
76
- # different parents in memory in order.
77
- #
78
- # @api private
79
- #
80
- # @example Set the base metadata.
81
- # binding.set_base_metadata
82
- #
83
- # @return [ true, false ] If the metadata changed.
84
- #
85
- # @since 2.4.4
86
- def set_base_metadata
87
- inverse_metadata = metadata.inverse_metadata(target)
88
- if inverse_metadata != metadata && !inverse_metadata.nil?
89
- base.metadata = inverse_metadata
90
- end
91
- end
92
66
  end
93
67
  end
94
68
  end
@@ -1,8 +1,8 @@
1
1
  # encoding: utf-8
2
- module Mongoid # :nodoc:
3
- module Relations #:nodoc:
4
- module Bindings #:nodoc:
5
- module Referenced #:nodoc:
2
+ module Mongoid
3
+ module Relations
4
+ module Bindings
5
+ module Referenced
6
6
 
7
7
  # Binding class for references_many relations.
8
8
  class Many < Binding
@@ -17,14 +17,8 @@ module Mongoid # :nodoc:
17
17
  #
18
18
  # @since 2.0.0.rc.1
19
19
  def bind_one(doc)
20
- doc.you_must(metadata.foreign_key_setter, base.id)
21
- if metadata.type
22
- doc.you_must(metadata.type_setter, base.class.model_name)
23
- end
24
- unless _binding?
25
- _binding do
26
- doc.send(metadata.inverse_setter, base)
27
- end
20
+ binding do
21
+ bind_from_relational_parent(doc)
28
22
  end
29
23
  end
30
24
 
@@ -37,14 +31,8 @@ module Mongoid # :nodoc:
37
31
  #
38
32
  # @since 2.0.0.rc.1
39
33
  def unbind_one(doc)
40
- doc.you_must(metadata.foreign_key_setter, nil)
41
- if metadata.type
42
- doc.you_must(metadata.type_setter, nil)
43
- end
44
- unless _binding?
45
- _binding do
46
- doc.send(metadata.inverse_setter, nil)
47
- end
34
+ binding do
35
+ unbind_from_relational_parent(doc)
48
36
  end
49
37
  end
50
38
  end
@@ -1,8 +1,8 @@
1
1
  # encoding: utf-8
2
- module Mongoid # :nodoc:
3
- module Relations #:nodoc:
4
- module Bindings #:nodoc:
5
- module Referenced #:nodoc:
2
+ module Mongoid
3
+ module Relations
4
+ module Bindings
5
+ module Referenced
6
6
 
7
7
  # Binding class for all references_and_referenced_in_many relations.
8
8
  class ManyToMany < Binding
@@ -17,13 +17,11 @@ module Mongoid # :nodoc:
17
17
  #
18
18
  # @since 2.0.0.rc.1
19
19
  def bind_one(doc)
20
- unless _binding?
21
- _binding do
22
- inverse_keys = doc.you_must(metadata.inverse_foreign_key)
23
- inverse_keys.push(base.id) if inverse_keys
24
- base.synced[metadata.foreign_key] = true
25
- doc.synced[metadata.inverse_foreign_key] = true
26
- end
20
+ binding do
21
+ inverse_keys = doc.you_must(metadata.inverse_foreign_key)
22
+ inverse_keys.push(base.id) if inverse_keys
23
+ base.synced[metadata.foreign_key] = true
24
+ doc.synced[metadata.inverse_foreign_key] = true
27
25
  end
28
26
  end
29
27
 
@@ -34,14 +32,12 @@ module Mongoid # :nodoc:
34
32
  #
35
33
  # @since 2.0.0.rc.1
36
34
  def unbind_one(doc)
37
- unless _binding?
38
- _binding do
39
- base.send(metadata.foreign_key).delete_one(doc.id)
40
- inverse_keys = doc.you_must(metadata.inverse_foreign_key)
41
- inverse_keys.delete_one(base.id) if inverse_keys
42
- base.synced[metadata.foreign_key] = true
43
- doc.synced[metadata.inverse_foreign_key] = true
44
- end
35
+ binding do
36
+ base.send(metadata.foreign_key).delete_one(doc.id)
37
+ inverse_keys = doc.you_must(metadata.inverse_foreign_key)
38
+ inverse_keys.delete_one(base.id) if inverse_keys
39
+ base.synced[metadata.foreign_key] = true
40
+ doc.synced[metadata.inverse_foreign_key] = true
45
41
  end
46
42
  end
47
43
  end
@@ -1,8 +1,8 @@
1
1
  # encoding: utf-8
2
- module Mongoid # :nodoc:
3
- module Relations #:nodoc:
4
- module Bindings #:nodoc:
5
- module Referenced #:nodoc:
2
+ module Mongoid
3
+ module Relations
4
+ module Bindings
5
+ module Referenced
6
6
 
7
7
  # Binding class for references_one relations.
8
8
  class One < Binding
@@ -18,18 +18,11 @@ module Mongoid # :nodoc:
18
18
  # person.game = Game.new
19
19
  #
20
20
  # @since 2.0.0.rc.1
21
- def bind
22
- target.you_must(metadata.foreign_key_setter, base.id)
23
- if metadata.type
24
- target.you_must(metadata.type_setter, base.class.model_name)
25
- end
26
- unless _binding?
27
- _binding do
28
- target.send(metadata.inverse_setter, base)
29
- end
21
+ def bind_one
22
+ binding do
23
+ bind_from_relational_parent(target)
30
24
  end
31
25
  end
32
- alias :bind_one :bind
33
26
 
34
27
  # Unbinds the base object and the inverse, caused by setting the
35
28
  # reference to nil.
@@ -39,18 +32,11 @@ module Mongoid # :nodoc:
39
32
  # person.game = nil
40
33
  #
41
34
  # @since 2.0.0.rc.1
42
- def unbind
43
- target.you_must(metadata.foreign_key_setter, nil)
44
- if metadata.type
45
- target.you_must(metadata.type_setter, nil)
46
- end
47
- unless _binding?
48
- _binding do
49
- target.send(metadata.inverse_setter, nil)
50
- end
35
+ def unbind_one
36
+ binding do
37
+ unbind_from_relational_parent(target)
51
38
  end
52
39
  end
53
- alias :unbind_one :unbind
54
40
  end
55
41
  end
56
42
  end
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
- module Mongoid # :nodoc:
3
- module Relations #:nodoc:
2
+ module Mongoid
3
+ module Relations
4
4
 
5
5
  # Superclass for all builder objects. Builders are responsible for either
6
6
  # looking up a relation's target from the database, or creating them from a
@@ -17,7 +17,7 @@ module Mongoid # :nodoc:
17
17
  #
18
18
  # @param [ Document ] base The base document.
19
19
  # @param [ Metdata ] metadata The metadata for the relation.
20
- # @param [ Hash, BSON::ObjectId ] object The attributes to build from or
20
+ # @param [ Hash, Moped::BSON::ObjectId ] object The attributes to build from or
21
21
  # id to query with.
22
22
  #
23
23
  # @since 2.0.0.rc.1
@@ -49,7 +49,7 @@ module Mongoid # :nodoc:
49
49
  #
50
50
  # @since 2.0.0.rc.1
51
51
  def query?
52
- obj = Array(object).first
52
+ obj = object.__array__.first
53
53
  !obj.is_a?(Mongoid::Document) && !obj.nil?
54
54
  end
55
55
  end
@@ -1,9 +1,9 @@
1
1
  # encoding: utf-8
2
- module Mongoid # :nodoc:
3
- module Relations #:nodoc:
4
- module Builders #:nodoc:
5
- module Embedded #:nodoc:
6
- class In < Builder #:nodoc:
2
+ module Mongoid
3
+ module Relations
4
+ module Builders
5
+ module Embedded
6
+ class In < Builder
7
7
 
8
8
  # This builder doesn't actually build anything, just returns the
9
9
  # parent since it should already be instantiated.
@@ -1,9 +1,9 @@
1
1
  # encoding: utf-8
2
- module Mongoid # :nodoc:
3
- module Relations #:nodoc:
4
- module Builders #:nodoc:
5
- module Embedded #:nodoc:
6
- class Many < Builder #:nodoc:
2
+ module Mongoid
3
+ module Relations
4
+ module Builders
5
+ module Embedded
6
+ class Many < Builder
7
7
 
8
8
  # Builds the document out of the attributes using the provided
9
9
  # metadata on the relation. Instantiates through the factory in order
@@ -19,15 +19,15 @@ module Mongoid # :nodoc:
19
19
  def build(type = nil)
20
20
  return [] if object.blank?
21
21
  return object if object.first.is_a?(Document)
22
- [].tap do |docs|
23
- object.each do |attrs|
24
- if _loading?
25
- docs.push(Factory.from_db(klass, attrs))
26
- else
27
- docs.push(Factory.build(klass, attrs))
28
- end
22
+ docs = []
23
+ object.each do |attrs|
24
+ if _loading? && base.persisted?
25
+ docs.push(Factory.from_db(klass, attrs))
26
+ else
27
+ docs.push(Factory.build(klass, attrs))
29
28
  end
30
29
  end
30
+ docs
31
31
  end
32
32
  end
33
33
  end
@@ -1,9 +1,9 @@
1
1
  # encoding: utf-8
2
- module Mongoid # :nodoc:
3
- module Relations #:nodoc:
4
- module Builders #:nodoc:
5
- module Embedded #:nodoc:
6
- class One < Builder #:nodoc:
2
+ module Mongoid
3
+ module Relations
4
+ module Builders
5
+ module Embedded
6
+ class One < Builder
7
7
 
8
8
  # Builds the document out of the attributes using the provided
9
9
  # metadata on the relation. Instantiates through the factory in order
@@ -17,7 +17,7 @@ module Mongoid # :nodoc:
17
17
  # @return [ Document ] A single document.
18
18
  def build(type = nil)
19
19
  return object unless object.is_a?(Hash)
20
- if _loading?
20
+ if _loading? && base.persisted?
21
21
  Factory.from_db(klass, object)
22
22
  else
23
23
  Factory.build(klass, object)
@@ -1,8 +1,8 @@
1
1
  # encoding: utf-8
2
- module Mongoid # :nodoc:
3
- module Relations #:nodoc:
4
- module Builders #:nodoc:
5
- module NestedAttributes #:nodoc:
2
+ module Mongoid
3
+ module Relations
4
+ module Builders
5
+ module NestedAttributes
6
6
  class Many < NestedBuilder
7
7
 
8
8
  # Builds the relation depending on the attributes and the options
@@ -25,9 +25,9 @@ module Mongoid # :nodoc:
25
25
  end
26
26
  attributes.each do |attrs|
27
27
  if attrs.respond_to?(:with_indifferent_access)
28
- process(parent, attrs)
28
+ process_attributes(parent, attrs)
29
29
  else
30
- process(parent, attrs[1])
30
+ process_attributes(parent, attrs[1])
31
31
  end
32
32
  end
33
33
  end
@@ -86,10 +86,10 @@ module Mongoid # :nodoc:
86
86
  # new, existing, or ignored document.
87
87
  #
88
88
  # @example Process the attributes
89
- # builder.process({ "id" => 1, "street" => "Bond" })
89
+ # builder.process_attributes({ "id" => 1, "street" => "Bond" })
90
90
  #
91
91
  # @param [ Hash ] attrs The single document attributes to process.
92
- def process(parent, attrs)
92
+ def process_attributes(parent, attrs)
93
93
  return if reject?(parent, attrs)
94
94
  if id = attrs.extract_id
95
95
  first = existing.first
@@ -1,8 +1,8 @@
1
1
  # encoding: utf-8
2
- module Mongoid # :nodoc:
3
- module Relations #:nodoc:
4
- module Builders #:nodoc:
5
- module NestedAttributes #:nodoc:
2
+ module Mongoid
3
+ module Relations
4
+ module Builders
5
+ module NestedAttributes
6
6
  class One < NestedBuilder
7
7
 
8
8
  attr_accessor :destroy
@@ -27,7 +27,7 @@ module Mongoid # :nodoc:
27
27
  if update?
28
28
  existing.attributes = attributes
29
29
  elsif replace?
30
- parent.send(metadata.setter, Mongoid::Factory.build(metadata.klass, attributes))
30
+ parent.send(metadata.setter, Factory.build(metadata.klass, attributes))
31
31
  elsif delete?
32
32
  parent.send(metadata.setter, nil)
33
33
  end
@@ -1,8 +1,8 @@
1
1
  # encoding: utf-8
2
- module Mongoid # :nodoc:
3
- module Relations #:nodoc:
4
- module Builders #:nodoc:
5
- module Referenced #:nodoc:
2
+ module Mongoid
3
+ module Relations
4
+ module Builders
5
+ module Referenced
6
6
  class In < Builder
7
7
 
8
8
  # This builder either takes a foreign key and queries for the