mongo_mapper 0.15.5 → 0.15.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -10,10 +10,14 @@ module CallbacksSupport
10
10
  :before_save, :after_save,
11
11
  :before_destroy, :after_destroy
12
12
  ].each do |callback|
13
- base.send(callback) do
13
+ base.send(callback, if: :always_true) do
14
14
  history << callback.to_sym
15
15
  end
16
16
  end
17
+
18
+ base.send(:define_method, :always_true) do
19
+ true
20
+ end
17
21
  end
18
22
 
19
23
  def history
@@ -1,65 +1,57 @@
1
1
  require 'spec_helper'
2
2
 
3
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
4
  describe 'shard_key_fields' do
13
5
  it 'returns declared field names' do
14
- sharded_model.shard_key_fields.should == ['first_name', 'last_name']
6
+ ShardedModel.shard_key_fields.should == ['first_name']
15
7
  end
16
8
  end
17
9
 
18
10
  describe 'shard_key_filter' do
19
11
  context 'new record' do
20
- let(:document) { sharded_model.new(first_name: 'John', last_name: 'Smith') }
12
+ let(:document) { ShardedModel.new(first_name: 'John', last_name: 'Smith') }
21
13
 
22
14
  it 'returns current values' do
23
- document.shard_key_filter.should == { 'first_name' => 'John', 'last_name' => 'Smith' }
15
+ document.shard_key_filter.should == { 'first_name' => 'John' }
24
16
  end
25
17
  end
26
18
 
27
19
  context 'persisted record' do
28
- let(:document) { sharded_model.create!(first_name: 'John', last_name: 'Smith') }
20
+ let(:document) { ShardedModel.create!(first_name: 'John', last_name: 'Smith') }
29
21
 
30
22
  before do
31
23
  document.first_name = 'William'
32
24
  end
33
25
 
34
26
  it 'returns persisted values' do
35
- document.shard_key_filter.should == { 'first_name' => 'John', 'last_name' => 'Smith' }
27
+ document.shard_key_filter.should == { 'first_name' => 'John' }
36
28
  end
37
29
  end
38
30
  end
39
31
 
40
32
  context 'creating new document' do
41
- let(:document) { sharded_model.new(first_name: 'John', last_name: 'Smith') }
33
+ let(:document) { ShardedModel.new(first_name: 'John', last_name: 'Smith') }
42
34
 
43
35
  it 'inserts new document' do
44
- lambda { document.save! }.should change { sharded_model.count }.by(1)
36
+ lambda { document.save! }.should change { ShardedModel.count }.by(1)
45
37
 
46
- persisted = sharded_model.find(document.id)
38
+ persisted = ShardedModel.find(document.id)
47
39
  persisted.first_name.should == 'John'
48
40
  persisted.last_name.should == 'Smith'
49
41
  end
50
42
  end
51
43
 
52
44
  context 'updating persisted document' do
53
- let(:document) { sharded_model.create!(first_name: 'John', last_name: 'Smith') }
45
+ let(:document) { ShardedModel.create!(first_name: 'John', last_name: 'Smith') }
54
46
 
55
47
  before do
56
48
  document.first_name = 'William'
57
49
  end
58
50
 
59
51
  it 'updates persisted document' do
60
- lambda { document.save! }.should_not change { sharded_model.count }
52
+ lambda { document.save! }.should_not change { ShardedModel.count }
61
53
 
62
- persisted = sharded_model.find(document.id)
54
+ persisted = ShardedModel.find(document.id)
63
55
  persisted.first_name.should == 'William'
64
56
  persisted.last_name.should == 'Smith'
65
57
  end
@@ -0,0 +1,24 @@
1
+ class ShardedModel
2
+ include MongoMapper::Document
3
+
4
+ key :first_name, String
5
+ key :last_name, String
6
+ shard_key :first_name
7
+ end
8
+
9
+ if ENV.fetch("ENABLE_SHARDING", "0") == "1"
10
+ client = MongoMapper.connection
11
+ database = MongoMapper.database
12
+
13
+ # https://www.mongodb.com/docs/manual/reference/command/enableSharding/#mongodb-dbcommand-dbcmd.enableSharding
14
+ client.use(:admin).command(enableSharding: database.name)
15
+
16
+ # https://www.mongodb.com/docs/manual/reference/command/shardCollection/#mongodb-dbcommand-dbcmd.shardCollection
17
+ # Note: this command automatically creates the index for the empty collection
18
+ client.use(:admin).command(
19
+ shardCollection: [database.name, ShardedModel.collection.name].join("."),
20
+ key: {
21
+ first_name: "hashed",
22
+ },
23
+ )
24
+ end
@@ -88,7 +88,7 @@ describe "Document" do
88
88
  end
89
89
 
90
90
  it "should be recorded" do
91
- Message.descendants.should == [Enter, Exit, Chat]
91
+ Message.descendants.should contain_exactly(Enter, Exit, Chat)
92
92
  end
93
93
  end
94
94
 
@@ -220,10 +220,10 @@ describe "EmbeddedDocument" do
220
220
  end
221
221
 
222
222
  it "should be recorded" do
223
- Grandparent.direct_descendants.should == [Parent]
224
- Grandparent.descendants.to_set.should == [Parent, Child, OtherChild].to_set
223
+ Grandparent.direct_descendants.should contain_exactly(Parent)
224
+ Grandparent.descendants.to_set.should contain_exactly(Parent, Child, OtherChild)
225
225
 
226
- Parent.descendants.should == [Child, OtherChild]
226
+ Parent.descendants.should contain_exactly(Child, OtherChild)
227
227
  end
228
228
  end
229
229
  end
@@ -71,7 +71,7 @@ describe "MongoMapper" do
71
71
  'development' => {'hosts' => ['127.0.0.1:27017'], 'database' => 'test', 'read' => 'primary'}
72
72
  }
73
73
  logger = double('logger')
74
- Mongo::Client.should_receive(:new).with(['127.0.0.1:27017'], :logger => logger, :read => :primary, :database => 'test')
74
+ Mongo::Client.should_receive(:new).with(['127.0.0.1:27017'], { :logger => logger, :read => :primary, :database => 'test' })
75
75
  MongoMapper.connect('development', :logger => logger)
76
76
  end
77
77
 
@@ -80,7 +80,7 @@ describe "MongoMapper" do
80
80
  'development' => {'hosts' => ['192.168.1.1:2222'], 'database' => 'test', 'safe' => true}
81
81
  }
82
82
  logger = double('logger')
83
- Mongo::Client.should_receive(:new).with(['192.168.1.1:2222'], :logger => logger, :safe => true, :database => 'test')
83
+ Mongo::Client.should_receive(:new).with(['192.168.1.1:2222'], { :logger => logger, :safe => true, :database => 'test' })
84
84
  MongoMapper.connect('development', :logger => logger)
85
85
  end
86
86
 
@@ -89,7 +89,7 @@ describe "MongoMapper" do
89
89
  'development' => {'uri' => 'mongodb://127.0.0.1:27017/test', 'options'=> {:foo => 1}}
90
90
  }
91
91
  logger = double('logger')
92
- Mongo::Client.should_receive(:new).with('mongodb://127.0.0.1:27017/test', :logger => logger, :foo => 1)
92
+ Mongo::Client.should_receive(:new).with('mongodb://127.0.0.1:27017/test', { :logger => logger, :foo => 1 })
93
93
  MongoMapper.connect('development', :logger => logger)
94
94
  end
95
95
 
@@ -97,7 +97,7 @@ describe "MongoMapper" do
97
97
  MongoMapper.config = {
98
98
  'development' => {'hosts' => ['127.0.0.1:27017'], 'database' => 'test', 'user' => 'john', 'password' => 'secret'}
99
99
  }
100
- Mongo::Client.should_receive(:new).with(['127.0.0.1:27017'], :database => 'test', :user => 'john', :password => 'secret')
100
+ Mongo::Client.should_receive(:new).with(['127.0.0.1:27017'], { :database => 'test', :user => 'john', :password => 'secret' })
101
101
  MongoMapper.connect('development')
102
102
  end
103
103
 
@@ -129,9 +129,14 @@ describe "MongoMapper" do
129
129
  it "should work as shortcut for setting config, environment and options" do
130
130
  config, logger = double('config'), double('logger')
131
131
  MongoMapper.should_receive(:config=).with(config)
132
- MongoMapper.should_receive(:connect).with('development', :logger => logger)
132
+ MongoMapper.should_receive(:connect).with('development', { :logger => logger })
133
133
  MongoMapper.should_receive(:handle_passenger_forking).once
134
134
  MongoMapper.setup(config, 'development', :logger => logger)
135
135
  end
136
+
137
+ it "should use the right reconnect method" do
138
+ Mongo::Client.instance_methods.should_not include(:connect) # v1
139
+ Mongo::Client.instance_methods.should include(:reconnect) # v1
140
+ end
136
141
  end
137
142
  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.5
4
+ version: 0.15.6
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: 2022-02-18 00:00:00.000000000 Z
13
+ date: 2022-06-10 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: mongo
@@ -271,6 +271,7 @@ files:
271
271
  - spec/spec_helper.rb
272
272
  - spec/support/matchers.rb
273
273
  - spec/support/models.rb
274
+ - spec/support/sharded_model.rb
274
275
  - spec/unit/associations/base_spec.rb
275
276
  - spec/unit/associations/belongs_to_association_spec.rb
276
277
  - spec/unit/associations/many_association_spec.rb
@@ -320,7 +321,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
320
321
  - !ruby/object:Gem::Version
321
322
  version: '0'
322
323
  requirements: []
323
- rubygems_version: 3.1.6
324
+ rubygems_version: 3.3.7
324
325
  signing_key:
325
326
  specification_version: 4
326
327
  summary: A Ruby Object Mapper for Mongo