mongoid 2.4.10 → 3.0.0.rc

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (351) hide show
  1. data/CHANGELOG.md +843 -9
  2. data/LICENSE +1 -1
  3. data/README.md +10 -11
  4. data/Rakefile +2 -17
  5. data/lib/config/locales/en.yml +441 -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 +16 -9
  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 +100 -42
  16. data/lib/mongoid/collections/retry.rb +2 -3
  17. data/lib/mongoid/components.rb +10 -22
  18. data/lib/mongoid/config/environment.rb +4 -3
  19. data/lib/mongoid/config/inflections.rb +6 -0
  20. data/lib/mongoid/config/options.rb +1 -1
  21. data/lib/mongoid/config/validators/option.rb +25 -0
  22. data/lib/mongoid/config/validators/session.rb +140 -0
  23. data/lib/mongoid/config/validators.rb +3 -0
  24. data/lib/mongoid/config.rb +87 -233
  25. data/lib/mongoid/contextual/aggregable/memory.rb +98 -0
  26. data/lib/mongoid/contextual/aggregable/mongo.rb +181 -0
  27. data/lib/mongoid/contextual/atomic.rb +179 -0
  28. data/lib/mongoid/contextual/command.rb +43 -0
  29. data/lib/mongoid/contextual/find_and_modify.rb +66 -0
  30. data/lib/mongoid/contextual/map_reduce.rb +273 -0
  31. data/lib/mongoid/contextual/memory.rb +383 -0
  32. data/lib/mongoid/contextual/mongo.rb +543 -0
  33. data/lib/mongoid/contextual.rb +50 -0
  34. data/lib/mongoid/copyable.rb +2 -2
  35. data/lib/mongoid/criteria.rb +436 -248
  36. data/lib/mongoid/criterion/inspection.rb +14 -8
  37. data/lib/mongoid/criterion/scoping.rb +114 -44
  38. data/lib/mongoid/dirty.rb +152 -67
  39. data/lib/mongoid/document.rb +68 -49
  40. data/lib/mongoid/errors/ambiguous_relationship.rb +51 -0
  41. data/lib/mongoid/errors/callback.rb +5 -6
  42. data/lib/mongoid/errors/delete_restriction.rb +29 -0
  43. data/lib/mongoid/errors/document_not_found.rb +98 -17
  44. data/lib/mongoid/errors/eager_load.rb +3 -6
  45. data/lib/mongoid/errors/invalid_collection.rb +3 -3
  46. data/lib/mongoid/errors/invalid_config_option.rb +27 -0
  47. data/lib/mongoid/errors/invalid_database.rb +3 -3
  48. data/lib/mongoid/errors/invalid_field.rb +54 -8
  49. data/lib/mongoid/errors/invalid_field_option.rb +35 -0
  50. data/lib/mongoid/errors/invalid_find.rb +3 -3
  51. data/lib/mongoid/errors/invalid_index.rb +28 -0
  52. data/lib/mongoid/errors/invalid_options.rb +4 -4
  53. data/lib/mongoid/errors/invalid_scope.rb +24 -0
  54. data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +38 -0
  55. data/lib/mongoid/errors/invalid_storage_options.rb +27 -0
  56. data/lib/mongoid/errors/invalid_time.rb +3 -6
  57. data/lib/mongoid/errors/inverse_not_found.rb +29 -0
  58. data/lib/mongoid/errors/mixed_relations.rb +4 -9
  59. data/lib/mongoid/errors/mixed_session_configuration.rb +28 -0
  60. data/lib/mongoid/errors/mongoid_error.rb +54 -3
  61. data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +28 -0
  62. data/lib/mongoid/errors/no_default_session.rb +23 -0
  63. data/lib/mongoid/errors/no_environment.rb +3 -3
  64. data/lib/mongoid/errors/no_map_reduce_output.rb +24 -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 +22 -1
  80. data/lib/mongoid/extensions/array.rb +127 -0
  81. data/lib/mongoid/extensions/big_decimal.rb +42 -0
  82. data/lib/mongoid/extensions/boolean.rb +24 -0
  83. data/lib/mongoid/extensions/date.rb +70 -0
  84. data/lib/mongoid/extensions/date_time.rb +68 -0
  85. data/lib/mongoid/extensions/false_class.rb +26 -0
  86. data/lib/mongoid/extensions/float.rb +44 -0
  87. data/lib/mongoid/extensions/hash.rb +91 -0
  88. data/lib/mongoid/extensions/integer.rb +54 -0
  89. data/lib/mongoid/extensions/module.rb +28 -0
  90. data/lib/mongoid/extensions/nil_class.rb +21 -0
  91. data/lib/mongoid/extensions/object.rb +188 -0
  92. data/lib/mongoid/extensions/object_id.rb +53 -0
  93. data/lib/mongoid/extensions/range.rb +55 -0
  94. data/lib/mongoid/extensions/regexp.rb +27 -0
  95. data/lib/mongoid/extensions/set.rb +55 -0
  96. data/lib/mongoid/extensions/string.rb +155 -0
  97. data/lib/mongoid/extensions/symbol.rb +54 -0
  98. data/lib/mongoid/extensions/time.rb +78 -0
  99. data/lib/mongoid/extensions/time_with_zone.rb +55 -0
  100. data/lib/mongoid/extensions/true_class.rb +26 -0
  101. data/lib/mongoid/extensions.rb +28 -76
  102. data/lib/mongoid/factory.rb +1 -1
  103. data/lib/mongoid/fields/foreign_key.rb +134 -0
  104. data/lib/mongoid/fields/localized.rb +73 -0
  105. data/lib/mongoid/fields/standard.rb +268 -0
  106. data/lib/mongoid/fields/validators/macro.rb +83 -0
  107. data/lib/mongoid/fields/validators.rb +2 -0
  108. data/lib/mongoid/fields.rb +129 -194
  109. data/lib/mongoid/finders.rb +42 -43
  110. data/lib/mongoid/hierarchy.rb +25 -14
  111. data/lib/mongoid/identity_map.rb +31 -19
  112. data/lib/mongoid/indexes/validators/options.rb +80 -0
  113. data/lib/mongoid/indexes.rb +66 -15
  114. data/lib/mongoid/inspection.rb +1 -1
  115. data/lib/mongoid/javascript.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 +8 -10
  134. data/lib/mongoid/nested_attributes.rb +17 -9
  135. data/lib/mongoid/observer.rb +1 -2
  136. data/lib/mongoid/paranoia.rb +13 -18
  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.rb +6 -19
  159. data/lib/mongoid/persistence.rb +64 -27
  160. data/lib/mongoid/railtie.rb +26 -11
  161. data/lib/mongoid/railties/database.rake +22 -108
  162. data/lib/mongoid/relations/accessors.rb +119 -19
  163. data/lib/mongoid/relations/auto_save.rb +59 -5
  164. data/lib/mongoid/relations/binding.rb +211 -2
  165. data/lib/mongoid/relations/bindings/embedded/in.rb +16 -22
  166. data/lib/mongoid/relations/bindings/embedded/many.rb +9 -50
  167. data/lib/mongoid/relations/bindings/embedded/one.rb +10 -16
  168. data/lib/mongoid/relations/bindings/referenced/in.rb +31 -57
  169. data/lib/mongoid/relations/bindings/referenced/many.rb +8 -20
  170. data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +15 -19
  171. data/lib/mongoid/relations/bindings/referenced/one.rb +10 -24
  172. data/lib/mongoid/relations/builder.rb +3 -3
  173. data/lib/mongoid/relations/builders/embedded/in.rb +5 -5
  174. data/lib/mongoid/relations/builders/embedded/many.rb +12 -12
  175. data/lib/mongoid/relations/builders/embedded/one.rb +6 -6
  176. data/lib/mongoid/relations/builders/nested_attributes/many.rb +8 -8
  177. data/lib/mongoid/relations/builders/nested_attributes/one.rb +4 -4
  178. data/lib/mongoid/relations/builders/referenced/in.rb +4 -4
  179. data/lib/mongoid/relations/builders/referenced/many.rb +5 -5
  180. data/lib/mongoid/relations/builders/referenced/many_to_many.rb +7 -5
  181. data/lib/mongoid/relations/builders/referenced/one.rb +5 -5
  182. data/lib/mongoid/relations/builders.rb +19 -16
  183. data/lib/mongoid/relations/cascading/delete.rb +3 -5
  184. data/lib/mongoid/relations/cascading/destroy.rb +3 -3
  185. data/lib/mongoid/relations/cascading/nullify.rb +3 -3
  186. data/lib/mongoid/relations/cascading/restrict.rb +37 -0
  187. data/lib/mongoid/relations/cascading.rb +6 -4
  188. data/lib/mongoid/relations/constraint.rb +4 -3
  189. data/lib/mongoid/relations/conversions.rb +5 -6
  190. data/lib/mongoid/relations/cyclic.rb +7 -7
  191. data/lib/mongoid/relations/embedded/batchable.rb +346 -0
  192. data/lib/mongoid/relations/embedded/in.rb +23 -12
  193. data/lib/mongoid/relations/embedded/many.rb +99 -160
  194. data/lib/mongoid/relations/embedded/one.rb +25 -14
  195. data/lib/mongoid/relations/macros.rb +105 -60
  196. data/lib/mongoid/relations/many.rb +93 -14
  197. data/lib/mongoid/relations/metadata.rb +231 -45
  198. data/lib/mongoid/relations/nested_builder.rb +3 -5
  199. data/lib/mongoid/relations/one.rb +2 -2
  200. data/lib/mongoid/relations/options.rb +2 -2
  201. data/lib/mongoid/relations/polymorphic.rb +9 -9
  202. data/lib/mongoid/relations/proxy.rb +60 -31
  203. data/lib/mongoid/relations/referenced/in.rb +40 -15
  204. data/lib/mongoid/relations/referenced/many.rb +116 -128
  205. data/lib/mongoid/relations/referenced/many_to_many.rb +101 -46
  206. data/lib/mongoid/relations/referenced/one.rb +34 -13
  207. data/lib/mongoid/relations/reflections.rb +3 -3
  208. data/lib/mongoid/relations/synchronization.rb +19 -23
  209. data/lib/mongoid/relations/targets/enumerable.rb +86 -57
  210. data/lib/mongoid/relations/touchable.rb +32 -0
  211. data/lib/mongoid/relations.rb +6 -6
  212. data/lib/mongoid/reloading.rb +12 -14
  213. data/lib/mongoid/scoping.rb +329 -0
  214. data/lib/mongoid/serialization.rb +13 -30
  215. data/lib/mongoid/sessions/factory.rb +106 -0
  216. data/lib/mongoid/sessions/mongo_uri.rb +93 -0
  217. data/lib/mongoid/sessions/validators/storage.rb +49 -0
  218. data/lib/mongoid/sessions/validators.rb +2 -0
  219. data/lib/mongoid/sessions.rb +359 -0
  220. data/lib/mongoid/sharding.rb +6 -6
  221. data/lib/mongoid/state.rb +6 -7
  222. data/lib/mongoid/threaded/lifecycle.rb +21 -21
  223. data/lib/mongoid/threaded/sessions.rb +0 -0
  224. data/lib/mongoid/threaded.rb +167 -59
  225. data/lib/mongoid/timestamps/created.rb +8 -4
  226. data/lib/mongoid/timestamps/timeless.rb +6 -4
  227. data/lib/mongoid/timestamps/updated.rb +3 -3
  228. data/lib/mongoid/timestamps.rb +1 -1
  229. data/lib/mongoid/unit_of_work.rb +61 -0
  230. data/lib/mongoid/validations/associated.rb +2 -2
  231. data/lib/mongoid/validations/format.rb +2 -2
  232. data/lib/mongoid/validations/presence.rb +34 -4
  233. data/lib/mongoid/validations/uniqueness.rb +8 -10
  234. data/lib/mongoid/validations.rb +28 -20
  235. data/lib/mongoid/version.rb +2 -2
  236. data/lib/mongoid/versioning.rb +25 -26
  237. data/lib/mongoid.rb +24 -39
  238. data/lib/rack/mongoid/middleware/identity_map.rb +3 -3
  239. data/lib/rails/generators/mongoid/config/config_generator.rb +1 -1
  240. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +59 -19
  241. data/lib/rails/generators/mongoid/model/model_generator.rb +7 -7
  242. data/lib/rails/generators/mongoid/model/templates/model.rb.tt +2 -2
  243. data/lib/rails/generators/mongoid/observer/observer_generator.rb +4 -4
  244. data/lib/rails/generators/mongoid_generator.rb +5 -5
  245. data/lib/rails/mongoid.rb +69 -25
  246. metadata +92 -154
  247. data/lib/config/locales/bg.yml +0 -61
  248. data/lib/config/locales/de.yml +0 -61
  249. data/lib/config/locales/en-GB.yml +0 -64
  250. data/lib/config/locales/es.yml +0 -59
  251. data/lib/config/locales/fr.yml +0 -62
  252. data/lib/config/locales/hi.yml +0 -53
  253. data/lib/config/locales/hu.yml +0 -64
  254. data/lib/config/locales/id.yml +0 -62
  255. data/lib/config/locales/it.yml +0 -59
  256. data/lib/config/locales/ja.yml +0 -57
  257. data/lib/config/locales/kr.yml +0 -54
  258. data/lib/config/locales/nl.yml +0 -61
  259. data/lib/config/locales/pl.yml +0 -59
  260. data/lib/config/locales/pt-BR.yml +0 -60
  261. data/lib/config/locales/pt.yml +0 -60
  262. data/lib/config/locales/ro.yml +0 -66
  263. data/lib/config/locales/ru.yml +0 -61
  264. data/lib/config/locales/sv.yml +0 -60
  265. data/lib/config/locales/vi.yml +0 -62
  266. data/lib/config/locales/zh-CN.yml +0 -53
  267. data/lib/mongoid/collection.rb +0 -157
  268. data/lib/mongoid/collections/master.rb +0 -45
  269. data/lib/mongoid/collections/operations.rb +0 -44
  270. data/lib/mongoid/collections.rb +0 -120
  271. data/lib/mongoid/config/database.rb +0 -181
  272. data/lib/mongoid/config/replset_database.rb +0 -80
  273. data/lib/mongoid/contexts/enumerable/sort.rb +0 -43
  274. data/lib/mongoid/contexts/enumerable.rb +0 -313
  275. data/lib/mongoid/contexts/mongo.rb +0 -487
  276. data/lib/mongoid/contexts.rb +0 -25
  277. data/lib/mongoid/criterion/builder.rb +0 -34
  278. data/lib/mongoid/criterion/complex.rb +0 -84
  279. data/lib/mongoid/criterion/creational.rb +0 -34
  280. data/lib/mongoid/criterion/exclusion.rb +0 -108
  281. data/lib/mongoid/criterion/inclusion.rb +0 -290
  282. data/lib/mongoid/criterion/optional.rb +0 -259
  283. data/lib/mongoid/criterion/selector.rb +0 -177
  284. data/lib/mongoid/cursor.rb +0 -88
  285. data/lib/mongoid/default_scope.rb +0 -36
  286. data/lib/mongoid/errors/invalid_type.rb +0 -25
  287. data/lib/mongoid/extensions/array/deep_copy.rb +0 -25
  288. data/lib/mongoid/extensions/array/deletion.rb +0 -29
  289. data/lib/mongoid/extensions/false_class/equality.rb +0 -26
  290. data/lib/mongoid/extensions/hash/criteria_helpers.rb +0 -47
  291. data/lib/mongoid/extensions/hash/deep_copy.rb +0 -25
  292. data/lib/mongoid/extensions/hash/scoping.rb +0 -25
  293. data/lib/mongoid/extensions/integer/checks.rb +0 -23
  294. data/lib/mongoid/extensions/nil/collectionization.rb +0 -23
  295. data/lib/mongoid/extensions/object/checks.rb +0 -29
  296. data/lib/mongoid/extensions/object/deep_copy.rb +0 -21
  297. data/lib/mongoid/extensions/object/reflections.rb +0 -48
  298. data/lib/mongoid/extensions/object/substitutable.rb +0 -15
  299. data/lib/mongoid/extensions/object/yoda.rb +0 -44
  300. data/lib/mongoid/extensions/object_id/conversions.rb +0 -60
  301. data/lib/mongoid/extensions/proc/scoping.rb +0 -25
  302. data/lib/mongoid/extensions/string/checks.rb +0 -36
  303. data/lib/mongoid/extensions/string/conversions.rb +0 -22
  304. data/lib/mongoid/extensions/string/inflections.rb +0 -118
  305. data/lib/mongoid/extensions/symbol/checks.rb +0 -23
  306. data/lib/mongoid/extensions/symbol/inflections.rb +0 -67
  307. data/lib/mongoid/extensions/true_class/equality.rb +0 -26
  308. data/lib/mongoid/extras.rb +0 -31
  309. data/lib/mongoid/fields/internal/array.rb +0 -76
  310. data/lib/mongoid/fields/internal/big_decimal.rb +0 -63
  311. data/lib/mongoid/fields/internal/bignum.rb +0 -10
  312. data/lib/mongoid/fields/internal/binary.rb +0 -11
  313. data/lib/mongoid/fields/internal/boolean.rb +0 -58
  314. data/lib/mongoid/fields/internal/date.rb +0 -51
  315. data/lib/mongoid/fields/internal/date_time.rb +0 -28
  316. data/lib/mongoid/fields/internal/false_class.rb +0 -10
  317. data/lib/mongoid/fields/internal/fixnum.rb +0 -10
  318. data/lib/mongoid/fields/internal/float.rb +0 -47
  319. data/lib/mongoid/fields/internal/foreign_keys/array.rb +0 -88
  320. data/lib/mongoid/fields/internal/foreign_keys/object.rb +0 -56
  321. data/lib/mongoid/fields/internal/hash.rb +0 -11
  322. data/lib/mongoid/fields/internal/integer.rb +0 -59
  323. data/lib/mongoid/fields/internal/localized.rb +0 -62
  324. data/lib/mongoid/fields/internal/nil_class.rb +0 -53
  325. data/lib/mongoid/fields/internal/object.rb +0 -11
  326. data/lib/mongoid/fields/internal/object_id.rb +0 -46
  327. data/lib/mongoid/fields/internal/range.rb +0 -61
  328. data/lib/mongoid/fields/internal/set.rb +0 -57
  329. data/lib/mongoid/fields/internal/string.rb +0 -42
  330. data/lib/mongoid/fields/internal/symbol.rb +0 -43
  331. data/lib/mongoid/fields/internal/time.rb +0 -23
  332. data/lib/mongoid/fields/internal/time_with_zone.rb +0 -23
  333. data/lib/mongoid/fields/internal/timekeeping.rb +0 -122
  334. data/lib/mongoid/fields/internal/true_class.rb +0 -10
  335. data/lib/mongoid/fields/mappings.rb +0 -42
  336. data/lib/mongoid/fields/serializable.rb +0 -270
  337. data/lib/mongoid/identity.rb +0 -92
  338. data/lib/mongoid/keys.rb +0 -144
  339. data/lib/mongoid/logger.rb +0 -45
  340. data/lib/mongoid/multi_database.rb +0 -36
  341. data/lib/mongoid/named_scope.rb +0 -166
  342. data/lib/mongoid/relations/embedded/atomic/operation.rb +0 -63
  343. data/lib/mongoid/relations/embedded/atomic/pull.rb +0 -65
  344. data/lib/mongoid/relations/embedded/atomic/push_all.rb +0 -59
  345. data/lib/mongoid/relations/embedded/atomic/set.rb +0 -61
  346. data/lib/mongoid/relations/embedded/atomic/unset.rb +0 -41
  347. data/lib/mongoid/relations/embedded/atomic.rb +0 -89
  348. data/lib/mongoid/relations/referenced/batch/insert.rb +0 -57
  349. data/lib/mongoid/relations/referenced/batch.rb +0 -73
  350. data/lib/mongoid/safety.rb +0 -105
  351. data/lib/mongoid/scope.rb +0 -31
@@ -0,0 +1,78 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ module Extensions
4
+ module Time
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
+ # time.mongoize
11
+ #
12
+ # @return [ Time ] The object mongoized.
13
+ #
14
+ # @since 3.0.0
15
+ def mongoize
16
+ ::Time.mongoize(self)
17
+ end
18
+
19
+ module ClassMethods
20
+
21
+ # Get the configured time to use when converting - either the time zone
22
+ # or the time.
23
+ #
24
+ # @example Get the configured time.
25
+ # ::Time.configured
26
+ #
27
+ # @retun [ Time ] The configured time.
28
+ #
29
+ # @since 3.0.0
30
+ def configured
31
+ Mongoid.use_activesupport_time_zone? ? (::Time.zone || ::Time) : ::Time
32
+ end
33
+
34
+ # Convert the object from it's mongo friendly ruby type to this type.
35
+ #
36
+ # @example Demongoize the object.
37
+ # Time.demongoize(object)
38
+ #
39
+ # @param [ Time ] object The time from Mongo.
40
+ #
41
+ # @return [ Time ] The object as a date.
42
+ #
43
+ # @since 3.0.0
44
+ def demongoize(object)
45
+ return nil if object.blank?
46
+ object = object.getlocal unless Mongoid::Config.use_utc?
47
+ if Mongoid::Config.use_activesupport_time_zone?
48
+ object = object.in_time_zone(Mongoid.time_zone)
49
+ end
50
+ object
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
+ # Time.mongoize("2012-1-1")
58
+ #
59
+ # @param [ Object ] object The object to mongoize.
60
+ #
61
+ # @return [ Time ] The object mongoized.
62
+ #
63
+ # @since 3.0.0
64
+ def mongoize(object)
65
+ return nil if object.blank?
66
+ begin
67
+ ::Time.at(object.__mongoize_time__.to_f).utc
68
+ rescue ArgumentError
69
+ raise Errors::InvalidTime.new(object)
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
76
+
77
+ ::Time.__send__(:include, Mongoid::Extensions::Time)
78
+ ::Time.__send__(:extend, Mongoid::Extensions::Time::ClassMethods)
@@ -0,0 +1,55 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ module Extensions
4
+ module TimeWithZone
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
+ # date_time.mongoize
11
+ #
12
+ # @return [ Time ] The object mongoized.
13
+ #
14
+ # @since 3.0.0
15
+ def mongoize
16
+ ::ActiveSupport::TimeWithZone.mongoize(self)
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
+ # TimeWithZone.demongoize(object)
25
+ #
26
+ # @param [ Time ] object The time from Mongo.
27
+ #
28
+ # @return [ TimeWithZone ] The object as a date.
29
+ #
30
+ # @since 3.0.0
31
+ def demongoize(object)
32
+ ::Time.demongoize(object).in_time_zone
33
+ end
34
+
35
+ # Turn the object from the ruby type we deal with to a Mongo friendly
36
+ # type.
37
+ #
38
+ # @example Mongoize the object.
39
+ # TimeWithZone.mongoize("2012-1-1")
40
+ #
41
+ # @param [ Object ] object The object to convert.
42
+ #
43
+ # @return [ Time ] The object mongoized.
44
+ #
45
+ # @since 3.0.0
46
+ def mongoize(object)
47
+ ::Time.mongoize(object)
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+
54
+ ::ActiveSupport::TimeWithZone.__send__(:include, Mongoid::Extensions::TimeWithZone)
55
+ ::ActiveSupport::TimeWithZone.__send__(:extend, Mongoid::Extensions::TimeWithZone::ClassMethods)
@@ -0,0 +1,26 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ module Extensions
4
+ module TrueClass
5
+
6
+ # Is the passed value a boolean?
7
+ #
8
+ # @example Is the value a boolean type?
9
+ # true.is_a?(Boolean)
10
+ #
11
+ # @param [ Class ] other The class to check.
12
+ #
13
+ # @return [ true, false ] If the other is a boolean.
14
+ #
15
+ # @since 1.0.0
16
+ def is_a?(other)
17
+ if other == ::Boolean || other.class == ::Boolean
18
+ return true
19
+ end
20
+ super(other)
21
+ end
22
+ end
23
+ end
24
+ end
25
+
26
+ ::TrueClass.__send__(:include, Mongoid::Extensions::TrueClass)
@@ -1,84 +1,10 @@
1
1
  # encoding: utf-8
2
- require "mongoid/extensions/array/deep_copy"
3
- require "mongoid/extensions/array/deletion"
4
- require "mongoid/extensions/false_class/equality"
5
- require "mongoid/extensions/hash/deep_copy"
6
- require "mongoid/extensions/hash/criteria_helpers"
7
- require "mongoid/extensions/hash/scoping"
8
- require "mongoid/extensions/integer/checks"
9
- require "mongoid/extensions/nil/collectionization"
10
- require "mongoid/extensions/object/checks"
11
- require "mongoid/extensions/object/deep_copy"
12
- require "mongoid/extensions/object/reflections"
13
- require "mongoid/extensions/object/substitutable"
14
- require "mongoid/extensions/object/yoda"
15
- require "mongoid/extensions/proc/scoping"
16
- require "mongoid/extensions/string/checks"
17
- require "mongoid/extensions/string/conversions"
18
- require "mongoid/extensions/string/inflections"
19
- require "mongoid/extensions/symbol/checks"
20
- require "mongoid/extensions/symbol/inflections"
21
- require "mongoid/extensions/true_class/equality"
22
- require "mongoid/extensions/object_id/conversions"
23
-
24
- class Array #:nodoc
25
- include Mongoid::Extensions::Array::DeepCopy
26
- include Mongoid::Extensions::Array::Deletion
27
- end
28
-
29
- class Binary; end #:nodoc:
30
2
  unless defined?(Boolean)
31
3
  class Boolean; end
32
4
  end
33
5
 
34
- class FalseClass #:nodoc
35
- include Mongoid::Extensions::FalseClass::Equality
36
- end
37
-
38
- class Hash #:nodoc
39
- include Mongoid::Extensions::Hash::DeepCopy
40
- include Mongoid::Extensions::Hash::CriteriaHelpers
41
- include Mongoid::Extensions::Hash::Scoping
42
- end
43
-
44
- class Integer #:nodoc
45
- include Mongoid::Extensions::Integer::Checks
46
- end
47
-
48
- class NilClass #:nodoc
49
- include Mongoid::Extensions::Nil::Collectionization
50
- end
51
-
52
- class Object #:nodoc:
53
- include Mongoid::Extensions::Object::Checks
54
- include Mongoid::Extensions::Object::DeepCopy
55
- include Mongoid::Extensions::Object::Reflections
56
- include Mongoid::Extensions::Object::Substitutable
57
- include Mongoid::Extensions::Object::Yoda
58
- end
59
-
60
- class Proc #:nodoc:
61
- include Mongoid::Extensions::Proc::Scoping
62
- end
63
-
64
- class String #:nodoc
65
- include Mongoid::Extensions::String::Checks
66
- include Mongoid::Extensions::String::Conversions
67
- include Mongoid::Extensions::String::Inflections
68
- end
69
-
70
- class Symbol #:nodoc
71
- remove_method :size if instance_methods.include? :size # temporal fix for ruby 1.9
72
- include Mongoid::Extensions::Symbol::Checks
73
- include Mongoid::Extensions::Symbol::Inflections
74
- end
75
-
76
- class TrueClass #:nodoc
77
- include Mongoid::Extensions::TrueClass::Equality
78
- end
79
-
80
- class BSON::ObjectId #:nodoc
81
- extend Mongoid::Extensions::ObjectId::Conversions
6
+ class BSON::ObjectId
7
+ undef :as_json
82
8
  def as_json(options = nil)
83
9
  to_s
84
10
  end
@@ -86,3 +12,29 @@ class BSON::ObjectId #:nodoc
86
12
  ActiveSupport::XmlMini.to_tag(options[:root], self.to_s, options)
87
13
  end
88
14
  end
15
+
16
+ class Symbol
17
+ remove_method :size if instance_methods.include? :size # temporal fix for ruby 1.9
18
+ end
19
+
20
+ require "mongoid/extensions/array"
21
+ require "mongoid/extensions/big_decimal"
22
+ require "mongoid/extensions/boolean"
23
+ require "mongoid/extensions/date"
24
+ require "mongoid/extensions/date_time"
25
+ require "mongoid/extensions/false_class"
26
+ require "mongoid/extensions/float"
27
+ require "mongoid/extensions/hash"
28
+ require "mongoid/extensions/integer"
29
+ require "mongoid/extensions/module"
30
+ require "mongoid/extensions/nil_class"
31
+ require "mongoid/extensions/object"
32
+ require "mongoid/extensions/object_id"
33
+ require "mongoid/extensions/range"
34
+ require "mongoid/extensions/regexp"
35
+ require "mongoid/extensions/set"
36
+ require "mongoid/extensions/string"
37
+ require "mongoid/extensions/symbol"
38
+ require "mongoid/extensions/time"
39
+ require "mongoid/extensions/time_with_zone"
40
+ require "mongoid/extensions/true_class"
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
- module Mongoid #:nodoc:
2
+ module Mongoid
3
3
 
4
4
  # Instantiates documents that came from the database.
5
5
  module Factory
@@ -0,0 +1,134 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ module Fields
4
+ class ForeignKey < Standard
5
+
6
+ # Adds the atomic changes for this type of resizable field.
7
+ #
8
+ # @example Add the atomic changes.
9
+ # field.add_atomic_changes(doc, "key", {}, [], [])
10
+ #
11
+ # @todo: Durran: Refactor, big time.
12
+ #
13
+ # @param [ Document ] document The document to add to.
14
+ # @param [ String ] name The name of the field.
15
+ # @param [ String ] key The atomic location of the field.
16
+ # @param [ Hash ] mods The current modifications.
17
+ # @param [ Array ] new The new elements to add.
18
+ # @param [ Array ] old The old elements getting removed.
19
+ #
20
+ # @since 2.4.0
21
+ def add_atomic_changes(document, name, key, mods, new_elements, old_elements)
22
+ old = (old_elements || [])
23
+ new = (new_elements || [])
24
+ if new.length > old.length
25
+ if new.first(old.length) == old
26
+ document.atomic_array_add_to_sets[key] = new.drop(old.length)
27
+ else
28
+ mods[key] = document.attributes[name]
29
+ end
30
+ elsif new.length < old.length
31
+ pulls = old - new
32
+ if new == old - pulls
33
+ document.atomic_array_pulls[key] = pulls
34
+ else
35
+ mods[key] = document.attributes[name]
36
+ end
37
+ elsif new != old
38
+ mods[key] = document.attributes[name]
39
+ end
40
+ end
41
+
42
+ # Is this field a foreign key?
43
+ #
44
+ # @example Is the field a foreign key?
45
+ # field.foreign_key?
46
+ #
47
+ # @return [ true, false ] If the field is a foreign key.
48
+ #
49
+ # @since 2.4.0
50
+ def foreign_key?
51
+ true
52
+ end
53
+
54
+ # Evolve the object into an id compatible object.
55
+ #
56
+ # @example Evolve the object.
57
+ # field.evolve(object)
58
+ #
59
+ # @param [ Object ] object The object to evolve.
60
+ #
61
+ # @return [ Object ] The evolved object.
62
+ #
63
+ # @since 3.0.0
64
+ def evolve(object)
65
+ return object.id if object.is_a?(Document)
66
+ evolved = mongoize(object)
67
+ type.resizable? ? evolved.first : evolved
68
+ end
69
+
70
+ # Mongoize the object into the Mongo friendly value.
71
+ #
72
+ # @example Mongoize the object.
73
+ # field.mongoize(object)
74
+ #
75
+ # @param [ Object ] object The object to Mongoize.
76
+ #
77
+ # @return [ Object ] The mongoized object.
78
+ #
79
+ # @since 3.0.0
80
+ def mongoize(object)
81
+ if type.resizable? || object_id_field?
82
+ type.__mongoize_fk__(constraint, object)
83
+ else
84
+ metadata.klass.fields["_id"].mongoize(object)
85
+ end
86
+ end
87
+
88
+ # Is the field a BSON::ObjectId?
89
+ #
90
+ # @example Is the field a BSON::ObjectId?
91
+ # field.object_id_field?
92
+ #
93
+ # @return [ true, false ] If the field is a BSON::ObjectId.
94
+ #
95
+ # @since 2.2.0
96
+ def object_id_field?
97
+ @object_id_field ||=
98
+ metadata.polymorphic? ? true : metadata.klass.using_object_ids?
99
+ end
100
+
101
+ private
102
+
103
+ # Evaluate the default proc. In some cases we need to instance exec,
104
+ # in others we don't.
105
+ #
106
+ # @example Eval the default proc.
107
+ # field.evaluate_default_proc(band)
108
+ #
109
+ # @param [ Document ] doc The document.
110
+ #
111
+ # @return [ Object ] The called proc.
112
+ #
113
+ # @since 3.0.0
114
+ def evaluate_default_proc(doc)
115
+ serialize_default(default_val[])
116
+ end
117
+
118
+ # This is used when default values need to be serialized. Most of the
119
+ # time just return the object.
120
+ #
121
+ # @api private
122
+ #
123
+ # @example Serialize the default value.
124
+ # field.serialize_default(obj)
125
+ #
126
+ # @param [ Object ] object The default.
127
+ #
128
+ # @return [ Object ] The serialized default.
129
+ #
130
+ # @since 3.0.0
131
+ def serialize_default(object); object; end
132
+ end
133
+ end
134
+ end
@@ -0,0 +1,73 @@
1
+ # encoding: utf-8
2
+ module Mongoid
3
+ module Fields
4
+ class Localized < Standard
5
+
6
+ # Demongoize the object based on the current locale. Will look in the
7
+ # hash for the current locale.
8
+ #
9
+ # @example Get the demongoized value.
10
+ # field.demongoize({ "en" => "testing" })
11
+ #
12
+ # @param [ Hash ] object The hash of translations.
13
+ #
14
+ # @return [ Object ] The value for the current locale.
15
+ #
16
+ # @since 2.3.0
17
+ def demongoize(object)
18
+ if object
19
+ type.demongoize(lookup(object))
20
+ end
21
+ end
22
+
23
+ # Is the field localized or not?
24
+ #
25
+ # @example Is the field localized?
26
+ # field.localized?
27
+ #
28
+ # @return [ true, false ] If the field is localized.
29
+ #
30
+ # @since 2.3.0
31
+ def localized?
32
+ true
33
+ end
34
+
35
+ # Convert the provided string into a hash for the locale.
36
+ #
37
+ # @example Serialize the value.
38
+ # field.mongoize("testing")
39
+ #
40
+ # @param [ String ] object The string to convert.
41
+ #
42
+ # @return [ Hash ] The locale with string translation.
43
+ #
44
+ # @since 2.3.0
45
+ def mongoize(object)
46
+ { ::I18n.locale.to_s => type.mongoize(object) }
47
+ end
48
+
49
+ private
50
+
51
+ # Lookup the value from the provided object.
52
+ #
53
+ # @api private
54
+ #
55
+ # @example Lookup the value.
56
+ # field.lookup({ "en" => "test" })
57
+ #
58
+ # @param [ Hash ] object The localized object.
59
+ #
60
+ # @return [ Object ] The object for the locale.
61
+ #
62
+ # @since 3.0.0
63
+ def lookup(object)
64
+ locale = ::I18n.locale
65
+ if ::I18n.respond_to?(:fallbacks)
66
+ object[::I18n.fallbacks[locale].map(&:to_s).find{ |loc| object[loc] }]
67
+ else
68
+ object[locale.to_s]
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end