mongo_mapper 0.15.1 → 0.15.5
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 +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
@@ -269,4 +269,37 @@ describe "BelongsToProxy" do
|
|
269
269
|
end.should_not raise_error
|
270
270
|
end
|
271
271
|
end
|
272
|
+
|
273
|
+
context "foreign_key=" do
|
274
|
+
it "should reset parent when foreign key is changed" do
|
275
|
+
post = @post_class.create!
|
276
|
+
comment = @comment_class.create!(post: post)
|
277
|
+
another_post = @post_class.create!
|
278
|
+
|
279
|
+
comment.post.should == post
|
280
|
+
|
281
|
+
comment.post_id = another_post.id
|
282
|
+
|
283
|
+
comment.post.should == another_post
|
284
|
+
|
285
|
+
comment.post_id = nil
|
286
|
+
|
287
|
+
comment.post.should == nil
|
288
|
+
end
|
289
|
+
|
290
|
+
it "should reset parent when foreign key is changed from nil" do
|
291
|
+
post = @post_class.create!
|
292
|
+
comment = @comment_class.create!(post: nil)
|
293
|
+
|
294
|
+
comment.post.should == nil
|
295
|
+
|
296
|
+
comment.post_id = post.id
|
297
|
+
|
298
|
+
comment.post.should == post
|
299
|
+
|
300
|
+
comment.post_id = nil
|
301
|
+
|
302
|
+
comment.post.should == nil
|
303
|
+
end
|
304
|
+
end
|
272
305
|
end
|
@@ -97,4 +97,32 @@ describe "OneEmbeddedProxy" do
|
|
97
97
|
post.author.address.id.should_not be_nil
|
98
98
|
end
|
99
99
|
|
100
|
+
it "should keep the reference to assigned document" do
|
101
|
+
@post_class.one(:author, :class => @author_class)
|
102
|
+
post = @post_class.new
|
103
|
+
new_author = @author_class.new
|
104
|
+
post.author = new_author
|
105
|
+
new_author.name = 'Frank'
|
106
|
+
|
107
|
+
post.author.name.should == 'Frank'
|
108
|
+
end
|
109
|
+
|
110
|
+
it "should update references for parent and root" do
|
111
|
+
@post_class.key(:author_name, String)
|
112
|
+
@post_class.one(:author, :class => @author_class)
|
113
|
+
@post_class.before_save do
|
114
|
+
self.author_name = author.name
|
115
|
+
end
|
116
|
+
|
117
|
+
author = @author_class.new
|
118
|
+
@post_class.create!(author: author)
|
119
|
+
author.save!
|
120
|
+
|
121
|
+
post = @post_class.create!(author: author)
|
122
|
+
post.author.name = 'Frank'
|
123
|
+
post.author.save!
|
124
|
+
|
125
|
+
post.author.name.should == 'Frank'
|
126
|
+
post.author_name.should == 'Frank'
|
127
|
+
end
|
100
128
|
end
|
@@ -403,4 +403,14 @@ describe "OneProxy" do
|
|
403
403
|
article.paper_id.should == @paper.id
|
404
404
|
end
|
405
405
|
end
|
406
|
-
|
406
|
+
|
407
|
+
it "should keep the reference to assigned document" do
|
408
|
+
@post_class.one(:author, :class => @author_class)
|
409
|
+
post = @post_class.new
|
410
|
+
new_author = @author_class.new
|
411
|
+
post.author = new_author
|
412
|
+
new_author.name = 'Frank'
|
413
|
+
|
414
|
+
post.author.name.should == 'Frank'
|
415
|
+
end
|
416
|
+
end
|
@@ -280,6 +280,27 @@ describe "Dirty" do
|
|
280
280
|
end
|
281
281
|
end
|
282
282
|
|
283
|
+
context "Document having Array key with typecast option" do
|
284
|
+
before do
|
285
|
+
@author_id = BSON::ObjectId.new
|
286
|
+
@doc = Doc('Book') { key :author_ids, Array, typecast: "ObjectId" }
|
287
|
+
@doc.plugin MongoMapper::Plugins::Dirty
|
288
|
+
@book = @doc.create!(author_ids: [@author_id])
|
289
|
+
end
|
290
|
+
|
291
|
+
context "changed" do
|
292
|
+
it "should be empty if assigned the same array" do
|
293
|
+
@book.author_ids = [@author_id]
|
294
|
+
@book.changed.should be_empty
|
295
|
+
end
|
296
|
+
|
297
|
+
it "should be empty if assigned the same but before-typecasted array" do
|
298
|
+
@book.author_ids = [@author_id.to_s]
|
299
|
+
@book.changed.should be_empty
|
300
|
+
end
|
301
|
+
end
|
302
|
+
end
|
303
|
+
|
283
304
|
context "Embedded documents" do
|
284
305
|
before do
|
285
306
|
@edoc = EDoc('Duck') { key :name, String }
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'DirtyWithCallbacks' do
|
4
|
+
it 'should update its changes/previous_changes before after_create/after_update callbacks' do
|
5
|
+
history = {}
|
6
|
+
|
7
|
+
document = Doc {
|
8
|
+
key :x, String
|
9
|
+
|
10
|
+
after_save {
|
11
|
+
history[:after_save] = {
|
12
|
+
changes: changes,
|
13
|
+
previous_changes: previous_changes,
|
14
|
+
}
|
15
|
+
}
|
16
|
+
after_create {
|
17
|
+
history[:after_create] = {
|
18
|
+
changes: changes,
|
19
|
+
previous_changes: previous_changes,
|
20
|
+
}
|
21
|
+
}
|
22
|
+
after_update {
|
23
|
+
history[:after_update] = {
|
24
|
+
changes: changes,
|
25
|
+
previous_changes: previous_changes,
|
26
|
+
}
|
27
|
+
}
|
28
|
+
}
|
29
|
+
|
30
|
+
d = document.new(x: 'hello')
|
31
|
+
d.save
|
32
|
+
|
33
|
+
history.should == {
|
34
|
+
after_save: {
|
35
|
+
changes: {},
|
36
|
+
previous_changes: {'x' => [nil, 'hello']},
|
37
|
+
},
|
38
|
+
after_create: {
|
39
|
+
changes: {},
|
40
|
+
previous_changes: {'x' => [nil, 'hello']},
|
41
|
+
},
|
42
|
+
}
|
43
|
+
history.clear
|
44
|
+
|
45
|
+
d.x = 'world'
|
46
|
+
d.save!
|
47
|
+
|
48
|
+
history.should == {
|
49
|
+
after_save: {
|
50
|
+
changes: {},
|
51
|
+
previous_changes: {'x' => ['hello', 'world']},
|
52
|
+
},
|
53
|
+
after_update: {
|
54
|
+
changes: {},
|
55
|
+
previous_changes: {'x' => ['hello', 'world']},
|
56
|
+
},
|
57
|
+
}
|
58
|
+
end
|
59
|
+
end
|
@@ -352,6 +352,19 @@ describe "Keys" do
|
|
352
352
|
it 'should remove the key' do
|
353
353
|
DocWithRemovedKey.keys.should_not have_key "_something"
|
354
354
|
end
|
355
|
+
end
|
356
|
+
|
357
|
+
describe "default with no type" do
|
358
|
+
it "should work (regression)" do
|
359
|
+
doc = Doc do
|
360
|
+
key :a_num, default: 0
|
361
|
+
end
|
355
362
|
|
363
|
+
instance = doc.new
|
364
|
+
instance.a_num.should == 0
|
365
|
+
|
366
|
+
instance = doc.new(a_num: 10)
|
367
|
+
instance.a_num.should == 10
|
368
|
+
end
|
356
369
|
end
|
357
370
|
end
|
@@ -200,6 +200,19 @@ describe "Scopes" do
|
|
200
200
|
Blog.scopes.keys.map(&:to_s).should =~ %w(by_slug by_title published)
|
201
201
|
end
|
202
202
|
end
|
203
|
+
|
204
|
+
context 'with predefined class method name' do
|
205
|
+
it 'should raise ArgumentError' do
|
206
|
+
bad_names = %i(private public protected allocate new name parent superclass reload)
|
207
|
+
bad_names.each do |bad_name|
|
208
|
+
-> {
|
209
|
+
Doc() do
|
210
|
+
scope bad_name, -> {}
|
211
|
+
end
|
212
|
+
}.should raise_error(ArgumentError, /You tried to define a scope named "#{bad_name}"/)
|
213
|
+
end
|
214
|
+
end
|
215
|
+
end
|
203
216
|
end
|
204
217
|
|
205
218
|
describe "with_scope" do
|
@@ -434,4 +447,79 @@ describe "Scopes" do
|
|
434
447
|
@klass.unsent.sorted.all.should == [two_days_ago, one_day_ago]
|
435
448
|
end
|
436
449
|
end
|
450
|
+
|
451
|
+
describe "thread safety" do
|
452
|
+
before do
|
453
|
+
@klass = Doc do
|
454
|
+
key :name, String
|
455
|
+
end
|
456
|
+
|
457
|
+
@threads = []
|
458
|
+
end
|
459
|
+
|
460
|
+
after do
|
461
|
+
@threads.each do |thread|
|
462
|
+
thread.kill
|
463
|
+
end
|
464
|
+
end
|
465
|
+
|
466
|
+
def make_thread(&block)
|
467
|
+
Thread.new(&block).tap do |thread|
|
468
|
+
@threads << thread
|
469
|
+
end
|
470
|
+
end
|
471
|
+
|
472
|
+
def wait_for_threads!
|
473
|
+
@threads.each { |t| t.join }
|
474
|
+
end
|
475
|
+
|
476
|
+
it "should not taint another thread's active scopes" do
|
477
|
+
count_active_scopes = nil
|
478
|
+
second_thread_run = false
|
479
|
+
|
480
|
+
make_thread do
|
481
|
+
@klass.with_scope(name: 'foo') do
|
482
|
+
loop do
|
483
|
+
sleep Float::EPSILON
|
484
|
+
break if second_thread_run
|
485
|
+
end
|
486
|
+
end
|
487
|
+
end
|
488
|
+
|
489
|
+
make_thread do
|
490
|
+
count_active_scopes = @klass.active_scopes.length
|
491
|
+
second_thread_run = true
|
492
|
+
end
|
493
|
+
|
494
|
+
wait_for_threads!
|
495
|
+
|
496
|
+
count_active_scopes.should == 0
|
497
|
+
end
|
498
|
+
|
499
|
+
it "should not taint another thread's count method" do
|
500
|
+
@klass.create!(name: 'foo')
|
501
|
+
@klass.create!(name: 'bar')
|
502
|
+
|
503
|
+
klass_count = nil
|
504
|
+
second_thread_run = false
|
505
|
+
|
506
|
+
make_thread do
|
507
|
+
@klass.with_scope(name: 'foo') do
|
508
|
+
loop do
|
509
|
+
sleep Float::EPSILON
|
510
|
+
break if second_thread_run
|
511
|
+
end
|
512
|
+
end
|
513
|
+
end
|
514
|
+
|
515
|
+
make_thread do
|
516
|
+
klass_count = @klass.count
|
517
|
+
second_thread_run = true
|
518
|
+
end
|
519
|
+
|
520
|
+
wait_for_threads!
|
521
|
+
|
522
|
+
klass_count.should == 2
|
523
|
+
end
|
524
|
+
end
|
437
525
|
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'Shardable' do
|
4
|
+
let(:sharded_model) {
|
5
|
+
Doc do
|
6
|
+
key :first_name, String
|
7
|
+
key :last_name, String
|
8
|
+
shard_key :first_name, :last_name
|
9
|
+
end
|
10
|
+
}
|
11
|
+
|
12
|
+
describe 'shard_key_fields' do
|
13
|
+
it 'returns declared field names' do
|
14
|
+
sharded_model.shard_key_fields.should == ['first_name', 'last_name']
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe 'shard_key_filter' do
|
19
|
+
context 'new record' do
|
20
|
+
let(:document) { sharded_model.new(first_name: 'John', last_name: 'Smith') }
|
21
|
+
|
22
|
+
it 'returns current values' do
|
23
|
+
document.shard_key_filter.should == { 'first_name' => 'John', 'last_name' => 'Smith' }
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
context 'persisted record' do
|
28
|
+
let(:document) { sharded_model.create!(first_name: 'John', last_name: 'Smith') }
|
29
|
+
|
30
|
+
before do
|
31
|
+
document.first_name = 'William'
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'returns persisted values' do
|
35
|
+
document.shard_key_filter.should == { 'first_name' => 'John', 'last_name' => 'Smith' }
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
context 'creating new document' do
|
41
|
+
let(:document) { sharded_model.new(first_name: 'John', last_name: 'Smith') }
|
42
|
+
|
43
|
+
it 'inserts new document' do
|
44
|
+
lambda { document.save! }.should change { sharded_model.count }.by(1)
|
45
|
+
|
46
|
+
persisted = sharded_model.find(document.id)
|
47
|
+
persisted.first_name.should == 'John'
|
48
|
+
persisted.last_name.should == 'Smith'
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
context 'updating persisted document' do
|
53
|
+
let(:document) { sharded_model.create!(first_name: 'John', last_name: 'Smith') }
|
54
|
+
|
55
|
+
before do
|
56
|
+
document.first_name = 'William'
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'updates persisted document' do
|
60
|
+
lambda { document.save! }.should_not change { sharded_model.count }
|
61
|
+
|
62
|
+
persisted = sharded_model.find(document.id)
|
63
|
+
persisted.first_name.should == 'William'
|
64
|
+
persisted.last_name.should == 'Smith'
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -2,6 +2,13 @@ $:.unshift(File.expand_path('../../lib', __FILE__))
|
|
2
2
|
|
3
3
|
require 'rubygems'
|
4
4
|
require 'bundler/setup'
|
5
|
+
|
6
|
+
# workaround for https://github.com/jruby/jruby/issues/6547
|
7
|
+
if RUBY_PLATFORM == 'java'
|
8
|
+
require 'i18n/backend'
|
9
|
+
require 'i18n/backend/simple'
|
10
|
+
end
|
11
|
+
|
5
12
|
Bundler.require(:default)
|
6
13
|
require 'fileutils'
|
7
14
|
require 'timecop'
|
@@ -1,19 +1,19 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
class FakeNilProxy < MongoMapper::Plugins::Associations::Proxy
|
4
|
-
def
|
4
|
+
def load_target; @target ||= nil end
|
5
5
|
end
|
6
6
|
|
7
7
|
class FakeBlankProxy < MongoMapper::Plugins::Associations::Proxy
|
8
|
-
def
|
8
|
+
def load_target; @target ||= '' end
|
9
9
|
end
|
10
10
|
|
11
11
|
class FakeNumberProxy < MongoMapper::Plugins::Associations::Proxy
|
12
|
-
def
|
12
|
+
def load_target; @target ||= 17 end
|
13
13
|
end
|
14
14
|
|
15
15
|
class FakeProxy < MongoMapper::Plugins::Associations::Proxy
|
16
|
-
def
|
16
|
+
def load_target; @target ||= [1, 2] end
|
17
17
|
end
|
18
18
|
|
19
19
|
describe "Proxy" do
|
@@ -32,7 +32,7 @@ describe "Proxy" do
|
|
32
32
|
end
|
33
33
|
|
34
34
|
it "should be able to inspect the proxy" do
|
35
|
-
@proxy.inspect.should ==
|
35
|
+
@proxy.inspect.should == "#<FakeProxy:#{@proxy.object_id} [1, 2]>"
|
36
36
|
end
|
37
37
|
|
38
38
|
context "nil?" do
|
@@ -95,5 +95,30 @@ describe "Proxy" do
|
|
95
95
|
p = Proc.new {|x| x+1}
|
96
96
|
@proxy.send(:collect, &p).should == [2,3]
|
97
97
|
end
|
98
|
+
|
99
|
+
it "should not respond to private method" do
|
100
|
+
@proxy.reload # To load @proxy.target
|
101
|
+
@proxy.target.extend(Module.new do
|
102
|
+
private
|
103
|
+
|
104
|
+
def private_foo
|
105
|
+
end
|
106
|
+
end)
|
107
|
+
|
108
|
+
lambda { @proxy.private_foo }.should raise_error(NoMethodError, /private method `private_foo' called/)
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
context "hash" do
|
113
|
+
it "should return the same value for the same proxy" do
|
114
|
+
proxy_a = FakeProxy.new(@owner, @association)
|
115
|
+
proxy_b = FakeProxy.new(@owner, @association)
|
116
|
+
|
117
|
+
proxy_a.hash.should == proxy_b.hash
|
118
|
+
end
|
119
|
+
|
120
|
+
it "should return different values for different proxies" do
|
121
|
+
@proxy.hash.should_not == @nil_proxy.hash
|
122
|
+
end
|
98
123
|
end
|
99
124
|
end
|
@@ -192,15 +192,21 @@ describe "Support" do
|
|
192
192
|
end
|
193
193
|
end
|
194
194
|
|
195
|
-
context "NilClass
|
195
|
+
context "NilClass.from_mongo" do
|
196
196
|
it "should return nil" do
|
197
|
-
|
197
|
+
NilClass.from_mongo(nil).should be_nil
|
198
|
+
end
|
199
|
+
end
|
200
|
+
|
201
|
+
context "NilClass.to_mongo" do
|
202
|
+
it "should return nil" do
|
203
|
+
NilClass.to_mongo(nil).should be_nil
|
198
204
|
end
|
199
205
|
end
|
200
206
|
|
201
207
|
context "NilClass#to_mongo" do
|
202
208
|
it "should return nil" do
|
203
|
-
nil.to_mongo
|
209
|
+
nil.to_mongo.should be_nil
|
204
210
|
end
|
205
211
|
end
|
206
212
|
|
data/spec/unit/inspect_spec.rb
CHANGED
@@ -31,7 +31,7 @@ describe "Inspect" do
|
|
31
31
|
klass.many :pets, :class => pets
|
32
32
|
|
33
33
|
doc = klass.new(:pets => [{:name => "Kitten"}])
|
34
|
-
doc.inspect.should =~ /_id:.*, pets:
|
34
|
+
doc.inspect.should =~ /_id:.*, pets: .*\[.*_id.*, name: "Kitten".*\]/
|
35
35
|
end
|
36
36
|
|
37
37
|
it "should include embedded document" do
|
data/spec/unit/key_spec.rb
CHANGED
@@ -55,6 +55,7 @@ describe "Key" do
|
|
55
55
|
it "should work with name and options" do
|
56
56
|
key = Key.new(:foo, :required => true)
|
57
57
|
key.name.should == 'foo'
|
58
|
+
key.type.should be_nil
|
58
59
|
key.options[:required].should be_truthy
|
59
60
|
end
|
60
61
|
|
@@ -111,7 +112,12 @@ describe "Key" do
|
|
111
112
|
subject { @key }
|
112
113
|
|
113
114
|
it "should cast each element correctly" do
|
114
|
-
ids = [
|
115
|
+
ids = [
|
116
|
+
BSON::ObjectId.new,
|
117
|
+
BSON::ObjectId.new,
|
118
|
+
BSON::ObjectId.new.to_s,
|
119
|
+
BSON::ObjectId.new.to_s
|
120
|
+
]
|
115
121
|
subject.set(ids).should == ids.map { |id| ObjectId.to_mongo(id) }
|
116
122
|
end
|
117
123
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongo_mapper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.15.
|
4
|
+
version: 0.15.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Nunemaker
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2022-02-18 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: mongo
|
@@ -82,6 +82,20 @@ dependencies:
|
|
82
82
|
- - "~>"
|
83
83
|
- !ruby/object:Gem::Version
|
84
84
|
version: '1.0'
|
85
|
+
- !ruby/object:Gem::Dependency
|
86
|
+
name: rexml
|
87
|
+
requirement: !ruby/object:Gem::Requirement
|
88
|
+
requirements:
|
89
|
+
- - ">="
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
version: '0'
|
92
|
+
type: :runtime
|
93
|
+
prerelease: false
|
94
|
+
version_requirements: !ruby/object:Gem::Requirement
|
95
|
+
requirements:
|
96
|
+
- - ">="
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '0'
|
85
99
|
description: MongoMapper is a Object-Document Mapper for Ruby and Rails
|
86
100
|
email:
|
87
101
|
- nunemaker@gmail.com
|
@@ -137,24 +151,24 @@ files:
|
|
137
151
|
- lib/mongo_mapper/plugins/associations.rb
|
138
152
|
- lib/mongo_mapper/plugins/associations/base.rb
|
139
153
|
- lib/mongo_mapper/plugins/associations/belongs_to_association.rb
|
140
|
-
- lib/mongo_mapper/plugins/associations/belongs_to_polymorphic_proxy.rb
|
141
|
-
- lib/mongo_mapper/plugins/associations/belongs_to_proxy.rb
|
142
|
-
- lib/mongo_mapper/plugins/associations/collection.rb
|
143
|
-
- lib/mongo_mapper/plugins/associations/embedded_collection.rb
|
144
|
-
- lib/mongo_mapper/plugins/associations/in_array_proxy.rb
|
145
|
-
- lib/mongo_mapper/plugins/associations/in_foreign_array_proxy.rb
|
146
154
|
- lib/mongo_mapper/plugins/associations/many_association.rb
|
147
|
-
- lib/mongo_mapper/plugins/associations/many_documents_as_proxy.rb
|
148
|
-
- lib/mongo_mapper/plugins/associations/many_documents_proxy.rb
|
149
|
-
- lib/mongo_mapper/plugins/associations/many_embedded_polymorphic_proxy.rb
|
150
|
-
- lib/mongo_mapper/plugins/associations/many_embedded_proxy.rb
|
151
|
-
- lib/mongo_mapper/plugins/associations/many_polymorphic_proxy.rb
|
152
|
-
- lib/mongo_mapper/plugins/associations/one_as_proxy.rb
|
153
155
|
- lib/mongo_mapper/plugins/associations/one_association.rb
|
154
|
-
- lib/mongo_mapper/plugins/associations/
|
155
|
-
- lib/mongo_mapper/plugins/associations/
|
156
|
-
- lib/mongo_mapper/plugins/associations/
|
157
|
-
- lib/mongo_mapper/plugins/associations/proxy.rb
|
156
|
+
- lib/mongo_mapper/plugins/associations/proxy/belongs_to_polymorphic_proxy.rb
|
157
|
+
- lib/mongo_mapper/plugins/associations/proxy/belongs_to_proxy.rb
|
158
|
+
- lib/mongo_mapper/plugins/associations/proxy/collection.rb
|
159
|
+
- lib/mongo_mapper/plugins/associations/proxy/embedded_collection.rb
|
160
|
+
- lib/mongo_mapper/plugins/associations/proxy/in_array_proxy.rb
|
161
|
+
- lib/mongo_mapper/plugins/associations/proxy/in_foreign_array_proxy.rb
|
162
|
+
- lib/mongo_mapper/plugins/associations/proxy/many_documents_as_proxy.rb
|
163
|
+
- lib/mongo_mapper/plugins/associations/proxy/many_documents_proxy.rb
|
164
|
+
- lib/mongo_mapper/plugins/associations/proxy/many_embedded_polymorphic_proxy.rb
|
165
|
+
- lib/mongo_mapper/plugins/associations/proxy/many_embedded_proxy.rb
|
166
|
+
- lib/mongo_mapper/plugins/associations/proxy/many_polymorphic_proxy.rb
|
167
|
+
- lib/mongo_mapper/plugins/associations/proxy/one_as_proxy.rb
|
168
|
+
- lib/mongo_mapper/plugins/associations/proxy/one_embedded_polymorphic_proxy.rb
|
169
|
+
- lib/mongo_mapper/plugins/associations/proxy/one_embedded_proxy.rb
|
170
|
+
- lib/mongo_mapper/plugins/associations/proxy/one_proxy.rb
|
171
|
+
- lib/mongo_mapper/plugins/associations/proxy/proxy.rb
|
158
172
|
- lib/mongo_mapper/plugins/associations/single_association.rb
|
159
173
|
- lib/mongo_mapper/plugins/caching.rb
|
160
174
|
- lib/mongo_mapper/plugins/callbacks.rb
|
@@ -188,6 +202,7 @@ files:
|
|
188
202
|
- lib/mongo_mapper/plugins/sci.rb
|
189
203
|
- lib/mongo_mapper/plugins/scopes.rb
|
190
204
|
- lib/mongo_mapper/plugins/serialization.rb
|
205
|
+
- lib/mongo_mapper/plugins/shardable.rb
|
191
206
|
- lib/mongo_mapper/plugins/stats.rb
|
192
207
|
- lib/mongo_mapper/plugins/strong_parameters.rb
|
193
208
|
- lib/mongo_mapper/plugins/timestamps.rb
|
@@ -224,6 +239,7 @@ files:
|
|
224
239
|
- spec/functional/callbacks_spec.rb
|
225
240
|
- spec/functional/counter_cache_spec.rb
|
226
241
|
- spec/functional/dirty_spec.rb
|
242
|
+
- spec/functional/dirty_with_callbacks_spec.rb
|
227
243
|
- spec/functional/document_spec.rb
|
228
244
|
- spec/functional/dumpable_spec.rb
|
229
245
|
- spec/functional/dynamic_querying_spec.rb
|
@@ -243,6 +259,7 @@ files:
|
|
243
259
|
- spec/functional/safe_spec.rb
|
244
260
|
- spec/functional/sci_spec.rb
|
245
261
|
- spec/functional/scopes_spec.rb
|
262
|
+
- spec/functional/shardable_spec.rb
|
246
263
|
- spec/functional/static_keys_spec.rb
|
247
264
|
- spec/functional/stats_spec.rb
|
248
265
|
- spec/functional/strong_parameters_spec.rb
|
@@ -303,7 +320,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
303
320
|
- !ruby/object:Gem::Version
|
304
321
|
version: '0'
|
305
322
|
requirements: []
|
306
|
-
rubygems_version: 3.1.
|
323
|
+
rubygems_version: 3.1.6
|
307
324
|
signing_key:
|
308
325
|
specification_version: 4
|
309
326
|
summary: A Ruby Object Mapper for Mongo
|
@@ -1,29 +0,0 @@
|
|
1
|
-
# encoding: UTF-8
|
2
|
-
module MongoMapper
|
3
|
-
module Plugins
|
4
|
-
module Associations
|
5
|
-
class Collection < Proxy
|
6
|
-
def to_ary
|
7
|
-
load_target
|
8
|
-
if target.is_a?(Array)
|
9
|
-
target.to_ary
|
10
|
-
else
|
11
|
-
Array(target)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
alias_method :to_a, :to_ary
|
16
|
-
|
17
|
-
def include?(*args)
|
18
|
-
load_target
|
19
|
-
target.include?(*args)
|
20
|
-
end
|
21
|
-
|
22
|
-
def reset
|
23
|
-
super
|
24
|
-
target = []
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|