active_mongoid 0.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.
- checksums.yaml +7 -0
- data/.DS_Store +0 -0
- data/.coveralls.yml +1 -0
- data/.gitignore +22 -0
- data/.ruby_gemset +1 -0
- data/.ruby_version +1 -0
- data/.travis.yml +11 -0
- data/Appraisals +7 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +198 -0
- data/Rakefile +7 -0
- data/active_mongoid.gemspec +36 -0
- data/gemfiles/mongoid_2.8.gemfile +7 -0
- data/gemfiles/mongoid_2.8.gemfile.lock +105 -0
- data/gemfiles/mongoid_3.1.gemfile +7 -0
- data/gemfiles/mongoid_3.1.gemfile.lock +108 -0
- data/lib/active_mongoid.rb +8 -0
- data/lib/active_mongoid/associations.rb +82 -0
- data/lib/active_mongoid/associations/binding.rb +77 -0
- data/lib/active_mongoid/associations/builder.rb +26 -0
- data/lib/active_mongoid/associations/builders/in.rb +17 -0
- data/lib/active_mongoid/associations/builders/many.rb +15 -0
- data/lib/active_mongoid/associations/builders/one.rb +15 -0
- data/lib/active_mongoid/associations/document_relation/accessors.rb +100 -0
- data/lib/active_mongoid/associations/document_relation/associations.rb +33 -0
- data/lib/active_mongoid/associations/document_relation/auto_save.rb +31 -0
- data/lib/active_mongoid/associations/document_relation/bindings/in.rb +48 -0
- data/lib/active_mongoid/associations/document_relation/bindings/many.rb +19 -0
- data/lib/active_mongoid/associations/document_relation/bindings/one.rb +19 -0
- data/lib/active_mongoid/associations/document_relation/builders.rb +31 -0
- data/lib/active_mongoid/associations/document_relation/dependent.rb +26 -0
- data/lib/active_mongoid/associations/document_relation/macros.rb +51 -0
- data/lib/active_mongoid/associations/document_relation/referenced/in.rb +72 -0
- data/lib/active_mongoid/associations/document_relation/referenced/many.rb +125 -0
- data/lib/active_mongoid/associations/document_relation/referenced/one.rb +75 -0
- data/lib/active_mongoid/associations/many.rb +211 -0
- data/lib/active_mongoid/associations/metadata.rb +229 -0
- data/lib/active_mongoid/associations/one.rb +21 -0
- data/lib/active_mongoid/associations/proxy.rb +38 -0
- data/lib/active_mongoid/associations/record_relation/accessors.rb +80 -0
- data/lib/active_mongoid/associations/record_relation/associations.rb +33 -0
- data/lib/active_mongoid/associations/record_relation/auto_save.rb +43 -0
- data/lib/active_mongoid/associations/record_relation/bindings/in.rb +48 -0
- data/lib/active_mongoid/associations/record_relation/bindings/many.rb +19 -0
- data/lib/active_mongoid/associations/record_relation/bindings/one.rb +19 -0
- data/lib/active_mongoid/associations/record_relation/builders.rb +31 -0
- data/lib/active_mongoid/associations/record_relation/dependent.rb +26 -0
- data/lib/active_mongoid/associations/record_relation/macros.rb +65 -0
- data/lib/active_mongoid/associations/record_relation/referenced/in.rb +72 -0
- data/lib/active_mongoid/associations/record_relation/referenced/many.rb +128 -0
- data/lib/active_mongoid/associations/record_relation/referenced/one.rb +75 -0
- data/lib/active_mongoid/associations/targets/enumerable.rb +161 -0
- data/lib/active_mongoid/bson_id.rb +44 -0
- data/lib/active_mongoid/finder_proxy.rb +55 -0
- data/lib/active_mongoid/finders.rb +60 -0
- data/lib/active_mongoid/version.rb +3 -0
- data/spec/lib/associations/document_relation/accessors_spec.rb +330 -0
- data/spec/lib/associations/document_relation/auto_save_spec.rb +157 -0
- data/spec/lib/associations/document_relation/bindings/in_spec.rb +39 -0
- data/spec/lib/associations/document_relation/bindings/many_spec.rb +36 -0
- data/spec/lib/associations/document_relation/bindings/one_spec.rb +39 -0
- data/spec/lib/associations/document_relation/builders_spec.rb +117 -0
- data/spec/lib/associations/document_relation/dependent_spec.rb +87 -0
- data/spec/lib/associations/document_relation/macros_spec.rb +68 -0
- data/spec/lib/associations/document_relation/referenced/in_spec.rb +27 -0
- data/spec/lib/associations/document_relation/referenced/many_spec.rb +32 -0
- data/spec/lib/associations/document_relation/referenced/one_spec.rb +28 -0
- data/spec/lib/associations/metadata_spec.rb +157 -0
- data/spec/lib/associations/record_relation/accessors_spec.rb +328 -0
- data/spec/lib/associations/record_relation/auto_save_spec.rb +157 -0
- data/spec/lib/associations/record_relation/bindings/in_spec.rb +39 -0
- data/spec/lib/associations/record_relation/bindings/many_spec.rb +39 -0
- data/spec/lib/associations/record_relation/bindings/one_spec.rb +57 -0
- data/spec/lib/associations/record_relation/builders_spec.rb +118 -0
- data/spec/lib/associations/record_relation/dependent_spec.rb +87 -0
- data/spec/lib/associations/record_relation/macros_spec.rb +73 -0
- data/spec/lib/associations/record_relation/referenced/in_spec.rb +27 -0
- data/spec/lib/associations/record_relation/referenced/many_spec.rb +32 -0
- data/spec/lib/associations/record_relation/referenced/one_spec.rb +27 -0
- data/spec/lib/bson_id_spec.rb +48 -0
- data/spec/lib/finders_spec.rb +105 -0
- data/spec/spec_helper.rb +89 -0
- data/spec/support/models/active_record/address.rb +6 -0
- data/spec/support/models/active_record/division.rb +16 -0
- data/spec/support/models/active_record/division_setting.rb +9 -0
- data/spec/support/models/active_record/player.rb +12 -0
- data/spec/support/models/mongoid/league.rb +10 -0
- data/spec/support/models/mongoid/person.rb +9 -0
- data/spec/support/models/mongoid/post.rb +9 -0
- data/spec/support/models/mongoid/stat.rb +8 -0
- data/spec/support/models/mongoid/team.rb +9 -0
- data/spec/support/shared_examples/shared_many_spec.rb +411 -0
- metadata +370 -0
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
module ActiveMongoid
|
|
2
|
+
module Finders
|
|
3
|
+
extend ActiveSupport::Concern
|
|
4
|
+
|
|
5
|
+
module ClassMethods
|
|
6
|
+
|
|
7
|
+
def find(*args)
|
|
8
|
+
key = args.flatten.first
|
|
9
|
+
if !key.is_a?(Fixnum) && (key.is_a?(::ActiveMongoid::BSON::ObjectId) || ::ActiveMongoid::BSON::ObjectId.legal?(key))
|
|
10
|
+
where({_id: key.to_s}).first.tap do |obj|
|
|
11
|
+
raise ActiveRecord::RecordNotFound unless obj
|
|
12
|
+
end
|
|
13
|
+
else
|
|
14
|
+
FinderProxy.new(super(*args))
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def where(opts = :chain, *rest)
|
|
19
|
+
if opts && opts.respond_to?(:select)
|
|
20
|
+
bson_opts = opts.select{|k,v| v.is_a?(::ActiveMongoid::BSON::ObjectId)}
|
|
21
|
+
|
|
22
|
+
if bson_opts[:id]
|
|
23
|
+
opts.delete(:id)
|
|
24
|
+
bson_opts[:_id] = bson_opts.delete(:id)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
bson_opts.each do |k,v|
|
|
28
|
+
bson_opts[k] = v.to_s
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
opts.merge!(bson_opts)
|
|
32
|
+
end
|
|
33
|
+
FinderProxy.new(super(opts, *rest))
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def scoped(options = nil)
|
|
37
|
+
FinderProxy.new(super(options))
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def includes(*args)
|
|
41
|
+
FinderProxy.new(super(*args))
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def joins(*args)
|
|
45
|
+
FinderProxy.new(super(*args))
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def select(select = nil)
|
|
49
|
+
FinderProxy.new(
|
|
50
|
+
if block_given?
|
|
51
|
+
load_target.select.each { |e| yield e }
|
|
52
|
+
else
|
|
53
|
+
scoped.select(select)
|
|
54
|
+
end
|
|
55
|
+
)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe ActiveMongoid::Associations::DocumentRelation::Accessors do
|
|
4
|
+
|
|
5
|
+
describe "#\{name}=" do
|
|
6
|
+
|
|
7
|
+
context "when the relation is a has_one" do
|
|
8
|
+
let(:player) { Player.create }
|
|
9
|
+
|
|
10
|
+
context "when the relation does not exist" do
|
|
11
|
+
let!(:person) { player.build_person }
|
|
12
|
+
|
|
13
|
+
it "builds the document" do
|
|
14
|
+
expect(player).to have_person
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
it "does not save the document" do
|
|
19
|
+
expect(person).to_not be_persisted
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
context "when the relation already exists" do
|
|
24
|
+
let!(:original_person) { player.create_person }
|
|
25
|
+
let(:new_person) { Person.new }
|
|
26
|
+
|
|
27
|
+
before do
|
|
28
|
+
player.person = new_person
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it "substitutes new document" do
|
|
32
|
+
expect(player.person).to eq(new_person)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it "removes old relation" do
|
|
36
|
+
expect(original_person.player_id).to be_nil
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
context "when foreign_key is defined" do
|
|
41
|
+
let!(:post) { player.build_post }
|
|
42
|
+
|
|
43
|
+
it "build the document" do
|
|
44
|
+
expect(player).to have_post
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
it "binds the reverse" do
|
|
48
|
+
expect(post).to have_player
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
context "when the relation is polymorphic" do
|
|
53
|
+
let(:stat) { Stat.new }
|
|
54
|
+
before do
|
|
55
|
+
player.stat = stat
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
it "builds the document" do
|
|
59
|
+
expect(player).to have_stat
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
it "binds the reverse" do
|
|
63
|
+
expect(stat).to have_target
|
|
64
|
+
expect(stat.target).to eq(player)
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
context "when relation is a belongs_to" do
|
|
71
|
+
context "when inverse is has_one_record" do
|
|
72
|
+
let(:division) { Division.create }
|
|
73
|
+
|
|
74
|
+
context "when the relation does not exist" do
|
|
75
|
+
|
|
76
|
+
let!(:league) do
|
|
77
|
+
division.build_league
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
it "builds the document" do
|
|
81
|
+
expect(division).to have_league
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
it "does not save the document" do
|
|
85
|
+
expect(league).to_not be_persisted
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
context "when the relation already exists" do
|
|
91
|
+
let!(:original_league) { division.create_league }
|
|
92
|
+
let(:new_league) { League.new }
|
|
93
|
+
|
|
94
|
+
before do
|
|
95
|
+
division.league = new_league
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
it "substitutes new document" do
|
|
99
|
+
expect(division.league).to eq(new_league)
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
it "removes old relation" do
|
|
103
|
+
expect(division.league_id).to eq(new_league.id)
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
context "when the relation is polymorphic" do
|
|
108
|
+
let(:address) { Address.create }
|
|
109
|
+
let(:league) { League.create }
|
|
110
|
+
|
|
111
|
+
before do
|
|
112
|
+
address.target = league
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
it "builds the document" do
|
|
116
|
+
expect(address).to have_target
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
it "sets the attributes" do
|
|
120
|
+
expect(address.target_id).to eq(league.id)
|
|
121
|
+
expect(address.target_type).to eq(league.class.to_s)
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
it "reloads the document" do
|
|
125
|
+
expect(address.target(true)).to eq(league)
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
it "binds the inverse" do
|
|
129
|
+
expect(league.address).to eq(address)
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
context "when inverse is a has_many_records" do
|
|
135
|
+
let(:player) { Player.create }
|
|
136
|
+
|
|
137
|
+
context "when the relation does not exist" do
|
|
138
|
+
let!(:team) { player.build_team }
|
|
139
|
+
|
|
140
|
+
it "builds the document" do
|
|
141
|
+
expect(player).to have_team
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
it "does not save the document" do
|
|
145
|
+
expect(team).to_not be_persisted
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
it "binds the inverse" do
|
|
149
|
+
expect(team.players).to eq([player])
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
context "when the relation already exists" do
|
|
155
|
+
let!(:original_team) { player.create_team }
|
|
156
|
+
let(:new_team) { Team.new }
|
|
157
|
+
|
|
158
|
+
before do
|
|
159
|
+
player.team = new_team
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
it "substitutes new document" do
|
|
163
|
+
expect(player.team).to eq(new_team)
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
it "removes old relation" do
|
|
167
|
+
expect(player.team_id).to eq(new_team.id)
|
|
168
|
+
end
|
|
169
|
+
end
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
context "when the relation is a has_many_documents" do
|
|
175
|
+
let(:division) { Division.create }
|
|
176
|
+
let(:teams) { [Team.new] }
|
|
177
|
+
|
|
178
|
+
context "when the relation does not exist" do
|
|
179
|
+
|
|
180
|
+
before do
|
|
181
|
+
division.teams = teams
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
it "builds the document" do
|
|
185
|
+
expect(division).to have_teams
|
|
186
|
+
end
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
context "when the relation already exists" do
|
|
190
|
+
let!(:original_teams) { [division.teams.create] }
|
|
191
|
+
let(:new_teams) { [Team.new] }
|
|
192
|
+
|
|
193
|
+
before do
|
|
194
|
+
division.teams = new_teams
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
it "substitutes new document" do
|
|
198
|
+
expect(division.teams).to eq(new_teams)
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
it "removes old relation" do
|
|
202
|
+
original_teams.each do |team|
|
|
203
|
+
expect(team.division_id).to be_nil
|
|
204
|
+
end
|
|
205
|
+
end
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
context "when the relation is polymorphic" do
|
|
209
|
+
let(:address) { Address.new }
|
|
210
|
+
let(:person) { Person.create }
|
|
211
|
+
|
|
212
|
+
before do
|
|
213
|
+
person.addresses = [address]
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
it "builds the document" do
|
|
217
|
+
expect(person.addresses).to eq([address])
|
|
218
|
+
end
|
|
219
|
+
|
|
220
|
+
it "sets the attributes" do
|
|
221
|
+
expect(address.target_id).to eq(person.id)
|
|
222
|
+
expect(address.target_type).to eq(person.class.to_s)
|
|
223
|
+
end
|
|
224
|
+
|
|
225
|
+
it "binds the inverse" do
|
|
226
|
+
expect(address).to have_target
|
|
227
|
+
end
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
end
|
|
231
|
+
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
describe "#\{name}" do
|
|
235
|
+
context "when the relation is a has_one_document" do
|
|
236
|
+
let(:player) { Player.create }
|
|
237
|
+
|
|
238
|
+
context "when relation exists" do
|
|
239
|
+
before do
|
|
240
|
+
Person.create(player_id: player.id)
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
it "finds the document" do
|
|
244
|
+
expect(player).to have_person
|
|
245
|
+
end
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
context "when relation does not exist" do
|
|
249
|
+
it "does not find the document" do
|
|
250
|
+
expect(player).to_not have_person
|
|
251
|
+
end
|
|
252
|
+
end
|
|
253
|
+
|
|
254
|
+
context "when relation is polymorphic" do
|
|
255
|
+
let!(:stat) { Stat.create(target_id: player.id, target_type: player.class) }
|
|
256
|
+
|
|
257
|
+
it "finds the document" do
|
|
258
|
+
expect(player.stat).to eq(stat)
|
|
259
|
+
end
|
|
260
|
+
end
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
context "when the relation is a belongs_to_document" do
|
|
264
|
+
let(:league) { League.create }
|
|
265
|
+
|
|
266
|
+
context "when relation exists" do
|
|
267
|
+
let(:division) { Division.new(league_id: league.id) }
|
|
268
|
+
|
|
269
|
+
it "builds the record" do
|
|
270
|
+
expect(division).to have_league
|
|
271
|
+
expect(division.league).to eq(league)
|
|
272
|
+
end
|
|
273
|
+
end
|
|
274
|
+
|
|
275
|
+
context "when relation does not exist" do
|
|
276
|
+
let(:divison) { Division.new }
|
|
277
|
+
|
|
278
|
+
it "does not find record" do
|
|
279
|
+
expect(divison).to_not have_league
|
|
280
|
+
end
|
|
281
|
+
end
|
|
282
|
+
|
|
283
|
+
context "when relation is polymorphic" do
|
|
284
|
+
let(:address) { Address.create(target_id: league.id, target_type: league.class) }
|
|
285
|
+
|
|
286
|
+
it "finds the document" do
|
|
287
|
+
expect(address.target).to eq(league)
|
|
288
|
+
end
|
|
289
|
+
end
|
|
290
|
+
|
|
291
|
+
end
|
|
292
|
+
|
|
293
|
+
context "when the relation is a has_many_documents" do
|
|
294
|
+
let(:division) { Division.create }
|
|
295
|
+
|
|
296
|
+
context "when relation exists" do
|
|
297
|
+
before do
|
|
298
|
+
Team.create(name: 'b', division_id: division.id)
|
|
299
|
+
Team.create(name: 'a', division_id: division.id)
|
|
300
|
+
end
|
|
301
|
+
|
|
302
|
+
it "finds the records" do
|
|
303
|
+
expect(division).to have_teams
|
|
304
|
+
end
|
|
305
|
+
|
|
306
|
+
it "finds the records in order" do
|
|
307
|
+
expect(division.teams.first.name).to eq('a')
|
|
308
|
+
expect(division.teams.last.name).to eq('b')
|
|
309
|
+
end
|
|
310
|
+
end
|
|
311
|
+
|
|
312
|
+
context "when relation does not exist" do
|
|
313
|
+
it "does not find the document" do
|
|
314
|
+
expect(division).to_not have_teams
|
|
315
|
+
end
|
|
316
|
+
end
|
|
317
|
+
|
|
318
|
+
context "when relation is polymorphic" do
|
|
319
|
+
let!(:stat) { Stat.create(target_id: division.id, target_type: division.class) }
|
|
320
|
+
|
|
321
|
+
it "finds the document" do
|
|
322
|
+
expect(division.stats).to eq([stat])
|
|
323
|
+
end
|
|
324
|
+
end
|
|
325
|
+
|
|
326
|
+
end
|
|
327
|
+
|
|
328
|
+
end
|
|
329
|
+
|
|
330
|
+
end
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
describe ActiveMongoid::Associations::DocumentRelation::AutoSave do
|
|
4
|
+
|
|
5
|
+
describe ".autosave_documents" do
|
|
6
|
+
|
|
7
|
+
describe "relation is a has_one" do
|
|
8
|
+
|
|
9
|
+
before(:all) do
|
|
10
|
+
Player.autosave_documents(Player.am_relations["person"].merge!(autosave: true))
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
after(:all) do
|
|
14
|
+
Player.reset_callbacks(:save)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
let(:player) do
|
|
18
|
+
Player.new
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
context "when the option is provided" do
|
|
22
|
+
|
|
23
|
+
let(:person) do
|
|
24
|
+
Person.new(name: "Foo")
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
before do
|
|
28
|
+
player.person = person
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
context "when saving the parent document" do
|
|
32
|
+
|
|
33
|
+
before do
|
|
34
|
+
player.save
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it "does save the self" do
|
|
38
|
+
expect(player).to be_persisted
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it "does save the relation" do
|
|
42
|
+
expect(person).to be_persisted
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it "does save the relation id" do
|
|
46
|
+
expect(player.id).to_not be_nil
|
|
47
|
+
expect(person.player_id).to eq(player.id)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
describe "relation is a belongs_to" do
|
|
57
|
+
|
|
58
|
+
before(:all) do
|
|
59
|
+
Division.autosave_documents(Division.am_relations["league"].merge!(autosave: true))
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
after(:all) do
|
|
63
|
+
Division.reset_callbacks(:save)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
let(:division) do
|
|
67
|
+
Division.new
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
context "when the option is provided" do
|
|
71
|
+
|
|
72
|
+
let(:league) do
|
|
73
|
+
League.new(name: "Foo")
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
before do
|
|
77
|
+
division.league = league
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
context "when saving the parent document" do
|
|
81
|
+
|
|
82
|
+
before do
|
|
83
|
+
division.save
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
it "does save self" do
|
|
87
|
+
expect(division).to be_persisted
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
it "does save the relation" do
|
|
91
|
+
expect(league).to be_persisted
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
it "does save the relation id" do
|
|
95
|
+
expect(league.id).to_not be_nil
|
|
96
|
+
expect(division.league_id).to eq(league.id)
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
describe "relation is a has_many" do
|
|
106
|
+
|
|
107
|
+
before(:all) do
|
|
108
|
+
Division.autosave_documents(Division.am_relations["teams"].merge!(autosave: true))
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
after(:all) do
|
|
112
|
+
Division.reset_callbacks(:save)
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
let(:division) do
|
|
116
|
+
Division.new
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
let(:team) do
|
|
120
|
+
Team.new(name: "Foo")
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
context "when the option is provided" do
|
|
124
|
+
|
|
125
|
+
before do
|
|
126
|
+
division.teams << team
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
context "when saving the parent document" do
|
|
130
|
+
|
|
131
|
+
before do
|
|
132
|
+
division.save
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
it "does save self" do
|
|
136
|
+
expect(division).to be_persisted
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
it "does save the relation" do
|
|
140
|
+
expect(team).to be_persisted
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
it "does save the relation id" do
|
|
144
|
+
expect(division.id).to_not be_nil
|
|
145
|
+
expect(team.division_id).to eq(division.id)
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
end
|
|
157
|
+
|