mongo_mapper 0.7.0 → 0.7.1
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.
- data/README.rdoc +3 -1
- data/Rakefile +9 -12
- data/lib/mongo_mapper.rb +30 -10
- data/lib/mongo_mapper/document.rb +16 -74
- data/lib/mongo_mapper/embedded_document.rb +7 -1
- data/lib/mongo_mapper/plugins.rb +3 -0
- data/lib/mongo_mapper/plugins/associations/embedded_collection.rb +1 -12
- data/lib/mongo_mapper/plugins/associations/in_array_proxy.rb +6 -1
- data/lib/mongo_mapper/plugins/associations/many_documents_proxy.rb +4 -1
- data/lib/mongo_mapper/plugins/callbacks.rb +183 -12
- data/lib/mongo_mapper/plugins/keys.rb +17 -5
- data/lib/mongo_mapper/plugins/modifiers.rb +87 -0
- data/lib/mongo_mapper/plugins/pagination/proxy.rb +7 -3
- data/lib/mongo_mapper/plugins/protected.rb +1 -1
- data/lib/mongo_mapper/plugins/rails.rb +16 -8
- data/lib/mongo_mapper/plugins/serialization.rb +51 -81
- data/lib/mongo_mapper/plugins/timestamps.rb +21 -0
- data/lib/mongo_mapper/plugins/userstamps.rb +14 -0
- data/lib/mongo_mapper/query.rb +1 -1
- data/lib/mongo_mapper/version.rb +3 -0
- data/mongo_mapper.gemspec +22 -11
- data/test/active_model_lint_test.rb +11 -0
- data/test/functional/associations/test_in_array_proxy.rb +16 -0
- data/test/functional/associations/test_many_documents_proxy.rb +22 -0
- data/test/functional/test_callbacks.rb +104 -34
- data/test/functional/test_document.rb +70 -149
- data/test/functional/test_embedded_document.rb +39 -34
- data/test/functional/test_indexing.rb +44 -0
- data/test/functional/test_modifiers.rb +297 -227
- data/test/functional/test_protected.rb +11 -5
- data/test/functional/test_timestamps.rb +64 -0
- data/test/functional/test_userstamps.rb +28 -0
- data/test/support/timing.rb +1 -1
- data/test/unit/serializers/test_json_serializer.rb +30 -17
- data/test/unit/test_embedded_document.rb +15 -15
- data/test/unit/test_keys.rb +15 -11
- data/test/unit/test_mongo_mapper.rb +31 -1
- data/test/unit/test_pagination.rb +33 -0
- data/test/unit/test_query.rb +6 -0
- data/test/unit/test_serialization.rb +3 -3
- data/test/unit/test_support.rb +9 -5
- metadata +17 -6
- data/VERSION +0 -1
@@ -31,7 +31,6 @@ class MongoMapperTest < Test::Unit::TestCase
|
|
31
31
|
'development' => {'host' => '127.0.0.1', 'port' => 27017, 'database' => 'test'},
|
32
32
|
'production' => {'host' => '127.0.0.1', 'port' => 27017, 'database' => 'test-prod'}
|
33
33
|
}
|
34
|
-
|
35
34
|
MongoMapper.config = config
|
36
35
|
MongoMapper.config.should == config
|
37
36
|
end
|
@@ -41,7 +40,16 @@ class MongoMapperTest < Test::Unit::TestCase
|
|
41
40
|
MongoMapper.config = {
|
42
41
|
'development' => {'host' => '127.0.0.1', 'port' => 27017, 'database' => 'test'}
|
43
42
|
}
|
43
|
+
Mongo::Connection.expects(:new).with('127.0.0.1', 27017, {})
|
44
|
+
MongoMapper.expects(:database=).with('test')
|
45
|
+
Mongo::DB.any_instance.expects(:authenticate).never
|
46
|
+
MongoMapper.connect('development')
|
47
|
+
end
|
44
48
|
|
49
|
+
should "work without authentication using uri" do
|
50
|
+
MongoMapper.config = {
|
51
|
+
'development' => {'uri' => 'mongodb://127.0.0.1:27017/test'}
|
52
|
+
}
|
45
53
|
Mongo::Connection.expects(:new).with('127.0.0.1', 27017, {})
|
46
54
|
MongoMapper.expects(:database=).with('test')
|
47
55
|
Mongo::DB.any_instance.expects(:authenticate).never
|
@@ -52,7 +60,15 @@ class MongoMapperTest < Test::Unit::TestCase
|
|
52
60
|
MongoMapper.config = {
|
53
61
|
'development' => {'host' => '127.0.0.1', 'port' => 27017, 'database' => 'test'}
|
54
62
|
}
|
63
|
+
connection, logger = mock('connection'), mock('logger')
|
64
|
+
Mongo::Connection.expects(:new).with('127.0.0.1', 27017, :logger => logger)
|
65
|
+
MongoMapper.connect('development', :logger => logger)
|
66
|
+
end
|
55
67
|
|
68
|
+
should "work with options using uri" do
|
69
|
+
MongoMapper.config = {
|
70
|
+
'development' => {'uri' => 'mongodb://127.0.0.1:27017/test'}
|
71
|
+
}
|
56
72
|
connection, logger = mock('connection'), mock('logger')
|
57
73
|
Mongo::Connection.expects(:new).with('127.0.0.1', 27017, :logger => logger)
|
58
74
|
MongoMapper.connect('development', :logger => logger)
|
@@ -62,10 +78,24 @@ class MongoMapperTest < Test::Unit::TestCase
|
|
62
78
|
MongoMapper.config = {
|
63
79
|
'development' => {'host' => '127.0.0.1', 'port' => 27017, 'database' => 'test', 'username' => 'john', 'password' => 'secret'}
|
64
80
|
}
|
81
|
+
Mongo::DB.any_instance.expects(:authenticate).with('john', 'secret')
|
82
|
+
MongoMapper.connect('development')
|
83
|
+
end
|
65
84
|
|
85
|
+
should "work with authentication using uri" do
|
86
|
+
MongoMapper.config = {
|
87
|
+
'development' => {'uri' => 'mongodb://john:secret@127.0.0.1:27017/test'}
|
88
|
+
}
|
66
89
|
Mongo::DB.any_instance.expects(:authenticate).with('john', 'secret')
|
67
90
|
MongoMapper.connect('development')
|
68
91
|
end
|
92
|
+
|
93
|
+
should "raise error for invalid scheme" do
|
94
|
+
MongoMapper.config = {
|
95
|
+
'development' => {'uri' => 'mysql://127.0.0.1:5336/foo'}
|
96
|
+
}
|
97
|
+
assert_raises(MongoMapper::InvalidScheme) { MongoMapper.connect('development') }
|
98
|
+
end
|
69
99
|
end
|
70
100
|
|
71
101
|
context "setup" do
|
@@ -12,6 +12,29 @@ class PaginationTest < Test::Unit::TestCase
|
|
12
12
|
context "Pagination proxy" do
|
13
13
|
include MongoMapper::Plugins::Pagination
|
14
14
|
|
15
|
+
should "respond_to? correctly on proxy readers" do
|
16
|
+
proxy = Proxy.new(25, 10, 4)
|
17
|
+
proxy.respond_to?(:subject).should be_true
|
18
|
+
proxy.respond_to?(:total_entries).should be_true
|
19
|
+
proxy.respond_to?(:per_page).should be_true
|
20
|
+
proxy.respond_to?(:current_page).should be_true
|
21
|
+
proxy.respond_to?(:limit).should be_true
|
22
|
+
proxy.respond_to?(:total_pages).should be_true
|
23
|
+
proxy.respond_to?(:out_of_bounds?).should be_true
|
24
|
+
proxy.respond_to?(:previous_page).should be_true
|
25
|
+
proxy.respond_to?(:next_page).should be_true
|
26
|
+
proxy.respond_to?(:skip).should be_true
|
27
|
+
proxy.respond_to?(:offset).should be_true
|
28
|
+
|
29
|
+
# make sure it doesnt respond true to everything
|
30
|
+
proxy.respond_to?(:blahblahblah).should be_false
|
31
|
+
end
|
32
|
+
|
33
|
+
should "respond_to? correctly on proxy writers" do
|
34
|
+
proxy = Proxy.new(25, 10, 4)
|
35
|
+
proxy.respond_to?(:subject=).should be_true
|
36
|
+
end
|
37
|
+
|
15
38
|
should "should have accessors for subject" do
|
16
39
|
subject = [1,2,3,4,5]
|
17
40
|
collection = Proxy.new(25, 2)
|
@@ -31,6 +54,16 @@ class PaginationTest < Test::Unit::TestCase
|
|
31
54
|
collection.class.should == Array
|
32
55
|
end
|
33
56
|
|
57
|
+
should "should respond_to? correctly for methods defined on the subject" do
|
58
|
+
subject = [1,2,3,4,5]
|
59
|
+
def subject.blahblah
|
60
|
+
"BLAHBLAH"
|
61
|
+
end
|
62
|
+
collection = Proxy.new(25, 2, 10)
|
63
|
+
collection.subject = subject
|
64
|
+
collection.respond_to?(:blahblah).should be_true
|
65
|
+
end
|
66
|
+
|
34
67
|
should "return correct value for total_entries" do
|
35
68
|
Proxy.new(25, 2, 10).total_entries.should == 25
|
36
69
|
Proxy.new('25', 2, 10).total_entries.should == 25
|
data/test/unit/test_query.rb
CHANGED
@@ -38,6 +38,8 @@ class QueryTest < Test::Unit::TestCase
|
|
38
38
|
end
|
39
39
|
|
40
40
|
%w{gt lt gte lte ne in nin mod all size where exists}.each do |operator|
|
41
|
+
next if operator == 'size' && RUBY_VERSION >= '1.9.1' # 1.9 defines Symbol#size
|
42
|
+
|
41
43
|
should "convert #{operator} conditions" do
|
42
44
|
Query.new(Room, :age.send(operator) => 21).criteria.should == {
|
43
45
|
:age => {"$#{operator}" => 21}
|
@@ -176,6 +178,10 @@ class QueryTest < Test::Unit::TestCase
|
|
176
178
|
Query.new(Room, :sort => sort, :order => 'foo asc').options[:sort].should == sort
|
177
179
|
end
|
178
180
|
|
181
|
+
should "normalize id to _id" do
|
182
|
+
Query.new(Room, :order => :id.asc).options[:sort].should == [['_id', 1]]
|
183
|
+
end
|
184
|
+
|
179
185
|
should "convert natural in order to proper" do
|
180
186
|
sort = [['$natural', 1]]
|
181
187
|
Query.new(Room, :order => '$natural asc').options[:sort].should == sort
|
@@ -23,14 +23,14 @@ class SerializationTest < Test::Unit::TestCase
|
|
23
23
|
context format do
|
24
24
|
should "be reversable" do
|
25
25
|
serialized = @instance.send("to_#{format}")
|
26
|
-
unserialized = @document.
|
26
|
+
unserialized = @document.send("from_#{format}", serialized)
|
27
27
|
|
28
28
|
assert_equal @instance, unserialized
|
29
29
|
end
|
30
30
|
|
31
31
|
should "allow attribute only filtering" do
|
32
32
|
serialized = @instance.send("to_#{format}", :only => [ :age, :name ])
|
33
|
-
unserialized = @document.
|
33
|
+
unserialized = @document.send("from_#{format}", serialized)
|
34
34
|
|
35
35
|
assert_equal @instance.name, unserialized.name
|
36
36
|
assert_equal @instance.age, unserialized.age
|
@@ -40,7 +40,7 @@ class SerializationTest < Test::Unit::TestCase
|
|
40
40
|
|
41
41
|
should "allow attribute except filtering" do
|
42
42
|
serialized = @instance.send("to_#{format}", :except => [ :age, :name ])
|
43
|
-
unserialized = @document.
|
43
|
+
unserialized = @document.send("from_#{format}", serialized)
|
44
44
|
|
45
45
|
assert_nil unserialized.name
|
46
46
|
assert_nil unserialized.age
|
data/test/unit/test_support.rb
CHANGED
@@ -78,7 +78,7 @@ class SupportTest < Test::Unit::TestCase
|
|
78
78
|
|
79
79
|
context "Date#to_mongo" do
|
80
80
|
should "be time if string" do
|
81
|
-
date = Date.to_mongo('10
|
81
|
+
date = Date.to_mongo('2009-10-01')
|
82
82
|
date.should == Time.utc(2009, 10, 1)
|
83
83
|
date.should == date
|
84
84
|
date.month.should == 10
|
@@ -276,8 +276,12 @@ class SupportTest < Test::Unit::TestCase
|
|
276
276
|
end
|
277
277
|
|
278
278
|
context "Time#to_mongo without Time.zone" do
|
279
|
+
setup do
|
280
|
+
Time.zone = nil
|
281
|
+
end
|
282
|
+
|
279
283
|
should "be time to milliseconds if string" do
|
280
|
-
Time.to_mongo('2000-01-01 01:01:01.123456').should == Time.local(2000, 1, 1, 1, 1, 1, 123000).utc
|
284
|
+
Time.to_mongo('2000-01-01 01:01:01.123456').to_f.should == Time.local(2000, 1, 1, 1, 1, 1, 123000).utc.to_f
|
281
285
|
end
|
282
286
|
|
283
287
|
should "be time in utc if time" do
|
@@ -296,13 +300,13 @@ class SupportTest < Test::Unit::TestCase
|
|
296
300
|
context "Time#to_mongo with Time.zone" do
|
297
301
|
should "be time to milliseconds if time" do
|
298
302
|
Time.zone = 'Hawaii'
|
299
|
-
Time.to_mongo(Time.zone.local(2009, 8, 15, 14, 0, 0, 123456)).should == Time.utc(2009, 8, 16, 0, 0, 0, 123000)
|
303
|
+
Time.to_mongo(Time.zone.local(2009, 8, 15, 14, 0, 0, 123456)).to_f.should == Time.utc(2009, 8, 16, 0, 0, 0, 123000).to_f
|
300
304
|
Time.zone = nil
|
301
305
|
end
|
302
306
|
|
303
307
|
should "be time to milliseconds if string" do
|
304
308
|
Time.zone = 'Hawaii'
|
305
|
-
Time.to_mongo('2009-08-15 14:00:00.123456').should == Time.utc(2009, 8, 16, 0, 0, 0, 123000)
|
309
|
+
Time.to_mongo('2009-08-15 14:00:00.123456').to_f.should == Time.utc(2009, 8, 16, 0, 0, 0, 123000).to_f
|
306
310
|
Time.zone = nil
|
307
311
|
end
|
308
312
|
|
@@ -359,4 +363,4 @@ class SupportTest < Test::Unit::TestCase
|
|
359
363
|
id.original_to_json.should == %Q({"$oid": "#{id}"})
|
360
364
|
end
|
361
365
|
end
|
362
|
-
end
|
366
|
+
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.7.
|
4
|
+
version: 0.7.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Nunemaker
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-
|
12
|
+
date: 2010-03-09 00:00:00 -05:00
|
13
13
|
default_executable: mmconsole
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -30,7 +30,7 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.
|
33
|
+
version: 0.19.1
|
34
34
|
version:
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
36
|
name: jnunemaker-validatable
|
@@ -40,7 +40,7 @@ dependencies:
|
|
40
40
|
requirements:
|
41
41
|
- - "="
|
42
42
|
- !ruby/object:Gem::Version
|
43
|
-
version: 1.8.
|
43
|
+
version: 1.8.3
|
44
44
|
version:
|
45
45
|
- !ruby/object:Gem::Dependency
|
46
46
|
name: jnunemaker-matchy
|
@@ -96,7 +96,6 @@ files:
|
|
96
96
|
- LICENSE
|
97
97
|
- README.rdoc
|
98
98
|
- Rakefile
|
99
|
-
- VERSION
|
100
99
|
- bin/mmconsole
|
101
100
|
- lib/mongo_mapper.rb
|
102
101
|
- lib/mongo_mapper/document.rb
|
@@ -125,20 +124,25 @@ files:
|
|
125
124
|
- lib/mongo_mapper/plugins/inspect.rb
|
126
125
|
- lib/mongo_mapper/plugins/keys.rb
|
127
126
|
- lib/mongo_mapper/plugins/logger.rb
|
127
|
+
- lib/mongo_mapper/plugins/modifiers.rb
|
128
128
|
- lib/mongo_mapper/plugins/pagination.rb
|
129
129
|
- lib/mongo_mapper/plugins/pagination/proxy.rb
|
130
130
|
- lib/mongo_mapper/plugins/protected.rb
|
131
131
|
- lib/mongo_mapper/plugins/rails.rb
|
132
132
|
- lib/mongo_mapper/plugins/serialization.rb
|
133
|
+
- lib/mongo_mapper/plugins/timestamps.rb
|
134
|
+
- lib/mongo_mapper/plugins/userstamps.rb
|
133
135
|
- lib/mongo_mapper/plugins/validations.rb
|
134
136
|
- lib/mongo_mapper/query.rb
|
135
137
|
- lib/mongo_mapper/support.rb
|
136
138
|
- lib/mongo_mapper/support/descendant_appends.rb
|
137
139
|
- lib/mongo_mapper/support/find.rb
|
140
|
+
- lib/mongo_mapper/version.rb
|
138
141
|
- mongo_mapper.gemspec
|
139
142
|
- performance/read_write.rb
|
140
143
|
- specs.watchr
|
141
144
|
- test/NOTE_ON_TESTING
|
145
|
+
- test/active_model_lint_test.rb
|
142
146
|
- test/functional/associations/test_belongs_to_polymorphic_proxy.rb
|
143
147
|
- test/functional/associations/test_belongs_to_proxy.rb
|
144
148
|
- test/functional/associations/test_in_array_proxy.rb
|
@@ -155,11 +159,14 @@ files:
|
|
155
159
|
- test/functional/test_document.rb
|
156
160
|
- test/functional/test_embedded_document.rb
|
157
161
|
- test/functional/test_identity_map.rb
|
162
|
+
- test/functional/test_indexing.rb
|
158
163
|
- test/functional/test_logger.rb
|
159
164
|
- test/functional/test_modifiers.rb
|
160
165
|
- test/functional/test_pagination.rb
|
161
166
|
- test/functional/test_protected.rb
|
162
167
|
- test/functional/test_string_id_compatibility.rb
|
168
|
+
- test/functional/test_timestamps.rb
|
169
|
+
- test/functional/test_userstamps.rb
|
163
170
|
- test/functional/test_validations.rb
|
164
171
|
- test/models.rb
|
165
172
|
- test/support/custom_matchers.rb
|
@@ -210,8 +217,9 @@ rubyforge_project:
|
|
210
217
|
rubygems_version: 1.3.5
|
211
218
|
signing_key:
|
212
219
|
specification_version: 3
|
213
|
-
summary:
|
220
|
+
summary: A Ruby Object Mapper for Mongo
|
214
221
|
test_files:
|
222
|
+
- test/active_model_lint_test.rb
|
215
223
|
- test/functional/associations/test_belongs_to_polymorphic_proxy.rb
|
216
224
|
- test/functional/associations/test_belongs_to_proxy.rb
|
217
225
|
- test/functional/associations/test_in_array_proxy.rb
|
@@ -228,11 +236,14 @@ test_files:
|
|
228
236
|
- test/functional/test_document.rb
|
229
237
|
- test/functional/test_embedded_document.rb
|
230
238
|
- test/functional/test_identity_map.rb
|
239
|
+
- test/functional/test_indexing.rb
|
231
240
|
- test/functional/test_logger.rb
|
232
241
|
- test/functional/test_modifiers.rb
|
233
242
|
- test/functional/test_pagination.rb
|
234
243
|
- test/functional/test_protected.rb
|
235
244
|
- test/functional/test_string_id_compatibility.rb
|
245
|
+
- test/functional/test_timestamps.rb
|
246
|
+
- test/functional/test_userstamps.rb
|
236
247
|
- test/functional/test_validations.rb
|
237
248
|
- test/models.rb
|
238
249
|
- test/support/custom_matchers.rb
|
data/VERSION
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
0.7.0
|