mongoid 8.1.6 → 8.1.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/mongoid/matcher.rb +15 -1
- data/lib/mongoid/serializable.rb +7 -7
- data/lib/mongoid/traversable.rb +5 -1
- data/lib/mongoid/validatable/associated.rb +5 -2
- data/lib/mongoid/version.rb +1 -1
- data/spec/integration/app_spec.rb +11 -3
- data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +4 -0
- data/spec/mongoid/validatable/associated_spec.rb +14 -4
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 965ef60c6694e5d48b7edd1f16c9718b975f3b3969e27a3557e9913a87791e00
|
4
|
+
data.tar.gz: 28ea0535a075f4759ff40bb11dca76481b77e9d9cd00ce611b6e4d162e191532
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bd40308e934c907c54d05a8644ac104e1236887e80eaba812939ad9c2a9dca622a306be12a7cf35b9af217c6c9fe894d5794053970ab89c18f21933f59da2197
|
7
|
+
data.tar.gz: ba2aa5da4708302723c9170b57d6cfd9d760b63c2e1f3c33efcdcef33971c5720f07cd2f08d160160be675125981b8cab2b529b0a39d2100723de485e869b12f
|
data/lib/mongoid/matcher.rb
CHANGED
@@ -35,11 +35,25 @@ module Mongoid
|
|
35
35
|
# from and behaves identically to association traversal for the purposes
|
36
36
|
# of, for example, subsequent array element retrieval.
|
37
37
|
#
|
38
|
-
# @param [ Document | Hash ] document The document to extract from.
|
38
|
+
# @param [ Document | Hash | String ] document The document to extract from.
|
39
39
|
# @param [ String ] key The key path to extract.
|
40
40
|
#
|
41
41
|
# @return [ Object | Array ] Field value or values.
|
42
42
|
module_function def extract_attribute(document, key)
|
43
|
+
# The matcher system will wind up sending atomic values to this as well,
|
44
|
+
# when attepting to match more complex types. If anything other than a
|
45
|
+
# Document or a Hash is given, we'll short-circuit the logic and just
|
46
|
+
# return an empty array.
|
47
|
+
return [] unless document.is_a?(Hash) || document.is_a?(Document)
|
48
|
+
|
49
|
+
# Performance optimization; if the key does not include a '.' character,
|
50
|
+
# it must reference an immediate attribute of the document.
|
51
|
+
unless key.include?('.')
|
52
|
+
hash = document.respond_to?(:attributes) ? document.attributes : document
|
53
|
+
key = find_exact_key(hash, key)
|
54
|
+
return key ? [ hash[key] ] : []
|
55
|
+
end
|
56
|
+
|
43
57
|
if document.respond_to?(:as_attributes, true)
|
44
58
|
# If a document has hash fields, as_attributes would keep those fields
|
45
59
|
# as Hash instances which do not offer indifferent access.
|
data/lib/mongoid/serializable.rb
CHANGED
@@ -12,13 +12,13 @@ module Mongoid
|
|
12
12
|
included do
|
13
13
|
|
14
14
|
class << self
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
15
|
+
def include_root_in_json
|
16
|
+
@include_root_in_json.nil? ? ::Mongoid.include_root_in_json : @include_root_in_json
|
17
|
+
end
|
18
|
+
|
19
|
+
def include_root_in_json=(new_value)
|
20
|
+
@include_root_in_json = new_value
|
21
|
+
end
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
data/lib/mongoid/traversable.rb
CHANGED
@@ -30,7 +30,11 @@ module Mongoid
|
|
30
30
|
if value
|
31
31
|
Mongoid::Fields::Validators::Macro.validate_field_name(self, value)
|
32
32
|
value = value.to_s
|
33
|
-
|
33
|
+
if defined?(::ActiveSupport::ClassAttribute)
|
34
|
+
::ActiveSupport::ClassAttribute.redefine(self, 'discriminator_key', value)
|
35
|
+
else
|
36
|
+
super
|
37
|
+
end
|
34
38
|
else
|
35
39
|
# When discriminator key is set to nil, replace the class's definition
|
36
40
|
# of the discriminator key reader (provided by class_attribute earlier)
|
@@ -69,13 +69,16 @@ module Mongoid
|
|
69
69
|
# Now, treating the target as an array, look at each element
|
70
70
|
# and see if it is valid, but only if it has already been
|
71
71
|
# persisted, or changed, and hasn't been flagged for destroy.
|
72
|
-
|
72
|
+
#
|
73
|
+
# use map.all? instead of just all?, because all? will do short-circuit
|
74
|
+
# evaluation and terminate on the first failed validation.
|
75
|
+
list.map do |value|
|
73
76
|
if value && !value.flagged_for_destroy? && (!value.persisted? || value.changed?)
|
74
77
|
value.validated? ? true : value.valid?
|
75
78
|
else
|
76
79
|
true
|
77
80
|
end
|
78
|
-
end
|
81
|
+
end.all?
|
79
82
|
end
|
80
83
|
|
81
84
|
document.errors.add(attribute, :invalid) unless valid
|
data/lib/mongoid/version.rb
CHANGED
@@ -26,6 +26,8 @@ describe 'Mongoid application tests' do
|
|
26
26
|
context 'demo application' do
|
27
27
|
context 'sinatra' do
|
28
28
|
it 'runs' do
|
29
|
+
skip 'https://jira.mongodb.org/browse/MONGOID-5826'
|
30
|
+
|
29
31
|
clone_application(
|
30
32
|
'https://github.com/mongoid/mongoid-demo',
|
31
33
|
subdir: 'sinatra-minimal',
|
@@ -45,6 +47,8 @@ describe 'Mongoid application tests' do
|
|
45
47
|
|
46
48
|
context 'rails-api' do
|
47
49
|
it 'runs' do
|
50
|
+
skip 'https://jira.mongodb.org/browse/MONGOID-5826'
|
51
|
+
|
48
52
|
clone_application(
|
49
53
|
'https://github.com/mongoid/mongoid-demo',
|
50
54
|
subdir: 'rails-api',
|
@@ -95,7 +99,7 @@ describe 'Mongoid application tests' do
|
|
95
99
|
check_call(%w(rails new mongoid-test --skip-spring --skip-active-record), env: clean_env)
|
96
100
|
|
97
101
|
Dir.chdir('mongoid-test') do
|
98
|
-
adjust_app_gemfile
|
102
|
+
adjust_app_gemfile(add_sprockets: SpecConfig.instance.rails_version != '8.0')
|
99
103
|
check_call(%w(bundle install), env: clean_env)
|
100
104
|
|
101
105
|
check_call(%w(rails g model post), env: clean_env)
|
@@ -117,7 +121,7 @@ describe 'Mongoid application tests' do
|
|
117
121
|
check_call(%w(rails new mongoid-test-config --skip-spring --skip-active-record), env: clean_env)
|
118
122
|
|
119
123
|
Dir.chdir('mongoid-test-config') do
|
120
|
-
adjust_app_gemfile
|
124
|
+
adjust_app_gemfile(add_sprockets: SpecConfig.instance.rails_version != '8.0')
|
121
125
|
check_call(%w(bundle install), env: clean_env)
|
122
126
|
|
123
127
|
mongoid_config_file = File.join(TMP_BASE,'mongoid-test-config/config/mongoid.yml')
|
@@ -139,7 +143,7 @@ describe 'Mongoid application tests' do
|
|
139
143
|
if (rails_version = SpecConfig.instance.rails_version) == 'master'
|
140
144
|
else
|
141
145
|
check_call(%w(gem list))
|
142
|
-
check_call(%w(gem install rails --no-document -v) + ["~> #{rails_version}.0"])
|
146
|
+
check_call(%w(gem install rails --no-document --force -v) + ["~> #{rails_version}.0"])
|
143
147
|
end
|
144
148
|
end
|
145
149
|
|
@@ -287,6 +291,10 @@ describe 'Mongoid application tests' do
|
|
287
291
|
end
|
288
292
|
|
289
293
|
def adjust_rails_defaults(rails_version: SpecConfig.instance.rails_version)
|
294
|
+
if !rails_version.match?(/^\d+\.\d+$/)
|
295
|
+
# This must be pre-release version, we trim it
|
296
|
+
rails_version = rails_version.split('.')[0..1].join('.')
|
297
|
+
end
|
290
298
|
if File.exist?('config/application.rb')
|
291
299
|
lines = IO.readlines('config/application.rb')
|
292
300
|
lines.each do |line|
|
@@ -749,6 +749,10 @@ describe Mongoid::Association::Referenced::BelongsTo::Proxy do
|
|
749
749
|
person.save!
|
750
750
|
end
|
751
751
|
|
752
|
+
# NOTE: there as a bad interdependency here, with the auto_save_spec.rb
|
753
|
+
# file. If auto_save_spec.rb runs before this, the following specs fail
|
754
|
+
# with "undefined method `nullify' for an instance of Person".
|
755
|
+
|
752
756
|
context "when parent exists" do
|
753
757
|
|
754
758
|
context "when child is destroyed" do
|
@@ -37,12 +37,18 @@ describe Mongoid::Validatable::AssociatedValidator do
|
|
37
37
|
User.new(name: "test")
|
38
38
|
end
|
39
39
|
|
40
|
-
let(:
|
40
|
+
let(:description1) do
|
41
|
+
Description.new
|
42
|
+
end
|
43
|
+
|
44
|
+
let(:description2) do
|
41
45
|
Description.new
|
42
46
|
end
|
43
47
|
|
44
48
|
before do
|
45
|
-
user.descriptions <<
|
49
|
+
user.descriptions << description1
|
50
|
+
user.descriptions << description2
|
51
|
+
user.valid?
|
46
52
|
end
|
47
53
|
|
48
54
|
it "only validates the parent once" do
|
@@ -50,12 +56,16 @@ describe Mongoid::Validatable::AssociatedValidator do
|
|
50
56
|
end
|
51
57
|
|
52
58
|
it "adds the errors from the relation" do
|
53
|
-
user.valid?
|
54
59
|
expect(user.errors[:descriptions]).to_not be_nil
|
55
60
|
end
|
56
61
|
|
62
|
+
it 'reports all failed validations' do
|
63
|
+
errors = user.descriptions.flat_map { |d| d.errors[:details] }
|
64
|
+
expect(errors.length).to be == 2
|
65
|
+
end
|
66
|
+
|
57
67
|
it "only validates the child once" do
|
58
|
-
expect(
|
68
|
+
expect(description1).to_not be_valid
|
59
69
|
end
|
60
70
|
end
|
61
71
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongoid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 8.1.
|
4
|
+
version: 8.1.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- The MongoDB Ruby Team
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-11-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemodel
|
@@ -19,7 +19,7 @@ dependencies:
|
|
19
19
|
version: '5.1'
|
20
20
|
- - "<"
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: '
|
22
|
+
version: '8.1'
|
23
23
|
- - "!="
|
24
24
|
- !ruby/object:Gem::Version
|
25
25
|
version: 7.0.0
|
@@ -32,7 +32,7 @@ dependencies:
|
|
32
32
|
version: '5.1'
|
33
33
|
- - "<"
|
34
34
|
- !ruby/object:Gem::Version
|
35
|
-
version: '
|
35
|
+
version: '8.1'
|
36
36
|
- - "!="
|
37
37
|
- !ruby/object:Gem::Version
|
38
38
|
version: 7.0.0
|