mongo_mapper 0.15.1 → 0.15.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +22 -7
- data/lib/mongo_mapper/document.rb +1 -0
- data/lib/mongo_mapper/extensions/array.rb +1 -1
- data/lib/mongo_mapper/extensions/binary.rb +1 -1
- data/lib/mongo_mapper/extensions/date.rb +1 -1
- data/lib/mongo_mapper/extensions/float.rb +1 -1
- data/lib/mongo_mapper/extensions/hash.rb +1 -1
- data/lib/mongo_mapper/extensions/nil_class.rb +2 -2
- data/lib/mongo_mapper/extensions/object.rb +1 -1
- data/lib/mongo_mapper/extensions/object_id.rb +1 -1
- data/lib/mongo_mapper/extensions/set.rb +1 -1
- data/lib/mongo_mapper/extensions/string.rb +1 -1
- data/lib/mongo_mapper/plugins/associations/many_association.rb +2 -3
- data/lib/mongo_mapper/plugins/associations/{belongs_to_polymorphic_proxy.rb → proxy/belongs_to_polymorphic_proxy.rb} +0 -0
- data/lib/mongo_mapper/plugins/associations/{belongs_to_proxy.rb → proxy/belongs_to_proxy.rb} +6 -0
- data/lib/mongo_mapper/plugins/associations/proxy/collection.rb +55 -0
- data/lib/mongo_mapper/plugins/associations/{embedded_collection.rb → proxy/embedded_collection.rb} +0 -0
- data/lib/mongo_mapper/plugins/associations/{in_array_proxy.rb → proxy/in_array_proxy.rb} +0 -0
- data/lib/mongo_mapper/plugins/associations/{in_foreign_array_proxy.rb → proxy/in_foreign_array_proxy.rb} +0 -0
- data/lib/mongo_mapper/plugins/associations/{many_documents_as_proxy.rb → proxy/many_documents_as_proxy.rb} +0 -0
- data/lib/mongo_mapper/plugins/associations/{many_documents_proxy.rb → proxy/many_documents_proxy.rb} +0 -4
- data/lib/mongo_mapper/plugins/associations/{many_embedded_polymorphic_proxy.rb → proxy/many_embedded_polymorphic_proxy.rb} +0 -0
- data/lib/mongo_mapper/plugins/associations/{many_embedded_proxy.rb → proxy/many_embedded_proxy.rb} +0 -0
- data/lib/mongo_mapper/plugins/associations/{many_polymorphic_proxy.rb → proxy/many_polymorphic_proxy.rb} +0 -0
- data/lib/mongo_mapper/plugins/associations/{one_as_proxy.rb → proxy/one_as_proxy.rb} +0 -0
- data/lib/mongo_mapper/plugins/associations/{one_embedded_polymorphic_proxy.rb → proxy/one_embedded_polymorphic_proxy.rb} +0 -0
- data/lib/mongo_mapper/plugins/associations/{one_embedded_proxy.rb → proxy/one_embedded_proxy.rb} +3 -1
- data/lib/mongo_mapper/plugins/associations/{one_proxy.rb → proxy/one_proxy.rb} +0 -0
- data/lib/mongo_mapper/plugins/associations/{proxy.rb → proxy/proxy.rb} +69 -49
- data/lib/mongo_mapper/plugins/associations/single_association.rb +2 -11
- data/lib/mongo_mapper/plugins/dirty.rb +2 -2
- data/lib/mongo_mapper/plugins/embedded_document.rb +1 -1
- data/lib/mongo_mapper/plugins/keys/key.rb +9 -6
- data/lib/mongo_mapper/plugins/keys.rb +17 -7
- data/lib/mongo_mapper/plugins/querying.rb +2 -2
- data/lib/mongo_mapper/plugins/scopes.rb +19 -3
- data/lib/mongo_mapper/plugins/shardable.rb +30 -0
- data/lib/mongo_mapper/plugins/validations.rb +1 -1
- data/lib/mongo_mapper/version.rb +1 -1
- data/lib/mongo_mapper.rb +18 -18
- data/spec/examples.txt +1718 -1697
- data/spec/functional/associations/belongs_to_proxy_spec.rb +33 -0
- data/spec/functional/associations/one_embedded_proxy_spec.rb +28 -0
- data/spec/functional/associations/one_proxy_spec.rb +11 -1
- data/spec/functional/dirty_spec.rb +21 -0
- data/spec/functional/dirty_with_callbacks_spec.rb +59 -0
- data/spec/functional/keys_spec.rb +13 -0
- data/spec/functional/scopes_spec.rb +88 -0
- data/spec/functional/shardable_spec.rb +67 -0
- data/spec/spec_helper.rb +7 -0
- data/spec/unit/associations/proxy_spec.rb +30 -5
- data/spec/unit/extensions_spec.rb +9 -3
- data/spec/unit/inspect_spec.rb +1 -1
- data/spec/unit/key_spec.rb +7 -1
- metadata +36 -19
- data/lib/mongo_mapper/plugins/associations/collection.rb +0 -29
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ae0bcdb6320444b591dc779d739c553ba371c86e8465c4547c5e35423fe37ade
|
4
|
+
data.tar.gz: 270341e4efc65ba09578c2ba889c3c2e560610cf6eddfa7889fee19ded37c760
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3af02a093ffb4f9b13f48557bd83689c5cdcf35e434c00b152be18ad33e520e9ffbf1b7817b90ac4d363fe6f4452bab2ee66c5c450aca65981cc29ac2e74fe89
|
7
|
+
data.tar.gz: '09f802a3351959d626e23b4a6fa331ef10749a3b2f259440b527b26a25a23d0f0684c1e2bf0001938357e76fe5664da481ff298b572e665ded6afe0feb5fb286'
|
data/README.md
CHANGED
@@ -4,9 +4,9 @@ A Ruby Object Mapper for Mongo.
|
|
4
4
|
|
5
5
|
[<img src="https://badge.fury.io/rb/mongo_mapper.svg" alt="RubyGems">](https://rubygems.org/gems/mongo_mapper)
|
6
6
|
|
7
|
-
[<img src="https://
|
7
|
+
[<img src="https://github.com/mongomapper/mongomapper/workflows/Ruby/badge.svg?branch=master" alt="Build Status" />](https://github.com/mongomapper/mongomapper/actions?query=workflow%3ARuby+branch%3Amaster)
|
8
8
|
|
9
|
-
[<img src="https://coveralls.io/repos/mongomapper/mongomapper/badge.svg" alt="Coverage Status" />](https://coveralls.io/r/mongomapper/mongomapper)
|
9
|
+
<!-- [<img src="https://coveralls.io/repos/mongomapper/mongomapper/badge.svg" alt="Coverage Status" />](https://coveralls.io/r/mongomapper/mongomapper) -->
|
10
10
|
|
11
11
|
## Install
|
12
12
|
|
@@ -18,16 +18,27 @@ http://mongomapper.com/documentation/
|
|
18
18
|
|
19
19
|
http://rdoc.info/github/mongomapper/mongomapper
|
20
20
|
|
21
|
+
## Open Commit Policy
|
22
|
+
|
23
|
+
Like Rubinius, we're trying out an "open commit policy".
|
24
|
+
|
25
|
+
If you've committed one (code) patch that has been accepted and would like to
|
26
|
+
work some more on the project, send an email to Scott Taylor
|
27
|
+
<scott@railsnewbie.com> along with your commit sha1.
|
28
|
+
|
21
29
|
## Compatibility
|
22
30
|
|
23
31
|
MongoMapper is tested against:
|
24
32
|
|
25
|
-
* MRI 2.4 -
|
33
|
+
* MRI 2.4 - 3.0.1
|
26
34
|
* JRuby (Versions with 1.9 compatibility)
|
27
35
|
|
28
36
|
Additionally, MongoMapper is tested against:
|
29
37
|
|
30
|
-
* Rails 5.0
|
38
|
+
* Rails 5.0 - 5.2
|
39
|
+
* Rails 6.0 - 6.1
|
40
|
+
|
41
|
+
Note, if you are using Ruby 3.0+, you'll need Rails 6.
|
31
42
|
|
32
43
|
## Contributing & Development
|
33
44
|
|
@@ -37,17 +48,21 @@ Additionally, MongoMapper is tested against:
|
|
37
48
|
|
38
49
|
* Fork the project.
|
39
50
|
* Make your feature addition or bug fix. All specs should pass.
|
40
|
-
* Add specs for your changes. This is important so
|
41
|
-
* Commit, do not mess with Rakefile, version, or history. If you want to have your own version, that is fine but bump version in a commit by itself in another branch so a maintainer ignore it when your pull request is merged.
|
51
|
+
* Add specs for your changes. This is important so that it doesn't break in a future version.
|
52
|
+
* Commit, do not mess with Rakefile, version, or history. If you want to have your own version, that is fine but bump version in a commit by itself in another branch so a maintainer can ignore it when your pull request is merged.
|
42
53
|
* Send a pull request. Bonus points for topic branches.
|
43
54
|
|
55
|
+
## How to release
|
56
|
+
|
57
|
+
See `HOW_TO_RELEASE.md`
|
58
|
+
|
44
59
|
## Problems or Questions?
|
45
60
|
|
46
61
|
Hit up the Google group: http://groups.google.com/group/mongomapper
|
47
62
|
|
48
63
|
## Copyright
|
49
64
|
|
50
|
-
Copyright (c) 2009-
|
65
|
+
Copyright (c) 2009-2021 MongoMapper. See LICENSE for details.
|
51
66
|
|
52
67
|
## Contributors
|
53
68
|
|
@@ -30,12 +30,11 @@ module MongoMapper
|
|
30
30
|
def setup(model)
|
31
31
|
model.associations_module.module_eval(<<-end_eval, __FILE__, __LINE__ + 1)
|
32
32
|
def #{name}
|
33
|
-
get_proxy(associations[#{name.inspect}])
|
33
|
+
get_proxy(associations[#{name.inspect}]).read
|
34
34
|
end
|
35
35
|
|
36
36
|
def #{name}=(value)
|
37
|
-
get_proxy(associations[#{name.inspect}]).
|
38
|
-
value
|
37
|
+
get_proxy(associations[#{name.inspect}]).write(value)
|
39
38
|
end
|
40
39
|
end_eval
|
41
40
|
|
File without changes
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
module MongoMapper
|
3
|
+
module Plugins
|
4
|
+
module Associations
|
5
|
+
class Collection < Proxy
|
6
|
+
include Enumerable
|
7
|
+
|
8
|
+
def to_a
|
9
|
+
load_target
|
10
|
+
|
11
|
+
target.is_a?(Array) ?
|
12
|
+
target :
|
13
|
+
Array(target)
|
14
|
+
end
|
15
|
+
|
16
|
+
alias_method :to_ary, :to_a
|
17
|
+
|
18
|
+
def each(&block)
|
19
|
+
to_a.each(&block)
|
20
|
+
end
|
21
|
+
|
22
|
+
def [](val)
|
23
|
+
objs = to_a
|
24
|
+
objs ? objs[val] : nil
|
25
|
+
end
|
26
|
+
|
27
|
+
def empty?
|
28
|
+
to_a.empty?
|
29
|
+
end
|
30
|
+
|
31
|
+
def size
|
32
|
+
to_a.size
|
33
|
+
end
|
34
|
+
|
35
|
+
def length
|
36
|
+
to_a.length
|
37
|
+
end
|
38
|
+
|
39
|
+
def reset
|
40
|
+
super
|
41
|
+
target = []
|
42
|
+
end
|
43
|
+
|
44
|
+
def read
|
45
|
+
self
|
46
|
+
end
|
47
|
+
|
48
|
+
def write(value)
|
49
|
+
replace(value)
|
50
|
+
read
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
data/lib/mongo_mapper/plugins/associations/{embedded_collection.rb → proxy/embedded_collection.rb}
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
data/lib/mongo_mapper/plugins/associations/{many_embedded_proxy.rb → proxy/many_embedded_proxy.rb}
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
data/lib/mongo_mapper/plugins/associations/{one_embedded_proxy.rb → proxy/one_embedded_proxy.rb}
RENAMED
@@ -11,7 +11,9 @@ module MongoMapper
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def replace(doc)
|
14
|
-
if doc.
|
14
|
+
if doc.instance_of?(klass)
|
15
|
+
@target = doc
|
16
|
+
elsif doc.respond_to?(:attributes)
|
15
17
|
@target = klass.load(doc.attributes, true)
|
16
18
|
else
|
17
19
|
@target = klass.load(doc, true)
|
File without changes
|
@@ -1,19 +1,25 @@
|
|
1
1
|
# encoding: UTF-8
|
2
2
|
require 'forwardable'
|
3
|
+
|
3
4
|
module MongoMapper
|
4
5
|
module Plugins
|
5
6
|
module Associations
|
6
7
|
class Proxy
|
7
8
|
extend Forwardable
|
8
9
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
10
|
+
class << self
|
11
|
+
def define_proxy_method(method)
|
12
|
+
define_method(method) do |*args, &block|
|
13
|
+
proxy_method(method, *args, &block)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
13
17
|
|
14
18
|
attr_reader :proxy_owner, :association, :target
|
15
19
|
|
16
|
-
|
20
|
+
alias_method :proxy_respond_to?, :respond_to?
|
21
|
+
alias_method :proxy_extend, :extend
|
22
|
+
alias_method :proxy_association, :association
|
17
23
|
|
18
24
|
def_delegators :proxy_association, :klass, :options
|
19
25
|
def_delegator :klass, :collection
|
@@ -24,26 +30,31 @@ module MongoMapper
|
|
24
30
|
reset
|
25
31
|
end
|
26
32
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
33
|
+
[
|
34
|
+
:is_a?,
|
35
|
+
:to_mongo,
|
36
|
+
:==,
|
37
|
+
:!=,
|
38
|
+
:nil?,
|
39
|
+
:blank?,
|
40
|
+
:present?,
|
41
|
+
:hash,
|
42
|
+
# Active support in rails 3 beta 4 can override to_json after this is loaded,
|
43
|
+
# at least when run in mongomapper tests. The implementation was changed in master
|
44
|
+
# some time after this, so not sure whether this is still a problem.
|
45
|
+
#
|
46
|
+
# In rails 2, this isn't a problem however it also solves an issue where
|
47
|
+
# to_json isn't forwarded because it supports to_json itself
|
48
|
+
:to_json,
|
49
|
+
# see comments to to_json
|
50
|
+
:as_json,
|
51
|
+
].each do |m|
|
52
|
+
define_proxy_method(m)
|
42
53
|
end
|
43
54
|
|
44
55
|
def inspect
|
45
56
|
load_target
|
46
|
-
target.inspect
|
57
|
+
"#<#{self.class.inspect}:#{object_id} #{@target.inspect}>"
|
47
58
|
end
|
48
59
|
|
49
60
|
def loaded?
|
@@ -54,21 +65,6 @@ module MongoMapper
|
|
54
65
|
@loaded = true
|
55
66
|
end
|
56
67
|
|
57
|
-
def nil?
|
58
|
-
load_target
|
59
|
-
target.nil?
|
60
|
-
end
|
61
|
-
|
62
|
-
def blank?
|
63
|
-
load_target
|
64
|
-
target.blank?
|
65
|
-
end
|
66
|
-
|
67
|
-
def present?
|
68
|
-
load_target
|
69
|
-
target.present?
|
70
|
-
end
|
71
|
-
|
72
68
|
def reload
|
73
69
|
reset
|
74
70
|
load_target
|
@@ -87,16 +83,7 @@ module MongoMapper
|
|
87
83
|
end
|
88
84
|
|
89
85
|
def respond_to?(*args)
|
90
|
-
|
91
|
-
end
|
92
|
-
|
93
|
-
def send(method, *args, &block)
|
94
|
-
if proxy_respond_to?(method, true)
|
95
|
-
super
|
96
|
-
else
|
97
|
-
load_target
|
98
|
-
target.send(method, *args, &block)
|
99
|
-
end
|
86
|
+
super || (load_target && target.respond_to?(*args))
|
100
87
|
end
|
101
88
|
|
102
89
|
def read
|
@@ -104,10 +91,20 @@ module MongoMapper
|
|
104
91
|
@target
|
105
92
|
end
|
106
93
|
|
94
|
+
def write(value)
|
95
|
+
replace(value)
|
96
|
+
read
|
97
|
+
end
|
98
|
+
|
99
|
+
def proxy_method(method, *args, &block)
|
100
|
+
load_target
|
101
|
+
target.public_send(method, *args, &block)
|
102
|
+
end
|
103
|
+
|
107
104
|
protected
|
108
105
|
|
109
106
|
def load_target
|
110
|
-
|
107
|
+
if !loaded? || stale_target?
|
111
108
|
if @target.is_a?(Array) && @target.any?
|
112
109
|
@target = find_target + @target.find_all { |record| !record.persisted? }
|
113
110
|
else
|
@@ -134,9 +131,32 @@ module MongoMapper
|
|
134
131
|
|
135
132
|
private
|
136
133
|
|
134
|
+
def stale_target?
|
135
|
+
false
|
136
|
+
end
|
137
|
+
|
138
|
+
def define_proxy_method(method)
|
139
|
+
metaclass = class << self; self; end
|
140
|
+
metaclass.class_eval do
|
141
|
+
define_proxy_method(method)
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
def define_and_call_proxy_method(method, *args, &block)
|
146
|
+
define_proxy_method(method)
|
147
|
+
public_send(method, *args, &block)
|
148
|
+
end
|
149
|
+
|
137
150
|
def method_missing(method, *args, &block)
|
138
|
-
|
139
|
-
|
151
|
+
# load the target just in case it isn't loaded
|
152
|
+
load_target
|
153
|
+
|
154
|
+
# only define the method if the target has the method
|
155
|
+
# NOTE: include private methods!
|
156
|
+
if target.respond_to?(method, true)
|
157
|
+
define_and_call_proxy_method(method, *args, &block)
|
158
|
+
else
|
159
|
+
super
|
140
160
|
end
|
141
161
|
end
|
142
162
|
end
|
@@ -8,20 +8,11 @@ module MongoMapper
|
|
8
8
|
|
9
9
|
model.associations_module.module_eval(<<-end_eval, __FILE__, __LINE__ + 1)
|
10
10
|
def #{name}
|
11
|
-
|
12
|
-
proxy.nil? ? nil : proxy.read
|
11
|
+
get_proxy(associations[#{name.inspect}]).read
|
13
12
|
end
|
14
13
|
|
15
14
|
def #{name}=(value)
|
16
|
-
|
17
|
-
proxy = get_proxy(association)
|
18
|
-
|
19
|
-
if proxy.nil? || proxy.target != value
|
20
|
-
proxy = build_proxy(association)
|
21
|
-
end
|
22
|
-
|
23
|
-
proxy.replace(value)
|
24
|
-
proxy.read
|
15
|
+
get_proxy(associations[#{name.inspect}]).write(value)
|
25
16
|
end
|
26
17
|
|
27
18
|
def #{name}?
|
@@ -13,7 +13,7 @@ module MongoMapper
|
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
|
-
def
|
16
|
+
def save_to_collection(*)
|
17
17
|
super.tap do
|
18
18
|
changes_applied
|
19
19
|
end
|
@@ -38,7 +38,7 @@ module MongoMapper
|
|
38
38
|
|
39
39
|
# typecast to the new value
|
40
40
|
old_value = read_key(key_name)
|
41
|
-
new_value = key.
|
41
|
+
new_value = key.set(value)
|
42
42
|
|
43
43
|
# only mark changed if really changed value (after typecasting)
|
44
44
|
unless old_value == new_value
|
@@ -61,7 +61,7 @@ module MongoMapper
|
|
61
61
|
# Special Case: Generate default _id on access
|
62
62
|
value = default_value if @is_id and !value
|
63
63
|
|
64
|
-
value = type.from_mongo(value)
|
64
|
+
value = type ? type.from_mongo(value) : value
|
65
65
|
|
66
66
|
if @typecast
|
67
67
|
klass = typecast_class # Don't make this lookup on every call
|
@@ -76,22 +76,25 @@ module MongoMapper
|
|
76
76
|
|
77
77
|
def set(value)
|
78
78
|
# Avoid tap here so we don't have to create a block binding.
|
79
|
-
|
79
|
+
value = type ? type.to_mongo(value) : value.to_mongo
|
80
|
+
|
80
81
|
if @typecast
|
81
|
-
|
82
|
+
klass = typecast_class # Don't make this lookup on every call
|
83
|
+
value.map { |v| klass.to_mongo(v) }
|
82
84
|
else
|
83
|
-
|
85
|
+
value
|
84
86
|
end
|
85
87
|
end
|
86
88
|
|
87
89
|
def default_value
|
88
90
|
return unless default?
|
91
|
+
|
89
92
|
if default.instance_of? Proc
|
90
|
-
|
93
|
+
default.call
|
91
94
|
else
|
92
95
|
# Using Marshal is easiest way to get a copy of mutable objects
|
93
96
|
# without getting an error on immutable objects
|
94
|
-
|
97
|
+
Marshal.load(Marshal.dump(default))
|
95
98
|
end
|
96
99
|
end
|
97
100
|
|
@@ -144,9 +144,8 @@ module MongoMapper
|
|
144
144
|
end
|
145
145
|
|
146
146
|
def create_accessors_for(key)
|
147
|
-
accessors = ""
|
148
147
|
if key.read_accessor?
|
149
|
-
|
148
|
+
accessors_module.module_eval(<<-end_eval, __FILE__, __LINE__+1)
|
150
149
|
def #{key.name}
|
151
150
|
read_key(:#{key.name})
|
152
151
|
end
|
@@ -158,7 +157,7 @@ module MongoMapper
|
|
158
157
|
end
|
159
158
|
|
160
159
|
if key.write_accessor?
|
161
|
-
|
160
|
+
accessors_module.module_eval(<<-end_eval, __FILE__, __LINE__+1)
|
162
161
|
def #{key.name}=(value)
|
163
162
|
write_key(:#{key.name}, value)
|
164
163
|
end
|
@@ -166,7 +165,7 @@ module MongoMapper
|
|
166
165
|
end
|
167
166
|
|
168
167
|
if key.predicate_accessor?
|
169
|
-
|
168
|
+
accessors_module.module_eval(<<-end_eval, __FILE__, __LINE__+1)
|
170
169
|
def #{key.name}?
|
171
170
|
read_key(:#{key.name}).present?
|
172
171
|
end
|
@@ -179,7 +178,6 @@ module MongoMapper
|
|
179
178
|
end
|
180
179
|
end
|
181
180
|
|
182
|
-
accessors_module.module_eval accessors
|
183
181
|
include accessors_module
|
184
182
|
end
|
185
183
|
|
@@ -253,12 +251,24 @@ module MongoMapper
|
|
253
251
|
|
254
252
|
def remove_validate_callbacks(a_name)
|
255
253
|
chain = _validate_callbacks.dup.reject do |callback|
|
256
|
-
f = callback
|
254
|
+
f = callback_filter(callback)
|
257
255
|
f.respond_to?(:attributes) && f.attributes == a_name
|
258
256
|
end
|
259
257
|
reset_callbacks(:validate)
|
260
258
|
chain.each do |callback|
|
261
|
-
set_callback 'validate', callback
|
259
|
+
set_callback 'validate', callback_filter(callback)
|
260
|
+
end
|
261
|
+
end
|
262
|
+
|
263
|
+
# The interface to obtain @filter from ActiveSupport::Callbacks::Callback has changed since rails 7.0.
|
264
|
+
# https://github.com/rails/rails/commit/d5ac941ddc3de7ad1aaff80ed67aa04fb626a263#diff-bf79b7ea0085308139af6de0afad9a9f22f13d4563cc56d784994414d88c5dd1
|
265
|
+
if ActiveSupport::VERSION::MAJOR >= 7
|
266
|
+
def callback_filter(callback)
|
267
|
+
callback.filter
|
268
|
+
end
|
269
|
+
else
|
270
|
+
def callback_filter(callback)
|
271
|
+
callback.raw_filter
|
262
272
|
end
|
263
273
|
end
|
264
274
|
end
|
@@ -148,7 +148,7 @@ module MongoMapper
|
|
148
148
|
when :insert
|
149
149
|
collection.insert_one(update, query_options)
|
150
150
|
when :save
|
151
|
-
collection.update_one({:_id => _id}, update, query_options.merge(upsert: true))
|
151
|
+
collection.update_one({:_id => _id}.merge(shard_key_filter), update, query_options.merge(upsert: true))
|
152
152
|
when :update
|
153
153
|
update.stringify_keys!
|
154
154
|
|
@@ -180,4 +180,4 @@ module MongoMapper
|
|
180
180
|
end
|
181
181
|
end
|
182
182
|
end
|
183
|
-
end
|
183
|
+
end
|