mongoid_includes 3.0.3 → 4.0.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.
- checksums.yaml +4 -4
- data/README.md +66 -7
- data/lib/mongoid/includes/inclusion.rb +1 -0
- data/lib/mongoid/includes/version.rb +1 -6
- data/spec/mongo.log +41651 -0
- data/spec/mongoid/includes/polymorphic_includes_spec.rb +112 -0
- metadata +7 -8
@@ -56,5 +56,117 @@ describe Mongoid::Includes::Criteria do
|
|
56
56
|
}.to raise_error(Mongoid::Includes::Errors::InvalidPolymorphicIncludes)
|
57
57
|
end
|
58
58
|
end
|
59
|
+
|
60
|
+
context 'eager loading polymorphic belongs_to associations with multiple concrete types' do
|
61
|
+
before(:context) do
|
62
|
+
class Main
|
63
|
+
include Mongoid::Document
|
64
|
+
belongs_to :related, polymorphic: true, optional: true
|
65
|
+
end
|
66
|
+
|
67
|
+
class Related
|
68
|
+
include Mongoid::Document
|
69
|
+
has_one :parent, as: :related
|
70
|
+
end
|
71
|
+
|
72
|
+
class Two < Related; end
|
73
|
+
class Three < Related; end
|
74
|
+
end
|
75
|
+
|
76
|
+
after(:context) do
|
77
|
+
%i[Main Related Two Three].each do |const|
|
78
|
+
Object.send(:remove_const, const) if Object.const_defined?(const, false)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
it 'loads the related documents for each concrete type without raising' do
|
83
|
+
Main.create!(related: Two.create!)
|
84
|
+
Main.create!(related: Three.create!)
|
85
|
+
|
86
|
+
loaded = nil
|
87
|
+
expect { loaded = Main.includes(:related).entries }.not_to raise_error
|
88
|
+
expect(loaded.map { |doc| doc.related.class }).to match_array([Two, Three])
|
89
|
+
expect { Main.last.related.id }.not_to raise_error
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
context 'polymorphic eager loading in a fresh Ruby process' do
|
94
|
+
let(:project_root) { File.expand_path('../../..', __dir__) }
|
95
|
+
|
96
|
+
it 'does not error when includes is evaluated from the CLI' do
|
97
|
+
require 'open3'
|
98
|
+
|
99
|
+
database_name = "mongoid_includes_spec_#{SecureRandom.hex(6)}"
|
100
|
+
base_script = <<~RUBY
|
101
|
+
require 'bundler/setup'
|
102
|
+
require 'mongoid'
|
103
|
+
require 'mongoid_includes'
|
104
|
+
|
105
|
+
Mongoid.load_configuration(
|
106
|
+
clients: {
|
107
|
+
default: {
|
108
|
+
database: '#{database_name}',
|
109
|
+
hosts: %w[localhost:27017]
|
110
|
+
}
|
111
|
+
}
|
112
|
+
)
|
113
|
+
|
114
|
+
class Main
|
115
|
+
include Mongoid::Document
|
116
|
+
belongs_to :related, polymorphic: true, optional: true
|
117
|
+
end
|
118
|
+
|
119
|
+
class Related
|
120
|
+
include Mongoid::Document
|
121
|
+
has_one :parent, as: :related
|
122
|
+
end
|
123
|
+
|
124
|
+
class Two < Related; end
|
125
|
+
class Three < Related; end
|
126
|
+
RUBY
|
127
|
+
|
128
|
+
init_script = base_script + <<~RUBY
|
129
|
+
client = Mongoid::Clients.default
|
130
|
+
begin
|
131
|
+
client.database.drop
|
132
|
+
rescue Mongo::Error::OperationFailure
|
133
|
+
end
|
134
|
+
|
135
|
+
Main.destroy_all
|
136
|
+
Related.destroy_all
|
137
|
+
|
138
|
+
Main.create!(related: Two.create!)
|
139
|
+
Main.create!(related: Three.create!)
|
140
|
+
RUBY
|
141
|
+
|
142
|
+
bad_script = base_script + <<~RUBY
|
143
|
+
Main.includes(:related).entries
|
144
|
+
Main.last.related.id
|
145
|
+
|
146
|
+
Mongoid::Clients.default.database.drop
|
147
|
+
RUBY
|
148
|
+
|
149
|
+
bundle_gemfile = ENV.fetch(
|
150
|
+
'BUNDLE_GEMFILE',
|
151
|
+
File.join(project_root, 'Gemfile')
|
152
|
+
)
|
153
|
+
|
154
|
+
run_script = lambda do |script|
|
155
|
+
Open3.capture2e(
|
156
|
+
{ 'BUNDLE_GEMFILE' => bundle_gemfile },
|
157
|
+
RbConfig.ruby,
|
158
|
+
'-',
|
159
|
+
chdir: project_root,
|
160
|
+
stdin_data: script
|
161
|
+
)
|
162
|
+
end
|
163
|
+
|
164
|
+
init_out, init_status = run_script.call(init_script)
|
165
|
+
expect(init_status).to be_success, "failed to prepare polymorphic data: #{init_out}"
|
166
|
+
|
167
|
+
bad_out, bad_status = run_script.call(bad_script)
|
168
|
+
expect(bad_status).to be_success, "expected CLI reproduction to succeed, got #{bad_status.exitstatus}: #{bad_out}"
|
169
|
+
end
|
170
|
+
end
|
59
171
|
end
|
60
172
|
end
|
metadata
CHANGED
@@ -1,14 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongoid_includes
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 4.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Máximo Mussini
|
8
|
-
autorequire:
|
9
8
|
bindir: bin
|
10
9
|
cert_chain: []
|
11
|
-
date:
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
12
11
|
dependencies:
|
13
12
|
- !ruby/object:Gem::Dependency
|
14
13
|
name: mongoid
|
@@ -16,7 +15,7 @@ dependencies:
|
|
16
15
|
requirements:
|
17
16
|
- - ">="
|
18
17
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
18
|
+
version: 8.0.0
|
20
19
|
- - "<"
|
21
20
|
- !ruby/object:Gem::Version
|
22
21
|
version: 10.0.0
|
@@ -26,7 +25,7 @@ dependencies:
|
|
26
25
|
requirements:
|
27
26
|
- - ">="
|
28
27
|
- !ruby/object:Gem::Version
|
29
|
-
version:
|
28
|
+
version: 8.0.0
|
30
29
|
- - "<"
|
31
30
|
- !ruby/object:Gem::Version
|
32
31
|
version: 10.0.0
|
@@ -53,6 +52,7 @@ files:
|
|
53
52
|
- lib/mongoid/includes/inclusions.rb
|
54
53
|
- lib/mongoid/includes/version.rb
|
55
54
|
- lib/mongoid_includes.rb
|
55
|
+
- spec/mongo.log
|
56
56
|
- spec/mongoid/includes/criteria_spec.rb
|
57
57
|
- spec/mongoid/includes/errors/invalid_includes_spec.rb
|
58
58
|
- spec/mongoid/includes/errors/invalid_polymorphic_includes_spec.rb
|
@@ -79,7 +79,6 @@ homepage: https://github.com/cacheventures/mongoid_includes
|
|
79
79
|
licenses:
|
80
80
|
- MIT
|
81
81
|
metadata: {}
|
82
|
-
post_install_message:
|
83
82
|
rdoc_options:
|
84
83
|
- "--charset=UTF-8"
|
85
84
|
require_paths:
|
@@ -95,11 +94,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
95
94
|
- !ruby/object:Gem::Version
|
96
95
|
version: '0'
|
97
96
|
requirements: []
|
98
|
-
rubygems_version: 3.
|
99
|
-
signing_key:
|
97
|
+
rubygems_version: 3.6.9
|
100
98
|
specification_version: 4
|
101
99
|
summary: Improved eager loading support for Mongoid.
|
102
100
|
test_files:
|
101
|
+
- spec/mongo.log
|
103
102
|
- spec/mongoid/includes/criteria_spec.rb
|
104
103
|
- spec/mongoid/includes/errors/invalid_includes_spec.rb
|
105
104
|
- spec/mongoid/includes/errors/invalid_polymorphic_includes_spec.rb
|