mongoid 3.0.5 → 3.0.6
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +48 -3
- data/lib/mongoid.rb +1 -1
- data/lib/mongoid/callbacks.rb +16 -2
- data/lib/mongoid/config.rb +3 -2
- data/lib/mongoid/contextual/aggregable/mongo.rb +5 -3
- data/lib/mongoid/contextual/find_and_modify.rb +1 -1
- data/lib/mongoid/contextual/mongo.rb +11 -41
- data/lib/mongoid/copyable.rb +1 -1
- data/lib/mongoid/document.rb +5 -1
- data/lib/mongoid/extensions/float.rb +1 -1
- data/lib/mongoid/extensions/string.rb +6 -0
- data/lib/mongoid/factory.rb +3 -3
- data/lib/mongoid/fields/standard.rb +1 -1
- data/lib/mongoid/paranoia.rb +1 -1
- data/lib/mongoid/persistence.rb +4 -3
- data/lib/mongoid/persistence/atomic/operation.rb +1 -1
- data/lib/mongoid/relations/binding.rb +5 -3
- data/lib/mongoid/relations/builders/nested_attributes/many.rb +1 -1
- data/lib/mongoid/relations/cascading/restrict.rb +3 -1
- data/lib/mongoid/relations/embedded/many.rb +1 -1
- data/lib/mongoid/relations/embedded/one.rb +13 -11
- data/lib/mongoid/relations/metadata.rb +16 -2
- data/lib/mongoid/relations/proxy.rb +15 -0
- data/lib/mongoid/relations/referenced/in.rb +1 -0
- data/lib/mongoid/relations/referenced/many.rb +9 -7
- data/lib/mongoid/relations/referenced/many_to_many.rb +1 -1
- data/lib/mongoid/threaded.rb +8 -5
- data/lib/mongoid/validations/associated.rb +1 -1
- data/lib/mongoid/validations/uniqueness.rb +3 -1
- data/lib/mongoid/version.rb +1 -1
- metadata +3 -4
- data/lib/mongoid/threaded/sessions.rb +0 -0
data/CHANGELOG.md
CHANGED
@@ -3,7 +3,54 @@
|
|
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.
|
6
|
+
## 3.0.6 (branch 3.0.0-stable)
|
7
|
+
|
8
|
+
### Resolved Issues
|
9
|
+
|
10
|
+
* \#2375 Uniqueness validation scoping now works with aliased fields.
|
11
|
+
|
12
|
+
* \#2372 Ensure that all atomic operations mongoize values before executing.
|
13
|
+
|
14
|
+
* \#2370 Paranoid documents now properly don't get deleted when using
|
15
|
+
`dependent: :restrict` and an exception is raised.
|
16
|
+
|
17
|
+
* \#2365 Don't do anything when trying to replace an embeds_one with the same
|
18
|
+
document.
|
19
|
+
|
20
|
+
* \#2362 Don't store inverse of field values in the database when they are not
|
21
|
+
needed. (When there is not more than one polymorphic parent defined on the
|
22
|
+
same class).
|
23
|
+
|
24
|
+
* \#2360 Cloning documents should ignore mass assignment protection rules.
|
25
|
+
|
26
|
+
* \#2356 When limiting fields returned in queries via `only` ensure that the
|
27
|
+
limitation is scoped to the model.
|
28
|
+
|
29
|
+
* \#2353 Allow `update_attribute` to properly handle aliased fields.
|
30
|
+
|
31
|
+
* \#2348 Conversion of strings to times should raise an arugment error if the
|
32
|
+
string is invalid. (Campbell Allen)
|
33
|
+
|
34
|
+
* \#2346 Ensure `belongs_to` relations are evolvable when passed the proxy and
|
35
|
+
not the document.
|
36
|
+
|
37
|
+
* \#2334 Fixed aggregation map/reduce when fields sometimes do not exist.
|
38
|
+
(James McKinney)
|
39
|
+
|
40
|
+
* \#2330 Fixed inconsistency of #size and #length on criteria when the documents
|
41
|
+
have been iterated over with a limit applied.
|
42
|
+
|
43
|
+
* \#2328 Ensure ordering is applied on all relation criteria if defined.
|
44
|
+
|
45
|
+
* \#2327 Don't execute callbacks from base document if the document cannot execute
|
46
|
+
them.
|
47
|
+
|
48
|
+
* \#2318 Ensure setting any numeric on a Float field actually sets it as a float,
|
49
|
+
even if the number provided is an integer.
|
50
|
+
|
51
|
+
## 3.0.5
|
52
|
+
|
53
|
+
### Resolved Issues
|
7
54
|
|
8
55
|
* \#2313 Fixed deserialization of `nil` `TimeWithZone` fields. (nagachika)
|
9
56
|
|
@@ -32,8 +79,6 @@ For instructions on upgrading to newer versions, visit
|
|
32
79
|
|
33
80
|
* \#1091 Allow presence validation to pass if the value is `false`.
|
34
81
|
|
35
|
-
### Resolved Issues
|
36
|
-
|
37
82
|
## 3.0.4
|
38
83
|
|
39
84
|
### Resolved Issues
|
data/lib/mongoid.rb
CHANGED
@@ -33,6 +33,7 @@ require "active_model"
|
|
33
33
|
require "origin"
|
34
34
|
require "moped"
|
35
35
|
|
36
|
+
require "mongoid/evolvable"
|
36
37
|
require "mongoid/extensions"
|
37
38
|
require "mongoid/errors"
|
38
39
|
require "mongoid/threaded"
|
@@ -45,7 +46,6 @@ require "mongoid/contextual"
|
|
45
46
|
require "mongoid/copyable"
|
46
47
|
require "mongoid/criteria"
|
47
48
|
require "mongoid/dirty"
|
48
|
-
require "mongoid/evolvable"
|
49
49
|
require "mongoid/factory"
|
50
50
|
require "mongoid/fields"
|
51
51
|
require "mongoid/finders"
|
data/lib/mongoid/callbacks.rb
CHANGED
@@ -38,6 +38,20 @@ module Mongoid
|
|
38
38
|
attr_accessor :before_callback_halted
|
39
39
|
end
|
40
40
|
|
41
|
+
# Is the provided type of callback executable by this document?
|
42
|
+
#
|
43
|
+
# @example Is the callback executable?
|
44
|
+
# document.callback_executable?(:save)
|
45
|
+
#
|
46
|
+
# @param [ Symbol ] kin The type of callback.
|
47
|
+
#
|
48
|
+
# @return [ true, false ] If the callback can be executed.
|
49
|
+
#
|
50
|
+
# @since 3.0.6
|
51
|
+
def callback_executable?(kind)
|
52
|
+
respond_to?("_#{kind}_callbacks")
|
53
|
+
end
|
54
|
+
|
41
55
|
# Run only the after callbacks for the specific event.
|
42
56
|
#
|
43
57
|
# @note ActiveSupport does not allow this type of behaviour by default, so
|
@@ -97,7 +111,7 @@ module Mongoid
|
|
97
111
|
return false
|
98
112
|
end
|
99
113
|
end
|
100
|
-
super(kind, *args, &block)
|
114
|
+
callback_executable?(kind) ? super(kind, *args, &block) : true
|
101
115
|
end
|
102
116
|
|
103
117
|
private
|
@@ -158,7 +172,7 @@ module Mongoid
|
|
158
172
|
#
|
159
173
|
# @since 2.3.0
|
160
174
|
def cascadable_child?(kind, child)
|
161
|
-
return false if kind == :initialize || !child.
|
175
|
+
return false if kind == :initialize || !child.callback_executable?(kind)
|
162
176
|
[ :create, :destroy ].include?(kind) || child.changed? || child.new_record?
|
163
177
|
end
|
164
178
|
|
data/lib/mongoid/config.rb
CHANGED
@@ -36,11 +36,12 @@ module Mongoid
|
|
36
36
|
# @param [ String ] name The database name.
|
37
37
|
#
|
38
38
|
# @since 3.0.0
|
39
|
-
def connect_to(name)
|
39
|
+
def connect_to(name, options = { consistency: :eventual })
|
40
40
|
self.sessions = {
|
41
41
|
default: {
|
42
42
|
database: name,
|
43
|
-
hosts: [ "localhost:27017" ]
|
43
|
+
hosts: [ "localhost:27017" ],
|
44
|
+
options: options
|
44
45
|
}
|
45
46
|
}
|
46
47
|
end
|
@@ -167,10 +167,12 @@ module Mongoid
|
|
167
167
|
function(key, values) {
|
168
168
|
var agg = { count: 0, max: null, min: null, sum: 0 };
|
169
169
|
values.forEach(function(val) {
|
170
|
-
if (
|
171
|
-
|
170
|
+
if (val.max !== null) {
|
171
|
+
if (agg.max == null || val.max > agg.max) agg.max = val.max;
|
172
|
+
if (agg.min == null || val.max < agg.min) agg.min = val.max;
|
173
|
+
agg.sum += val.sum;
|
174
|
+
}
|
172
175
|
agg.count += 1;
|
173
|
-
agg.sum += val.sum;
|
174
176
|
});
|
175
177
|
return agg;
|
176
178
|
}}
|
@@ -27,7 +27,7 @@ module Mongoid
|
|
27
27
|
# @since 3.0.0
|
28
28
|
def initialize(collection, criteria, update, options = {})
|
29
29
|
@collection, @criteria, @options, @update =
|
30
|
-
collection, criteria, options, update
|
30
|
+
collection, criteria, options, update.mongoize
|
31
31
|
@query = collection.find(criteria.selector)
|
32
32
|
apply_criteria_options
|
33
33
|
end
|
@@ -129,10 +129,9 @@ module Mongoid
|
|
129
129
|
# @since 3.0.0
|
130
130
|
def each(&block)
|
131
131
|
if block_given?
|
132
|
-
reset_length
|
133
132
|
selecting do
|
134
133
|
documents_for_iteration.each do |doc|
|
135
|
-
|
134
|
+
yield_document(doc, &block)
|
136
135
|
end
|
137
136
|
@cache_loaded = true
|
138
137
|
eager_loadable? ? docs : self
|
@@ -572,34 +571,6 @@ module Mongoid
|
|
572
571
|
!eager_loaded && !criteria.inclusions.empty?
|
573
572
|
end
|
574
573
|
|
575
|
-
# Increment the length of the results.
|
576
|
-
#
|
577
|
-
# @api private
|
578
|
-
#
|
579
|
-
# @example Increment the length.
|
580
|
-
# context.increment_length
|
581
|
-
#
|
582
|
-
# @return [ Integer ] The new length
|
583
|
-
#
|
584
|
-
# @since 3.0.0
|
585
|
-
def increment_length
|
586
|
-
@length += 1
|
587
|
-
end
|
588
|
-
|
589
|
-
# Reset the length to zero. This happens once before iteration.
|
590
|
-
#
|
591
|
-
# @api private
|
592
|
-
#
|
593
|
-
# @example Reset the length.
|
594
|
-
# context.reset_length
|
595
|
-
#
|
596
|
-
# @return [ Integer ] zero.
|
597
|
-
#
|
598
|
-
# @since 3.0.0
|
599
|
-
def reset_length
|
600
|
-
@length = 0
|
601
|
-
end
|
602
|
-
|
603
574
|
# Apply all the optional criterion.
|
604
575
|
#
|
605
576
|
# @example Apply the options.
|
@@ -627,12 +598,11 @@ module Mongoid
|
|
627
598
|
# @since 2.4.4
|
628
599
|
def selecting
|
629
600
|
begin
|
630
|
-
|
631
|
-
|
632
|
-
end
|
601
|
+
fields = criteria.options[:fields]
|
602
|
+
Threaded.set_selection(criteria.object_id, fields) unless fields.blank?
|
633
603
|
yield
|
634
604
|
ensure
|
635
|
-
Threaded.
|
605
|
+
Threaded.set_selection(criteria.object_id, nil)
|
636
606
|
end
|
637
607
|
end
|
638
608
|
|
@@ -650,28 +620,28 @@ module Mongoid
|
|
650
620
|
def with_eager_loading(document)
|
651
621
|
selecting do
|
652
622
|
return nil unless document
|
653
|
-
doc = Factory.from_db(klass, document)
|
623
|
+
doc = Factory.from_db(klass, document, criteria.object_id)
|
654
624
|
eager_load([ doc ]) if eager_loadable?
|
655
625
|
doc
|
656
626
|
end
|
657
627
|
end
|
658
628
|
|
659
|
-
# Yield to the document
|
629
|
+
# Yield to the document.
|
660
630
|
#
|
661
631
|
# @api private
|
662
632
|
#
|
663
|
-
# @example Yield
|
664
|
-
# context.
|
633
|
+
# @example Yield the document.
|
634
|
+
# context.yield_document(doc) do |doc|
|
665
635
|
# ...
|
666
636
|
# end
|
667
637
|
#
|
668
638
|
# @param [ Document ] document The document to yield to.
|
669
639
|
#
|
670
640
|
# @since 3.0.0
|
671
|
-
def
|
672
|
-
doc = document.respond_to?(:_id) ?
|
641
|
+
def yield_document(document, &block)
|
642
|
+
doc = document.respond_to?(:_id) ?
|
643
|
+
document : Factory.from_db(klass, document, criteria.object_id)
|
673
644
|
yield(doc)
|
674
|
-
increment_length
|
675
645
|
documents.push(doc) if cacheable?
|
676
646
|
end
|
677
647
|
end
|
data/lib/mongoid/copyable.rb
CHANGED
data/lib/mongoid/document.rb
CHANGED
@@ -7,6 +7,7 @@ module Mongoid
|
|
7
7
|
extend ActiveSupport::Concern
|
8
8
|
include Mongoid::Components
|
9
9
|
|
10
|
+
attr_accessor :criteria_instance_id
|
10
11
|
attr_reader :new_record
|
11
12
|
|
12
13
|
# Default comparison is via the string version of the id.
|
@@ -301,13 +302,16 @@ module Mongoid
|
|
301
302
|
# Person.instantiate(:title => "Sir", :age => 30)
|
302
303
|
#
|
303
304
|
# @param [ Hash ] attrs The hash of attributes to instantiate with.
|
305
|
+
# @param [ Integer ] criteria_instance_id The criteria id that
|
306
|
+
# instantiated the document.
|
304
307
|
#
|
305
308
|
# @return [ Document ] A new document.
|
306
309
|
#
|
307
310
|
# @since 1.0.0
|
308
|
-
def instantiate(attrs = nil)
|
311
|
+
def instantiate(attrs = nil, criteria_instance_id = nil)
|
309
312
|
attributes = attrs || {}
|
310
313
|
doc = allocate
|
314
|
+
doc.criteria_instance_id = criteria_instance_id
|
311
315
|
doc.instance_variable_set(:@attributes, attributes)
|
312
316
|
doc.apply_defaults
|
313
317
|
IdentityMap.set(doc) unless _loading_revision?
|
@@ -35,10 +35,16 @@ module Mongoid
|
|
35
35
|
# @example Mongoize the string.
|
36
36
|
# "2012-01-01".__mongoize_time__
|
37
37
|
#
|
38
|
+
# @note The extra parse from Time is because ActiveSupport::TimeZone
|
39
|
+
# either returns nil or Time.now if the string is empty or invalid,
|
40
|
+
# which is a regression from pre-3.0 and also does not agree with
|
41
|
+
# the core Time API.
|
42
|
+
#
|
38
43
|
# @return [ Time ] The time.
|
39
44
|
#
|
40
45
|
# @since 3.0.0
|
41
46
|
def __mongoize_time__
|
47
|
+
::Time.parse(self)
|
42
48
|
::Time.configured.parse(self)
|
43
49
|
end
|
44
50
|
|
data/lib/mongoid/factory.rb
CHANGED
@@ -34,12 +34,12 @@ module Mongoid
|
|
34
34
|
# @param [ Hash ] attributes The document attributes.
|
35
35
|
#
|
36
36
|
# @return [ Document ] The instantiated document.
|
37
|
-
def from_db(klass, attributes = nil)
|
37
|
+
def from_db(klass, attributes = nil, criteria_instance_id = nil)
|
38
38
|
type = (attributes || {})["_type"]
|
39
39
|
if type.blank?
|
40
|
-
klass.instantiate(attributes)
|
40
|
+
klass.instantiate(attributes, criteria_instance_id)
|
41
41
|
else
|
42
|
-
type.camelize.constantize.instantiate(attributes)
|
42
|
+
type.camelize.constantize.instantiate(attributes, criteria_instance_id)
|
43
43
|
end
|
44
44
|
end
|
45
45
|
end
|
data/lib/mongoid/paranoia.rb
CHANGED
@@ -58,10 +58,10 @@ module Mongoid
|
|
58
58
|
#
|
59
59
|
# @since 1.0.0
|
60
60
|
def remove(options = {})
|
61
|
+
cascade!
|
61
62
|
time = self.deleted_at = Time.now
|
62
63
|
paranoid_collection.find(atomic_selector).
|
63
64
|
update({ "$set" => { paranoid_field => time }})
|
64
|
-
cascade!
|
65
65
|
@destroyed = true
|
66
66
|
IdentityMap.remove(self)
|
67
67
|
Threaded.clear_options!
|
data/lib/mongoid/persistence.rb
CHANGED
@@ -155,10 +155,11 @@ module Mongoid
|
|
155
155
|
#
|
156
156
|
# @since 2.0.0.rc.6
|
157
157
|
def update_attribute(name, value)
|
158
|
-
|
159
|
-
|
158
|
+
normalized = name.to_s
|
159
|
+
unless attribute_writable?(normalized)
|
160
|
+
raise Errors::ReadonlyAttribute.new(normalized, value)
|
160
161
|
end
|
161
|
-
write_attribute(
|
162
|
+
write_attribute(aliased_fields[normalized] || normalized, value)
|
162
163
|
save(validate: false)
|
163
164
|
end
|
164
165
|
|
@@ -169,9 +169,11 @@ module Mongoid
|
|
169
169
|
#
|
170
170
|
# @since 3.0.0
|
171
171
|
def bind_inverse_of_field(doc, name)
|
172
|
-
if
|
173
|
-
if
|
174
|
-
|
172
|
+
if metadata.inverse_field_bindable?
|
173
|
+
if inverse_metadata = metadata.inverse_metadata(doc)
|
174
|
+
if setter = inverse_metadata.inverse_of_field_setter
|
175
|
+
doc.you_must(setter, name)
|
176
|
+
end
|
175
177
|
end
|
176
178
|
end
|
177
179
|
end
|
@@ -97,7 +97,7 @@ module Mongoid
|
|
97
97
|
doc = existing.find(converted)
|
98
98
|
if destroyable?(attrs)
|
99
99
|
existing.delete(doc)
|
100
|
-
doc.destroy unless doc.embedded?
|
100
|
+
doc.destroy unless doc.embedded? || doc.destroyed?
|
101
101
|
else
|
102
102
|
attrs.delete_id
|
103
103
|
metadata.embedded? ? doc.attributes = attrs : doc.update_attributes(attrs)
|
@@ -28,7 +28,9 @@ module Mongoid
|
|
28
28
|
# @example Perform the cascading delete.
|
29
29
|
# strategy.cascade
|
30
30
|
def cascade
|
31
|
-
|
31
|
+
unless relation.blank?
|
32
|
+
raise Errors::DeleteRestriction.new(document, metadata.name)
|
33
|
+
end
|
32
34
|
end
|
33
35
|
end
|
34
36
|
end
|
@@ -36,18 +36,20 @@ module Mongoid
|
|
36
36
|
#
|
37
37
|
# @since 2.0.0.rc.1
|
38
38
|
def substitute(replacement)
|
39
|
-
if
|
40
|
-
|
41
|
-
|
42
|
-
|
39
|
+
if replacement != self
|
40
|
+
if _assigning?
|
41
|
+
base.add_atomic_unset(target)
|
42
|
+
else
|
43
|
+
target.destroy if persistable?
|
44
|
+
end
|
45
|
+
unbind_one
|
46
|
+
return nil unless replacement
|
47
|
+
replacement = Factory.build(klass, replacement) if replacement.is_a?(::Hash)
|
48
|
+
self.target = replacement
|
49
|
+
bind_one
|
50
|
+
characterize_one(target)
|
51
|
+
target.save if persistable? && !_assigning?
|
43
52
|
end
|
44
|
-
unbind_one
|
45
|
-
return nil unless replacement
|
46
|
-
replacement = Factory.build(klass, replacement) if replacement.is_a?(::Hash)
|
47
|
-
self.target = replacement
|
48
|
-
bind_one
|
49
|
-
characterize_one(target)
|
50
|
-
target.save if persistable? && !_assigning?
|
51
53
|
self
|
52
54
|
end
|
53
55
|
|
@@ -150,8 +150,7 @@ module Mongoid
|
|
150
150
|
#
|
151
151
|
# @since 2.1.0
|
152
152
|
def criteria(object, type)
|
153
|
-
|
154
|
-
order ? query.order_by(order) : query
|
153
|
+
relation.criteria(self, object, type)
|
155
154
|
end
|
156
155
|
|
157
156
|
# Returns the cyclic option of the relation.
|
@@ -436,6 +435,21 @@ module Mongoid
|
|
436
435
|
!!inverse_class_name
|
437
436
|
end
|
438
437
|
|
438
|
+
# Is the inverse field bindable? Ie, do we have more than one definition
|
439
|
+
# on the parent class with the same polymorphic name (as).
|
440
|
+
#
|
441
|
+
# @example Is the inverse of bindable?
|
442
|
+
# metadata.inverse_of_bindable?
|
443
|
+
#
|
444
|
+
# @return [ true, false ] If the relation needs the inverse of field set.
|
445
|
+
#
|
446
|
+
# @since 3.0.6
|
447
|
+
def inverse_field_bindable?
|
448
|
+
@inverse_field_bindable ||= (inverse_klass.relations.values.count do |meta|
|
449
|
+
meta.as == as
|
450
|
+
end > 1)
|
451
|
+
end
|
452
|
+
|
439
453
|
# Used for relational many to many only. This determines the name of the
|
440
454
|
# foreign key field on the inverse side of the relation, since in this
|
441
455
|
# case there are keys on both sides.
|
@@ -147,6 +147,21 @@ module Mongoid
|
|
147
147
|
|
148
148
|
class << self
|
149
149
|
|
150
|
+
# Apply ordering to the criteria if it was defined on the relation.
|
151
|
+
#
|
152
|
+
# @example Apply the ordering.
|
153
|
+
# Proxy.apply_ordering(criteria, metadata)
|
154
|
+
#
|
155
|
+
# @param [ Criteria ] criteria The criteria to modify.
|
156
|
+
# @param [ Metadata ] metadata The relation metadata.
|
157
|
+
#
|
158
|
+
# @return [ Criteria ] The ordered criteria.
|
159
|
+
#
|
160
|
+
# @since 3.0.6
|
161
|
+
def apply_ordering(criteria, metadata)
|
162
|
+
metadata.order ? criteria.order_by(metadata.order) : criteria
|
163
|
+
end
|
164
|
+
|
150
165
|
# Get the criteria that is used to eager load a relation of this
|
151
166
|
# type.
|
152
167
|
#
|
@@ -537,13 +537,15 @@ module Mongoid
|
|
537
537
|
#
|
538
538
|
# @since 2.1.0
|
539
539
|
def criteria(metadata, object, type = nil)
|
540
|
-
|
541
|
-
|
542
|
-
|
543
|
-
|
544
|
-
|
545
|
-
|
546
|
-
|
540
|
+
apply_ordering(
|
541
|
+
with_inverse_field_criterion(
|
542
|
+
with_polymorphic_criterion(
|
543
|
+
metadata.klass.where(metadata.foreign_key => object),
|
544
|
+
metadata,
|
545
|
+
type
|
546
|
+
),
|
547
|
+
metadata
|
548
|
+
), metadata
|
547
549
|
)
|
548
550
|
end
|
549
551
|
|
@@ -278,7 +278,7 @@ module Mongoid
|
|
278
278
|
#
|
279
279
|
# @since 2.1.0
|
280
280
|
def criteria(metadata, object, type = nil)
|
281
|
-
metadata.klass.all_of(_id: { "$in" => object })
|
281
|
+
apply_ordering(metadata.klass.all_of(_id: { "$in" => object }), metadata)
|
282
282
|
end
|
283
283
|
|
284
284
|
# Get the criteria that is used to eager load a relation of this
|
data/lib/mongoid/threaded.rb
CHANGED
@@ -301,25 +301,28 @@ module Mongoid
|
|
301
301
|
# @example Get the field selection options.
|
302
302
|
# Threaded.selection
|
303
303
|
#
|
304
|
+
# @param [ Class ] klass The model class.
|
305
|
+
#
|
304
306
|
# @return [ Hash ] The field selection.
|
305
307
|
#
|
306
308
|
# @since 2.4.4
|
307
|
-
def selection
|
308
|
-
Thread.current["[mongoid]:selection"]
|
309
|
+
def selection(klass)
|
310
|
+
Thread.current["[mongoid][#{klass}]:selection"]
|
309
311
|
end
|
310
312
|
|
311
313
|
# Set the field selection on the current thread.
|
312
314
|
#
|
313
315
|
# @example Set the field selection.
|
314
|
-
# Threaded.
|
316
|
+
# Threaded.set_selection(Person, { field: 1 })
|
315
317
|
#
|
318
|
+
# @param [ Integer ] criteria_instance_id The criteria instance id.
|
316
319
|
# @param [ Hash ] value The current field selection.
|
317
320
|
#
|
318
321
|
# @return [ Hash ] The field selection.
|
319
322
|
#
|
320
323
|
# @since 2.4.4
|
321
|
-
def
|
322
|
-
Thread.current["[mongoid]:selection"] = value
|
324
|
+
def set_selection(criteria_instance_id, value)
|
325
|
+
Thread.current["[mongoid][#{criteria_instance_id}]:selection"] = value
|
323
326
|
end
|
324
327
|
|
325
328
|
# Get the global session override.
|
@@ -167,7 +167,9 @@ module Mongoid
|
|
167
167
|
# @since 2.3.0
|
168
168
|
def scope(criteria, document, attribute)
|
169
169
|
Array.wrap(options[:scope]).each do |item|
|
170
|
-
|
170
|
+
normalized = item.to_s
|
171
|
+
name = document.aliased_fields[normalized] || normalized
|
172
|
+
criteria = criteria.where(item => document.attributes[name])
|
171
173
|
end
|
172
174
|
criteria = criteria.where(deleted_at: nil) if document.paranoid?
|
173
175
|
criteria
|
data/lib/mongoid/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongoid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.
|
4
|
+
version: 3.0.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-09-15 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activemodel
|
@@ -307,7 +307,6 @@ files:
|
|
307
307
|
- lib/mongoid/sharding.rb
|
308
308
|
- lib/mongoid/state.rb
|
309
309
|
- lib/mongoid/threaded/lifecycle.rb
|
310
|
-
- lib/mongoid/threaded/sessions.rb
|
311
310
|
- lib/mongoid/threaded.rb
|
312
311
|
- lib/mongoid/timestamps/created.rb
|
313
312
|
- lib/mongoid/timestamps/timeless.rb
|
@@ -353,7 +352,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
353
352
|
version: '0'
|
354
353
|
segments:
|
355
354
|
- 0
|
356
|
-
hash: -
|
355
|
+
hash: -3437651563723863969
|
357
356
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
358
357
|
none: false
|
359
358
|
requirements:
|
File without changes
|