mongoid 3.0.23 → 3.1.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.
- 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
data/CHANGELOG.md
CHANGED
@@ -3,23 +3,267 @@
|
|
3
3
|
For instructions on upgrading to newer versions, visit
|
4
4
|
[mongoid.org](http://mongoid.org/en/mongoid/docs/upgrading.html).
|
5
5
|
|
6
|
-
## 3.0
|
6
|
+
## 3.1.0 (branch: master)
|
7
7
|
|
8
|
-
###
|
8
|
+
### New Features
|
9
|
+
|
10
|
+
* The minimum MongoDB requirement is now raised to 2.2, since we now
|
11
|
+
depend on the aggregation framework.
|
12
|
+
|
13
|
+
* The minimum Active Model and Active Support dependencies have been
|
14
|
+
raised to 3.2.
|
15
|
+
|
16
|
+
* \#2809 Relations can now specify a primary key to use instead of the
|
17
|
+
id on foreign keys.
|
18
|
+
|
19
|
+
class Person
|
20
|
+
include Mongoid::Document
|
21
|
+
field :username, type: String
|
22
|
+
has_many :cats, primary_key: "username"
|
23
|
+
end
|
24
|
+
|
25
|
+
class Cat
|
26
|
+
include Mongoid::Document
|
27
|
+
belongs_to :person, primary_key: "username"
|
28
|
+
end
|
29
|
+
|
30
|
+
* \#2804 $geoNear support has now been added to criteria.
|
31
|
+
|
32
|
+
Bar.where(:likes.gt => 1000).geo_near([ 52, 13 ])
|
33
|
+
Bar.geo_near([ 52, 13 ]).max_distance(0.5).spherical
|
34
|
+
|
35
|
+
* \#2799 Criteria#map can now accept a symbol of a field name as well as
|
36
|
+
a block to perform a more optimized `map`. (Gosha Arinich)
|
37
|
+
|
38
|
+
Band.where(:likes.gt => 1000).map(:name)
|
39
|
+
|
40
|
+
* \#2798 Aggregations (`sum`, `min`, `max`, `avg`) now use the
|
41
|
+
aggregation framework instead of map/reduce. (Gosha Arinich)
|
42
|
+
|
43
|
+
* \#2776 MongoDB 2.4.x new index types are now supported: "2dsphere",
|
44
|
+
"text", and "hashed". (Irakli Janiashvili)
|
45
|
+
|
46
|
+
* \#2767 $maxScan support from Origin is now supported. (Jonathan Hyman)
|
47
|
+
|
48
|
+
* \#2701 Cleanup up extra excessive database queries with 1-1 relations.
|
49
|
+
|
50
|
+
* \#2693 Custom collection names can be passed to the model generator.
|
51
|
+
(Subhash Bhushan)
|
52
|
+
|
53
|
+
rails g model band --collection=artists
|
54
|
+
|
55
|
+
* \#2688 `Model.create` and `Model.create!` now can take an array of
|
56
|
+
attributes hashes to create multiple documents at once. If an array
|
57
|
+
of attributes is provided then an array of documents is returned.
|
58
|
+
|
59
|
+
Band.create([{ name: "Tool" }, { name: "Placebo" }])
|
60
|
+
Band.create!([{ name: "Tool" }, { name: "Placebo" }])
|
61
|
+
|
62
|
+
* \#2670 Unsetting fields now accepts multiple fields instead of only 1.
|
63
|
+
(Arthur Neves)
|
64
|
+
|
65
|
+
band.unset(:name, :founded)
|
66
|
+
Band.where(name: "Placebo").unset(:members, :origin)
|
67
|
+
|
68
|
+
* \#2669 Passing a block to `Criteria#new` now properly sends the
|
69
|
+
block through to the model's contructor. (Arthur Neves)
|
70
|
+
|
71
|
+
* \#2667 `exists?` no longer hits the database in cases where we have
|
72
|
+
the necessary information in memory.
|
73
|
+
|
74
|
+
* \#2665 Mongoid now supports a counter cache for `belongs_to`
|
75
|
+
relations. (Arthur Neves)
|
76
|
+
|
77
|
+
class Band
|
78
|
+
include Mongoid::Document
|
79
|
+
belongs_to :label, counter_cache: "b_count"
|
80
|
+
end
|
81
|
+
|
82
|
+
class Album
|
83
|
+
include Mongoid::Document
|
84
|
+
belongs_to :band, counter_cache: true
|
85
|
+
end
|
86
|
+
|
87
|
+
* \#2662 Embedded documents that have `belongs_to` relations may now
|
88
|
+
eager load them.
|
89
|
+
|
90
|
+
* \#2657 Logger getter and setter convenience methods have been
|
91
|
+
added to the `Config` module. (Arthur Neves)
|
92
|
+
|
93
|
+
* \#2615 Index options can now take a specific database name if the
|
94
|
+
indexes are only to exist in a database other than the default.
|
95
|
+
|
96
|
+
class Band
|
97
|
+
include Mongoid::Document
|
98
|
+
index name: 1, { database: "another_db" }
|
99
|
+
end
|
100
|
+
|
101
|
+
* \#2613 Procs can now be provided as values to `store_in`:
|
102
|
+
|
103
|
+
class Band
|
104
|
+
include Mongoid::Document
|
105
|
+
store_in database: ->{ Thread.current[:database] }
|
106
|
+
end
|
107
|
+
|
108
|
+
* \#2609 Pass through batch_size option to query. (Martin Mauch)
|
109
|
+
|
110
|
+
* \#2555 Passing hashes to `find` when the documents id is of type hash
|
111
|
+
now properly works. (Szymon Kurcab)
|
112
|
+
|
113
|
+
* \#2545 The `$` positional operator is used for update selectors on
|
114
|
+
embedded documents that are nested 1 level deep, when appropriate.
|
115
|
+
|
116
|
+
* \#2539 `Mongoid.models` now tracks all models in the application for more
|
117
|
+
accurate determination of models for things such as indexing rake tasks.
|
118
|
+
(Ara Howard)
|
119
|
+
|
120
|
+
* \#2525 Added the ability to have short timestamped fields with aliases. This
|
121
|
+
sets timestamp fields as `c_at` and `u_at` that are also aliased as
|
122
|
+
`created_at` and `updated_at` for convenience. (Rodrigo Saito)
|
123
|
+
|
124
|
+
class Band
|
125
|
+
include Mongoid::Document
|
126
|
+
include Mongoid::Timestamps::Short # For c_at and u_at.
|
127
|
+
end
|
9
128
|
|
10
|
-
|
129
|
+
class Band
|
130
|
+
include Mongoid::Document
|
131
|
+
include Mongoid::Timestamps::Created::Short # For c_at only.
|
132
|
+
end
|
133
|
+
|
134
|
+
class Band
|
135
|
+
include Mongoid::Document
|
136
|
+
include Mongoid::Timestamps::Updated::Short # For u_at only.
|
137
|
+
end
|
138
|
+
|
139
|
+
* \#2465 Documents now have an `attribute_before_type_cast` for proper
|
140
|
+
handling of validations. (Gerad Suyderhoud)
|
141
|
+
|
142
|
+
* \#2443 `expire_after_seconds` is now a valid index option.
|
143
|
+
|
144
|
+
class Event
|
145
|
+
include Mongoid::Document
|
146
|
+
field :status, type: Integer
|
147
|
+
index({ status: 1 }, { expire_after_seconds: 3600 })
|
148
|
+
end
|
149
|
+
|
150
|
+
* \#2373 Relations with the `touch: true` option will now be automatically
|
151
|
+
touched when the child document is created or destroyed.
|
152
|
+
|
153
|
+
* Added `Document.first_or_create!` and `Criteria#first_or_create!`. This
|
154
|
+
raises a validations error if creation fails validation.
|
155
|
+
|
156
|
+
Band.where(name: "Depeche Mode").first_or_create!
|
157
|
+
Band.where(name: "Tool").first_or_create!(active: true)
|
11
158
|
|
12
|
-
*
|
13
|
-
|
159
|
+
* Added `Document.first_or_initialize` and `Criteria#first_or_initialize`.
|
160
|
+
This is the same as `first_or_create` but initializes a new (unpersisted)
|
161
|
+
document if none is found.
|
162
|
+
|
163
|
+
Band.where(name: "Depeche Mode").first_or_initialize
|
164
|
+
Band.where(name: "Tool").first_or_initialize(active: true)
|
165
|
+
|
166
|
+
* Added `Model.pluck` and `Criteria#pluck` similar to Active Record's, which
|
167
|
+
returns an array of values for the provided field. (Jason Lee)
|
168
|
+
|
169
|
+
Band.where(name: "Depeche Mode").pluck(:_id)
|
170
|
+
Band.where(name: "Tool").pluck(:likes)
|
171
|
+
|
172
|
+
* \#2324 Embeds many relations now properly handle `delete_if`.
|
173
|
+
|
174
|
+
* \#2317 Added `Document.first_or_create` and `Criteria#first_or_create`.
|
175
|
+
This will return the first matching document or create one with additional
|
176
|
+
attributes if one does not exist. (incorvia)
|
177
|
+
|
178
|
+
Band.where(name: "Depeche Mode").first_or_create
|
179
|
+
Band.where(name: "Tool").first_or_create(active: true)
|
180
|
+
|
181
|
+
* \#2292 Added `Model.each_with_index`.
|
182
|
+
|
183
|
+
* \#2285 `Config.load_configuration` is now public for those who want to instantiate
|
184
|
+
settings directly from a hash.
|
185
|
+
|
186
|
+
* \#2275 Added rake task `db:mongoid:purge` that will drop all collections with
|
187
|
+
the exception of the system collections in the default database.
|
188
|
+
|
189
|
+
* \#2257 `after_find` callbacks have been added for when documents are returned
|
190
|
+
from the database.
|
191
|
+
|
192
|
+
class Band
|
193
|
+
include Mongoid::Document
|
194
|
+
|
195
|
+
after_find do |doc|
|
196
|
+
# Some logic here.
|
197
|
+
end
|
198
|
+
end
|
199
|
+
|
200
|
+
* \#2223 Allow to find documents by javascript with parameters that are
|
201
|
+
protected from javascript injection via `Model.for_js`.
|
202
|
+
|
203
|
+
Band.for_js("this.name = param", param: "Tool")
|
204
|
+
Band.where(:likes.gt => 1000).for_js("this.likes < this.follows")
|
205
|
+
|
206
|
+
* \#2197 When providing session configuration with no ports, Mongoid will now
|
207
|
+
default these to 27017.
|
208
|
+
|
209
|
+
* \#2180 1-n and n-n relations now support before/after add/remove callbacks.
|
210
|
+
(Rodrigo Saito)
|
211
|
+
|
212
|
+
class Band
|
213
|
+
include Mongoid::Document
|
214
|
+
|
215
|
+
embeds_many :albums, after_add: :notify_labels
|
216
|
+
has_many :followers, before_remove: ->(band, follower){ notify_unfollow(follower) }
|
217
|
+
end
|
218
|
+
|
219
|
+
* \#2157 `Criteria#update` and `Criteria#update_all` now serialize values
|
220
|
+
according to their field type, if a field is defined.
|
221
|
+
|
222
|
+
* \#2022 Custom callbacks can now register themselves for use with observers
|
223
|
+
by using the `observable` macro.
|
224
|
+
|
225
|
+
class Band
|
226
|
+
include Mongoid::Document
|
227
|
+
|
228
|
+
define_model_callbacks :notification
|
229
|
+
observable :notification
|
230
|
+
end
|
231
|
+
|
232
|
+
class BandObserver < Mongoid::Observer
|
233
|
+
|
234
|
+
def before_notification(band)
|
235
|
+
#...
|
236
|
+
end
|
237
|
+
|
238
|
+
def after_notification(band)
|
239
|
+
#...
|
240
|
+
end
|
241
|
+
end
|
242
|
+
|
243
|
+
* \#1766 Many to many relations will not touch the database if the foreign key
|
244
|
+
is an empty array.
|
245
|
+
|
246
|
+
* \#1564 Many to many foreign keys now have the default set lazily only if the
|
247
|
+
relation has been accessed. This avoids storing empty arrays if the relation
|
248
|
+
has not been touched.
|
249
|
+
|
250
|
+
### Resolved Issues
|
251
|
+
|
252
|
+
* \#2730 Calling sort on a context properly updates the context's criteria.
|
14
253
|
(Arthur Neves)
|
15
254
|
|
16
|
-
* \#
|
255
|
+
* \#2719 `distinct` is now available at the class level.
|
256
|
+
|
257
|
+
Band.distinct(:name)
|
17
258
|
|
18
|
-
* \#
|
259
|
+
* \#2714 Overriding sessions when the new session has a different database will
|
260
|
+
now properly switch the database at runtime as well.
|
19
261
|
|
20
|
-
* \#
|
262
|
+
* \#2697 Eager loading fixed when including multiple models that inherit from
|
263
|
+
the same class. (Kirill Lazarev)
|
21
264
|
|
22
|
-
* \#
|
265
|
+
* \#2664 In memory sorting of embedded documents now properly works when
|
266
|
+
multiple fields are provided. (Neer Friedman)
|
23
267
|
|
24
268
|
## 3.0.22
|
25
269
|
|
data/LICENSE
CHANGED
data/README.md
CHANGED
@@ -8,6 +8,7 @@ Project Tracking
|
|
8
8
|
|
9
9
|
* [Mongoid Google Group](http://groups.google.com/group/mongoid)
|
10
10
|
* [Mongoid Website and Documentation](http://mongoid.org)
|
11
|
+
* [Mongoid Code Climate](https://codeclimate.com/github/mongoid/mongoid)
|
11
12
|
|
12
13
|
Compatibility
|
13
14
|
-------------
|
@@ -23,6 +24,8 @@ Please see the new Mongoid website for up-to-date documentation:
|
|
23
24
|
Donating
|
24
25
|
--------
|
25
26
|
|
27
|
+
[Support Mongoid at Wepay](https://www.wepay.com/donations/mongoid)
|
28
|
+
|
26
29
|
[Support Mongoid at Pledgie](http://www.pledgie.com/campaigns/7757)
|
27
30
|
|
28
31
|
<a href='http://www.pledgie.com/campaigns/7757'>
|
@@ -34,7 +37,7 @@ Donating
|
|
34
37
|
License
|
35
38
|
-------
|
36
39
|
|
37
|
-
Copyright (c) 2009-
|
40
|
+
Copyright (c) 2009-2013 Durran Jordan
|
38
41
|
|
39
42
|
Permission is hereby granted, free of charge, to any person obtaining
|
40
43
|
a copy of this software and associated documentation files (the
|
data/lib/config/locales/en.yml
CHANGED
@@ -74,7 +74,7 @@ en:
|
|
74
74
|
resolution: "Remove the invalid option or fix the typo. If you were
|
75
75
|
expecting the option to be there, please consult the following page
|
76
76
|
with repect to Mongoid's configuration:\n\n
|
77
|
-
\_\_http://mongoid.org/docs/installation.html"
|
77
|
+
\_\_http://mongoid.org/en/mongoid/docs/installation.html"
|
78
78
|
invalid_database:
|
79
79
|
message: "Database should be a Mongo::DB, not %{name}."
|
80
80
|
summary: "When setting a master database in the Mongoid configuration
|
@@ -135,7 +135,8 @@ en:
|
|
135
135
|
\_\_max: 1\n
|
136
136
|
\_\_bits: 26\n
|
137
137
|
\_\_bucket_size : 1\n
|
138
|
-
|
138
|
+
\_\_weights: { content: 1, title: 2 }\n
|
139
|
+
Valid types are: 1, -1, '2d', '2dsphere', 'geoHaystack', 'text', 'hashed'\n\n
|
139
140
|
Example:\n
|
140
141
|
\_\_class Band\n
|
141
142
|
\_\_\_\_include Mongoid::Document\n
|
@@ -323,8 +324,8 @@ en:
|
|
323
324
|
message: "Cannot persist embedded document %{klass} without a
|
324
325
|
parent document."
|
325
326
|
summary: "If the document is embedded, in order to be persisted it
|
326
|
-
must always have a reference to
|
327
|
-
most likely
|
327
|
+
must always have a reference to its parent document. This is
|
328
|
+
most likely caused by either calling %{klass}.create or
|
328
329
|
%{klass}.create! without setting the parent document as an
|
329
330
|
attribute."
|
330
331
|
resolution: "Ensure that you've set the parent relation if
|
@@ -393,7 +394,7 @@ en:
|
|
393
394
|
summary: "Attributes flagged as readonly via Model.attr_readonly
|
394
395
|
can only have values set when the document is a new record."
|
395
396
|
resolution: "Don't define '%{name}' as readonly, or do not attempt
|
396
|
-
to update
|
397
|
+
to update its value after the document is persisted."
|
397
398
|
scope_overwrite:
|
398
399
|
message: "Cannot create scope :%{scope_name}, because of existing
|
399
400
|
method %{model_name}.%{scope_name}."
|
@@ -403,7 +404,7 @@ en:
|
|
403
404
|
resolution: "Change the name of the scope so it does not conflict
|
404
405
|
with the already defined method %{model_name}, or set the
|
405
406
|
configuration option Mongoid.scope_overwrite_exception to false,
|
406
|
-
which is
|
407
|
+
which is its default. In this case a warning will be logged."
|
407
408
|
taken:
|
408
409
|
"is already taken"
|
409
410
|
too_many_nested_attribute_records:
|
data/lib/mongoid.rb
CHANGED
@@ -20,6 +20,9 @@
|
|
20
20
|
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
21
|
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
22
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
23
|
+
|
24
|
+
require 'support/ruby_version'
|
25
|
+
|
23
26
|
require "delegate"
|
24
27
|
require "time"
|
25
28
|
require "set"
|
@@ -33,6 +36,7 @@ require "active_model"
|
|
33
36
|
require "origin"
|
34
37
|
require "moped"
|
35
38
|
|
39
|
+
require "mongoid/atomic/positionable"
|
36
40
|
require "mongoid/evolvable"
|
37
41
|
require "mongoid/extensions"
|
38
42
|
require "mongoid/errors"
|
@@ -44,6 +48,7 @@ require "mongoid/callbacks"
|
|
44
48
|
require "mongoid/config"
|
45
49
|
require "mongoid/contextual"
|
46
50
|
require "mongoid/copyable"
|
51
|
+
require "mongoid/equality"
|
47
52
|
require "mongoid/criteria"
|
48
53
|
require "mongoid/dirty"
|
49
54
|
require "mongoid/factory"
|
@@ -124,6 +129,18 @@ module Mongoid
|
|
124
129
|
Sessions.default
|
125
130
|
end
|
126
131
|
|
132
|
+
# Disconnect all active sessions.
|
133
|
+
#
|
134
|
+
# @example Disconnect all active sessions.
|
135
|
+
# Mongoid.disconnect_sessions
|
136
|
+
#
|
137
|
+
# @return [ true ] True.
|
138
|
+
#
|
139
|
+
# @since 3.1.0
|
140
|
+
def disconnect_sessions
|
141
|
+
Sessions.disconnect
|
142
|
+
end
|
143
|
+
|
127
144
|
# Convenience method for getting a named session.
|
128
145
|
#
|
129
146
|
# @example Get a named session.
|
@@ -144,6 +161,6 @@ module Mongoid
|
|
144
161
|
#
|
145
162
|
# @since 1.0.0
|
146
163
|
delegate(*(Config.public_instance_methods(false) +
|
147
|
-
ActiveModel::Observing::ClassMethods.public_instance_methods(false) <<
|
164
|
+
ActiveModel::Observing::ClassMethods.public_instance_methods(false) - [:logger=, :logger] <<
|
148
165
|
{ to: Config }))
|
149
166
|
end
|
data/lib/mongoid/atomic.rb
CHANGED
@@ -54,6 +54,18 @@ module Mongoid
|
|
54
54
|
(delayed_atomic_unsets[document.metadata_name.to_s] ||= []).push(document)
|
55
55
|
end
|
56
56
|
|
57
|
+
# Returns path of the attribute for modification
|
58
|
+
#
|
59
|
+
# @example Get path of the attribute
|
60
|
+
# address.atomic_attribute_name(:city)
|
61
|
+
#
|
62
|
+
# @return [ String ] The path to the document attribute in the database
|
63
|
+
#
|
64
|
+
# @since 3.0.0
|
65
|
+
def atomic_attribute_name(name)
|
66
|
+
embedded? ? "#{atomic_position}.#{name}" : name
|
67
|
+
end
|
68
|
+
|
57
69
|
# For array fields these are the pushes that need to happen.
|
58
70
|
#
|
59
71
|
# @example Get the array pushes.
|
@@ -113,7 +125,7 @@ module Mongoid
|
|
113
125
|
# @return [ Hash ] The updates and their modifiers.
|
114
126
|
#
|
115
127
|
# @since 2.1.0
|
116
|
-
def atomic_updates
|
128
|
+
def atomic_updates(use_indexes = false)
|
117
129
|
process_flagged_destroys
|
118
130
|
mods = Modifiers.new
|
119
131
|
generate_atomic_updates(mods, self)
|
@@ -168,14 +180,16 @@ module Mongoid
|
|
168
180
|
atomic_paths.position
|
169
181
|
end
|
170
182
|
|
171
|
-
#
|
183
|
+
# Get the atomic paths utility for this document.
|
172
184
|
#
|
173
|
-
# @example Get
|
174
|
-
#
|
185
|
+
# @example Get the atomic paths.
|
186
|
+
# document.atomic_paths
|
175
187
|
#
|
176
|
-
# @return [
|
177
|
-
|
178
|
-
|
188
|
+
# @return [ Object ] The associated path.
|
189
|
+
#
|
190
|
+
# @since 2.1.0
|
191
|
+
def atomic_paths
|
192
|
+
@atomic_paths ||= metadata ? metadata.path(self) : Atomic::Paths::Root.new(self)
|
179
193
|
end
|
180
194
|
|
181
195
|
# Get all the attributes that need to be pulled.
|
@@ -208,7 +222,7 @@ module Mongoid
|
|
208
222
|
#
|
209
223
|
# @since 2.1.0
|
210
224
|
def atomic_pushes
|
211
|
-
pushable? ? {
|
225
|
+
pushable? ? { atomic_position => as_document } : {}
|
212
226
|
end
|
213
227
|
|
214
228
|
# Return the selector for this document to be matched exactly for use
|
@@ -335,18 +349,6 @@ module Mongoid
|
|
335
349
|
|
336
350
|
private
|
337
351
|
|
338
|
-
# Get the atomic paths utility for this document.
|
339
|
-
#
|
340
|
-
# @example Get the atomic paths.
|
341
|
-
# document.atomic_paths
|
342
|
-
#
|
343
|
-
# @return [ Object ] The associated path.
|
344
|
-
#
|
345
|
-
# @since 2.1.0
|
346
|
-
def atomic_paths
|
347
|
-
@atomic_paths ||= metadata ? metadata.path(self) : Atomic::Paths::Root.new(self)
|
348
|
-
end
|
349
|
-
|
350
352
|
# Generates the atomic updates in the correct order.
|
351
353
|
#
|
352
354
|
# @example Generate the updates.
|