mongoid 3.0.0.rc → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (82) hide show
  1. data/CHANGELOG.md +109 -4
  2. data/README.md +1 -1
  3. data/Rakefile +1 -0
  4. data/lib/config/locales/en.yml +15 -1
  5. data/lib/mongoid.rb +17 -2
  6. data/lib/mongoid/atomic.rb +54 -7
  7. data/lib/mongoid/attributes.rb +1 -1
  8. data/lib/mongoid/attributes/processing.rb +1 -1
  9. data/lib/mongoid/callbacks.rb +6 -1
  10. data/lib/mongoid/components.rb +2 -1
  11. data/lib/mongoid/config.rb +42 -17
  12. data/lib/mongoid/config/environment.rb +3 -1
  13. data/lib/mongoid/contextual/aggregable/memory.rb +21 -10
  14. data/lib/mongoid/contextual/find_and_modify.rb +14 -12
  15. data/lib/mongoid/contextual/memory.rb +24 -1
  16. data/lib/mongoid/contextual/mongo.rb +148 -29
  17. data/lib/mongoid/copyable.rb +6 -24
  18. data/lib/mongoid/criteria.rb +116 -34
  19. data/lib/mongoid/document.rb +7 -7
  20. data/lib/mongoid/errors.rb +1 -0
  21. data/lib/mongoid/errors/no_metadata.rb +21 -0
  22. data/lib/mongoid/evolvable.rb +19 -0
  23. data/lib/mongoid/extensions.rb +1 -1
  24. data/lib/mongoid/extensions/array.rb +38 -1
  25. data/lib/mongoid/extensions/big_decimal.rb +1 -1
  26. data/lib/mongoid/extensions/date_time.rb +6 -1
  27. data/lib/mongoid/extensions/false_class.rb +12 -0
  28. data/lib/mongoid/extensions/float.rb +12 -0
  29. data/lib/mongoid/extensions/hash.rb +33 -1
  30. data/lib/mongoid/extensions/integer.rb +12 -0
  31. data/lib/mongoid/extensions/object.rb +51 -1
  32. data/lib/mongoid/extensions/object_id.rb +2 -1
  33. data/lib/mongoid/extensions/range.rb +24 -0
  34. data/lib/mongoid/extensions/string.rb +31 -5
  35. data/lib/mongoid/extensions/true_class.rb +12 -0
  36. data/lib/mongoid/fields.rb +20 -21
  37. data/lib/mongoid/fields/foreign_key.rb +23 -7
  38. data/lib/mongoid/fields/standard.rb +3 -3
  39. data/lib/mongoid/finders.rb +3 -7
  40. data/lib/mongoid/hierarchy.rb +19 -1
  41. data/lib/mongoid/identity_map.rb +20 -4
  42. data/lib/mongoid/indexes/validators/options.rb +1 -1
  43. data/lib/mongoid/multi_parameter_attributes.rb +1 -1
  44. data/lib/mongoid/paranoia.rb +3 -32
  45. data/lib/mongoid/persistence.rb +33 -15
  46. data/lib/mongoid/persistence/atomic/operation.rb +1 -1
  47. data/lib/mongoid/persistence/operations.rb +16 -0
  48. data/lib/mongoid/persistence/operations/remove.rb +1 -1
  49. data/lib/mongoid/persistence/operations/upsert.rb +28 -0
  50. data/lib/mongoid/persistence/upsertion.rb +30 -0
  51. data/lib/mongoid/relations.rb +16 -0
  52. data/lib/mongoid/relations/accessors.rb +1 -1
  53. data/lib/mongoid/relations/bindings/referenced/in.rb +1 -1
  54. data/lib/mongoid/relations/builder.rb +1 -1
  55. data/lib/mongoid/relations/builders/nested_attributes/one.rb +1 -1
  56. data/lib/mongoid/relations/builders/referenced/many.rb +1 -1
  57. data/lib/mongoid/relations/cascading.rb +4 -3
  58. data/lib/mongoid/relations/constraint.rb +1 -1
  59. data/lib/mongoid/relations/conversions.rb +1 -1
  60. data/lib/mongoid/relations/embedded/batchable.rb +3 -2
  61. data/lib/mongoid/relations/embedded/many.rb +4 -4
  62. data/lib/mongoid/relations/embedded/one.rb +1 -1
  63. data/lib/mongoid/relations/metadata.rb +67 -23
  64. data/lib/mongoid/relations/nested_builder.rb +2 -2
  65. data/lib/mongoid/relations/proxy.rb +9 -7
  66. data/lib/mongoid/relations/referenced/many.rb +69 -25
  67. data/lib/mongoid/relations/referenced/many_to_many.rb +14 -13
  68. data/lib/mongoid/scoping.rb +0 -17
  69. data/lib/mongoid/serialization.rb +95 -26
  70. data/lib/mongoid/sessions.rb +30 -6
  71. data/lib/mongoid/sessions/factory.rb +2 -0
  72. data/lib/mongoid/threaded.rb +52 -0
  73. data/lib/mongoid/timestamps/created.rb +1 -1
  74. data/lib/mongoid/timestamps/updated.rb +2 -1
  75. data/lib/mongoid/validations/uniqueness.rb +3 -2
  76. data/lib/mongoid/version.rb +1 -1
  77. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +8 -0
  78. data/lib/rails/mongoid.rb +8 -5
  79. metadata +30 -13
  80. data/lib/mongoid/collections/retry.rb +0 -58
  81. data/lib/mongoid/javascript.rb +0 -20
  82. data/lib/mongoid/javascript/functions.yml +0 -63
@@ -3,10 +3,41 @@
3
3
  For instructions on upgrading to newer versions, visit
4
4
  [mongoid.org](http://mongoid.org/docs/upgrading.html).
5
5
 
6
- ## 3.0.0 (branch: master)
6
+ ## 3.0.0
7
7
 
8
8
  ### New Features
9
9
 
10
+ * \#2151 When asking for metadata before persistence, Mongoid will now
11
+ raise a `Mongoid::Errors::NoMetadata` error if the metadata is not
12
+ present.
13
+
14
+ * \#2147 `Model#becomes` now copies over the embedded documents.
15
+
16
+ * A new callback has been introduced: `upsert`, which runs when calling
17
+ `document.upsert` since Mongoid does not know if the document is to be
18
+ treated as new or persisted. With this come the model callbacks:
19
+
20
+ before_upsert
21
+ after_upsert
22
+ around_upsert
23
+
24
+ * \#2080/\#2087 The database or session that Mongoid persists to can now be
25
+ overridden on a global level for cases where `Model#with` is not a viable
26
+ option.
27
+
28
+ Mongoid.override_database(:secondary)
29
+ Mongoid.override_session(:secondary)
30
+
31
+ Band.create(name: "Placebo") #=> Persists to secondary.
32
+ band.albums.create #=> Persists to secondary.
33
+
34
+ Note that this option is global and overrides for all models on the current
35
+ thread. It is the developer's responsibility to remember to set this back
36
+ to nil if you no longer want the override to happen.
37
+
38
+ Mongoid.override_database(nil)
39
+ Mongoid.override_session(nil)
40
+
10
41
  * \#1989 Criteria `count`, `size` and `length` now behave as Active Record
11
42
  with regards to database access.
12
43
 
@@ -529,6 +560,13 @@ For instructions on upgrading to newer versions, visit
529
560
 
530
561
  ### Major Changes (Backwards Incompatible)
531
562
 
563
+ * Polymorphic relations can not have ids other than object ids. This is
564
+ because Mongoid cannot properly figure out in an optimized way what the
565
+ various classes on the other side of the relation store their ids as, as
566
+ they could potentially all be different.
567
+
568
+ This was not allowed before, but nowhere was it explicitly stated.
569
+
532
570
  * \#2039 Validating presence of a relation now checks both the relation and
533
571
  the foreign key value.
534
572
 
@@ -645,8 +683,8 @@ For instructions on upgrading to newer versions, visit
645
683
  * Custom application exceptions in various languages has been removed,
646
684
  along with the `Mongoid.add_language` feature.
647
685
 
648
- * Mongoid no longer supports 1.8 syntax. 1.9.x or other vms running in
649
- 1.9 mode is now only supported.
686
+ * Mongoid no longer supports 1.8. MRI 1.9.3 and higher, or JRuby 1.6 and
687
+ higher in 1.9 mode are only supported.
650
688
 
651
689
  * \#1734 When searching for documents via `Model.find` with multiple ids,
652
690
  Mongoid will raise an error if not *all* ids are found, and tell you
@@ -769,8 +807,58 @@ For instructions on upgrading to newer versions, visit
769
807
 
770
808
  Band.scoped(skip: 10, limit: 20)
771
809
 
810
+ * \#463 `Document#upsert` is no longer aliased to `Document#save` and now
811
+ actually performs a proper MongoDB upsert command when called. If you
812
+ were using this method before and want the same behaviour, please switch
813
+ to `save`.
814
+
815
+ band = Band.new(name: "Tool")
816
+ band.upsert #=> Inserts the document in the database.
817
+ band.name = "Placebo"
818
+ band.upsert #=> Updates the existing document.
819
+
772
820
  ### Resolved Issues
773
821
 
822
+ * \#2166 `Criteria#from_map_or_db` strips type selection when eager loading
823
+ since it will check if the type is correct after.
824
+
825
+ * \#2129 Fixed sorting for all fields on embeds many relations.
826
+
827
+ * \#2124 Fixed default scope and deleted scope on paranoid documents.
828
+
829
+ * \#2122 Allow embedded documents to sort on boolean fields.
830
+
831
+ * \#2119 Allow `Criteria#update_all` to accept atomic ops and normal sets.
832
+
833
+ * \#2118 Don't strip any precision during `DateTime` -> `Time` conversions.
834
+
835
+ * \#2117 Ensure embeds one relations have callbacks run when using nested
836
+ attributes.
837
+
838
+ * \#2110 `Model#touch` now works properly on embedded documents.
839
+
840
+ * \#2100 Allow atomic operations to properly execute on paranoid documents
841
+ that have a deleted_at set.
842
+
843
+ * \#2089 Allow proper separation of mongoization and evolving with respect to
844
+ foreign keys.
845
+
846
+ * \#2088 Allow finds by string ids to pull from the identity map if the ids
847
+ are stored as object ids.
848
+
849
+ * \#2085 Allow demongoization of floats and ints to big decimals.
850
+
851
+ * \#2084 Don't cascade if metadata does not exist.
852
+
853
+ * \#2078 Calling `Model#clone` or `Model#dup` now properly sets attributes
854
+ as dirty.
855
+
856
+ * \#2070 Allow for updated_at to be overridden manually for new documents that
857
+ also have a created_at.
858
+
859
+ * \#2041 Don't hit the database multiple times on relation access after an
860
+ eager load returned zero documents.
861
+
774
862
  * \#1997 Cascading callbacks should be able to halt the callback chain when
775
863
  terminating.
776
864
 
@@ -824,10 +912,25 @@ For instructions on upgrading to newer versions, visit
824
912
  * \#685 Attempting to use versioning with embedded documents will now
825
913
  raise a proper error alerting the developer this is not allowed.
826
914
 
827
- ## 2.4.11 (branch: 2.4.0-stable)
915
+ ## 2.4.12 (branch: 2.4.0-stable)
828
916
 
829
917
  ### Resolved Issues
830
918
 
919
+ * \#2144 Uniqueness validation on paranoid documents now properly scopes.
920
+
921
+ * \#2127 Don't unbind parents of embedded documents mid nested
922
+ attributes deletion.
923
+
924
+ ## 2.4.11
925
+
926
+ ### Resolved Issues
927
+
928
+ * This release forces a cap on the mongo driver version at 1.6.2 due to
929
+ changes in the `Mongo::Connection.from_uri` API not allowing valid
930
+ connection options anymore.
931
+
932
+ * \#2040 Fixed bad interpolation for locale presence validation.
933
+
831
934
  * \#2038 Allow inverse relations to be determined by foreign keys alone
832
935
  if defined on both sides, not just an inverse_of declaration.
833
936
 
@@ -837,6 +940,8 @@ For instructions on upgrading to newer versions, visit
837
940
  * \#2008 Presence validation should hit the db to check validity if the
838
941
  relation in memory is blank.
839
942
 
943
+ * \#2006 Allow excluding only the _id field post execution of an #only call.
944
+
840
945
  ## 2.4.10
841
946
 
842
947
  ### Resolved Issues
data/README.md CHANGED
@@ -12,7 +12,7 @@ Project Tracking
12
12
  Compatibility
13
13
  -------------
14
14
 
15
- Mongoid is tested against MRI 1.9.2, 1.9.3, 2.0.0, and JRuby (1.9).
15
+ Mongoid is tested against MRI 1.9.3, 2.0.0, and JRuby (1.9).
16
16
 
17
17
  Documentation
18
18
  -------------
data/Rakefile CHANGED
@@ -20,6 +20,7 @@ task :release => :build do
20
20
  system "git tag -a v#{Mongoid::VERSION} -m 'Tagging #{Mongoid::VERSION}'"
21
21
  system "git push --tags"
22
22
  system "gem push mongoid-#{Mongoid::VERSION}.gem"
23
+ system "rm mongoid-#{Mongoid::VERSION}.gem"
23
24
  end
24
25
 
25
26
  RSpec::Core::RakeTask.new("spec") do |spec|
@@ -67,7 +67,7 @@ en:
67
67
  document_with_attributes_not_found:
68
68
  message: "Document not found for class %{klass} with attributes %{attributes}."
69
69
  summary: "When calling %{klass}.find_by with a hash of attributes, all
70
- attributes provided must match a document in the database of this error
70
+ attributes provided must match a document in the database or this error
71
71
  will be raised."
72
72
  resolution: "Search for attributes that are in the database or set
73
73
  the Mongoid.raise_not_found_error configuration option to false,
@@ -303,6 +303,20 @@ en:
303
303
  \_\_merge: 'collection-name'\n
304
304
  \_\_replace: 'collection-name'\n
305
305
  \_\_reduce: 'collection-name'\n\n"
306
+ no_metadata:
307
+ message: "Metadata not found for document of type %{klass}."
308
+ summary: "Mongoid sets the metadata of a relation on the document
309
+ when it is either loaded from within the relation, or added to
310
+ one. The presence of the metadata is required in order to
311
+ provide various functionality around relations. Most likely you
312
+ are getting this error because the document is embedded and was
313
+ attempted to be persisted without being associated with a parent,
314
+ or the relation was not properly defined."
315
+ resolution: "Ensure that your relations on the %{klass} model
316
+ are all properly defined, and that the inverse relations
317
+ are also properly defined. Embedded relations must have both the
318
+ parent (embeds_one/embeds_many) and the inverse (embedded_in)
319
+ present in order to work properly."
306
320
  no_parent:
307
321
  message: "Cannot persist embedded document %{klass} without a
308
322
  parent document."
@@ -32,7 +32,6 @@ require "active_model"
32
32
 
33
33
  require "origin"
34
34
  require "moped"
35
- BSON = Moped::BSON
36
35
 
37
36
  require "mongoid/extensions"
38
37
  require "mongoid/errors"
@@ -46,6 +45,7 @@ require "mongoid/contextual"
46
45
  require "mongoid/copyable"
47
46
  require "mongoid/criteria"
48
47
  require "mongoid/dirty"
48
+ require "mongoid/evolvable"
49
49
  require "mongoid/factory"
50
50
  require "mongoid/fields"
51
51
  require "mongoid/finders"
@@ -53,7 +53,6 @@ require "mongoid/hierarchy"
53
53
  require "mongoid/identity_map"
54
54
  require "mongoid/indexes"
55
55
  require "mongoid/inspection"
56
- require "mongoid/javascript"
57
56
  require "mongoid/json"
58
57
  require "mongoid/loggable"
59
58
  require "mongoid/matchers"
@@ -113,10 +112,26 @@ module Mongoid
113
112
  block_given? ? yield(Config) : Config
114
113
  end
115
114
 
115
+ # Convenience method for getting the default session.
116
+ #
117
+ # @example Get the default session.
118
+ # Mongoid.default_session
119
+ #
120
+ # @return [ Moped::Session ] The default session.
121
+ #
122
+ # @since 3.0.0
116
123
  def default_session
117
124
  Sessions.default
118
125
  end
119
126
 
127
+ # Convenience method for getting a named session.
128
+ #
129
+ # @example Get a named session.
130
+ # Mongoid.session(:default)
131
+ #
132
+ # @return [ Moped::Session ] The named session.
133
+ #
134
+ # @since 3.0.0
120
135
  def session(name)
121
136
  Sessions.with_name(name)
122
137
  end
@@ -14,9 +14,9 @@ module Mongoid
14
14
  :atomic_array_pulls,
15
15
  :atomic_array_add_to_sets,
16
16
  :atomic_pulls,
17
- :atomic_unsets,
18
17
  :delayed_atomic_sets,
19
- :delayed_atomic_pulls
18
+ :delayed_atomic_pulls,
19
+ :delayed_atomic_unsets
20
20
  ]
21
21
 
22
22
  included do
@@ -36,7 +36,22 @@ module Mongoid
36
36
  # @since 2.2.0
37
37
  def add_atomic_pull(document)
38
38
  document.flagged_for_destroy = true
39
- (delayed_atomic_pulls[document.metadata.name.to_s] ||= []).push(document)
39
+ (delayed_atomic_pulls[document.metadata_name.to_s] ||= []).push(document)
40
+ end
41
+
42
+ # Add an atomic unset for the document.
43
+ #
44
+ # @example Add an atomic unset.
45
+ # document.add_atomic_unset(doc)
46
+ #
47
+ # @param [ Document ] document The child document.
48
+ #
49
+ # @return [ Array<Document> ] The children.
50
+ #
51
+ # @since 3.0.0
52
+ def add_atomic_unset(document)
53
+ document.flagged_for_destroy = true
54
+ (delayed_atomic_unsets[document.metadata_name.to_s] ||= []).push(document)
40
55
  end
41
56
 
42
57
  # For array fields these are the pushes that need to happen.
@@ -174,9 +189,7 @@ module Mongoid
174
189
  delayed_atomic_pulls.each_pair do |_, docs|
175
190
  path = nil
176
191
  ids = docs.map do |doc|
177
- path ||= doc.atomic_path
178
- doc.destroyed = true
179
- doc.flagged_for_destroy = false
192
+ path ||= doc.flag_as_destroyed
180
193
  doc.id
181
194
  end
182
195
  pulls[path] = { "_id" => { "$in" => ids }} and path = nil
@@ -228,7 +241,15 @@ module Mongoid
228
241
  #
229
242
  # @since 2.2.0
230
243
  def atomic_unsets
231
- @atomic_unsets ||= []
244
+ unsets = []
245
+ delayed_atomic_unsets.each_pair do |name, docs|
246
+ path = nil
247
+ docs.each do |doc|
248
+ path ||= doc.flag_as_destroyed
249
+ end
250
+ unsets.push(path || name)
251
+ end
252
+ unsets
232
253
  end
233
254
 
234
255
  # Get all the atomic sets that have had their saves delayed.
@@ -255,6 +276,32 @@ module Mongoid
255
276
  @delayed_atomic_pulls ||= {}
256
277
  end
257
278
 
279
+ # Get the delayed atomic unsets.
280
+ #
281
+ # @example Get the delayed atomic unsets.
282
+ # document.delayed_atomic_unsets
283
+ #
284
+ # @return [ Hash ] The atomic unsets
285
+ #
286
+ # @since 3.0.0
287
+ def delayed_atomic_unsets
288
+ @delayed_atomic_unsets ||= {}
289
+ end
290
+
291
+ # Flag the document as destroyed and return the atomic path.
292
+ #
293
+ # @example Flag destroyed and return path.
294
+ # document.flag_as_destroyed
295
+ #
296
+ # @return [ String ] The atomic path.
297
+ #
298
+ # @since 3.0.0
299
+ def flag_as_destroyed
300
+ self.destroyed = true
301
+ self.flagged_for_destroy = false
302
+ atomic_path
303
+ end
304
+
258
305
  private
259
306
 
260
307
  # Get the atomic paths utility for this document.
@@ -81,7 +81,7 @@ module Mongoid
81
81
  end
82
82
  _assigning do
83
83
  attribute_will_change!(access)
84
- atomic_unsets.push(atomic_attribute_name(access))
84
+ delayed_atomic_unsets[atomic_attribute_name(access)] = []
85
85
  attributes.delete(access)
86
86
  end
87
87
  end
@@ -20,7 +20,7 @@ module Mongoid
20
20
  # @since 2.0.0.rc.7
21
21
  def process_attributes(attrs = nil, role = :default, guard_protected_attributes = true)
22
22
  attrs ||= {}
23
- if attrs.any?
23
+ if !attrs.empty?
24
24
  attrs = sanitize_for_mass_assignment(attrs, role) if guard_protected_attributes
25
25
  attrs.each_pair do |key, value|
26
26
  next if pending_attribute?(key, value)
@@ -12,15 +12,18 @@ module Mongoid
12
12
  :after_initialize,
13
13
  :after_save,
14
14
  :after_update,
15
+ :after_upsert,
15
16
  :after_validation,
16
17
  :around_create,
17
18
  :around_destroy,
18
19
  :around_save,
19
20
  :around_update,
21
+ :around_upsert,
20
22
  :before_create,
21
23
  :before_destroy,
22
24
  :before_save,
23
25
  :before_update,
26
+ :before_upsert,
24
27
  :before_validation
25
28
  ]
26
29
 
@@ -30,7 +33,7 @@ module Mongoid
30
33
 
31
34
  define_model_callbacks :initialize, only: :after
32
35
  define_model_callbacks :build, only: :after
33
- define_model_callbacks :create, :destroy, :save, :update
36
+ define_model_callbacks :create, :destroy, :save, :update, :upsert
34
37
  end
35
38
 
36
39
  # Run only the after callbacks for the specific event.
@@ -112,7 +115,9 @@ module Mongoid
112
115
  next unless metadata.cascading_callbacks?
113
116
  without_autobuild do
114
117
  delayed_pulls = delayed_atomic_pulls[name]
118
+ delayed_unsets = delayed_atomic_unsets[name]
115
119
  children.merge(delayed_pulls) if delayed_pulls
120
+ children.merge(delayed_unsets) if delayed_unsets
116
121
  relation = send(name)
117
122
  Array.wrap(relation).each do |child|
118
123
  next if children.include?(child)
@@ -21,7 +21,7 @@ module Mongoid
21
21
  include Mongoid::Atomic
22
22
  include Mongoid::Dirty
23
23
  include Mongoid::Attributes
24
- include Mongoid::Copyable
24
+ include Mongoid::Evolvable
25
25
  include Mongoid::Fields
26
26
  include Mongoid::Hierarchy
27
27
  include Mongoid::Indexes
@@ -41,6 +41,7 @@ module Mongoid
41
41
  include Mongoid::Timestamps::Timeless
42
42
  include Mongoid::Validations
43
43
  include Mongoid::Callbacks
44
+ include Mongoid::Copyable
44
45
 
45
46
  MODULES = [
46
47
  Mongoid::Atomic,
@@ -25,6 +25,25 @@ module Mongoid
25
25
  option :use_activesupport_time_zone, default: true
26
26
  option :use_utc, default: false
27
27
 
28
+ # Connect to the provided database name on the default session.
29
+ #
30
+ # @note Use only in development or test environments for convenience.
31
+ #
32
+ # @example Set the database to connect to.
33
+ # config.connect_to("mongoid_test")
34
+ #
35
+ # @param [ String ] name The database name.
36
+ #
37
+ # @since 3.0.0
38
+ def connect_to(name)
39
+ self.sessions = {
40
+ default: {
41
+ database: name,
42
+ hosts: [ "localhost:27017" ]
43
+ }
44
+ }
45
+ end
46
+
28
47
  # Return field names that could cause destructive things to happen if
29
48
  # defined in a Mongoid::Document.
30
49
  #
@@ -52,23 +71,32 @@ module Mongoid
52
71
  settings
53
72
  end
54
73
 
55
- # Connect to the provided database name on the default session.
74
+ # Override the database to use globally.
56
75
  #
57
- # @note Use only in development or test environments for convenience.
76
+ # @example Override the database globally.
77
+ # config.override_database(:optional)
58
78
  #
59
- # @example Set the database to connect to.
60
- # config.connect_to("mongoid_test")
79
+ # @param [ String, Symbol ] name The name of the database.
61
80
  #
62
- # @param [ String ] name The database name.
81
+ # @return [ String, Symbol ] The global override.
63
82
  #
64
83
  # @since 3.0.0
65
- def connect_to(name)
66
- self.sessions = {
67
- default: {
68
- database: name,
69
- hosts: [ "localhost:27017" ]
70
- }
71
- }
84
+ def override_database(name)
85
+ Threaded.database_override = name
86
+ end
87
+
88
+ # Override the session to use globally.
89
+ #
90
+ # @example Override the session globally.
91
+ # config.override_session(:optional)
92
+ #
93
+ # @param [ String, Symbol ] name The name of the session.
94
+ #
95
+ # @return [ String, Symbol ] The global override.
96
+ #
97
+ # @since 3.0.0
98
+ def override_session(name)
99
+ Threaded.session_override = name ? name.to_s : nil
72
100
  end
73
101
 
74
102
  # Purge all data in all collections, including indexes.
@@ -80,11 +108,8 @@ module Mongoid
80
108
  #
81
109
  # @since 2.0.2
82
110
  def purge!
83
- session = Sessions.default
84
- collections = session["system.namespaces"].find(name: { "$not" => /system|\$/ }).to_a
85
- collections.each do |collection|
86
- _, name = collection["name"].split(".", 2)
87
- session[name].drop
111
+ Sessions.default.collections.each do |collection|
112
+ collection.drop
88
113
  end and true
89
114
  end
90
115