mongoid 3.0.23 → 3.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +253 -9
- data/LICENSE +1 -1
- data/README.md +4 -1
- data/lib/config/locales/en.yml +7 -6
- data/lib/mongoid.rb +18 -1
- data/lib/mongoid/atomic.rb +22 -20
- data/lib/mongoid/atomic/paths/embedded.rb +19 -5
- data/lib/mongoid/atomic/paths/root.rb +1 -1
- data/lib/mongoid/atomic/positionable.rb +73 -0
- data/lib/mongoid/attributes.rb +63 -1
- data/lib/mongoid/callbacks.rb +58 -4
- data/lib/mongoid/components.rb +8 -3
- data/lib/mongoid/config.rb +71 -23
- data/lib/mongoid/contextual.rb +2 -1
- data/lib/mongoid/contextual/aggregable/mongo.rb +27 -63
- data/lib/mongoid/contextual/atomic.rb +4 -3
- data/lib/mongoid/contextual/find_and_modify.rb +1 -1
- data/lib/mongoid/contextual/geo_near.rb +238 -0
- data/lib/mongoid/contextual/map_reduce.rb +12 -1
- data/lib/mongoid/contextual/memory.rb +36 -31
- data/lib/mongoid/contextual/mongo.rb +147 -91
- data/lib/mongoid/contextual/queryable.rb +25 -0
- data/lib/mongoid/copyable.rb +4 -1
- data/lib/mongoid/criteria.rb +23 -275
- data/lib/mongoid/criterion/findable.rb +179 -0
- data/lib/mongoid/criterion/modifiable.rb +191 -0
- data/lib/mongoid/criterion/scoping.rb +11 -6
- data/lib/mongoid/document.rb +7 -56
- data/lib/mongoid/equality.rb +66 -0
- data/lib/mongoid/errors/mongoid_error.rb +7 -3
- data/lib/mongoid/extensions/array.rb +13 -1
- data/lib/mongoid/extensions/date.rb +9 -2
- data/lib/mongoid/extensions/hash.rb +38 -2
- data/lib/mongoid/extensions/nil_class.rb +12 -0
- data/lib/mongoid/extensions/object.rb +24 -0
- data/lib/mongoid/extensions/string.rb +14 -2
- data/lib/mongoid/extensions/time.rb +4 -1
- data/lib/mongoid/fields.rb +49 -5
- data/lib/mongoid/fields/foreign_key.rb +12 -0
- data/lib/mongoid/fields/standard.rb +12 -0
- data/lib/mongoid/finders.rb +8 -0
- data/lib/mongoid/hierarchy.rb +19 -1
- data/lib/mongoid/indexes.rb +30 -4
- data/lib/mongoid/indexes/validators/options.rb +12 -2
- data/lib/mongoid/inspection.rb +2 -1
- data/lib/mongoid/matchers/strategies.rb +5 -5
- data/lib/mongoid/observer.rb +27 -36
- data/lib/mongoid/persistence.rb +42 -17
- data/lib/mongoid/persistence/atomic.rb +10 -5
- data/lib/mongoid/persistence/atomic/operation.rb +26 -9
- data/lib/mongoid/persistence/atomic/unset.rb +1 -1
- data/lib/mongoid/persistence/operations/embedded/insert.rb +5 -2
- data/lib/mongoid/persistence/operations/embedded/remove.rb +5 -2
- data/lib/mongoid/persistence/operations/update.rb +7 -3
- data/lib/mongoid/railties/database.rake +12 -19
- data/lib/mongoid/relations.rb +2 -0
- data/lib/mongoid/relations/accessors.rb +30 -8
- data/lib/mongoid/relations/binding.rb +5 -1
- data/lib/mongoid/relations/bindings/referenced/in.rb +1 -1
- data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +3 -3
- data/lib/mongoid/relations/counter_cache.rb +107 -0
- data/lib/mongoid/relations/embedded/batchable.rb +13 -4
- data/lib/mongoid/relations/embedded/many.rb +30 -1
- data/lib/mongoid/relations/macros.rb +2 -0
- data/lib/mongoid/relations/marshalable.rb +0 -1
- data/lib/mongoid/relations/metadata.rb +63 -11
- data/lib/mongoid/relations/options.rb +1 -0
- data/lib/mongoid/relations/proxy.rb +45 -2
- data/lib/mongoid/relations/referenced/in.rb +11 -2
- data/lib/mongoid/relations/referenced/many.rb +31 -3
- data/lib/mongoid/relations/referenced/many_to_many.rb +31 -3
- data/lib/mongoid/relations/referenced/one.rb +1 -1
- data/lib/mongoid/relations/targets/enumerable.rb +5 -1
- data/lib/mongoid/relations/touchable.rb +35 -6
- data/lib/mongoid/reloading.rb +5 -3
- data/lib/mongoid/scoping.rb +2 -2
- data/lib/mongoid/sessions.rb +57 -7
- data/lib/mongoid/sessions/factory.rb +22 -1
- data/lib/mongoid/threaded.rb +4 -30
- data/lib/mongoid/threaded/lifecycle.rb +12 -12
- data/lib/mongoid/timestamps.rb +1 -0
- data/lib/mongoid/timestamps/created.rb +2 -0
- data/lib/mongoid/timestamps/created/short.rb +19 -0
- data/lib/mongoid/timestamps/short.rb +10 -0
- data/lib/mongoid/timestamps/updated.rb +2 -0
- data/lib/mongoid/timestamps/updated/short.rb +19 -0
- data/lib/mongoid/validations.rb +2 -0
- data/lib/mongoid/validations/queryable.rb +2 -2
- data/lib/mongoid/validations/uniqueness.rb +1 -18
- data/lib/mongoid/version.rb +1 -1
- data/lib/rails/generators/mongoid/model/model_generator.rb +1 -0
- data/lib/rails/generators/mongoid/model/templates/model.rb.tt +3 -0
- data/lib/rails/mongoid.rb +53 -29
- data/lib/support/ruby_version.rb +26 -0
- metadata +18 -7
@@ -20,7 +20,7 @@ module Mongoid
|
|
20
20
|
#
|
21
21
|
# @since 2.1.0
|
22
22
|
def path
|
23
|
-
position.sub(/\.\d+$/, "")
|
23
|
+
@path ||= position.sub(/\.\d+$/, "")
|
24
24
|
end
|
25
25
|
|
26
26
|
# Get the selector to use for the root document when performing atomic
|
@@ -33,10 +33,24 @@ module Mongoid
|
|
33
33
|
#
|
34
34
|
# @since 2.1.0
|
35
35
|
def selector
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
36
|
+
@selector ||= generate_selector
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
def generate_selector
|
42
|
+
if only_root_selector?
|
43
|
+
parent.atomic_selector
|
44
|
+
else
|
45
|
+
parent.
|
46
|
+
atomic_selector.
|
47
|
+
merge("#{path}._id" => document._id).
|
48
|
+
merge(document.shard_key_selector)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def only_root_selector?
|
53
|
+
document.persisted? && document._id_changed?
|
40
54
|
end
|
41
55
|
end
|
42
56
|
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Mongoid
|
3
|
+
module Atomic
|
4
|
+
|
5
|
+
# This module is responsible for taking update selectors and switching out
|
6
|
+
# the indexes for the $ positional operator where appropriate.
|
7
|
+
#
|
8
|
+
# @since 3.1.0
|
9
|
+
module Positionable
|
10
|
+
|
11
|
+
# Takes the provided selector and atomic operations and replaces the
|
12
|
+
# indexes of the embedded documents with the positional operator when
|
13
|
+
# needed.
|
14
|
+
#
|
15
|
+
# @note The only time we can accurately know when to use the positional
|
16
|
+
# operator is at the exact time we are going to persist something. So
|
17
|
+
# we can tell by the selector that we are sending if it is actually
|
18
|
+
# possible to use the positional operator at all. For example, if the
|
19
|
+
# selector is: { "_id" => 1 }, then we could not use the positional
|
20
|
+
# operator for updating embedded documents since there would never be a
|
21
|
+
# match - we base whether we can based on the number of levels deep the
|
22
|
+
# selector goes, and if the id values are not nil.
|
23
|
+
#
|
24
|
+
# @example Process the operations.
|
25
|
+
# positionally(
|
26
|
+
# { "_id" => 1, "addresses._id" => 2 },
|
27
|
+
# { "$set" => { "addresses.0.street" => "hobrecht" }}
|
28
|
+
# )
|
29
|
+
#
|
30
|
+
# @param [ Hash ] selector The selector.
|
31
|
+
# @param [ Hash ] operations The update operations.
|
32
|
+
# @param [ Hash ] processed The processed update operations.
|
33
|
+
#
|
34
|
+
# @return [ Hash ] The new operations.
|
35
|
+
#
|
36
|
+
# @since 3.1.0
|
37
|
+
def positionally(selector, operations, processed = {})
|
38
|
+
if selector.size == 1 || selector.values.any? { |val| val.nil? }
|
39
|
+
return operations
|
40
|
+
end
|
41
|
+
keys = selector.keys.map{ |m| m.sub('._id','') } - ['_id']
|
42
|
+
keys = keys.sort_by { |s| s.length*-1 }
|
43
|
+
process_operations(keys, operations, processed)
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
def process_operations(keys, operations, processed)
|
49
|
+
operations.each_pair do |operation, update|
|
50
|
+
processed[operation] = process_updates(keys, update)
|
51
|
+
end
|
52
|
+
processed
|
53
|
+
end
|
54
|
+
|
55
|
+
def process_updates(keys, update, updates = {})
|
56
|
+
update.each_pair do |position, value|
|
57
|
+
updates[replace_index(keys, position)] = value
|
58
|
+
end
|
59
|
+
updates
|
60
|
+
end
|
61
|
+
|
62
|
+
def replace_index(keys, position)
|
63
|
+
# replace to $ only if that key is on the selector
|
64
|
+
keys.each do |kk|
|
65
|
+
if position =~ /^#{kk}\.\d+\.(.*)/
|
66
|
+
return "#{kk}.$.#{$1}"
|
67
|
+
end
|
68
|
+
end
|
69
|
+
position
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
data/lib/mongoid/attributes.rb
CHANGED
@@ -12,6 +12,7 @@ module Mongoid
|
|
12
12
|
include Readonly
|
13
13
|
|
14
14
|
attr_reader :attributes
|
15
|
+
attr_reader :attributes_before_type_cast
|
15
16
|
alias :raw_attributes :attributes
|
16
17
|
|
17
18
|
# Determine if an attribute is present.
|
@@ -43,6 +44,22 @@ module Mongoid
|
|
43
44
|
attributes.has_key?(name.to_s)
|
44
45
|
end
|
45
46
|
|
47
|
+
# Does the document have the provided attribute before it was assigned
|
48
|
+
# and type cast?
|
49
|
+
#
|
50
|
+
# @example Does the document have the attribute before it was assigned?
|
51
|
+
# model.has_attribute_before_type_cast?(:name)
|
52
|
+
#
|
53
|
+
# @param [ String, Symbol ] name The name of the attribute.
|
54
|
+
#
|
55
|
+
# @return [ true, false ] If the key is present in the
|
56
|
+
# attributes_before_type_cast.
|
57
|
+
#
|
58
|
+
# @since 3.1.0
|
59
|
+
def has_attribute_before_type_cast?(name)
|
60
|
+
attributes_before_type_cast.has_key?(name.to_s)
|
61
|
+
end
|
62
|
+
|
46
63
|
# Read a value from the document attributes. If the value does not exist
|
47
64
|
# it will return nil.
|
48
65
|
#
|
@@ -67,6 +84,28 @@ module Mongoid
|
|
67
84
|
end
|
68
85
|
alias :[] :read_attribute
|
69
86
|
|
87
|
+
# Read a value from the attributes before type cast. If the value has not
|
88
|
+
# yet been assigned then this will return the attribute's existing value
|
89
|
+
# using read_attribute.
|
90
|
+
#
|
91
|
+
# @example Read an attribute before type cast.
|
92
|
+
# person.read_attribute_before_type_cast(:price)
|
93
|
+
#
|
94
|
+
# @param [ String, Symbol ] name The name of the attribute to get.
|
95
|
+
#
|
96
|
+
# @return [ Object ] The value of the attribute before type cast, if
|
97
|
+
# available. Otherwise, the value of the attribute.
|
98
|
+
#
|
99
|
+
# @since 3.1.0
|
100
|
+
def read_attribute_before_type_cast(name)
|
101
|
+
attr = name.to_s
|
102
|
+
if attributes_before_type_cast.has_key?(attr)
|
103
|
+
attributes_before_type_cast[attr]
|
104
|
+
else
|
105
|
+
read_attribute(attr)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
70
109
|
# Remove a value from the +Document+ attributes. If the value does not exist
|
71
110
|
# it will fail gracefully.
|
72
111
|
#
|
@@ -129,6 +168,7 @@ module Mongoid
|
|
129
168
|
if attribute_writable?(access)
|
130
169
|
_assigning do
|
131
170
|
localized = fields[access].try(:localized?)
|
171
|
+
attributes_before_type_cast[name.to_s] = value
|
132
172
|
typed_value = typed_value_for(access, value)
|
133
173
|
unless attributes[access] == typed_value || attribute_changed?(access)
|
134
174
|
attribute_will_change!(access)
|
@@ -206,6 +246,24 @@ module Mongoid
|
|
206
246
|
READER
|
207
247
|
end
|
208
248
|
|
249
|
+
# Define a reader method for a dynamic attribute before type cast.
|
250
|
+
#
|
251
|
+
# @api private
|
252
|
+
#
|
253
|
+
# @example Define a reader method for an attribute.
|
254
|
+
# model.define_dynamic_before_type_cast_reader(:field)
|
255
|
+
#
|
256
|
+
# @param [ String ] name The name of the field.
|
257
|
+
#
|
258
|
+
# @since 3.1.0
|
259
|
+
def define_dynamic_before_type_cast_reader(name)
|
260
|
+
class_eval <<-READER
|
261
|
+
def #{name}_before_type_cast
|
262
|
+
read_attribute_before_type_cast(#{name.inspect})
|
263
|
+
end
|
264
|
+
READER
|
265
|
+
end
|
266
|
+
|
209
267
|
# Define a writer method for a dynamic attribute.
|
210
268
|
#
|
211
269
|
# @api private
|
@@ -251,6 +309,9 @@ module Mongoid
|
|
251
309
|
getter = attr.reader
|
252
310
|
define_dynamic_writer(getter)
|
253
311
|
write_attribute(getter, args.first)
|
312
|
+
elsif attr.before_type_cast?
|
313
|
+
define_dynamic_before_type_cast_reader(attr.reader)
|
314
|
+
read_attribute_before_type_cast(attr.reader)
|
254
315
|
else
|
255
316
|
getter = attr.reader
|
256
317
|
define_dynamic_reader(getter)
|
@@ -270,7 +331,7 @@ module Mongoid
|
|
270
331
|
#
|
271
332
|
# @since 1.0.0
|
272
333
|
def typed_value_for(key, value)
|
273
|
-
fields.has_key?(key) ? fields[key].mongoize(value) : value
|
334
|
+
fields.has_key?(key) ? fields[key].mongoize(value) : value
|
274
335
|
end
|
275
336
|
|
276
337
|
module ClassMethods
|
@@ -300,6 +361,7 @@ module Mongoid
|
|
300
361
|
alias reset_#{name}! reset_#{original}!
|
301
362
|
alias #{name}_was #{original}_was
|
302
363
|
alias #{name}_will_change! #{original}_will_change!
|
364
|
+
alias #{name}_before_type_cast #{original}_before_type_cast
|
303
365
|
RUBY
|
304
366
|
end
|
305
367
|
end
|
data/lib/mongoid/callbacks.rb
CHANGED
@@ -9,8 +9,10 @@ module Mongoid
|
|
9
9
|
:after_build,
|
10
10
|
:after_create,
|
11
11
|
:after_destroy,
|
12
|
+
:after_find,
|
12
13
|
:after_initialize,
|
13
14
|
:after_save,
|
15
|
+
:after_touch,
|
14
16
|
:after_update,
|
15
17
|
:after_upsert,
|
16
18
|
:after_validation,
|
@@ -25,14 +27,13 @@ module Mongoid
|
|
25
27
|
:before_update,
|
26
28
|
:before_upsert,
|
27
29
|
:before_validation
|
28
|
-
]
|
30
|
+
].freeze
|
29
31
|
|
30
32
|
included do
|
31
33
|
extend ActiveModel::Callbacks
|
32
34
|
include ActiveModel::Validations::Callbacks
|
33
35
|
|
34
|
-
define_model_callbacks :initialize, only: :after
|
35
|
-
define_model_callbacks :build, only: :after
|
36
|
+
define_model_callbacks :build, :find, :initialize, :touch, only: :after
|
36
37
|
define_model_callbacks :create, :destroy, :save, :update, :upsert
|
37
38
|
|
38
39
|
attr_accessor :before_callback_halted
|
@@ -187,7 +188,9 @@ module Mongoid
|
|
187
188
|
#
|
188
189
|
# @since 2.3.0
|
189
190
|
def cascadable_child?(kind, child)
|
190
|
-
|
191
|
+
if kind == :initialize || kind == :find
|
192
|
+
return false
|
193
|
+
end
|
191
194
|
child.callback_executable?(kind) ? child.in_callback_state?(kind) : false
|
192
195
|
end
|
193
196
|
|
@@ -256,5 +259,56 @@ module Mongoid
|
|
256
259
|
end
|
257
260
|
send(name)
|
258
261
|
end
|
262
|
+
|
263
|
+
class << self
|
264
|
+
|
265
|
+
# Get all callbacks that can be observed.
|
266
|
+
#
|
267
|
+
# @example Get the observables.
|
268
|
+
# Callbacks.observables
|
269
|
+
#
|
270
|
+
# @return [ Array<Symbol> ] The names of the observables.
|
271
|
+
#
|
272
|
+
# @since 3.1.0
|
273
|
+
def observables
|
274
|
+
CALLBACKS + registered_observables
|
275
|
+
end
|
276
|
+
|
277
|
+
# Get all registered callbacks that can be observed, not included in
|
278
|
+
# Mongoid's defaults.
|
279
|
+
#
|
280
|
+
# @example Get the observables.
|
281
|
+
# Callbacks.registered_observables
|
282
|
+
#
|
283
|
+
# @return [ Array<Symbol> ] The names of the registered observables.
|
284
|
+
#
|
285
|
+
# @since 3.1.0
|
286
|
+
def registered_observables
|
287
|
+
@registered_observables ||= []
|
288
|
+
end
|
289
|
+
end
|
290
|
+
|
291
|
+
module ClassMethods
|
292
|
+
|
293
|
+
# Set a custom callback as able to be observed.
|
294
|
+
#
|
295
|
+
# @example Set a custom callback as observable.
|
296
|
+
# class Band
|
297
|
+
# include Mongoid::Document
|
298
|
+
#
|
299
|
+
# define_model_callbacks :notification
|
300
|
+
# observable :notification
|
301
|
+
# end
|
302
|
+
#
|
303
|
+
# @param [ Array<Symbol> ] args The names of the observable callbacks.
|
304
|
+
#
|
305
|
+
# @since 3.0.1
|
306
|
+
def observable(*args)
|
307
|
+
observables = args.flat_map do |name|
|
308
|
+
[ :"before_#{name}", :"after_#{name}", :"around_#{name}" ]
|
309
|
+
end
|
310
|
+
Callbacks.registered_observables.concat(observables).uniq
|
311
|
+
end
|
312
|
+
end
|
259
313
|
end
|
260
314
|
end
|
data/lib/mongoid/components.rb
CHANGED
@@ -42,29 +42,34 @@ module Mongoid
|
|
42
42
|
include Mongoid::Validations
|
43
43
|
include Mongoid::Callbacks
|
44
44
|
include Mongoid::Copyable
|
45
|
+
include Mongoid::Equality
|
45
46
|
|
46
47
|
MODULES = [
|
47
48
|
Mongoid::Atomic,
|
48
49
|
Mongoid::Attributes,
|
50
|
+
Mongoid::Callbacks,
|
49
51
|
Mongoid::Copyable,
|
50
52
|
Mongoid::Dirty,
|
53
|
+
Mongoid::Evolvable,
|
51
54
|
Mongoid::Fields,
|
52
55
|
Mongoid::Hierarchy,
|
53
56
|
Mongoid::Indexes,
|
54
57
|
Mongoid::Inspection,
|
55
58
|
Mongoid::JSON,
|
56
|
-
Mongoid::Loggable,
|
57
59
|
Mongoid::Matchers,
|
58
60
|
Mongoid::NestedAttributes,
|
59
61
|
Mongoid::Persistence,
|
60
62
|
Mongoid::Relations,
|
61
|
-
Mongoid::
|
63
|
+
Mongoid::Reloading,
|
62
64
|
Mongoid::Scoping,
|
63
65
|
Mongoid::Serialization,
|
66
|
+
Mongoid::Sessions,
|
64
67
|
Mongoid::Sharding,
|
65
68
|
Mongoid::State,
|
69
|
+
Mongoid::Threaded::Lifecycle,
|
70
|
+
Mongoid::Timestamps::Timeless,
|
66
71
|
Mongoid::Validations,
|
67
|
-
Mongoid::
|
72
|
+
Mongoid::Equality
|
68
73
|
]
|
69
74
|
|
70
75
|
class << self
|
data/lib/mongoid/config.rb
CHANGED
@@ -13,6 +13,11 @@ module Mongoid
|
|
13
13
|
extend Options
|
14
14
|
include ActiveModel::Observing
|
15
15
|
|
16
|
+
delegate :logger=, to: ::Mongoid
|
17
|
+
delegate :logger, to: ::Mongoid
|
18
|
+
|
19
|
+
LOCK = Mutex.new
|
20
|
+
|
16
21
|
option :allow_dynamic_fields, default: true
|
17
22
|
option :identity_map_enabled, default: false
|
18
23
|
option :include_root_in_json, default: false
|
@@ -86,6 +91,47 @@ module Mongoid
|
|
86
91
|
settings
|
87
92
|
end
|
88
93
|
|
94
|
+
# Get all the models in the application - this is everything that includes
|
95
|
+
# Mongoid::Document.
|
96
|
+
#
|
97
|
+
# @example Get all the models.
|
98
|
+
# config.models
|
99
|
+
#
|
100
|
+
# @return [ Array<Class> ] All the models in the application.
|
101
|
+
#
|
102
|
+
# @since 3.1.0
|
103
|
+
def models
|
104
|
+
@models ||= []
|
105
|
+
end
|
106
|
+
|
107
|
+
# Register a model in the application with Mongoid.
|
108
|
+
#
|
109
|
+
# @example Register a model.
|
110
|
+
# config.register_model(Band)
|
111
|
+
#
|
112
|
+
# @param [ Class ] klass The model to register.
|
113
|
+
#
|
114
|
+
# @since 3.1.0
|
115
|
+
def register_model(klass)
|
116
|
+
LOCK.synchronize do
|
117
|
+
models.push(klass) unless models.include?(klass)
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
# From a hash of settings, load all the configuration.
|
122
|
+
#
|
123
|
+
# @example Load the configuration.
|
124
|
+
# config.load_configuration(settings)
|
125
|
+
#
|
126
|
+
# @param [ Hash ] settings The configuration settings.
|
127
|
+
#
|
128
|
+
# @since 3.1.0
|
129
|
+
def load_configuration(settings)
|
130
|
+
configuration = settings.with_indifferent_access
|
131
|
+
self.options = configuration[:options]
|
132
|
+
self.sessions = configuration[:sessions]
|
133
|
+
end
|
134
|
+
|
89
135
|
# Override the database to use globally.
|
90
136
|
#
|
91
137
|
# @example Override the database globally.
|
@@ -119,6 +165,8 @@ module Mongoid
|
|
119
165
|
# @example Purge all data.
|
120
166
|
# Mongoid::Config.purge!
|
121
167
|
#
|
168
|
+
# @note This is the fastest way to drop all data.
|
169
|
+
#
|
122
170
|
# @return [ true ] true.
|
123
171
|
#
|
124
172
|
# @since 2.0.2
|
@@ -128,6 +176,22 @@ module Mongoid
|
|
128
176
|
end and true
|
129
177
|
end
|
130
178
|
|
179
|
+
# Truncate all data in all collections, but not the indexes.
|
180
|
+
#
|
181
|
+
# @example Truncate all collection data.
|
182
|
+
# Mongoid::Config.truncate!
|
183
|
+
#
|
184
|
+
# @note This will be slower than purge!
|
185
|
+
#
|
186
|
+
# @return [ true ] true.
|
187
|
+
#
|
188
|
+
# @since 2.0.2
|
189
|
+
def truncate!
|
190
|
+
Sessions.default.collections.each do |collection|
|
191
|
+
collection.find.remove_all
|
192
|
+
end and true
|
193
|
+
end
|
194
|
+
|
131
195
|
# Set the configuration options. Will validate each one individually.
|
132
196
|
#
|
133
197
|
# @example Set the options.
|
@@ -145,18 +209,6 @@ module Mongoid
|
|
145
209
|
end
|
146
210
|
end
|
147
211
|
|
148
|
-
# Is the application running under passenger?
|
149
|
-
#
|
150
|
-
# @example Is the application using passenger?
|
151
|
-
# config.running_with_passenger?
|
152
|
-
#
|
153
|
-
# @return [ true, false ] If the app is deployed on Passenger.
|
154
|
-
#
|
155
|
-
# @since 3.0.11
|
156
|
-
def running_with_passenger?
|
157
|
-
@running_with_passenger ||= defined?(PhusionPassenger)
|
158
|
-
end
|
159
|
-
|
160
212
|
# Get the session configuration or an empty hash.
|
161
213
|
#
|
162
214
|
# @example Get the sessions configuration.
|
@@ -197,20 +249,16 @@ module Mongoid
|
|
197
249
|
use_utc? ? "UTC" : ::Time.zone
|
198
250
|
end
|
199
251
|
|
200
|
-
|
201
|
-
|
202
|
-
# From a hash of settings, load all the configuration.
|
252
|
+
# Is the application running under passenger?
|
203
253
|
#
|
204
|
-
# @example
|
205
|
-
# config.
|
254
|
+
# @example Is the application using passenger?
|
255
|
+
# config.running_with_passenger?
|
206
256
|
#
|
207
|
-
# @
|
257
|
+
# @return [ true, false ] If the app is deployed on Passenger.
|
208
258
|
#
|
209
|
-
# @since 3.0.
|
210
|
-
def
|
211
|
-
|
212
|
-
self.options = configuration[:options]
|
213
|
-
self.sessions = configuration[:sessions]
|
259
|
+
# @since 3.0.11
|
260
|
+
def running_with_passenger?
|
261
|
+
@running_with_passenger ||= defined?(PhusionPassenger)
|
214
262
|
end
|
215
263
|
end
|
216
264
|
end
|